mirror of
https://github.com/vector-im/element-call.git
synced 2024-11-15 00:04:59 +08:00
Fix race where app would be opened with no e2ee key
The key hadn't been extractwed from the URL at the point the modal was mounted, so it just didn't get the key.
This commit is contained in:
parent
393eeabfa8
commit
96c6217a83
@ -25,7 +25,7 @@ import { widget } from "../widget";
|
|||||||
export const getRoomSharedKeyLocalStorageKey = (roomId: string): string =>
|
export const getRoomSharedKeyLocalStorageKey = (roomId: string): string =>
|
||||||
`room-shared-key-${roomId}`;
|
`room-shared-key-${roomId}`;
|
||||||
|
|
||||||
export const useInternalRoomSharedKey = (
|
const useInternalRoomSharedKey = (
|
||||||
roomId: string
|
roomId: string
|
||||||
): [string | null, (value: string) => void] => {
|
): [string | null, (value: string) => void] => {
|
||||||
const key = useMemo(() => getRoomSharedKeyLocalStorageKey(roomId), [roomId]);
|
const key = useMemo(() => getRoomSharedKeyLocalStorageKey(roomId), [roomId]);
|
||||||
@ -35,34 +35,45 @@ export const useInternalRoomSharedKey = (
|
|||||||
return [e2eeEnabled ? roomSharedKey : null, setRoomSharedKey];
|
return [e2eeEnabled ? roomSharedKey : null, setRoomSharedKey];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const useKeyFromUrl = (roomId: string) => {
|
||||||
|
const urlParams = useUrlParams();
|
||||||
|
const [e2eeSharedKey, setE2EESharedKey] = useInternalRoomSharedKey(roomId);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!urlParams.password) return;
|
||||||
|
if (urlParams.password === "") return;
|
||||||
|
if (urlParams.password === e2eeSharedKey) return;
|
||||||
|
|
||||||
|
setE2EESharedKey(urlParams.password);
|
||||||
|
}, [urlParams, e2eeSharedKey, setE2EESharedKey]);
|
||||||
|
};
|
||||||
|
|
||||||
export const useRoomSharedKey = (roomId: string): string | null => {
|
export const useRoomSharedKey = (roomId: string): string | null => {
|
||||||
|
// make sure we've extracted the key from the URL first
|
||||||
|
useKeyFromUrl(roomId);
|
||||||
|
|
||||||
return useInternalRoomSharedKey(roomId)[0];
|
return useInternalRoomSharedKey(roomId)[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useManageRoomSharedKey = (roomId: string): string | null => {
|
export const useManageRoomSharedKey = (roomId: string): string | null => {
|
||||||
const { password } = useUrlParams();
|
const urlParams = useUrlParams();
|
||||||
const [e2eeSharedKey, setE2EESharedKey] = useInternalRoomSharedKey(roomId);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useKeyFromUrl(roomId);
|
||||||
if (!password) return;
|
|
||||||
if (password === "") return;
|
|
||||||
if (password === e2eeSharedKey) return;
|
|
||||||
|
|
||||||
setE2EESharedKey(password);
|
const [e2eeSharedKey] = useInternalRoomSharedKey(roomId);
|
||||||
}, [password, e2eeSharedKey, setE2EESharedKey]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const hash = location.hash;
|
const hash = location.hash;
|
||||||
|
|
||||||
if (!hash.includes("?")) return;
|
if (!hash.includes("?")) return;
|
||||||
if (!hash.includes(PASSWORD_STRING)) return;
|
if (!hash.includes(PASSWORD_STRING)) return;
|
||||||
if (password !== e2eeSharedKey) return;
|
if (urlParams.password !== e2eeSharedKey) return;
|
||||||
|
|
||||||
const [hashStart, passwordStart] = hash.split(PASSWORD_STRING);
|
const [hashStart, passwordStart] = hash.split(PASSWORD_STRING);
|
||||||
const hashEnd = passwordStart.split("&")[1];
|
const hashEnd = passwordStart.split("&")[1];
|
||||||
|
|
||||||
location.replace((hashStart ?? "") + (hashEnd ?? ""));
|
location.replace((hashStart ?? "") + (hashEnd ?? ""));
|
||||||
}, [password, e2eeSharedKey]);
|
}, [urlParams, e2eeSharedKey]);
|
||||||
|
|
||||||
return e2eeSharedKey;
|
return e2eeSharedKey;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user