From 63a0adaa6ed2def5d26818917a4eaccc37f1bbd9 Mon Sep 17 00:00:00 2001 From: Ajay Bura Date: Sun, 2 Jan 2022 12:08:19 +0530 Subject: [PATCH] Add ability to enable room encryption Signed-off-by: Ajay Bura --- .../room-encryption/RoomEncryption.jsx | 55 +++++++++++++++++++ .../room-encryption/RoomEncryption.scss | 5 ++ src/app/organisms/room/RoomSettings.jsx | 5 ++ 3 files changed, 65 insertions(+) create mode 100644 src/app/molecules/room-encryption/RoomEncryption.jsx create mode 100644 src/app/molecules/room-encryption/RoomEncryption.scss diff --git a/src/app/molecules/room-encryption/RoomEncryption.jsx b/src/app/molecules/room-encryption/RoomEncryption.jsx new file mode 100644 index 0000000..b9ba706 --- /dev/null +++ b/src/app/molecules/room-encryption/RoomEncryption.jsx @@ -0,0 +1,55 @@ +import React, { useState } from 'react'; +import PropTypes from 'prop-types'; +import './RoomEncryption.scss'; + +import initMatrix from '../../../client/initMatrix'; + +import Text from '../../atoms/text/Text'; +import Toggle from '../../atoms/button/Toggle'; +import SettingTile from '../setting-tile/SettingTile'; + +function RoomEncryption({ roomId }) { + const mx = initMatrix.matrixClient; + const room = mx.getRoom(roomId); + const encryptionEvents = room.currentState.getStateEvents('m.room.encryption'); + const [isEncrypted, setIsEncrypted] = useState(encryptionEvents.length > 0); + const canEnableEncryption = room.currentState.maySendStateEvent('m.room.encryption', mx.getUserId()); + + const handleEncryptionEnable = () => { + 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'; + if (joinRule === 'public' ? confirm(confirmMsg1) : true) { + if (confirm(confirmMsg2)) { + setIsEncrypted(true); + mx.sendStateEvent(roomId, 'm.room.encryption', { + algorithm: 'm.megolm.v1.aes-sha2', + }); + } + } + }; + + return ( +
+ Once enabled, encryption cannot be disabled. + )} + options={( + + )} + /> +
+ ); +} + +RoomEncryption.propTypes = { + roomId: PropTypes.string.isRequired, +}; + +export default RoomEncryption; diff --git a/src/app/molecules/room-encryption/RoomEncryption.scss b/src/app/molecules/room-encryption/RoomEncryption.scss new file mode 100644 index 0000000..1c521f4 --- /dev/null +++ b/src/app/molecules/room-encryption/RoomEncryption.scss @@ -0,0 +1,5 @@ +.room-encryption { + & .setting-tile { + margin: var(--sp-normal); + } +} \ No newline at end of file diff --git a/src/app/organisms/room/RoomSettings.jsx b/src/app/organisms/room/RoomSettings.jsx index 91fd11e..40e1d1d 100644 --- a/src/app/organisms/room/RoomSettings.jsx +++ b/src/app/organisms/room/RoomSettings.jsx @@ -18,6 +18,7 @@ import RoomNotification from '../../molecules/room-notification/RoomNotification import RoomVisibility from '../../molecules/room-visibility/RoomVisibility'; import RoomAliases from '../../molecules/room-aliases/RoomAliases'; import RoomHistoryVisibility from '../../molecules/room-history-visibility/RoomHistoryVisibility'; +import RoomEncryption from '../../molecules/room-encryption/RoomEncryption'; import SettingsIC from '../../../../public/res/ic/outlined/settings.svg'; import SearchIC from '../../../../public/res/ic/outlined/search.svg'; @@ -99,6 +100,10 @@ GeneralSettings.propTypes = { function SecuritySettings({ roomId }) { return ( <> +
+ Encryption + +
Message history visibility (Who can read history)