feat: replace QR remote pairing with encrypted LAN discovery

Replace session ID + PIN auth with HKDF-derived home secret and
per-session AES-256-GCM encrypted channel. Auto-start remote server
on host devices, auto-discover hosts via authenticated UDP broadcast.
This commit is contained in:
edde746
2026-04-14 12:33:40 +02:00
parent a55650bc40
commit d093023ce7
44 changed files with 2799 additions and 2390 deletions
+25 -35
View File
@@ -238,7 +238,9 @@
"player": "Player",
"subtitlesAndConfig": "Subtitles & Configuration",
"seekAndTiming": "Seek & Timing",
"behavior": "Behavior"
"behavior": "Behavior",
"companionRemoteServer": "Companion Remote-server",
"companionRemoteServerDescription": "Tillat mobilenheter på nettverket ditt å styre denne appen"
},
"search": {
"hint": "Søk i filmer, serier, musikk...",
@@ -778,47 +780,35 @@
"controlDesktop": "Kontroller en stasjonær enhet",
"connectedTo": "Tilkoblet ${name}",
"session": {
"creatingSession": "Oppretter fjernøkt...",
"failedToCreate": "Kunne ikke opprette fjernøkt:",
"noSession": "Ingen økt tilgjengelig",
"scanQrCode": "Skann QR-kode",
"orEnterManually": "Eller skriv inn manuelt",
"startingServer": "Starter fjernserver...",
"failedToCreate": "Kunne ikke starte fjernserver:",
"hostAddress": "Vertsadresse",
"sessionId": "Økt-ID",
"pin": "PIN",
"connected": "Tilkoblet",
"waitingForConnection": "Venter på tilkobling...",
"usePhoneToControl": "Bruk mobilenheten din til å kontrollere denne appen",
"copiedToClipboard": "${label} kopiert til utklippstavle",
"copyToClipboard": "Kopier til utklippstavle",
"newSession": "Ny økt",
"serverRunning": "Fjernserver aktiv",
"serverStopped": "Fjernserver stoppet",
"serverRunningDescription": "Mobilenheter på nettverket ditt kan oppdage og koble til denne appen",
"serverStoppedDescription": "Start serveren for å la mobilenheter koble til",
"usePhoneToControl": "Bruk mobilenheten din til å styre denne appen",
"startServer": "Start server",
"stopServer": "Stopp server",
"minimize": "Minimer"
},
"pairing": {
"scan": "Skann",
"manual": "Manuell",
"pairWithDesktop": "Koble til stasjonær",
"enterSessionDetails": "Skriv inn øktdetaljene som vises på den stasjonære enheten din",
"pairWithDesktop": "Koble til datamaskin",
"discoveryDescription": "Enheter på nettverket ditt som kjører Plezy med samme Plex-konto vil vises automatisk",
"hostAddressHint": "192.168.1.100:48632",
"sessionIdHint": "Skriv inn 8-tegns økt-ID",
"pinHint": "Skriv inn 6-sifret PIN",
"connecting": "Kobler til...",
"tips": "Tips",
"tipDesktop": "Åpne Plezy på datamaskinen din og aktiver Følgesvenn-fjernkontroll fra innstillinger eller meny",
"tipScan": "Bruk Skann-fanen for å raskt koble til ved å skanne QR-koden på datamaskinen din",
"tipWifi": "Sørg for at begge enhetene er på samme WiFi-nettverk",
"cameraPermissionRequired": "Kameratillatelse kreves for å skanne QR-koder.\nVennligst gi kameratilgang i enhetsinnstillingene.",
"cameraError": "Kunne ikke starte kamera: ${error}",
"scanInstruction": "Pek kameraet mot QR-koden som vises på datamaskinen din",
"invalidQrCode": "Ugyldig QR-kodeformat",
"validationHostRequired": "Vennligst skriv inn vertsadresse",
"validationHostFormat": "Formatet må være IP:port (f.eks. 192.168.1.100:48632)",
"validationSessionIdRequired": "Vennligst skriv inn en økt-ID",
"validationSessionIdLength": "Økt-ID må være 8 tegn",
"validationPinRequired": "Vennligst skriv inn en PIN",
"validationPinLength": "PIN må være 6 sifre",
"connectionTimedOut": "Tilkoblingen ble tidsavbrutt. Sjekk økt-ID og PIN.",
"sessionNotFound": "Kunne ikke finne økten. Sjekk legitimasjonen din.",
"searchingForDevices": "Søker etter enheter...",
"noDevicesFound": "Ingen enheter funnet på nettverket ditt",
"noDevicesHint": "Sørg for at Plezy er åpen på datamaskinen din og at begge enhetene er på samme WiFi-nettverk",
"availableDevices": "Tilgjengelige enheter",
"manualConnection": "Manuell tilkobling",
"cryptoInitFailed": "Kunne ikke initialisere sikker tilkobling. Sørg for at du er logget inn på en Plex-konto.",
"validationHostRequired": "Vennligst oppgi vertsadresse",
"validationHostFormat": "Format må være IP:port (f.eks. 192.168.1.100:48632)",
"connectionTimedOut": "Tilkoblingen ble tidsavbrutt. Sørg for at begge enhetene er på samme nettverk.",
"sessionNotFound": "Kunne ikke finne enheten. Sørg for at Plezy kjører på verten.",
"authFailed": "Autentisering mislyktes. Sørg for at begge enhetene bruker samme Plex-konto.",
"failedToConnect": "Kunne ikke koble til: ${error}"
},
"remote": {