Use the user's pre-existing HS when config validation fails
Only applies if the user appears to be logged in. If the user is not logged in, we scream loudly. This is a temporary measure for https://github.com/vector-im/riot-web/issues/9828 Fixes https://github.com/vector-im/riot-web/issues/9835pull/9892/head
parent
fcf8e246cf
commit
48a634bff4
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.",
|
"Unexpected error preparing the app. See console for details.": "Unexpected error preparing the app. See console for details.",
|
||||||
|
"Your configuration appears to be invalid. Please correct the error below and re-open Riot.": "Your configuration appears to be invalid. Please correct the error below and re-open Riot.",
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.": "Invalid configuration: can only specify one of default_server_config, default_server_name, or default_hs_url.",
|
||||||
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
"Invalid configuration: no default server specified.": "Invalid configuration: no default server specified.",
|
||||||
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
||||||
|
|
|
@ -48,6 +48,7 @@ import * as languageHandler from 'matrix-react-sdk/lib/languageHandler';
|
||||||
import {_t, _td, newTranslatableError} from 'matrix-react-sdk/lib/languageHandler';
|
import {_t, _td, newTranslatableError} from 'matrix-react-sdk/lib/languageHandler';
|
||||||
import AutoDiscoveryUtils from 'matrix-react-sdk/lib/utils/AutoDiscoveryUtils';
|
import AutoDiscoveryUtils from 'matrix-react-sdk/lib/utils/AutoDiscoveryUtils';
|
||||||
import {AutoDiscovery} from "matrix-js-sdk/lib/autodiscovery";
|
import {AutoDiscovery} from "matrix-js-sdk/lib/autodiscovery";
|
||||||
|
import * as Lifecycle from "matrix-react-sdk/lib/Lifecycle";
|
||||||
|
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
|
|
||||||
|
@ -365,8 +366,17 @@ async function loadApp() {
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|
||||||
const errorMessage = err.translatedMessage
|
let errorMessage = err.translatedMessage
|
||||||
|| _t("Unexpected error preparing the app. See console for details.");
|
|| _t("Unexpected error preparing the app. See console for details.");
|
||||||
|
errorMessage = <span>
|
||||||
|
{_t(
|
||||||
|
"Your configuration appears to be invalid. Please correct the error below " +
|
||||||
|
"and re-open Riot."
|
||||||
|
)}
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
{errorMessage}
|
||||||
|
</span>;
|
||||||
|
|
||||||
// Like the compatibility page, AWOOOOOGA at the user
|
// Like the compatibility page, AWOOOOOGA at the user
|
||||||
const GenericErrorPage = sdk.getComponent("structures.GenericErrorPage");
|
const GenericErrorPage = sdk.getComponent("structures.GenericErrorPage");
|
||||||
|
@ -447,57 +457,75 @@ async function loadLanguage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function verifyServerConfig() {
|
async function verifyServerConfig() {
|
||||||
console.log("Verifying homeserver configuration");
|
let validatedConfig;
|
||||||
|
try {
|
||||||
|
console.log("Verifying homeserver configuration");
|
||||||
|
|
||||||
// Note: the query string may include is_url and hs_url - we only respect these in the
|
// Note: the query string may include is_url and hs_url - we only respect these in the
|
||||||
// context of email validation. Because we don't respect them otherwise, we do not need
|
// context of email validation. Because we don't respect them otherwise, we do not need
|
||||||
// to parse or consider them here.
|
// to parse or consider them here.
|
||||||
|
|
||||||
const config = SdkConfig.get();
|
const config = SdkConfig.get();
|
||||||
let wkConfig = config['default_server_config']; // overwritten later under some conditions
|
let wkConfig = config['default_server_config']; // overwritten later under some conditions
|
||||||
const serverName = config['default_server_name'];
|
const serverName = config['default_server_name'];
|
||||||
const hsUrl = config['default_hs_url'];
|
const hsUrl = config['default_hs_url'];
|
||||||
const isUrl = config['default_is_url'];
|
const isUrl = config['default_is_url'];
|
||||||
|
|
||||||
const incompatibleOptions = [wkConfig, serverName, hsUrl].filter(i => !!i);
|
const incompatibleOptions = [wkConfig, serverName, hsUrl].filter(i => !!i);
|
||||||
if (incompatibleOptions.length > 1) {
|
if (incompatibleOptions.length > 1) {
|
||||||
throw newTranslatableError(_td(
|
// noinspection ExceptionCaughtLocallyJS
|
||||||
"Invalid configuration: can only specify one of default_server_config, default_server_name, " +
|
throw newTranslatableError(_td(
|
||||||
"or default_hs_url.",
|
"Invalid configuration: can only specify one of default_server_config, default_server_name, " +
|
||||||
));
|
"or default_hs_url.",
|
||||||
}
|
));
|
||||||
if (incompatibleOptions.length < 1) {
|
}
|
||||||
throw newTranslatableError(_td("Invalid configuration: no default server specified."));
|
if (incompatibleOptions.length < 1) {
|
||||||
}
|
// noinspection ExceptionCaughtLocallyJS
|
||||||
|
throw newTranslatableError(_td("Invalid configuration: no default server specified."));
|
||||||
|
}
|
||||||
|
|
||||||
if (hsUrl) {
|
if (hsUrl) {
|
||||||
console.log("Config uses a default_hs_url - constructing a default_server_config using this information");
|
console.log("Config uses a default_hs_url - constructing a default_server_config using this information");
|
||||||
|
|
||||||
wkConfig = {
|
wkConfig = {
|
||||||
"m.homeserver": {
|
"m.homeserver": {
|
||||||
"base_url": hsUrl,
|
"base_url": hsUrl,
|
||||||
},
|
},
|
||||||
};
|
|
||||||
if (isUrl) {
|
|
||||||
wkConfig["m.identity_server"] = {
|
|
||||||
"base_url": isUrl,
|
|
||||||
};
|
};
|
||||||
|
if (isUrl) {
|
||||||
|
wkConfig["m.identity_server"] = {
|
||||||
|
"base_url": isUrl,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let discoveryResult = null;
|
||||||
|
if (wkConfig) {
|
||||||
|
console.log("Config uses a default_server_config - validating object");
|
||||||
|
discoveryResult = await AutoDiscovery.fromDiscoveryConfig(wkConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serverName) {
|
||||||
|
console.log("Config uses a default_server_name - doing .well-known lookup");
|
||||||
|
discoveryResult = await AutoDiscovery.findClientConfig(serverName);
|
||||||
|
}
|
||||||
|
|
||||||
|
validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult);
|
||||||
|
} catch (e) {
|
||||||
|
const {hsUrl, isUrl, userId} = Lifecycle.getLocalStorageSessionVars();
|
||||||
|
if (hsUrl && userId) {
|
||||||
|
console.error(e);
|
||||||
|
console.warn("A session was found - suppressing config error and using the session's homeserver");
|
||||||
|
|
||||||
|
console.log("Using pre-existing hsUrl and isUrl: ", {hsUrl, isUrl});
|
||||||
|
validatedConfig = await AutoDiscoveryUtils.validateServerConfigWithStaticUrls(hsUrl, isUrl);
|
||||||
|
} else {
|
||||||
|
// the user is not logged in, so scream
|
||||||
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = null;
|
|
||||||
|
|
||||||
if (wkConfig) {
|
|
||||||
console.log("Config uses a default_server_config - validating object");
|
|
||||||
result = await AutoDiscovery.fromDiscoveryConfig(wkConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (serverName) {
|
|
||||||
console.log("Config uses a default_server_name - doing .well-known lookup");
|
|
||||||
result = await AutoDiscovery.findClientConfig(serverName);
|
|
||||||
}
|
|
||||||
|
|
||||||
const validatedConfig = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, result);
|
|
||||||
validatedConfig.isDefault = true;
|
validatedConfig.isDefault = true;
|
||||||
|
|
||||||
// Just in case we ever have to debug this
|
// Just in case we ever have to debug this
|
||||||
|
|
Loading…
Reference in New Issue