feat(account): deletion orchestration + step-up + gateway edge
Step-up: email accounts confirm with a mailed code (purpose=delete, no deeplink —
ConfirmByToken refuses a delete token so a stray click can't delete); platform-only
accounts type a fixed phrase (anti-impulse). Endpoints /user/delete/{request,confirm};
the confirm orchestration resigns active games, drops all-robot games, tombstones +
anonymizes the account (freeing its creds), and revokes its sessions — the tombstone is
the point of no return, the rest best-effort. Gateway account.delete.{request,confirm}
ops + fbs AccountDeleteConfirm/AccountDeleteRequestResult + branded ru/en delete email.
Integration tests cover the step-up (code + no-email) and the orchestration pieces.
This commit is contained in:
@@ -507,6 +507,19 @@ table LinkUnlinkRequest {
|
||||
kind:string;
|
||||
}
|
||||
|
||||
// AccountDeleteConfirm carries the account-deletion step-up proof: a mailed code (email
|
||||
// accounts) or the typed phrase (platform-only accounts).
|
||||
table AccountDeleteConfirm {
|
||||
code:string;
|
||||
phrase:string;
|
||||
}
|
||||
|
||||
// AccountDeleteRequestResult reports which deletion step-up the account uses: "email"
|
||||
// (a code was mailed) or "phrase" (type the confirmation phrase).
|
||||
table AccountDeleteRequestResult {
|
||||
method:string;
|
||||
}
|
||||
|
||||
// LinkResult is the unified result of a confirm or merge step. status is "linked"
|
||||
// (bound to the caller), "merge_required" (the identity belongs to another account —
|
||||
// the secondary_* fields summarise it for the irreversible confirmation), or
|
||||
|
||||
Reference in New Issue
Block a user