From 348f6f971a06d41719daa748e7bc1c42dbb9773f Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Thu, 1 Aug 2019 12:46:59 +0100 Subject: [PATCH] Show terms modal when inviting by email This invokes the terms modal flow when inviting someone by email. Entering an email triggers a lookup to the IS, and if it has terms you need to agree to, then a separate modal is shown to complete this activity. You then come back to invite screen after agreeing to the terms. Fixes https://github.com/vector-im/riot-web/issues/10093 --- src/IdentityAuthClient.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/IdentityAuthClient.js b/src/IdentityAuthClient.js index 58a1773924..245b8a8c3c 100644 --- a/src/IdentityAuthClient.js +++ b/src/IdentityAuthClient.js @@ -14,7 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +import * as Matrix from 'matrix-js-sdk'; + import MatrixClientPeg from './MatrixClientPeg'; +import { Service, startTermsFlow } from './Terms'; export default class IdentityAuthClient { constructor() { @@ -57,7 +60,20 @@ export default class IdentityAuthClient { } async _checkToken(token) { - await MatrixClientPeg.get().getIdentityAccount(token); + try { + await MatrixClientPeg.get().getIdentityAccount(token); + } catch (e) { + if (e.errcode === "M_TERMS_NOT_SIGNED") { + console.log("Identity Server requires new terms to be agreed to"); + await startTermsFlow([new Service( + Matrix.SERVICE_TYPES.IS, + MatrixClientPeg.get().idBaseUrl, + token, + )]); + return; + } + throw e; + } // We should ensure the token in `localStorage` is cleared // appropriately. We already clear storage on sign out, but we'll need