Skip to content

7.3.0-4: admins can delete an account and its pods (#17, slice 1) - #35

Merged
nicolasdb merged 3 commits into
mainfrom
account-admin-delete
Nov 3, 2026
Merged

nicolasdb merged 3 commits into
mainfrom
account-admin-delete

Conversation

@nicolasdb

Copy link
Copy Markdown
Owner

Slice 1 of #17. Decided in solid-kit ADR 012 (accepted in nicolasdb/solid-kit#19, which should merge alongside).

What it adds

  • account-admin/, the image's second component: POST /.account/admin/delete-account/ { "email" }. It deletes the pods' contents through the resource store, each pod root through the data accessor under the write lock, then the account record, which takes its logins, WebID links and client credentials with it. Only logins listed in ADMIN_EMAILS may call it (start/admins.js, written at start like the email sender). An admin cannot delete their own account there.
  • scripts/admin.sh delete-account <email>: signs in, asks for the email again, calls the route, then removes the connector's agents for that account from identities.json (new removeIdentitiesFor, with tests).
  • Smoke, both layouts, with ADMIN_EMAILS set in build and stock-watch. A throwaway account with a pod is refused to a non-admin and to nobody signed in, then deleted by the admin. Its login no longer works, and the same pod name is taken again.

Why the root goes through the accessor (checked in CSS v7.3.0 source)

  • DataAccessorBasedStore.deleteResource refuses a root storage container. With subdomain pods every pod root is one.
  • GeneratedPodManager.createPod answers 409 while anything sits at the base.

For instances

  • Set ADMIN_EMAILS to an email that is already a login on that server. Stock CSS does not verify a login's email, so an unclaimed address listed there makes whoever signs up with it first an admin.
  • An instance that mounts its own instance.json adds one import line (CHANGELOG).

Before a tag: both smoke runs green and their screenshots looked at.

🤖 Generated with Claude Code

nicolasdb and others added 3 commits November 3, 2026 13:41
Stock CSS deletes no account and no pod, so a pod name once taken stayed
taken and test rounds burned names. account-admin/ is the image's second
component (solid-kit ADR 012): POST /.account/admin/delete-account/ deletes
the pods' contents through the resource store, each pod root through the
data accessor under the write lock (the store refuses a root storage and
createPod answers 409 while the root exists), then the account record.

Admins come from ADMIN_EMAILS, written at start by start/admins.js like the
email sender. scripts/admin.sh is the front door and also removes the
connector's agents for the account (removeIdentitiesFor). The smoke run
deletes an account with a pod and takes the same name again, both layouts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… note, handoff

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…are missing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nicolasdb
nicolasdb merged commit 141e17d into main Nov 3, 2026
2 checks passed
@nicolasdb
nicolasdb deleted the account-admin-delete branch November 3, 2026 12:53
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