forked from github/cinny
* rework general settings * account settings - WIP * add missing key prop * add object url hook * extract wide modal styles * profile settings and image editor - WIP * add outline style to upload card * remove file param from bind upload atom hook * add compact variant to upload card * add compact upload card renderer * add option to update profile avatar * add option to change profile displayname * allow displayname change based on capabilities check * rearrange settings components into folders * add system notification settings * add initial page param in settings * convert account data hook to typescript * add push rule hook * add notification mode hook * add notification mode switcher component * add all messages notification settings options * add special messages notification settings * add keyword notifications * add ignored users section * improve ignore user list strings * add about settings * add access token option in about settings * add developer tools settings * add expand button to account data dev tool option * update folds * fix editable active element textarea check * do not close dialog when editable element in focus * add text area plugins * add text area intent handler hook * add newline intent mod in text area * add next line hotkey in text area intent hook * add syntax error position dom utility function * add account data editor * add button to send new account data in dev tools * improve custom emoji plugin * add more custom emojis hooks * add text util css * add word break in setting tile title and description * emojis and sticker user settings - WIP * view image packs from settings * emoji pack editing - WIP * add option to edit pack meta * change saved changes message * add image edit and delete controls * add option to upload pack images and apply changes * fix state event type when updating image pack * lazy load pack image tile img * hide upload image button when user can not edit pack * add option to add or remove global image packs * upgrade to rust crypto (#2168) * update matrix js sdk * remove dead code * use rust crypto * update setPowerLevel usage * fix types * fix deprecated isRoomEncrypted method uses * fix deprecated room.currentState uses * fix deprecated import/export room keys func * fix merge issues in image pack file * fix remaining issues in image pack file * start indexedDBStore * update package lock and vite-plugin-top-level-await * user session settings - WIP * add useAsync hook * add password stage uia * add uia flow matrix error hook * add UIA action component * add options to delete sessions * add sso uia stage * fix SSO stage complete error * encryption - WIP * update user settings encryption terminology * add default variant to password input * use password input in uia password stage * add options for local backup in user settings * remove typo in import local backup password input label * online backup - WIP * fix uia sso action * move access token settings from about to developer tools * merge encryption tab into sessions and rename it to devices * add device placeholder tile * add logout dialog * add logout button for current device * move other devices in component * render unverified device verification tile * add learn more section for current device verification * add device verification status badge * add info card component * add index file for password input component * add types for secret storage * add component to access secret storage key * manual verification - WIP * update matrix-js-sdk to v35 * add manual verification * use react query for device list * show unverified tab on sidebar * fix device list updates * add session key details to current device * render restore encryption backup * fix loading state of restore backup * fix unverified tab settings closes after verification * key backup tile - WIP * fix unverified tab badge * rename session key to device key in device tile * improve backup restore functionality * fix restore button enabled after layout reload during restoring backup * update backup info on status change * add backup disconnection failures * add device verification using sas * restore backup after verification * show option to logout on startup error screen * fix key backup hook update on decryption key cached * add option to enable device verification * add device verification reset dialog * add logout button in settings drawer * add encrypted message lost on logout * fix backup restore never finish with 0 keys * fix setup dialog hides when enabling device verification * show backup details in menu * update setup device verification body copy * replace deprecated method * fix displayname appear as mxid in settings * remove old refactored codes * fix types
62 lines
2.3 KiB
JavaScript
62 lines
2.3 KiB
JavaScript
import React, { useState } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import './RoomEncryption.scss';
|
|
import { EventTimeline } from 'matrix-js-sdk';
|
|
|
|
import Text from '../../atoms/text/Text';
|
|
import Toggle from '../../atoms/button/Toggle';
|
|
import SettingTile from '../setting-tile/SettingTile';
|
|
|
|
import { confirmDialog } from '../confirm-dialog/ConfirmDialog';
|
|
import { useMatrixClient } from '../../hooks/useMatrixClient';
|
|
import { getStateEvents } from '../../utils/room';
|
|
|
|
function RoomEncryption({ roomId }) {
|
|
const mx = useMatrixClient();
|
|
const room = mx.getRoom(roomId);
|
|
const encryptionEvents = getStateEvents(room, 'm.room.encryption');
|
|
const [isEncrypted, setIsEncrypted] = useState(encryptionEvents.length > 0);
|
|
const canEnableEncryption = room.getLiveTimeline().getState(EventTimeline.FORWARDS).maySendStateEvent('m.room.encryption', mx.getUserId());
|
|
|
|
const handleEncryptionEnable = async () => {
|
|
const joinRule = room.getJoinRule();
|
|
const confirmMsg1 = 'It is not recommended to add encryption in public room. Anyone can find and join public rooms, so anyone can read messages in them.';
|
|
const confirmMsg2 = 'Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly';
|
|
|
|
const isConfirmed1 = (joinRule === 'public')
|
|
? await confirmDialog('Enable encryption', confirmMsg1, 'Continue', 'caution')
|
|
: true;
|
|
if (!isConfirmed1) return;
|
|
if (await confirmDialog('Enable encryption', confirmMsg2, 'Enable', 'caution')) {
|
|
setIsEncrypted(true);
|
|
mx.sendStateEvent(roomId, 'm.room.encryption', {
|
|
algorithm: 'm.megolm.v1.aes-sha2',
|
|
});
|
|
}
|
|
};
|
|
|
|
return (
|
|
<div className="room-encryption">
|
|
<SettingTile
|
|
title="Enable room encryption"
|
|
content={(
|
|
<Text variant="b3">Once enabled, encryption cannot be disabled.</Text>
|
|
)}
|
|
options={(
|
|
<Toggle
|
|
isActive={isEncrypted}
|
|
onToggle={handleEncryptionEnable}
|
|
disabled={isEncrypted || !canEnableEncryption}
|
|
/>
|
|
)}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
RoomEncryption.propTypes = {
|
|
roomId: PropTypes.string.isRequired,
|
|
};
|
|
|
|
export default RoomEncryption;
|