Summary
After #412, the admin ghost-account delete refuses any account that is not a ghost. So there is no route that deletes an active account when its owner asks for that under the privacy promise. An operator must do it by hand today.
Fix
- Add an admin route, for example
DELETE /api/admin/users/:id, behind the existing admin guard. Validate :id as a uuid.
- Export
softDeleteUsers and call it for that one id.
- Refuse an admin. Revoke admin access first through
public.admin_revoke_admin.
- Add the route to the OpenAPI admin paths and to
apps/hocuspocus.server/API.md.
Acceptance
Summary
After #412, the admin ghost-account delete refuses any account that is not a ghost. So there is no route that deletes an active account when its owner asks for that under the privacy promise. An operator must do it by hand today.
softDeleteUsersinapps/hocuspocus.server/src/api/services/adminGhostAccounts.service.ts. Both existing soft-delete paths call it.deleted_at, nullfull_name,avatar_urlandavatar_updated_at, setprofile_datato{}, setusernametodeleted_plus 12 hex characters of the id, remove the{id}/objects inuser_avatars, and ban the user.Fix
DELETE /api/admin/users/:id, behind the existing admin guard. Validate:idas a uuid.softDeleteUsersand call it for that one id.public.admin_revoke_admin.apps/hocuspocus.server/API.md.Acceptance