Catch errors in Settings when IS is unreachable

A few bits of Settings try to talk to the IS when Settings is opened. This
changes them to handle failure by logging warnings to the console.
pull/21833/head
J. Ryan Stinnett 2019-10-11 15:52:15 +01:00
parent 6e33cc0650
commit d7631ed9f8
1 changed files with 36 additions and 18 deletions

View File

@ -102,7 +102,17 @@ export default class GeneralUserSettingsTab extends React.Component {
// Need to get 3PIDs generally for Account section and possibly also for
// Discovery (assuming we have an IS and terms are agreed).
const threepids = await getThreepidsWithBindStatus(cli);
let threepids = [];
try {
threepids = await getThreepidsWithBindStatus(cli);
} catch (e) {
const idServerUrl = MatrixClientPeg.get().getIdentityServerUrl();
console.warn(
`Unable to reach identity server at ${idServerUrl} to check ` +
`for 3PIDs bindings in Settings`,
);
console.warn(e);
}
this.setState({ emails: threepids.filter((a) => a.medium === 'email') });
this.setState({ msisdns: threepids.filter((a) => a.medium === 'msisdn') });
}
@ -115,16 +125,18 @@ export default class GeneralUserSettingsTab extends React.Component {
// By starting the terms flow we get the logic for checking which terms the user has signed
// for free. So we might as well use that for our own purposes.
const idServerUrl = MatrixClientPeg.get().getIdentityServerUrl();
const authClient = new IdentityAuthClient();
const idAccessToken = await authClient.getAccessToken({ check: false });
startTermsFlow([new Service(
try {
await startTermsFlow([new Service(
SERVICE_TYPES.IS,
MatrixClientPeg.get().getIdentityServerUrl(),
idServerUrl,
idAccessToken,
)], (policiesAndServices, agreedUrls, extraClassNames) => {
return new Promise((resolve, reject) => {
this.setState({
idServerName: abbreviateUrl(MatrixClientPeg.get().getIdentityServerUrl()),
idServerName: abbreviateUrl(idServerUrl),
requiredPolicyInfo: {
hasTerms: true,
policiesAndServices,
@ -133,14 +145,20 @@ export default class GeneralUserSettingsTab extends React.Component {
},
});
});
}).then(() => {
});
// User accepted all terms
this.setState({
requiredPolicyInfo: {
hasTerms: false,
},
});
});
} catch (e) {
console.warn(
`Unable to reach identity server at ${idServerUrl} to check ` +
`for terms in Settings`,
);
console.warn(e);
}
}
_onLanguageChange = (newLanguage) => {