Merge pull request #1703 from vector-im/dbkr/keep_password_in_url

Keep the password in the URL
This commit is contained in:
David Baker
2023-10-06 10:55:12 +01:00
committed by GitHub
5 changed files with 15 additions and 36 deletions

View File

@@ -19,7 +19,7 @@ import { useEffect, useMemo } from "react";
import { useEnableE2EE } from "../settings/useSetting"; import { useEnableE2EE } from "../settings/useSetting";
import { useLocalStorage } from "../useLocalStorage"; import { useLocalStorage } from "../useLocalStorage";
import { useClient } from "../ClientContext"; import { useClient } from "../ClientContext";
import { PASSWORD_STRING, useUrlParams } from "../UrlParams"; import { useUrlParams } from "../UrlParams";
import { widget } from "../widget"; import { widget } from "../widget";
export const getRoomSharedKeyLocalStorageKey = (roomId: string): string => export const getRoomSharedKeyLocalStorageKey = (roomId: string): string =>
@@ -60,29 +60,6 @@ export const useRoomSharedKey = (roomId: string): string | null => {
return useInternalRoomSharedKey(roomId)[0] ?? passwordFormUrl; return useInternalRoomSharedKey(roomId)[0] ?? passwordFormUrl;
}; };
export const useManageRoomSharedKey = (roomId: string): string | null => {
const urlParams = useUrlParams();
const urlPassword = useKeyFromUrl(roomId);
const [e2eeSharedKey] = useInternalRoomSharedKey(roomId);
useEffect(() => {
const hash = location.hash;
if (!hash.includes("?")) return;
if (!hash.includes(PASSWORD_STRING)) return;
if (urlParams.password !== e2eeSharedKey) return;
const [hashStart, passwordStart] = hash.split(PASSWORD_STRING);
const hashEnd = passwordStart.split("&").slice(1).join("&");
location.replace((hashStart ?? "") + (hashEnd ?? ""));
}, [urlParams, e2eeSharedKey]);
return e2eeSharedKey ?? urlPassword;
};
export const useIsRoomE2EE = (roomId: string): boolean | null => { export const useIsRoomE2EE = (roomId: string): boolean | null => {
const { client } = useClient(); const { client } = useClient();
const room = useMemo(() => client?.getRoom(roomId) ?? null, [roomId, client]); const room = useMemo(() => client?.getRoom(roomId) ?? null, [roomId, client]);

View File

@@ -68,9 +68,11 @@ function CallTile({ name, avatarUrl, room }: CallTileProps) {
return ( return (
<div className={styles.callTile}> <div className={styles.callTile}>
<Link <Link
// note we explicitly omit the password here as we don't want it on this link because to={getRelativeRoomUrl(
// it's just for the user to navigate around and not for sharing room.roomId,
to={getRelativeRoomUrl(room.roomId, room.name)} room.name,
roomSharedKey ?? undefined
)}
className={styles.callTileLink} className={styles.callTileLink}
> >
<Avatar id={room.roomId} name={name} size={Size.LG} src={avatarUrl} /> <Avatar id={room.roomId} name={name} size={Size.LG} src={avatarUrl} />

View File

@@ -81,14 +81,16 @@ export function RegisteredView({ client }: Props) {
await createRoom(client, roomName, e2eeEnabled ?? false) await createRoom(client, roomName, e2eeEnabled ?? false)
)[1]; )[1];
const roomPassword = randomString(32);
if (e2eeEnabled) { if (e2eeEnabled) {
setLocalStorageItem( setLocalStorageItem(
getRoomSharedKeyLocalStorageKey(roomId), getRoomSharedKeyLocalStorageKey(roomId),
randomString(32) roomPassword
); );
} }
history.push(getRelativeRoomUrl(roomId, roomName)); history.push(getRelativeRoomUrl(roomId, roomName, roomPassword));
} }
submit().catch((error) => { submit().catch((error) => {

View File

@@ -88,6 +88,7 @@ export const UnauthenticatedView: FC = () => {
); );
let roomId: string; let roomId: string;
const roomPassword = randomString(32);
try { try {
roomId = ( roomId = (
await createRoom(client, roomName, e2eeEnabled ?? false) await createRoom(client, roomName, e2eeEnabled ?? false)
@@ -96,7 +97,7 @@ export const UnauthenticatedView: FC = () => {
if (e2eeEnabled) { if (e2eeEnabled) {
setLocalStorageItem( setLocalStorageItem(
getRoomSharedKeyLocalStorageKey(roomId), getRoomSharedKeyLocalStorageKey(roomId),
randomString(32) roomPassword
); );
} }
} catch (error) { } catch (error) {
@@ -127,7 +128,7 @@ export const UnauthenticatedView: FC = () => {
} }
setClient({ client, session }); setClient({ client, session });
history.push(getRelativeRoomUrl(roomId, roomName)); history.push(getRelativeRoomUrl(roomId, roomName, roomPassword));
} }
submit().catch((error) => { submit().catch((error) => {

View File

@@ -39,10 +39,7 @@ import { useMediaDevices, MediaDevices } from "../livekit/MediaDevicesContext";
import { useMatrixRTCSessionMemberships } from "../useMatrixRTCSessionMemberships"; import { useMatrixRTCSessionMemberships } from "../useMatrixRTCSessionMemberships";
import { enterRTCSession, leaveRTCSession } from "../rtcSessionHelpers"; import { enterRTCSession, leaveRTCSession } from "../rtcSessionHelpers";
import { useMatrixRTCSessionJoinState } from "../useMatrixRTCSessionJoinState"; import { useMatrixRTCSessionJoinState } from "../useMatrixRTCSessionJoinState";
import { import { useIsRoomE2EE, useRoomSharedKey } from "../e2ee/sharedKeyManagement";
useManageRoomSharedKey,
useIsRoomE2EE,
} from "../e2ee/sharedKeyManagement";
import { useEnableE2EE } from "../settings/useSetting"; import { useEnableE2EE } from "../settings/useSetting";
import { useRoomAvatar } from "./useRoomAvatar"; import { useRoomAvatar } from "./useRoomAvatar";
import { useRoomName } from "./useRoomName"; import { useRoomName } from "./useRoomName";
@@ -75,7 +72,7 @@ export function GroupCallView({
const memberships = useMatrixRTCSessionMemberships(rtcSession); const memberships = useMatrixRTCSessionMemberships(rtcSession);
const isJoined = useMatrixRTCSessionJoinState(rtcSession); const isJoined = useMatrixRTCSessionJoinState(rtcSession);
const e2eeSharedKey = useManageRoomSharedKey(rtcSession.room.roomId); const e2eeSharedKey = useRoomSharedKey(rtcSession.room.roomId);
const isRoomE2EE = useIsRoomE2EE(rtcSession.room.roomId); const isRoomE2EE = useIsRoomE2EE(rtcSession.room.roomId);
useEffect(() => { useEffect(() => {