Skip to content

fix(identity): stop pointing members and operators at the portal being retired - #413

Merged
PBernaerts merged 1 commit into
mainfrom
fix/6f-pre-wizarr-authelia
Aug 21, 2026
Merged

fix(identity): stop pointing members and operators at the portal being retired#413
PBernaerts merged 1 commit into
mainfrom
fix/6f-pre-wizarr-authelia

Conversation

@PBernaerts

Copy link
Copy Markdown
Owner

Rebrand task 6f-pre, the blocker that has to land before 6f deletes Authelia.

Why this exists

Wizarr's wizard steps and invite copy live in its SQLite database, not in this
repo
, so CI checks none of it and the 6f sweep would have missed it entirely.
Deleting Authelia with these in place breaks the join path for every new member.

What the sweep found

The database was swept column by column (skipping credential-bearing columns)
and is now clean: zero rows anywhere name the old portal.

Row Reachable? Problem
step 41 "Je login" yes, in the Dutch bundle both open invites serve button pointed at Authelia's reset form, and the mail subject was wrong
steps 28, 35 no, in no bundle named the old portal
bundle 1 description admin-facing said "the shared Authelia login"

The button now points at authentik's public recovery flow, verified
reachable unauthenticated from outside Cloudflare and serving
ak-stage-identification under its Dutch title. This is not a hostname swap:
Authelia's /reset-password/step1 has no counterpart, the flow is the form.

The second fault was not part of this task and was already hurting members.
Step 41 told them to look for a mail with the subject "Corsarium: Reset your
password"
. authentik has not sent that since the branded Dutch mail landed at
6m; it sends "Stel het wachtwoord van je Corsarium-account in". Every member
who joined in between was sent hunting for a subject line that did not exist
while the real mail sat unread in front of them. Nothing measured this, which is
worth noting given the whole point of the 6f evidence gate.

Code, not database

scripts/lldap-sync-members.py had the same stale path baked into its "New
member never got their login mail" alert. That one is the nastiest of the set:
it fires exactly when somebody already has an account they cannot sign in to,
and after 6f it would have handed the operator a 404 at that precise moment.

The URL now resolves through recovery_page_url(), which follows wherever the
mail actually comes from: authentik's recovery flow once the portal variable is
set, Authelia's form while it is not, "the portal" if neither is. So 6f needs
no code change on the day
.

Also checked, clean

  • wizarr-nl-overrides.sh, wizarr-base-template.sh and nl/overrides.json
    contain no reference to the old portal.
  • Only Plex is attached to any invite, so nothing else has quietly gone SSO
    and been left asking members for a password, the way Kavita did on 08-21.

Verification

  • Database backed up first via SQLite's backup API (a file copy of a live DB can
    tear), written in one transaction, then read back from inside the container
    rather than trusted from the timestamp. Wizarr healthy throughout, ownership
    re-asserted to uid 99.
  • Gotcha recorded in the doc: a SQLite write there leaves mtime untouched while
    ctime moves
    . restic keys on ctime so backups still catch it, but mtime is not
    a valid check that an edit landed.
  • 3 new regression checks on recovery_page_url(), confirmed to fail when
    the fix is reverted. Suite 74 to 77.
  • tests/run.sh green, zero failing suites.

Merge notes

Deploy: none required for the database half, which is already live on the
server. The script change ships with the next converge.

…g retired

Wizarr's wizard steps live in its SQLite database, not in this repo, so CI
checks none of them and the 6f sweep would have deleted Authelia with the
member-facing join path still aimed at it.

The known problem was step 41's "Nieuwe mail aanvragen" button, which sent a
member who missed their welcome mail to Authelia's reset form. It now points at
authentik's public recovery flow, verified reachable unauthenticated and
serving its identification stage. Two dead English steps and the bundle
description named the old portal too and were corrected rather than left for
the 6f sweep to rediscover. The database is now clean: no row anywhere names
the old portal.

The sweep turned up a second fault in step 41 that had nothing to do with 6f
and was hurting members already. It told them to look in their inbox for a mail
with the subject "Corsarium: Reset your password". authentik has not sent that
subject since the branded Dutch mail landed; it sends "Stel het wachtwoord van
je Corsarium-account in". Every member who joined in between was told to hunt
for a subject line that did not exist while the real mail sat unread.

lldap-sync-members.py had the same stale path baked into its "never got their
login mail" alert. That one is worse than it looks, because the alert fires
precisely when somebody already has an account they cannot sign in to, and
after 6f it would have handed the operator a 404 at that moment. The URL now
resolves through recovery_page_url(), which follows wherever the mail actually
comes from, so 6f needs no code change on the day.

Only Plex is attached to any invite, so nothing else has quietly gone SSO the
way Kavita did.
@PBernaerts
PBernaerts merged commit c4f2106 into main Aug 21, 2026
9 checks passed
PBernaerts added a commit that referenced this pull request Aug 21, 2026
#412 landed the 6f evidence records for items 2, 3 and 7 while this branch was
open, and #413 landed the 6f-pre sweep, so both sides had touched the same two
regions.

Status table: each side owned one row, so both were kept. 6e is DONE per this
branch, 6f-pre is DONE per #413.

Evidence section: kept main's "Three things the 2026-08-21 run turned up" and
dropped this branch's progress table, which had gone stale. It still listed
items 1 and 5 as owed and both were proven by #411, and items 2, 3 and 7 are now
recorded properly by #412, so the table would have contradicted the section
directly above it.

Kept the two traps this branch found, because neither is anywhere else: item 5
splitting into a cheap delivery half and an expensive trigger half, and item 3
being easy to fake with a LAN client that never touches Caddy at all.
@PBernaerts
PBernaerts deleted the fix/6f-pre-wizarr-authelia branch August 21, 2026 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant