fix(forward): warn when forwarding out of an encrypted room into one that is not (#330)
CI / Build & Quality Checks (pull_request) Successful in 3m42s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 17s
CI / Playwright smoke (e2e) (pull_request) Successful in 13m6s
CI / Build & Quality Checks (pull_request) Successful in 3m42s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 17s
CI / Playwright smoke (e2e) (pull_request) Successful in 13m6s
Forwarding from an encrypted room into an unencrypted one posts the text (and a re-uploaded plaintext attachment) where the server can read it, with the original author attached, and the dialog said nothing. Show a note above Send naming the unencrypted destination(s). Refs #330 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
906a034e26
commit
be71931a81
@@ -47,8 +47,12 @@ import {
|
||||
recentForwardTargetsAtom,
|
||||
addRecentForwardTarget,
|
||||
} from '../../../state/recentForwardTargets';
|
||||
import { buildForwardContent, buildPlaintextAttachmentContent } from './forwardContent';
|
||||
import { useLocalRoomNames } from '../../../hooks/useRoomMeta';
|
||||
import {
|
||||
buildForwardContent,
|
||||
buildPlaintextAttachmentContent,
|
||||
forwardEncryptionWarning,
|
||||
} from './forwardContent';
|
||||
import { useLocalRoomNames, getLocalRoomName } from '../../../hooks/useRoomMeta';
|
||||
|
||||
type RoomRowProps = {
|
||||
room: Room;
|
||||
@@ -275,6 +279,14 @@ export function ForwardMessageDialog({ mEvent, onClose }: Props) {
|
||||
// Selection persists across query changes: a room selected then filtered out
|
||||
// of the rendered slice stays selected.
|
||||
const [selectedRoomIds, setSelectedRoomIds] = useState<Set<string>>(new Set());
|
||||
const encryptionWarning = forwardEncryptionWarning(
|
||||
!!mx.getRoom(mEvent.getRoomId() ?? '')?.hasEncryptionStateEvent(),
|
||||
[...selectedRoomIds]
|
||||
.map((id) => mx.getRoom(id))
|
||||
.filter((r): r is Room => !!r && !r.hasEncryptionStateEvent())
|
||||
// The name the user sees (their own "Rename for me" name, if set).
|
||||
.map((r) => getLocalRoomName(mx, r.roomId) ?? r.name),
|
||||
);
|
||||
|
||||
const toggleRoom = useCallback((roomId: string) => {
|
||||
setSelectedRoomIds((prev) => {
|
||||
@@ -590,7 +602,13 @@ export function ForwardMessageDialog({ mEvent, onClose }: Props) {
|
||||
shrink="No"
|
||||
direction="Column"
|
||||
style={{ padding: `${config.space.S200} ${config.space.S400}` }}
|
||||
gap="200"
|
||||
>
|
||||
{encryptionWarning && (
|
||||
<Text size="T200" role="note" style={{ color: color.Warning.Main }}>
|
||||
{encryptionWarning}
|
||||
</Text>
|
||||
)}
|
||||
<Button
|
||||
variant="Primary"
|
||||
size="400"
|
||||
|
||||
Reference in New Issue
Block a user