diff --git a/static/dashboard/CHANGELOG.md b/static/dashboard/CHANGELOG.md index eeb851698..e978f8e1d 100644 --- a/static/dashboard/CHANGELOG.md +++ b/static/dashboard/CHANGELOG.md @@ -4,6 +4,7 @@ One line per version, newest first. Every REST-facing change bumps the version i (the app surfaces it via `/system/dashboard/update-check` and the "Update available" pill), so this file is the human record of what each bump enables. Keep entries short: `version - change (TICKET)`. +- **1.1.4** - Calibre-Web auto-login: send Flask-Login `remember_me` so the session includes a persistent `remember_token`, which sticks in the WebView despite anonymous/guest browsing. (ADFA-5043) - **1.1.3** - `/auth/:service/session`: server-side login returning the session cookie, for WebView auto-login as box admin (Calibre-Web / Kolibri). (ADFA-5043) - **1.1.2** - ZIM download URL built from the project subdir (`/zim//`), so non-Wikipedia ZIMs download instead of 404ing. Pairs with the app sending `/`. (ADFA-5042) - **1.1.1** - `/system/dashboard/update-check`: reports installed vs. latest so the card can show "Up to date / Update available". (ADFA-5026) diff --git a/static/dashboard/package-lock.json b/static/dashboard/package-lock.json index 41f72b1c7..a2faec056 100644 --- a/static/dashboard/package-lock.json +++ b/static/dashboard/package-lock.json @@ -1,12 +1,12 @@ { "name": "dashboard-console", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "dashboard-console", - "version": "1.1.3", + "version": "1.1.4", "license": "ISC", "dependencies": { "better-sqlite3": "^12.8.0", diff --git a/static/dashboard/package.json b/static/dashboard/package.json index a9681c30e..ec8ab7041 100644 --- a/static/dashboard/package.json +++ b/static/dashboard/package.json @@ -1,6 +1,6 @@ { "name": "dashboard-console", - "version": "1.1.3", + "version": "1.1.4", "description": "", "main": "index.js", "scripts": { diff --git a/static/dashboard/sockets/books.query.ts b/static/dashboard/sockets/books.query.ts index b128b3081..2bcaed9ff 100644 --- a/static/dashboard/sockets/books.query.ts +++ b/static/dashboard/sockets/books.query.ts @@ -120,6 +120,10 @@ export async function getCalibreSession(): Promise<{ cookie: string; csrfToken: const cred = getCredential('calibre'); loginData.append('username', cred.username); loginData.append('password', cred.password); + // ADFA-5043: request Flask-Login's persistent "remember me" so the response also sets a + // `remember_token` cookie. Calibre-Web allows anonymous (guest) browsing, so the session cookie + // alone doesn't stick in the WebView; the remember_token re-authenticates as admin reliably. + loginData.append('remember_me', 'on'); const authRes = await fetch(`${CALIBRE_WEB_LOCAL_URL}/login`, { method: 'POST',