Give proper names
This commit is contained in:
parent
fe0add01ee
commit
a351a185a0
6 changed files with 22 additions and 25 deletions
|
@ -17,32 +17,32 @@ limitations under the License.
|
||||||
import type {HomeServerApi} from "../net/HomeServerApi";
|
import type {HomeServerApi} from "../net/HomeServerApi";
|
||||||
import {registrationStageFromType} from "./registrationStageFromType";
|
import {registrationStageFromType} from "./registrationStageFromType";
|
||||||
import type {BaseRegistrationStage} from "./stages/BaseRegistrationStage";
|
import type {BaseRegistrationStage} from "./stages/BaseRegistrationStage";
|
||||||
import type {RegistrationDetails, RegistrationFlow, RegistrationResponse401} from "./types/types";
|
import type {AccountDetails, RegistrationFlow, RegistrationResponseMoreDataNeeded} from "./types/types";
|
||||||
|
|
||||||
type FlowSelector = (flows: RegistrationFlow[]) => RegistrationFlow | void;
|
type FlowSelector = (flows: RegistrationFlow[]) => RegistrationFlow | void;
|
||||||
|
|
||||||
export class Registration {
|
export class Registration {
|
||||||
private _hsApi: HomeServerApi;
|
private _hsApi: HomeServerApi;
|
||||||
private _data: RegistrationDetails;
|
private _accountDetails: AccountDetails;
|
||||||
private _flowSelector: FlowSelector;
|
private _flowSelector: FlowSelector;
|
||||||
|
|
||||||
constructor(hsApi: HomeServerApi, data: RegistrationDetails, flowSelector?: FlowSelector) {
|
constructor(hsApi: HomeServerApi, accountDetails: AccountDetails, flowSelector?: FlowSelector) {
|
||||||
this._hsApi = hsApi;
|
this._hsApi = hsApi;
|
||||||
this._data = data;
|
this._accountDetails = accountDetails;
|
||||||
this._flowSelector = flowSelector ?? (flows => flows.pop());
|
this._flowSelector = flowSelector ?? (flows => flows.pop());
|
||||||
}
|
}
|
||||||
|
|
||||||
async start(): Promise<BaseRegistrationStage> {
|
async start(): Promise<BaseRegistrationStage> {
|
||||||
const response = await this._hsApi.register(
|
const response = await this._hsApi.register(
|
||||||
this._data.username,
|
this._accountDetails.username,
|
||||||
this._data.password,
|
this._accountDetails.password,
|
||||||
this._data.initialDeviceDisplayName,
|
this._accountDetails.initialDeviceDisplayName,
|
||||||
undefined,
|
undefined,
|
||||||
this._data.inhibitLogin).response();
|
this._accountDetails.inhibitLogin).response();
|
||||||
return this.parseStagesFromResponse(response);
|
return this.parseStagesFromResponse(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
parseStagesFromResponse(response: RegistrationResponse401): BaseRegistrationStage {
|
parseStagesFromResponse(response: RegistrationResponseMoreDataNeeded): BaseRegistrationStage {
|
||||||
const { session, params } = response;
|
const { session, params } = response;
|
||||||
const flow = this._flowSelector(response.flows);
|
const flow = this._flowSelector(response.flows);
|
||||||
if (!flow) {
|
if (!flow) {
|
||||||
|
@ -55,7 +55,7 @@ export class Registration {
|
||||||
if (!stageClass) {
|
if (!stageClass) {
|
||||||
throw new Error(`Unknown stage: ${stage}`);
|
throw new Error(`Unknown stage: ${stage}`);
|
||||||
}
|
}
|
||||||
const registrationStage = new stageClass(this._hsApi, this._data, session, params?.[stage]);
|
const registrationStage = new stageClass(this._hsApi, this._accountDetails, session, params?.[stage]);
|
||||||
if (!firstStage) {
|
if (!firstStage) {
|
||||||
firstStage = registrationStage;
|
firstStage = registrationStage;
|
||||||
lastStage = registrationStage;
|
lastStage = registrationStage;
|
||||||
|
|
|
@ -16,11 +16,11 @@ limitations under the License.
|
||||||
|
|
||||||
import type {BaseRegistrationStage} from "./stages/BaseRegistrationStage";
|
import type {BaseRegistrationStage} from "./stages/BaseRegistrationStage";
|
||||||
import type {HomeServerApi} from "../net/HomeServerApi";
|
import type {HomeServerApi} from "../net/HomeServerApi";
|
||||||
import type {RegistrationDetails} from "./types/types";
|
import type {AccountDetails, RegistrationParams} from "./types/types";
|
||||||
import {DummyAuth} from "./stages/DummyAuth";
|
import {DummyAuth} from "./stages/DummyAuth";
|
||||||
import {TermsAuth} from "./stages/TermsAuth";
|
import {TermsAuth} from "./stages/TermsAuth";
|
||||||
|
|
||||||
type ClassDerivedFromBaseRegistration = { new(hsApi: HomeServerApi, registrationData: RegistrationDetails, session: string, params?: Record<string, any>): BaseRegistrationStage } & typeof BaseRegistrationStage;
|
type ClassDerivedFromBaseRegistration = { new(hsApi: HomeServerApi, registrationData: AccountDetails, session: string, params?: RegistrationParams): BaseRegistrationStage } & typeof BaseRegistrationStage;
|
||||||
|
|
||||||
export function registrationStageFromType(type: string): ClassDerivedFromBaseRegistration | undefined{
|
export function registrationStageFromType(type: string): ClassDerivedFromBaseRegistration | undefined{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|
|
@ -15,18 +15,18 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {HomeServerApi} from "../../net/HomeServerApi";
|
import type {HomeServerApi} from "../../net/HomeServerApi";
|
||||||
import type {RegistrationDetails, RegistrationResponse, AuthenticationData, RegistrationParams} from "../types/types";
|
import type {AccountDetails, RegistrationResponse, AuthenticationData, RegistrationParams} from "../types/types";
|
||||||
|
|
||||||
export abstract class BaseRegistrationStage {
|
export abstract class BaseRegistrationStage {
|
||||||
protected _hsApi: HomeServerApi;
|
protected _hsApi: HomeServerApi;
|
||||||
protected _registrationData: RegistrationDetails;
|
protected _accountDetails: AccountDetails;
|
||||||
protected _session: string;
|
protected _session: string;
|
||||||
protected _nextStage: BaseRegistrationStage;
|
protected _nextStage: BaseRegistrationStage;
|
||||||
protected _params?: Record<string, any>
|
protected _params?: Record<string, any>
|
||||||
|
|
||||||
constructor(hsApi: HomeServerApi, registrationData: RegistrationDetails, session: string, params?: RegistrationParams) {
|
constructor(hsApi: HomeServerApi, accountDetails: AccountDetails, session: string, params?: RegistrationParams) {
|
||||||
this._hsApi = hsApi;
|
this._hsApi = hsApi;
|
||||||
this._registrationData = registrationData;
|
this._accountDetails = accountDetails;
|
||||||
this._session = session;
|
this._session = session;
|
||||||
this._params = params;
|
this._params = params;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ export abstract class BaseRegistrationStage {
|
||||||
// registration completed successfully
|
// registration completed successfully
|
||||||
return response.user_id;
|
return response.user_id;
|
||||||
}
|
}
|
||||||
else if ("completed" in response && response.completed?.find(c => c === this.type)) {
|
else if ("completed" in response && response.completed.find(c => c === this.type)) {
|
||||||
return this._nextStage;
|
return this._nextStage;
|
||||||
}
|
}
|
||||||
const error = "error" in response? response.error: "Could not parse response";
|
const error = "error" in response? response.error: "Could not parse response";
|
||||||
|
|
|
@ -17,9 +17,8 @@ limitations under the License.
|
||||||
import {BaseRegistrationStage} from "./BaseRegistrationStage";
|
import {BaseRegistrationStage} from "./BaseRegistrationStage";
|
||||||
|
|
||||||
export class DummyAuth extends BaseRegistrationStage {
|
export class DummyAuth extends BaseRegistrationStage {
|
||||||
|
|
||||||
async complete() {
|
async complete() {
|
||||||
const { username, password, initialDeviceDisplayName, inhibitLogin } = this._registrationData;
|
const { username, password, initialDeviceDisplayName, inhibitLogin } = this._accountDetails;
|
||||||
const response = await this._hsApi.register(username, password, initialDeviceDisplayName, {
|
const response = await this._hsApi.register(username, password, initialDeviceDisplayName, {
|
||||||
session: this._session,
|
session: this._session,
|
||||||
type: this.type
|
type: this.type
|
||||||
|
|
|
@ -17,9 +17,8 @@ limitations under the License.
|
||||||
import {BaseRegistrationStage} from "./BaseRegistrationStage";
|
import {BaseRegistrationStage} from "./BaseRegistrationStage";
|
||||||
|
|
||||||
export class TermsAuth extends BaseRegistrationStage {
|
export class TermsAuth extends BaseRegistrationStage {
|
||||||
|
|
||||||
async complete() {
|
async complete() {
|
||||||
const { username, password, initialDeviceDisplayName, inhibitLogin } = this._registrationData;
|
const { username, password, initialDeviceDisplayName, inhibitLogin } = this._accountDetails;
|
||||||
const response = await this._hsApi.register(username, password, initialDeviceDisplayName, {
|
const response = await this._hsApi.register(username, password, initialDeviceDisplayName, {
|
||||||
session: this._session,
|
session: this._session,
|
||||||
type: this.type
|
type: this.type
|
||||||
|
|
|
@ -14,16 +14,16 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export type RegistrationDetails = {
|
export type AccountDetails = {
|
||||||
username: string | null;
|
username: string | null;
|
||||||
password: string;
|
password: string;
|
||||||
initialDeviceDisplayName: string;
|
initialDeviceDisplayName: string;
|
||||||
inhibitLogin: boolean;
|
inhibitLogin: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RegistrationResponse = RegistrationResponse401 | RegistrationResponseError | RegistrationResponseSuccess;
|
export type RegistrationResponse = RegistrationResponseMoreDataNeeded | RegistrationResponseError | RegistrationResponseSuccess;
|
||||||
|
|
||||||
export type RegistrationResponse401 = {
|
export type RegistrationResponseMoreDataNeeded = {
|
||||||
completed: string[];
|
completed: string[];
|
||||||
flows: RegistrationFlow[];
|
flows: RegistrationFlow[];
|
||||||
params: Record<string, any>;
|
params: Record<string, any>;
|
||||||
|
@ -46,7 +46,6 @@ export type RegistrationFlow = {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Types for Registration Stage */
|
/* Types for Registration Stage */
|
||||||
|
|
||||||
export type AuthenticationData = {
|
export type AuthenticationData = {
|
||||||
type: string;
|
type: string;
|
||||||
session: string;
|
session: string;
|
||||||
|
|
Reference in a new issue