From 8ab8726b8f0d57757b17c92998ced34a99c2c6c5 Mon Sep 17 00:00:00 2001 From: RMidhunSuresh Date: Mon, 27 Dec 2021 13:14:07 +0530 Subject: [PATCH] Implement m.login.terms stage --- .../registration/registrationStageFromType.ts | 10 ++++- src/matrix/registration/stages/TermsAuth.ts | 39 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/matrix/registration/stages/TermsAuth.ts diff --git a/src/matrix/registration/registrationStageFromType.ts b/src/matrix/registration/registrationStageFromType.ts index 3a9950fd..44913f94 100644 --- a/src/matrix/registration/registrationStageFromType.ts +++ b/src/matrix/registration/registrationStageFromType.ts @@ -14,11 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. */ +import type {BaseRegistrationStage} from "./stages/BaseRegistrationStage"; +import type {HomeServerApi} from "../net/HomeServerApi"; +import type {RegistrationParameters} from "./Registration"; import {DummyAuth} from "./stages/DummyAuth"; +import {TermsAuth} from "./stages/TermsAuth"; -export function registrationStageFromType(type: string): typeof DummyAuth | undefined { +type DerivedFromBaseRegistration = { new(hsApi: HomeServerApi, registrationData: RegistrationParameters, session: string, params?: Record): BaseRegistrationStage } & typeof BaseRegistrationStage | undefined; + +export function registrationStageFromType(type: string): DerivedFromBaseRegistration { switch (type) { case "m.login.dummy": return DummyAuth; + case "m.login.terms": + return TermsAuth; } } diff --git a/src/matrix/registration/stages/TermsAuth.ts b/src/matrix/registration/stages/TermsAuth.ts new file mode 100644 index 00000000..0114d27d --- /dev/null +++ b/src/matrix/registration/stages/TermsAuth.ts @@ -0,0 +1,39 @@ +/* +Copyright 2021 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {BaseRegistrationStage} from "./BaseRegistrationStage"; + +export class TermsAuth extends BaseRegistrationStage { + + async complete() { + const { username, password, initialDeviceDisplayName, inhibitLogin } = this._registrationData; + const response = await this._hsApi.register(username, password, initialDeviceDisplayName, { + session: this._session, + type: this.type + }, inhibitLogin).response(); + return this.parseResponse(response); + } + + get type(): string { + return "m.login.terms"; + } + + // todo: add better parsing logic here, also remember that server admins can + // require any sort documents here, even those that are not toc/privacy policies + get privacyPolicy() { + return this._params?.policies["privacy_policy"]; + } +}