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
+23 -33
View File
@@ -238,7 +238,9 @@
"player": "Player",
"subtitlesAndConfig": "Subtitles & Configuration",
"seekAndTiming": "Seek & Timing",
"behavior": "Behavior"
"behavior": "Behavior",
"companionRemoteServer": "Companion Remote-server",
"companionRemoteServerDescription": "Tillåt mobila enheter i ditt nätverk att styra denna app"
},
"search": {
"hint": "Sök filmer, serier, musik...",
@@ -778,47 +780,35 @@
"controlDesktop": "Styr en datorenhet",
"connectedTo": "Ansluten till ${name}",
"session": {
"creatingSession": "Skapar fjärrsession...",
"failedToCreate": "Kunde inte skapa fjärrsession:",
"noSession": "Ingen session tillgänglig",
"scanQrCode": "Skanna QR-kod",
"orEnterManually": "Eller ange manuellt",
"startingServer": "Startar fjärrserver...",
"failedToCreate": "Kunde inte starta fjärrserver:",
"hostAddress": "Värdadress",
"sessionId": "Sessions-ID",
"pin": "PIN",
"connected": "Ansluten",
"waitingForConnection": "Väntar på anslutning...",
"serverRunning": "Fjärrserver aktiv",
"serverStopped": "Fjärrserver stoppad",
"serverRunningDescription": "Mobila enheter i ditt nätverk kan upptäcka och ansluta till denna app",
"serverStoppedDescription": "Starta servern för att tillåta mobila enheter att ansluta",
"usePhoneToControl": "Använd din mobila enhet för att styra denna app",
"copiedToClipboard": "${label} kopierad till urklipp",
"copyToClipboard": "Kopiera till urklipp",
"newSession": "Ny session",
"startServer": "Starta server",
"stopServer": "Stoppa server",
"minimize": "Minimera"
},
"pairing": {
"scan": "Skanna",
"manual": "Manuell",
"pairWithDesktop": "Parkoppla med dator",
"enterSessionDetails": "Ange sessionsuppgifterna som visas på din datorenhet",
"pairWithDesktop": "Anslut till dator",
"discoveryDescription": "Enheter i ditt nätverk som kör Plezy med samma Plex-konto visas automatiskt",
"hostAddressHint": "192.168.1.100:48632",
"sessionIdHint": "Ange 8-teckens sessions-ID",
"pinHint": "Ange 6-siffrig PIN",
"connecting": "Ansluter...",
"tips": "Tips",
"tipDesktop": "Öppna Plezy på din dator och aktivera Companion Remote via inställningar eller meny",
"tipScan": "Använd fliken Skanna för att snabbt parkoppla genom att skanna QR-koden på din dator",
"tipWifi": "Se till att båda enheterna är på samma WiFi-nätverk",
"cameraPermissionRequired": "Kamerabehörighet krävs för att skanna QR-koder.\nVänligen ge kameraåtkomst i enhetsinställningarna.",
"cameraError": "Kunde inte starta kameran: ${error}",
"scanInstruction": "Rikta kameran mot QR-koden som visas på din dator",
"invalidQrCode": "Ogiltigt QR-kodformat",
"validationHostRequired": "Ange en värdadress",
"searchingForDevices": "Söker efter enheter...",
"noDevicesFound": "Inga enheter hittades i ditt nätverk",
"noDevicesHint": "Se till att Plezy är öppet på din dator och att båda enheterna är på samma WiFi-nätverk",
"availableDevices": "Tillgängliga enheter",
"manualConnection": "Manuell anslutning",
"cryptoInitFailed": "Kunde inte initiera säker anslutning. Se till att du är inloggad på ett Plex-konto.",
"validationHostRequired": "Ange värdadress",
"validationHostFormat": "Format måste vara IP:port (t.ex. 192.168.1.100:48632)",
"validationSessionIdRequired": "Ange ett sessions-ID",
"validationSessionIdLength": "Sessions-ID måste vara 8 tecken",
"validationPinRequired": "Ange en PIN",
"validationPinLength": "PIN måste vara 6 siffror",
"connectionTimedOut": "Anslutningen tog för lång tid. Kontrollera sessions-ID och PIN.",
"sessionNotFound": "Kunde inte hitta sessionen. Kontrollera dina uppgifter.",
"connectionTimedOut": "Anslutningen tog för lång tid. Se till att båda enheterna är på samma nätverk.",
"sessionNotFound": "Kunde inte hitta enheten. Se till att Plezy körs på värden.",
"authFailed": "Autentisering misslyckades. Se till att båda enheterna använder samma Plex-konto.",
"failedToConnect": "Kunde inte ansluta: ${error}"
},
"remote": {