fix(pine): serve the Connect-to-WiFi button over an http->https redirect
All checks were successful
Demo images / Build & push demo images (push) Successful in 2m47s
All checks were successful
Demo images / Build & push demo images (push) Successful in 2m47s
The launcher must be a secure context for Web Bluetooth, but the UI opens local apps as http://host:port (resolveAppUrl), so an https-only launcher (v1.1.0) would break the Open button with a TLS mismatch. Serve http on 10380 (the Open target) that 301-redirects to the https listener on 10381, so the new tab lands on https where navigator.bluetooth is available. Bump pine 1.1.0 -> 1.1.1; re-sign the catalog (only the pine entry changes). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
24cab326e2
commit
a71a18bffd
@ -373,7 +373,7 @@
|
||||
{
|
||||
"id": "pine",
|
||||
"title": "Pine",
|
||||
"version": "1.1.0",
|
||||
"version": "1.1.1",
|
||||
"description": "A private voice assistant for your home. Pine runs speech-to-text (Whisper) and text-to-speech (Piper) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud.",
|
||||
"icon": "/assets/img/app-icons/pine.svg",
|
||||
"author": "Archipelago",
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
app:
|
||||
id: pine
|
||||
name: Pine
|
||||
version: "1.1.0"
|
||||
version: "1.1.1"
|
||||
description: A private voice assistant for your home. Pine runs speech-to-text (Whisper) and text-to-speech (Piper) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud.
|
||||
category: home
|
||||
|
||||
@ -45,7 +45,14 @@ app:
|
||||
network_policy: isolated
|
||||
|
||||
ports:
|
||||
# 10380 (http) is the Open target — the UI launches apps as
|
||||
# http://host:10380 (resolveAppUrl). nginx there 301-redirects to the https
|
||||
# listener on 10381, so the new tab lands on a secure context where
|
||||
# navigator.bluetooth (the "Connect Pine to WiFi" provisioner) works.
|
||||
- host: 10380
|
||||
container: 80
|
||||
protocol: tcp
|
||||
- host: 10381
|
||||
container: 443
|
||||
protocol: tcp
|
||||
|
||||
@ -73,6 +80,11 @@ app:
|
||||
- path: /var/lib/archipelago/pine/nginx.conf
|
||||
overwrite: true
|
||||
content: |
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
return 301 https://$host:10381$request_uri;
|
||||
}
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name _;
|
||||
@ -305,7 +317,7 @@ app:
|
||||
description: Connect your speaker to WiFi and check the voice assistant
|
||||
type: ui
|
||||
port: 10380
|
||||
protocol: https
|
||||
protocol: http
|
||||
path: /
|
||||
|
||||
metadata:
|
||||
|
||||
@ -373,7 +373,7 @@
|
||||
{
|
||||
"id": "pine",
|
||||
"title": "Pine",
|
||||
"version": "1.1.0",
|
||||
"version": "1.1.1",
|
||||
"description": "A private voice assistant for your home. Pine runs speech-to-text (Whisper) and text-to-speech (Piper) on your own node and pairs with a PineVoice satellite speaker, so Home Assistant Assist works locally with nothing sent to the cloud.",
|
||||
"icon": "/assets/img/app-icons/pine.svg",
|
||||
"author": "Archipelago",
|
||||
|
||||
@ -3874,7 +3874,7 @@
|
||||
"environment": [],
|
||||
"files": [
|
||||
{
|
||||
"content": "server {\n listen 443 ssl;\n server_name _;\n ssl_certificate /etc/nginx/tls.crt;\n ssl_certificate_key /etc/nginx/tls.key;\n root /usr/share/nginx/html;\n index index.html;\n location / { try_files $uri $uri/ /index.html; }\n}\n",
|
||||
"content": "server {\n listen 80;\n server_name _;\n return 301 https://$host:10381$request_uri;\n}\nserver {\n listen 443 ssl;\n server_name _;\n ssl_certificate /etc/nginx/tls.crt;\n ssl_certificate_key /etc/nginx/tls.key;\n root /usr/share/nginx/html;\n index index.html;\n location / { try_files $uri $uri/ /index.html; }\n}\n",
|
||||
"overwrite": true,
|
||||
"path": "/var/lib/archipelago/pine/nginx.conf"
|
||||
},
|
||||
@ -3899,7 +3899,7 @@
|
||||
"name": "Pine",
|
||||
"path": "/",
|
||||
"port": 10380,
|
||||
"protocol": "https",
|
||||
"protocol": "http",
|
||||
"type": "ui"
|
||||
}
|
||||
},
|
||||
@ -3923,9 +3923,14 @@
|
||||
"name": "Pine",
|
||||
"ports": [
|
||||
{
|
||||
"container": 443,
|
||||
"container": 80,
|
||||
"host": 10380,
|
||||
"protocol": "tcp"
|
||||
},
|
||||
{
|
||||
"container": 443,
|
||||
"host": 10381,
|
||||
"protocol": "tcp"
|
||||
}
|
||||
],
|
||||
"resources": {
|
||||
@ -3943,7 +3948,7 @@
|
||||
"no_new_privileges": true,
|
||||
"readonly_root": false
|
||||
},
|
||||
"version": "1.1.0",
|
||||
"version": "1.1.1",
|
||||
"volumes": [
|
||||
{
|
||||
"options": [
|
||||
@ -3980,7 +3985,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"version": "1.1.0"
|
||||
"version": "1.1.1"
|
||||
},
|
||||
"pine-piper": {
|
||||
"manifest": {
|
||||
@ -4641,7 +4646,7 @@
|
||||
}
|
||||
},
|
||||
"schema": 1,
|
||||
"signature": "ee660b635640c9ac91d203330a7593132842bbd5650883183110f9829dfda417ab172211364860d7dd3f52ada19745850fad66f424a03faf27465cf3ff740301",
|
||||
"signature": "aa471d39066c27f305aeefde39f239357d38af4bc6fe50aa2f6006690bb7a0cd7f4b0ecd6e866330c7055303ce433f27d94820964eff23efaa5a3a49883c9e08",
|
||||
"signed_by": "did:key:z6MkkidEnEpo6qHMCNSZoNKWtvQvxq3whnaME9wGgEFhq7ur",
|
||||
"updated": "2026-07-21"
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user