diff options
Diffstat (limited to 'client-web/source')
-rw-r--r-- | client-web/source/index.ts | 10 | ||||
-rw-r--r-- | client-web/source/preferences.ts | 7 |
2 files changed, 14 insertions, 3 deletions
diff --git a/client-web/source/index.ts b/client-web/source/index.ts index 502ab98..0249d4d 100644 --- a/client-web/source/index.ts +++ b/client-web/source/index.ts @@ -3,6 +3,7 @@ import { ediv } from "./helper.ts"; import { log } from "./logger.ts" import { create_menu } from "./menu.ts"; +import { PREFS } from "./preferences.ts"; import { SignalingConnection } from "./protocol/mod.ts"; import { Room } from "./room.ts" @@ -24,10 +25,17 @@ export interface User { window.onload = () => main() export async function main() { - document.body.querySelectorAll("p").forEach(e => e.remove()) log("*", "starting up") + document.body.querySelectorAll("p").forEach(e => e.remove()) const room_name = window.location.hash.substring(1) + + if (!globalThis.RTCPeerConnection) return log({ scope: "webrtc", error: true }, "WebRTC not supported.") + if (!globalThis.isSecureContext) log({ scope: "*", warn: true }, "This page is not in a 'Secure Context'") + if (!globalThis.crypto.subtle) return log({ scope: "crypto", error: true }, "SubtleCrypto not availible") + if (room_name.length < 8) log({ scope: "crypto", warn: true }, "Room name is very short. e2ee is insecure!") if (room_name.length == 0) window.location.href = "/" // send them back to the start page + if (PREFS.warn_redirect) log({ scope: "crypto", warn: true }, "You were redirected from the old URL format. The server knows you room name now - e2ee is insecure!") + const conn = await (new SignalingConnection().connect(room_name)) new Room(conn) create_menu() diff --git a/client-web/source/preferences.ts b/client-web/source/preferences.ts index 63efeb2..c25cece 100644 --- a/client-web/source/preferences.ts +++ b/client-web/source/preferences.ts @@ -28,7 +28,9 @@ export function register_prefs<T extends Record<string, PrefDecl<unknown>>>(ds: const raw_params = load_query_params(); export function load_query_params(): { [key: string]: string } { const q: { [key: string]: string } = {} - for (const kv of window.location.hash.substring(1).split("&")) { + const params = window.location.hash.substring(1).split("?")[1] + if (!params) return {} + for (const kv of params.split("&")) { const [key, value] = kv.split("=") if (key == "prototype") continue q[decodeURIComponent(key)] = decodeURIComponent(value) @@ -62,6 +64,7 @@ const PREF_DECLS = { microphone_enabled: { name: "microphone_enabled", default: false, description: "Add one microphone track on startup" }, camera_enabled: { name: "camera_enabled", default: false, description: "Add one camera track on startup" }, screencast_enabled: { name: "screencast_enabled", default: false, description: "Add one screencast track on startup" }, - camera_facing_mode: { name: "camera_facing_mode", default: undefined as undefined | string, type: "string" as const, possible_values: ["environment", "user", undefined], description: "Prefer user-facing or env-facing camera" } + camera_facing_mode: { name: "camera_facing_mode", default: undefined as undefined | string, type: "string" as const, possible_values: ["environment", "user", undefined], description: "Prefer user-facing or env-facing camera" }, + warn_redirect: { name: "warn_redirect", default: false, description: "Interal option that is set by a server redirect." }, } export const PREFS = register_prefs(PREF_DECLS) |