diff --git a/.gitignore b/.gitignore index d6fa901..af73b91 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ __pycache__/ data/ instance/ +.cloudron-push.env +.env.local +.env.push.local diff --git a/PUSH_SETUP.md b/PUSH_SETUP.md new file mode 100644 index 0000000..6d5fe4c --- /dev/null +++ b/PUSH_SETUP.md @@ -0,0 +1,41 @@ +# Push-Setup für Nouri + +## 1. VAPID-Schlüssel erzeugen + +```bash +. .venv/bin/activate +python scripts/generate_vapid_keys.py +``` + +Das Script gibt drei Zeilen aus: + +- `NOURI_VAPID_PUBLIC_KEY` +- `NOURI_VAPID_PRIVATE_KEY` +- `NOURI_VAPID_SUBJECT` + +## 2. In Cloudron eintragen + +In der bestehenden Nouri-App unter `Settings` → `Environment Variables` diese drei Werte anlegen: + +```text +NOURI_VAPID_PUBLIC_KEY=... +NOURI_VAPID_PRIVATE_KEY=... +NOURI_VAPID_SUBJECT=mailto:mail@hnz.io +``` + +Danach die App neu starten. + +## 3. Auf dem iPhone aktivieren + +1. `nouri.heinz.media` in Safari öffnen +2. `Teilen` → `Zum Home-Bildschirm` +3. die installierte Web-App öffnen +4. in Nouri `Optionen` öffnen +5. `Push erlauben` tippen +6. danach optional `Test-Mitteilung senden` + +## 4. Bereits vorbereitete lokale Datei + +Wenn lokal bereits eine Datei `.cloudron-push.env` liegt, kannst du deren Werte direkt nach Cloudron übernehmen. + +Die Datei ist absichtlich in `.gitignore`, damit keine geheimen Schlüssel committed werden. diff --git a/scripts/generate_vapid_keys.py b/scripts/generate_vapid_keys.py new file mode 100644 index 0000000..22d483d --- /dev/null +++ b/scripts/generate_vapid_keys.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +from py_vapid import Vapid01, b64urlencode +from cryptography.hazmat.primitives import serialization + + +def main() -> None: + vapid = Vapid01() + vapid.generate_keys() + + public_key = b64urlencode( + vapid.public_key.public_bytes( + encoding=serialization.Encoding.X962, + format=serialization.PublicFormat.UncompressedPoint, + ) + ) + private_value = vapid.private_key.private_numbers().private_value + private_key = b64urlencode(private_value.to_bytes(32, "big")) + + print(f"NOURI_VAPID_PUBLIC_KEY={public_key}") + print(f"NOURI_VAPID_PRIVATE_KEY={private_key}") + print("NOURI_VAPID_SUBJECT=mailto:mail@hnz.io") + + +if __name__ == "__main__": + main()