Support for refactored login token handling

loginToken handling is now done by the session loader, so we need to pass in
the queryparams to MatrixChat.

Also, MatrixChat no longer automatically reloads the page to drop the
querystring, so we have to do that ourselves (doing it in index.js allows
tokenlogin to be tested).
pull/1946/head
Richard van der Hoff 2016-08-11 01:55:51 +01:00
parent dd6868c255
commit c2cb4dff4c
1 changed files with 25 additions and 10 deletions

View File

@ -44,6 +44,7 @@ var VectorConferenceHandler = require('../VectorConferenceHandler');
var UpdateChecker = require("./updater");
var q = require('q');
var request = require('browser-request');
import url from 'url';
import {parseQs, parseQsFromFragment} from './url_utils';
@ -87,13 +88,6 @@ function routeUrl(location) {
if (!window.matrixChat) return;
console.log("Routing URL "+location);
var params = parseQs(location);
var loginToken = params.loginToken;
if (loginToken) {
window.matrixChat.showScreen('token_login', params);
return;
}
var fragparts = parseQsFromFragment(location);
window.matrixChat.showScreen(fragparts.location.substring(1),
fragparts.params);
@ -174,6 +168,21 @@ function getConfig() {
return deferred.promise;
}
function onLoadCompleted() {
// if we did a token login, we're now left with the token, hs and is
// url as query params in the url; a little nasty but let's redirect to
// clear them.
if (window.location.search) {
var parsedUrl = url.parse(window.location.href);
parsedUrl.search = "";
var formatted = url.format(parsedUrl);
console.log("Redirecting to " + formatted + " to drop loginToken " +
"from queryparams");
window.location.href = formatted;
}
}
async function loadApp() {
if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {
if (confirm("Vector is not supported on mobile web. Install the app?")) {
@ -209,15 +218,21 @@ async function loadApp() {
</div>, document.getElementById('matrixchat'));
} else if (validBrowser) {
var MatrixChat = sdk.getComponent('structures.MatrixChat');
var fragParts = parseQsFromFragment(window.location);
var fragparts = parseQsFromFragment(window.location);
var params = parseQs(window.location);
window.matrixChat = ReactDOM.render(
<MatrixChat
onNewScreen={onNewScreen}
registrationUrl={makeRegistrationUrl()}
ConferenceHandler={VectorConferenceHandler}
config={configJson}
startingQueryParams={fragParts.params}
enableGuest={true} />,
realQueryParams={params}
startingFragmentQueryParams={fragparts.params}
enableGuest={true}
onLoadCompleted={onLoadCompleted}
/>,
document.getElementById('matrixchat')
);
}