From 1838e385af9d1cddfc394667d69dbc7e9efe87b1 Mon Sep 17 00:00:00 2001 From: KodeStar Date: Wed, 14 Oct 2026 09:56:41 +0100 Subject: [PATCH 1/5] Plain HTTP at home: how the phone apps reach a self-signed server The apps can't trust the default self-signed certificate, so the server now answers plain HTTP on its port to home-network devices (tls.home_http). Remote access explains it (and the Docker gateway trade-off) and no longer suggests the apps get around the self-signed limit; troubleshooting gains "The app can't connect, but the browser can"; the connect, mobile apps, Chromecast, Docker quickstart and admin server pages, the configuration reference (key, env, setting, Home HTTP section), security notes and the API reference's home address rule follow. --- docs-developers/server/api/reference.md | 16 ++++++- docs-developers/server/auth-and-security.md | 7 +++ docs-developers/server/configuration.md | 45 ++++++++++++++++++- docs-developers/server/overview.md | 4 +- docs-users/admin/server.md | 13 +++++- .../getting-started/quickstart-docker.md | 2 +- docs-users/getting-started/remote-access.md | 25 ++++++++--- docs-users/listening/chromecast.md | 4 +- docs-users/listening/connecting.md | 2 +- docs-users/listening/mobile-apps.md | 2 + docs-users/troubleshooting.md | 36 +++++++++++++-- 11 files changed, 137 insertions(+), 19 deletions(-) diff --git a/docs-developers/server/api/reference.md b/docs-developers/server/api/reference.md index 6dc0bce..c5e3216 100644 --- a/docs-developers/server/api/reference.md +++ b/docs-developers/server/api/reference.md @@ -224,7 +224,7 @@ answers, and [`GET /addresses`](#get-apiv1addresses) carry the same object: | Field | Type | Meaning | |---|---|---| -| `home` | string, optional | The server's address on the household network: the configured [`lan_url`](../configuration.md#home-address-lan_url), else the address **this request** arrived on (scheme + `Host`) when that is a home-network host and the request did not come through a proxy ([the rule](../configuration.md#home-address-lan_url)) | +| `home` | string, optional | The server's address on the household network: the configured [`lan_url`](../configuration.md#home-address-lan_url), else the address **this request** arrived on (scheme + `Host`) when that is a home-network host and the request did not come through a proxy ([the rule](../configuration.md#home-address-lan_url)). On a self-signed server with [home HTTP](../configuration.md#home-http-tlshome_http) the derived one is always `http://`, on the request's port | | `away` | string, optional | The address that works from anywhere: the configured `public_url` | A `home` equal to the `away` is dropped. On the pairing payloads and the sign-in answers @@ -242,6 +242,17 @@ https://books.example.com/web/connect?token=…&away=https%3A%2F%2Fbooks.example Read them by name: the encoder sorts them (`away` before `home`). +On a self-signed server with [home HTTP](../configuration.md#home-http-tlshome_http) (the +default), the port also answers plain HTTP to home-network clients, and a derived `home` +is `http://` even when the request came over https: a device pairing at +`https://192.168.1.20:8080` gets `home` `http://192.168.1.20:8080` (an https request +without a port gets `http://:443`, the port that answers). `base_url`, `web_url` +and the `uri`'s `server=` keep the request's own scheme, so a link reads +`…server=https%3A%2F%2F192.168.1.20%3A8080&token=…&home=http%3A%2F%2F192.168.1.20%3A8080`. +A native app that can't trust the certificate at `server` exchanges the token at that +`home` instead, when it has the same host and port; the player's rule is in +[Connect and home/away addresses](../../frontend/connect-and-addresses.md). + A client must not send a token to a `home` address until a tokenless `GET /api/v1/server` there has answered with the same `server_id`: a private address can belong to a different machine on another network. The player's rule is in @@ -6073,6 +6084,7 @@ and `AUDIOSILO_*` variable each one is, and whether it needs a restart (see "network": { "bind": "0.0.0.0:8080", "tls_mode": "selfsigned", + "tls_home_http": true, "tls_hosts": [], "trusted_proxies": ["10.0.0.2/32"], "cors_origins": [] @@ -6112,7 +6124,7 @@ and `AUDIOSILO_*` variable each one is, and whether it needs a restart (see }, "locked": { "players.web_dir": "AUDIOSILO_WEB_DIR" }, "restart_settings": [ - "network.bind", "network.tls_mode", "network.tls_hosts", "players.web_dir", + "network.bind", "network.tls_mode", "network.tls_home_http", "network.tls_hosts", "players.web_dir", "metadata.base_url", "metadata.mode", "demo.enabled", "demo.idle_ttl", "backups.dir" ], "restart_pending": [] diff --git a/docs-developers/server/auth-and-security.md b/docs-developers/server/auth-and-security.md index fc146a5..3ac295c 100644 --- a/docs-developers/server/auth-and-security.md +++ b/docs-developers/server/auth-and-security.md @@ -690,6 +690,13 @@ book's audio and cover as no-cors `