// // Copyright (C) Stanislaw Adaszewski, 2020 // Contact: s.adaszewski@gmail.com // Website: https://adared.ch/wba // License: GNU Affero General Public License, Version 3 // 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 { 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'); prom = prom.then(xhr => { window.localStorage['arvHost'] = arvHost; window.localStorage['arvToken'] = arvToken; window.localStorage['currentUser'] = JSON.stringify(xhr.response); appState.arvHost = arvHost; appState.arvToken = arvToken; appState.currentUser = xhr.response; route('/browse/' + xhr.response['uuid']); }); prom = prom.catch(() => { alert('Sign in unsuccessful. Verify your input and try again.') }); } render({ mode }, { arvHost, arvToken }) { return (

Sign In

route(t.name === 'Token' ? '/sign-in/token' : '/sign-in/sso') } />
{ mode === 'token' ? (
) : null }
); } } export default WBSignIn;