From 0395efc73b4ae5de0eb2caed3f5cdd302d3f7bfc Mon Sep 17 00:00:00 2001 From: Stanislaw Adaszewski Date: Wed, 11 Mar 2020 11:04:32 +0100 Subject: [PATCH] Add normal login via redirection. --- frontend/src/js/page/wb-app.js | 2 +- frontend/src/js/page/wb-sign-in.js | 62 +++++++++++++++++++++++++----- frontend/src/js/widget/wb-tabs.js | 2 +- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/frontend/src/js/page/wb-app.js b/frontend/src/js/page/wb-app.js index 1e23034..22c07f2 100644 --- a/frontend/src/js/page/wb-app.js +++ b/frontend/src/js/page/wb-app.js @@ -71,7 +71,7 @@ class WBApp extends Component { - + diff --git a/frontend/src/js/page/wb-sign-in.js b/frontend/src/js/page/wb-sign-in.js index cacc7f4..822de80 100644 --- a/frontend/src/js/page/wb-sign-in.js +++ b/frontend/src/js/page/wb-sign-in.js @@ -1,11 +1,47 @@ import { h, Component } from 'preact'; import { route } from 'preact-router'; import WBNavbar from 'wb-navbar'; +import WBTabs from 'wb-tabs'; import linkState from 'linkstate'; import makeArvadosRequest from 'make-arvados-request'; class WBSignIn extends Component { - onSubmit() { + constructor(...args) { + super(...args); + const search = new URLSearchParams(window.location.search); + this.state.arvHost = window.localStorage.arvHost; + this.state.arvToken = search.get('api_token'); + } + + componentDidMount() { + // const arvHost = window.localStorage.arvHost; + // const arvToken = search.get('api_token'); + const { arvHost, arvToken } = this.state; + if (arvHost && arvToken) { + this.state.arvHost = arvHost; + this.state.arvToken = arvToken; + this.submitToken(); + } + } + + submit() { + const { mode } = this.props; + if (mode === 'token') + this.submitToken(); + else if (!mode || mode === 'sso') + this.submitSingleSignOn(); + else + throw Error('Unsupported mode'); + } + + submitSingleSignOn() { + const { arvHost } = this.state; + window.localStorage.arvHost = arvHost; + window.location = 'https://' + arvHost + '/login?return_to=' + + encodeURIComponent(window.location.protocol + '//' + window.location.host + '/sign-in/token'); + } + + submitToken() { let { appState } = this.props; let { arvHost, arvToken } = this.state; let prom = makeArvadosRequest(arvHost, arvToken, '/arvados/v1/users/current'); @@ -23,14 +59,18 @@ class WBSignIn extends Component { }); } - render({}, { arvHost, arvToken }) { + render({ mode }, { arvHost, arvToken }) { return (
+

Sign In

+ route(t.name === 'Token' ? '/sign-in/token' : '/sign-in/sso') } />
@@ -39,15 +79,17 @@ class WBSignIn extends Component { value={ arvHost } onInput={ linkState(this, 'arvHost') } />
-
- - -
+ { mode === 'token' ? ( +
+ + +
+ ) : null } + onclick={ e => { e.preventDefault(); this.submit(); } }>Submit
diff --git a/frontend/src/js/widget/wb-tabs.js b/frontend/src/js/widget/wb-tabs.js index e2bc2f5..0ae016d 100644 --- a/frontend/src/js/widget/wb-tabs.js +++ b/frontend/src/js/widget/wb-tabs.js @@ -3,7 +3,7 @@ import { h, Component, VNode } from 'preact'; class WBTabs extends Component { render({ tabs, onTabChanged }) { return ( -