mirror of
https://github.com/vector-im/element-call.git
synced 2026-08-29 21:15:19 +00:00
add dev setting to choose to-device or room encryption
This commit is contained in:
@@ -73,7 +73,8 @@
|
|||||||
"show_connection_stats": "Show connection statistics",
|
"show_connection_stats": "Show connection statistics",
|
||||||
"show_non_member_tiles": "Show tiles for non-member media",
|
"show_non_member_tiles": "Show tiles for non-member media",
|
||||||
"url_params": "URL parameters",
|
"url_params": "URL parameters",
|
||||||
"use_new_membership_manager": "Use the new implementation of the call MembershipManager"
|
"use_new_membership_manager": "Use the new implementation of the call MembershipManager",
|
||||||
|
"use_to_device_key_transport": "Use to device messages to distribute keys for matrixRTC media"
|
||||||
},
|
},
|
||||||
"disconnected_banner": "Connectivity to the server has been lost.",
|
"disconnected_banner": "Connectivity to the server has been lost.",
|
||||||
"error": {
|
"error": {
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ import {
|
|||||||
} from "../utils/errors.ts";
|
} from "../utils/errors.ts";
|
||||||
import { GroupCallErrorBoundary } from "./GroupCallErrorBoundary.tsx";
|
import { GroupCallErrorBoundary } from "./GroupCallErrorBoundary.tsx";
|
||||||
import {
|
import {
|
||||||
|
useExperimentalToDeviceTransportSetting,
|
||||||
useNewMembershipManagerSetting as useNewMembershipManagerSetting,
|
useNewMembershipManagerSetting as useNewMembershipManagerSetting,
|
||||||
useSetting,
|
useSetting,
|
||||||
} from "../settings/settings";
|
} from "../settings/settings";
|
||||||
@@ -151,6 +152,9 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
const { perParticipantE2EE, returnToLobby } = useUrlParams();
|
const { perParticipantE2EE, returnToLobby } = useUrlParams();
|
||||||
const e2eeSystem = useRoomEncryptionSystem(room.roomId);
|
const e2eeSystem = useRoomEncryptionSystem(room.roomId);
|
||||||
const [useNewMembershipManager] = useSetting(useNewMembershipManagerSetting);
|
const [useNewMembershipManager] = useSetting(useNewMembershipManagerSetting);
|
||||||
|
const [useExperimentalToDeviceTransport] = useSetting(
|
||||||
|
useExperimentalToDeviceTransportSetting,
|
||||||
|
);
|
||||||
|
|
||||||
usePageTitle(roomName);
|
usePageTitle(roomName);
|
||||||
|
|
||||||
@@ -178,16 +182,13 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
const latestMuteStates = useLatest(muteStates);
|
const latestMuteStates = useLatest(muteStates);
|
||||||
|
|
||||||
const enterRTCSessionOrError = useCallback(
|
const enterRTCSessionOrError = useCallback(
|
||||||
async (
|
async (rtcSession: MatrixRTCSession): Promise<void> => {
|
||||||
rtcSession: MatrixRTCSession,
|
|
||||||
perParticipantE2EE: boolean,
|
|
||||||
newMembershipManager: boolean,
|
|
||||||
): Promise<void> => {
|
|
||||||
try {
|
try {
|
||||||
await enterRTCSession(
|
await enterRTCSession(
|
||||||
rtcSession,
|
rtcSession,
|
||||||
perParticipantE2EE,
|
perParticipantE2EE,
|
||||||
newMembershipManager,
|
useNewMembershipManager,
|
||||||
|
useExperimentalToDeviceTransport,
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof ElementCallError) {
|
if (e instanceof ElementCallError) {
|
||||||
@@ -201,7 +202,11 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[setExternalError],
|
[
|
||||||
|
perParticipantE2EE,
|
||||||
|
useExperimentalToDeviceTransport,
|
||||||
|
useNewMembershipManager,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -253,11 +258,7 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
await defaultDeviceSetup(
|
await defaultDeviceSetup(
|
||||||
ev.detail.data as unknown as JoinCallData,
|
ev.detail.data as unknown as JoinCallData,
|
||||||
);
|
);
|
||||||
await enterRTCSessionOrError(
|
await enterRTCSessionOrError(rtcSession);
|
||||||
rtcSession,
|
|
||||||
perParticipantE2EE,
|
|
||||||
useNewMembershipManager,
|
|
||||||
);
|
|
||||||
widget.api.transport.reply(ev.detail, {});
|
widget.api.transport.reply(ev.detail, {});
|
||||||
})().catch((e) => {
|
})().catch((e) => {
|
||||||
logger.error("Error joining RTC session", e);
|
logger.error("Error joining RTC session", e);
|
||||||
@@ -270,21 +271,13 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
} else {
|
} else {
|
||||||
// No lobby and no preload: we enter the rtc session right away
|
// No lobby and no preload: we enter the rtc session right away
|
||||||
(async (): Promise<void> => {
|
(async (): Promise<void> => {
|
||||||
await enterRTCSessionOrError(
|
await enterRTCSessionOrError(rtcSession);
|
||||||
rtcSession,
|
|
||||||
perParticipantE2EE,
|
|
||||||
useNewMembershipManager,
|
|
||||||
);
|
|
||||||
})().catch((e) => {
|
})().catch((e) => {
|
||||||
logger.error("Error joining RTC session", e);
|
logger.error("Error joining RTC session", e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
void enterRTCSessionOrError(
|
void enterRTCSessionOrError(rtcSession);
|
||||||
rtcSession,
|
|
||||||
perParticipantE2EE,
|
|
||||||
useNewMembershipManager,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [
|
}, [
|
||||||
@@ -407,13 +400,7 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
client={client}
|
client={client}
|
||||||
matrixInfo={matrixInfo}
|
matrixInfo={matrixInfo}
|
||||||
muteStates={muteStates}
|
muteStates={muteStates}
|
||||||
onEnter={() =>
|
onEnter={() => void enterRTCSessionOrError(rtcSession)}
|
||||||
void enterRTCSessionOrError(
|
|
||||||
rtcSession,
|
|
||||||
perParticipantE2EE,
|
|
||||||
useNewMembershipManager,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
confineToRoom={confineToRoom}
|
confineToRoom={confineToRoom}
|
||||||
hideHeader={hideHeader}
|
hideHeader={hideHeader}
|
||||||
participantCount={participantCount}
|
participantCount={participantCount}
|
||||||
@@ -491,11 +478,7 @@ export const GroupCallView: FC<Props> = ({
|
|||||||
recoveryActionHandler={(action) => {
|
recoveryActionHandler={(action) => {
|
||||||
if (action == "reconnect") {
|
if (action == "reconnect") {
|
||||||
setLeft(false);
|
setLeft(false);
|
||||||
enterRTCSessionOrError(
|
enterRTCSessionOrError(rtcSession).catch((e) => {
|
||||||
rtcSession,
|
|
||||||
perParticipantE2EE,
|
|
||||||
useNewMembershipManager,
|
|
||||||
).catch((e) => {
|
|
||||||
logger.error("Error re-entering RTC session", e);
|
logger.error("Error re-entering RTC session", e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ export async function enterRTCSession(
|
|||||||
rtcSession: MatrixRTCSession,
|
rtcSession: MatrixRTCSession,
|
||||||
encryptMedia: boolean,
|
encryptMedia: boolean,
|
||||||
useNewMembershipManager = true,
|
useNewMembershipManager = true,
|
||||||
|
useExperimentalToDeviceTransport = false,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
PosthogAnalytics.instance.eventCallEnded.cacheStartCall(new Date());
|
PosthogAnalytics.instance.eventCallEnded.cacheStartCall(new Date());
|
||||||
PosthogAnalytics.instance.eventCallStarted.track(rtcSession.room.roomId);
|
PosthogAnalytics.instance.eventCallStarted.track(rtcSession.room.roomId);
|
||||||
@@ -125,7 +126,7 @@ export async function enterRTCSession(
|
|||||||
membershipKeepAlivePeriod:
|
membershipKeepAlivePeriod:
|
||||||
matrixRtcSessionConfig?.membership_keep_alive_period,
|
matrixRtcSessionConfig?.membership_keep_alive_period,
|
||||||
makeKeyDelay: matrixRtcSessionConfig?.key_rotation_on_leave_delay,
|
makeKeyDelay: matrixRtcSessionConfig?.key_rotation_on_leave_delay,
|
||||||
useExperimentalToDeviceTransport: true,
|
useExperimentalToDeviceTransport,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
if (widget) {
|
if (widget) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
showNonMemberTiles as showNonMemberTilesSetting,
|
showNonMemberTiles as showNonMemberTilesSetting,
|
||||||
showConnectionStats as showConnectionStatsSetting,
|
showConnectionStats as showConnectionStatsSetting,
|
||||||
useNewMembershipManagerSetting,
|
useNewMembershipManagerSetting,
|
||||||
|
useExperimentalToDeviceTransportSetting,
|
||||||
} from "./settings";
|
} from "./settings";
|
||||||
import type { MatrixClient } from "matrix-js-sdk";
|
import type { MatrixClient } from "matrix-js-sdk";
|
||||||
import type { Room as LivekitRoom } from "livekit-client";
|
import type { Room as LivekitRoom } from "livekit-client";
|
||||||
@@ -44,6 +45,10 @@ export const DeveloperSettingsTab: FC<Props> = ({ client, livekitRoom }) => {
|
|||||||
useNewMembershipManagerSetting,
|
useNewMembershipManagerSetting,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const [
|
||||||
|
useExperimentalToDeviceTransport,
|
||||||
|
setUseExperimentalToDeviceTransport,
|
||||||
|
] = useSetting(useExperimentalToDeviceTransportSetting);
|
||||||
const urlParams = useUrlParams();
|
const urlParams = useUrlParams();
|
||||||
|
|
||||||
const sfuUrl = useMemo((): URL | null => {
|
const sfuUrl = useMemo((): URL | null => {
|
||||||
@@ -156,6 +161,20 @@ export const DeveloperSettingsTab: FC<Props> = ({ client, livekitRoom }) => {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
</FieldRow>
|
</FieldRow>
|
||||||
|
<FieldRow>
|
||||||
|
<InputField
|
||||||
|
id="useToDeviceKeyTransport"
|
||||||
|
type="checkbox"
|
||||||
|
label={t("developer_mode.use_to_device_key_transport")}
|
||||||
|
checked={!!useExperimentalToDeviceTransport}
|
||||||
|
onChange={useCallback(
|
||||||
|
(event: ChangeEvent<HTMLInputElement>): void => {
|
||||||
|
setUseExperimentalToDeviceTransport(event.target.checked);
|
||||||
|
},
|
||||||
|
[setUseExperimentalToDeviceTransport],
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</FieldRow>
|
||||||
{livekitRoom ? (
|
{livekitRoom ? (
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -117,4 +117,10 @@ export const useNewMembershipManagerSetting = new Setting<boolean>(
|
|||||||
"new-membership-manager",
|
"new-membership-manager",
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const useExperimentalToDeviceTransportSetting = new Setting<boolean>(
|
||||||
|
"experimental-to-device-transport",
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
|
||||||
export const alwaysShowSelf = new Setting<boolean>("always-show-self", true);
|
export const alwaysShowSelf = new Setting<boolean>("always-show-self", true);
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ export async function createRoom(
|
|||||||
"m.room.encryption": 100,
|
"m.room.encryption": 100,
|
||||||
"m.room.name": 50,
|
"m.room.name": 50,
|
||||||
"m.room.message": 0,
|
"m.room.message": 0,
|
||||||
"m.room.encrypted": 50,
|
"m.room.encrypted": 0,
|
||||||
"m.sticker": 50,
|
"m.sticker": 50,
|
||||||
"org.matrix.msc3401.call.member": 0,
|
"org.matrix.msc3401.call.member": 0,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user