2026-10-11 18:15:37 +00:00
const $ = ( id ) => document . getElementById ( id );
function status ( text , kind = "" ) {
$ ( "status" ). textContent = text ;
$ ( "status" ). className = kind ;
}
function showConnected ( on ) {
$ ( "now" ). hidden = ! on ;
$ ( "off" ). hidden = ! on ;
}
async function init () {
const cfg = await LabSync . getConfig ();
if ( cfg ) {
$ ( "url" ). value = cfg . url ;
$ ( "user" ). value = cfg . user ;
$ ( "pass" ). value = cfg . pass ;
showConnected ( true );
}
}
async function runSync () {
status ( "> synchronisiere …" );
try {
const r = await LabSync . sync ();
status ( `> OK – ${ r . links } Links abgeglichen.` , "ok" );
} catch ( e ) {
status ( "> FEHLER: " + e . message , "err" );
}
}
$ ( "cfg" ). addEventListener ( "submit" , async ( e ) => {
e . preventDefault ();
const cfg = { url : $ ( "url" ). value . trim (), user : $ ( "user" ). value . trim (), pass : $ ( "pass" ). value };
2026-10-11 18:22:26 +00:00
let check ;
try { check = LabSync . checkServerUrl ( cfg . url ); } catch ( err ) { return status ( "> FEHLER: " + err . message + "." , "err" ); }
const origin = check . origin + "/*" ;
2026-10-11 18:15:37 +00:00
// Muss direkt aus dem Klick heraus aufgerufen werden (Nutzergeste).
const granted = await chrome . permissions . request ({ origins : [ origin ] });
if ( ! granted ) return status ( "> FEHLER: Zugriff auf den Server wurde nicht erlaubt." , "err" );
2026-10-11 18:22:26 +00:00
// Berechtigung für einen früher genutzten, anderen Server wieder entziehen
const old = await LabSync . getConfig ();
if ( old ? . url ) {
try {
const oldOrigin = new URL ( old . url ). origin + "/*" ;
if ( oldOrigin !== origin ) await chrome . permissions . remove ({ origins : [ oldOrigin ] });
} catch {}
}
2026-10-11 18:15:37 +00:00
await LabSync . setConfig ( cfg );
showConnected ( true );
await runSync ();
2026-10-11 18:22:26 +00:00
if ( check . insecure ) status ( $ ( "status" ). textContent + " (Achtung: HTTP ohne Verschlüsselung – Passwort geht im Klartext durchs Netz.)" , $ ( "status" ). className );
2026-10-11 18:15:37 +00:00
});
$ ( "now" ). addEventListener ( "click" , runSync );
$ ( "off" ). addEventListener ( "click" , async () => {
const cfg = await LabSync . getConfig ();
await LabSync . setConfig ( null );
if ( cfg ) {
try { await chrome . permissions . remove ({ origins : [ new URL ( cfg . url ). origin + "/*" ] }); } catch {}
}
for ( const id of [ "url" , "user" , "pass" ]) $ ( id ). value = "" ;
showConnected ( false );
status ( "> Sync getrennt. Lokale Links bleiben erhalten." );
});
init ();