/* Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import React from "react"; import { _t } from "../../../languageHandler"; import { SetupEncryptionStore, Phase } from "../../../stores/SetupEncryptionStore"; import SetupEncryptionBody from "./SetupEncryptionBody"; import AccessibleButton from "../../views/elements/AccessibleButton"; import CompleteSecurityBody from "../../views/auth/CompleteSecurityBody"; import AuthPage from "../../views/auth/AuthPage"; import SdkConfig from "../../../SdkConfig"; interface IProps { onFinished: () => void; } interface IState { phase?: Phase; lostKeys: boolean; } export default class CompleteSecurity extends React.Component { public 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(): React.ReactNode { 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("encryption|verification|after_new_login|unable_to_verify"); } else { icon = ; title = _t("encryption|verification|after_new_login|verify_this_device"); } } else if (phase === Phase.Done) { icon = ; title = _t("encryption|verification|after_new_login|device_verified"); } else if (phase === Phase.ConfirmSkip) { icon = ; title = _t("common|are_you_sure"); } else if (phase === Phase.Busy) { icon = ; title = _t("encryption|verification|after_new_login|verify_this_device"); } else if (phase === Phase.ConfirmReset) { icon = ; title = _t("encryption|verification|after_new_login|reset_confirmation"); } 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}`); } const forceVerification = SdkConfig.get("force_verification") ?? false; let skipButton; if (!forceVerification && (phase === Phase.Intro || phase === Phase.ConfirmReset)) { skipButton = ( ); } return (

{icon} {title} {skipButton}

); } }