diff --git a/CHANGELOG.md b/CHANGELOG.md index e3bbcad5..f3474136 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * Improve space join flow * Fix opening images in fullscreen dialog * Add support for blocked relays +* Add authentication policy setting # 1.6.2 diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 5e7e976c..5e6ef778 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -263,12 +263,18 @@ export const MESSAGE_KINDS = [...CONTENT_KINDS, MESSAGE] export const SETTINGS = "flotilla/settings" +export enum RelayAuthMode { + Aggressive = "aggressive", + Conservative = "conservative", +} + export type SettingsValues = { show_media: boolean hide_sensitive: boolean trusted_relays: string[] report_usage: boolean report_errors: boolean + relay_auth: RelayAuthMode send_delay: number font_size: number play_notification_sound: boolean @@ -280,12 +286,13 @@ export type Settings = { values: SettingsValues } -export const defaultSettings = { +export const defaultSettings: SettingsValues = { show_media: true, hide_sensitive: true, trusted_relays: [], report_usage: true, report_errors: true, + relay_auth: RelayAuthMode.Conservative, send_delay: 0, font_size: 1.1, play_notification_sound: true, diff --git a/src/app/util/policies.ts b/src/app/util/policies.ts index a1bc1b91..5328b757 100644 --- a/src/app/util/policies.ts +++ b/src/app/util/policies.ts @@ -1,4 +1,5 @@ -import {on, always, call, dissoc, assoc, uniq} from "@welshman/lib" +import {get} from "svelte/store" +import {on, call, dissoc, assoc, uniq} from "@welshman/lib" import {RelayMode} from "@welshman/util" import type {Socket, RelayMessage, ClientMessage} from "@welshman/net" import { @@ -20,9 +21,27 @@ import { getSetting, relaysPendingTrust, relaysMostlyRestricted, + RelayAuthMode, + NOTIFIER_RELAY, + userSpaceUrls, } from "@app/core/state" -export const authPolicy = makeSocketPolicyAuth({sign, shouldAuth: always(true)}) +export const authPolicy = makeSocketPolicyAuth({ + sign, + shouldAuth: (socket: Socket) => { + const $pubkey = pubkey.get() + const mode = getSetting("relay_auth") + + if (!$pubkey) return false + if (socket.url === NOTIFIER_RELAY) return true + if (mode === RelayAuthMode.Aggressive) return true + if (get(userSpaceUrls).includes(socket.url)) return true + if (getPubkeyRelays($pubkey).includes(socket.url)) return true + if (getPubkeyRelays($pubkey, RelayMode.Messaging).includes(socket.url)) return true + + return false + }, +}) export const blockPolicy = (socket: Socket) => { const previousOpen = socket.open diff --git a/src/lib/components/FieldInline.svelte b/src/lib/components/FieldInline.svelte index f8beaa92..cda7a1ed 100644 --- a/src/lib/components/FieldInline.svelte +++ b/src/lib/components/FieldInline.svelte @@ -9,14 +9,14 @@ const {...props}: Props = $props() -
-