diff --git a/hub/src/config/serverSettings.ts b/hub/src/config/serverSettings.ts index 2057d8a0..6b1b76d3 100644 --- a/hub/src/config/serverSettings.ts +++ b/hub/src/config/serverSettings.ts @@ -21,6 +21,7 @@ export interface ServerSettings { listenPort: number publicUrl: string corsOrigins: string[] + lanUrl: string | null } export interface ServerSettingsResult { @@ -33,6 +34,7 @@ export interface ServerSettingsResult { listenHost: 'env' | 'file' | 'default' listenPort: 'env' | 'file' | 'default' publicUrl: 'env' | 'file' | 'default' + lanUrl: 'file' | 'default' corsOrigins: 'env' | 'file' | 'default' } savedToFile: boolean @@ -110,6 +112,7 @@ export async function loadServerSettings(dataDir: string): Promise file > null @@ -214,6 +217,15 @@ export async function loadServerSettings(dataDir: string): Promise file > derived from publicUrl let corsOrigins: string[] if (process.env.CORS_ORIGINS) { @@ -244,6 +256,7 @@ export async function loadServerSettings(dataDir: string): Promise { + try { + return [...new Set([...corsOrigins, new URL(configuration.lanUrl).origin])] + } catch { + return corsOrigins + } + })() + : corsOrigins + const corsOriginOption = mergedCorsOrigins.includes('*') ? '*' : mergedCorsOrigins const corsMiddleware = cors({ origin: corsOriginOption, allowMethods: ['GET', 'POST', 'PATCH', 'DELETE', 'OPTIONS'], diff --git a/web/src/App.tsx b/web/src/App.tsx index 2bccf74b..3e40a635 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -449,7 +449,7 @@ function AppInner() { } return ( - + ServerUrlResult } const AppContext = createContext(null) diff --git a/web/src/routes/settings/general.tsx b/web/src/routes/settings/general.tsx index f14f5591..21c77939 100644 --- a/web/src/routes/settings/general.tsx +++ b/web/src/routes/settings/general.tsx @@ -11,7 +11,7 @@ const locales: ReadonlyArray<{ value: Locale; label: string }> = [ function ConnectionSwitch() { const { t } = useTranslation() - const { api } = useAppContext() + const { api, setServerUrl } = useAppContext() const [info, setInfo] = useState<{ publicUrl: string | null; lanUrl: string | null } | null>(null) useEffect(() => { @@ -68,7 +68,11 @@ function ConnectionSwitch() {