- docs: record the open identity-forwarding question, auth contracts, and responsibility boundary
9.3 KiB
TODO
-
Open up CSP frame-src from hardcoded domain whitelist to
https:scheme-wide -
Fix relinked file not appearing in FilePond UI: switch to ID-based input lookup
-
Fix student name popover overflowing below viewport: clamp position so popover stays within screen bounds
-
Fix orientation (and other filter) metadata links on TFE page leading to empty search: remove redundant
query=param -
Fix language metadata link using wrong
query=param instead of dedicatedlanguage=filter -
Sort TFE files by display category on public page (note d'intention → TFE → image → video → audio → website → annexes)
-
Fix CSV import: VALUES had 24 ? placeholders but execute array has 23 values → 27 total for 26 columns
-
Surface backup/cleanup cron logs in the admin system log viewer: add
backup+cleanupchannels to SystemController::LOG_FILES (date-in-filename resolution), friendly empty-state for cron channels, and aSauvegardes SQLitefreshness status check in the system status grid -
Add backup watchdog: email xamxam@erg.be (or notify_email) when SQLite backups go stale —
scripts/backup-watchdog.php(read-only, state-file anti-flood) + cron entry + justfile deploy wiring -
Add Nextcloud WebDAV sync: push latest SQLite snapshot to cloud.erg.school
/XAMXAM-BCK(PHP curl, reuses SMTP creds, timestamped + keep 7) —scripts/nextcloud-sync.php+ cron + justfile wiring; extend watchdog to also alert on stale/missing remote copy -
Fix backup retention: replace
find -mtime +N(off-by-one day rounding) with deterministic filename-timestamp pruning; add manualsync=1option tojust deploy-check-backup-log -
Add custom 404 page: render through layout with dedicated not-found.css, register in build, return HTTP 404
-
Remove "Mo" option from duration — keep only minutes and pages
-
Combine pages and minutes as separate fields (both can be set simultaneously)
-
Fix minutes input visibility (can't see what's typed)
-
Add
has_annexescheckbox to form + DB column -
Display duration on admin backoffice recap page
-
Update public TFE page duration display for new combined format
-
Fix
handleAutosaveResponse is not defined— loadautosave-handler.json about_page edit view -
Fix
handleAutosaveResponse is not definedin admin add/edit — function was scoped inside IIFE bundle, not on window -
Fix search result cards: title and author always below image/gradient, remove text overlay on placeholder gradient
-
Change search results to 10 per page with HTMX pagination (no-JS fallback preserved)
-
Bump to 15 results/page, make results area vertically scrollable, sticky pagination at viewport bottom
-
Fix HTMX targetError: move #search-results wrapper inside fragment so it survives outerHTML swaps
-
Add range counter to results header (e.g. "1–15 sur 112 résultats")
-
Collapsible filter controls with
/+ active filter badge on mobile
-
Responsive paginator: hide first/last buttons on mobile, smaller touch targets
-
Compact range counter on mobile: "1–15 / 112" instead of full "1–15 sur 112 résultats"
-
Remove orientation display from search result card meta
-
Add bulk select/delete to tmp cleanup dialog (like admin/index.php pattern)
-
Move cleanup UI from modal to dedicated page (like add.php/edit.php)
-
Replace
with / in cleanup fragments (like contenus.php) -
Standardise test group recipes: lint-php, lint-css, lint-js, test + add fix recipe + make lint pass clean
-
Remove Mot de passe column from acces.php, add key.svg icon button in Actions to copy password to clipboard, reorder actions (URL/password/edit/toggle/archive), switch URL icon to link-simple.svg
-
Fix CC2r: removed hidden seeds (were stale/overriding user input), render initial licence-choice from $formData; Interne want_license unchecked clears CC2r+licence, switching from other modes preserves values; CC2r independent toggle; licence dropdown has no-licence placeholder
-
Dans le formulaire admin, le contact privé ne se sauvegarde pas.
-
Remove "Rendre le contact visible publiquement sur la fiche du TFE" from admin add/edit forms
-
Auto-show contact on public TFE page when contact_visible is filled (no checkbox needed)
-
Fix file size limits: align all layers (JS/FilepondHandler/ThesisFileHandler/validate-fragment) — video/audio 5 GB, default 500 MB, PDF 100 MB; fix JS fileValidateSizeFilter gate bug that rejected AV files >1 GB despite 8 GB per-ext cap
-
Fix: deleting contact groups in apropos form not persisted (no change event after DOM removal, autosave never triggered)
-
Improve h1, h2, h3 size difference in base.css heading scale
-
Rework TFE page desktop layout: two columns 35vw/1fr, left = author/title/meta/synopsis, right = files, media 100% width; columns scroll independently, content fits 100vw; no bottom padding on main; add &scrollbar=0 to PDF iframe URLs
-
'Promoteur·ice ULB' remplacé par 'Promoteur·ice université' (changement juste l'étiquette)
-
PDF viewer: fix page navigation buttons (prev/next) — build toolbar after canvases exist & query canvases fresh in scroll handler
-
PDF viewer: render pages smaller by default (0.85× scale)
-
PDF viewer: add dark transparent violet background behind pages when expanded
-
pdf-viewer: expand to fill right column (not whole page), center pages, freeze column on expand
-
pdf-viewer: fix toolbar width (align-self:stretch), hide sibling file items when expanded
-
Allow admin to export an empty CSV template (headers only) from the import dialog for use as an import model
-
Fix import modal missing FilePond styling: bundling refactor dropped filepond CSS + file-upload-filepond.js wrapper from admin list page (pre-existing regression)
-
Move 'download empty CSV template' button onto the same line as the Fichier CSV heading (button on the right, styled as btn)
-
Rework
parameters.phpadmin page: newIdentifiantssection (shared SMTP/PeerTube/Nextcloud username+password) beforeEmails, Emails section without username/password, test-send button moved outside its fieldset, PeerTube merged into oneParamètres Peertubefieldset with activation checkbox on top and test button aligned with Enregistrer
Enquête: PeerTube auth failed (400) invalid_grant
- [Diagnosed & reproduced] Single LDAP credential (
xamxam@erg.be). Both mail and PeerTube are now onportail.erg.school(LemonLDAP OIDC) SSO — verified: mail.erg.school advertises SMTPXOAUTH2/OAUTHBEARERafter STARTTLS. The difference: mail keptPLAIN/LOGIN(additive migration) so the app'sPLAINauth still works; PeerTube removed thepasswordgrant (hard cutover) sogrant_type=password→invalid_grant. Not fixable with any credential; needs admin to restore password grant, register OIDC client, or (best) set upauthorization_code+refresh_token. Full report in docs/peertube-sso-incident.md. - Built
scripts/creds-test.sh(gum UI) +scripts/creds-probe.php(PHP probe) +just creds-test, + publicPeerTubeService::probeAuth()to isolate auth-vs-channel. Probes SMTP AUTH and PeerTube password grant with the stored creds; logs results (never the password). AddedprobeAuthto PeerTubeService. - Built
scripts/app-token.sh(gum) +just app-tokento test whether a long-lived PeerTube app token (client_credentials grant) is obtainable. Confirmed live:client_credentialsis rejected for the built-in local client (unsupported_grant_type) → an admin must run PeerTube's create-client on the server first. OIDC presence not determinable anonymously. - Add
scripts/sso-diagnose.sh(+just sso-diagnose) to verify every claim in docs/peertube-sso-incident.md — DNS/rDNS, IdP discovery (grant types), PeerTube OAuth/password-grant, SMTP AUTH mechanisms, identity-header propagation — appended tosso-diagnose.log(never logs secrets). Fixed the identity-gap (❓): response headers cannot reveal the post-auth header LemonLDAP injects INTO the request; added a request-side echo probe (--echo <url>+scripts/echo-headers.php) to be hosted behind the same LemonLDAP vhost, plus aserver.REMOTE_USERmirror. - Update docs/peertube-sso-incident.md with the open "❓" (what identity LemonLDAP forwards to PeerTube), the three possible post-migration auth contracts + copy-paste admin ask, an explicit responsibility boundary (no zero-blame), and the new
sso-diagnose.sh/echo-headers.phptools. - Consider decoupling PeerTube credentials from SMTP settings (separate peertube username/password fields in the admin) so mail SSO changes don't silently break uploads
- (Superseded) The earlier
client_credentialsapp-token path is ruled out: idPportail.erg.school(LemonLDAP::NG OIDC) only supportsauthorization_code+refresh_token, nopassword/client_credentials/device flow. Real host isportail.erg.school(not.be). Topology: videos.erg.be (PeerTube, Belgacom ADSL), mail.erg.school (Mailcow), portail.erg.school (LemonLDAP SSO). No self-service OIDC client registration. - Likely code change: PeerTubeService::obtainToken() switch to OIDC
authorization_code+refresh_tokenagainst https://portail.erg.school/oauth2/token — requires admin to register an OIDC client + one-time interactive login to seed a refresh_token.