diff --git a/src/app/organisms/settings/CrossSignin.jsx b/src/app/organisms/settings/CrossSignin.jsx new file mode 100644 index 00000000..2477a5d2 --- /dev/null +++ b/src/app/organisms/settings/CrossSignin.jsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import initMatrix from '../../../client/initMatrix'; +import { hasCrossSigninAccountData } from '../../../util/matrixUtil'; + +import Text from '../../atoms/text/Text'; +import Button from '../../atoms/button/Button'; +import SettingTile from '../../molecules/setting-tile/SettingTile'; + +function CrossSignin() { + return ( + Setup to verify and keep track of all your devices. Also required to enable secure encryption key backup.} + options={( + hasCrossSigninAccountData() + ? + : + )} + /> + ); +} + +export default CrossSignin; diff --git a/src/app/organisms/settings/KeyBackup.jsx b/src/app/organisms/settings/KeyBackup.jsx new file mode 100644 index 00000000..247d9cdb --- /dev/null +++ b/src/app/organisms/settings/KeyBackup.jsx @@ -0,0 +1,68 @@ +import React, { useState, useEffect } from 'react'; + +import initMatrix from '../../../client/initMatrix'; + +import Text from '../../atoms/text/Text'; +import Button from '../../atoms/button/Button'; +import IconButton from '../../atoms/button/IconButton'; +import Spinner from '../../atoms/spinner/Spinner'; +import InfoCard from '../../atoms/card/InfoCard'; +import SettingTile from '../../molecules/setting-tile/SettingTile'; + +import InfoIC from '../../../../public/res/ic/outlined/info.svg'; +import BinIC from '../../../../public/res/ic/outlined/bin.svg'; +import DownloadIC from '../../../../public/res/ic/outlined/download.svg'; + +import { useCrossSigninStatus } from '../../hooks/useCrossSigninStatus'; + +function KeyBackup() { + const mx = initMatrix.matrixClient; + const isCSEnabled = useCrossSigninStatus(); + const [keyBackup, setKeyBackup] = useState(undefined); + + useEffect(() => { + let isMounted = true; + mx.getKeyBackupVersion().then((info) => { + if (!isMounted) return; + setKeyBackup(info); + }); + + return () => { + isMounted = false; + }; + }, []); + + const renderOptions = () => { + if (keyBackup === undefined) return ; + if (keyBackup === null) return ; + return ( + <> + alert('restore')} tooltip="Restore backup" /> + alert('delete')} tooltip="Delete backup" /> + + ); + }; + + return ( + + Online backup your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key. + {!isCSEnabled && ( + + )} + + )} + options={isCSEnabled ? renderOptions() : null} + /> + ); +} + +export default KeyBackup; diff --git a/src/app/organisms/settings/Settings.jsx b/src/app/organisms/settings/Settings.jsx index c533e204..a8ca5633 100644 --- a/src/app/organisms/settings/Settings.jsx +++ b/src/app/organisms/settings/Settings.jsx @@ -26,6 +26,8 @@ import ImportE2ERoomKeys from '../../molecules/import-export-e2e-room-keys/Impor import ExportE2ERoomKeys from '../../molecules/import-export-e2e-room-keys/ExportE2ERoomKeys'; import ProfileEditor from '../profile-editor/ProfileEditor'; +import CrossSignin from './CrossSignin'; +import KeyBackup from './KeyBackup'; import DeviceManage from './DeviceManage'; import SunIC from '../../../../public/res/ic/outlined/sun.svg'; @@ -167,6 +169,11 @@ function NotificationsSection() { function SecuritySection() { return (
+
+ Cross sign-in and backup + + +
Encryption