diff options
Diffstat (limited to 'client-web')
| -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) | 
