/* Copyright 2020 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 React from 'react'; import { _t } from '../../../languageHandler'; import * as sdk from '../../../index'; import { SetupEncryptionStore, Phase } from '../../../stores/SetupEncryptionStore'; import SetupEncryptionBody from "./SetupEncryptionBody"; import { replaceableComponent } from "../../../utils/replaceableComponent"; import AccessibleButton from '../../views/elements/AccessibleButton'; interface IProps { onFinished: () => void; } interface IState { phase: Phase; lostKeys: boolean; } @replaceableComponent("structures.auth.CompleteSecurity") export default class CompleteSecurity extends React.Component { constructor(props: IProps) { super(props); const store = SetupEncryptionStore.sharedInstance(); store.on("update", this.onStoreUpdate); store.start(); this.state = { phase: store.phase, lostKeys: store.lostKeys() }; } private onStoreUpdate = (): void => { const store = SetupEncryptionStore.sharedInstance(); this.setState({ phase: store.phase, lostKeys: store.lostKeys() }); }; private onSkipClick = (): void => { const store = SetupEncryptionStore.sharedInstance(); store.skip(); }; public componentWillUnmount(): void { const store = SetupEncryptionStore.sharedInstance(); store.off("update", this.onStoreUpdate); store.stop(); } public render() { const AuthPage = sdk.getComponent("auth.AuthPage"); const CompleteSecurityBody = sdk.getComponent("auth.CompleteSecurityBody"); const { phase, lostKeys } = this.state; let icon; let title; if (phase === Phase.Loading) { return null; } else if (phase === Phase.Intro) { if (lostKeys) { icon = ; title = _t("Unable to verify this login"); } else { icon = ; title = _t("Verify this login"); } } else if (phase === Phase.Done) { icon = ; title = _t("Session verified"); } else if (phase === Phase.ConfirmSkip) { icon = ; title = _t("Are you sure?"); } else if (phase === Phase.Busy) { icon = ; title = _t("Verify this login"); } else if (phase === Phase.ConfirmReset) { icon = ; title = _t("Really reset verification keys?"); } else if (phase === Phase.Finished) { // SetupEncryptionBody will take care of calling onFinished, we don't need to do anything } else { throw new Error(`Unknown phase ${phase}`); } let skipButton; if (phase === Phase.Intro || phase === Phase.ConfirmReset) { skipButton = ( ); } return (

{ icon } { title } { skipButton }

); } }