Separate login and display identities

This commit is contained in:
JB
2026-07-24 23:45:08 -04:00
parent 05acc022c7
commit c0834804d4
13 changed files with 182 additions and 46 deletions
+10 -4
View File
@@ -8,8 +8,9 @@ export async function softDeleteAccount(
reason: string | null
): Promise<boolean> {
const user = await (await database.prepare(`
SELECT users.username,deleted_accounts.deleted_at
FROM users LEFT JOIN deleted_accounts ON deleted_accounts.user_id=users.id
SELECT users.username,user_profiles.display_name,deleted_accounts.deleted_at
FROM users LEFT JOIN user_profiles ON user_profiles.user_id=users.id
LEFT JOIN deleted_accounts ON deleted_accounts.user_id=users.id
WHERE users.id=?
`)).get(userId);
if (!user || user.deleted_at) return false;
@@ -22,8 +23,13 @@ export async function softDeleteAccount(
await (await database.prepare(
`UPDATE users SET username=?,password_hash=NULL,discord_id=NULL,role='user' WHERE id=?`
)).run(deletedUsername, userId);
await (await database.prepare(
`INSERT INTO user_profiles(user_id,display_name,updated_at) VALUES(?,?,?)
ON CONFLICT(user_id) DO UPDATE SET display_name=excluded.display_name,updated_at=excluded.updated_at`
)).run(userId, 'Deleted Agent', now);
await (await database.prepare('DELETE FROM sessions WHERE user_id=?')).run(userId);
await (await database.prepare('DELETE FROM oauth_states WHERE user_id=?')).run(userId);
await (await database.prepare('DELETE FROM discord_profiles WHERE user_id=?')).run(userId);
await (await database.prepare('DELETE FROM user_roles WHERE user_id=?')).run(userId);
await (await database.prepare('DELETE FROM user_permissions WHERE user_id=?')).run(userId);
await (await database.prepare(
@@ -34,8 +40,8 @@ export async function softDeleteAccount(
'user',
userId,
'account.soft_deleted',
JSON.stringify({ username: user.username }),
JSON.stringify({ username: deletedUsername, reason }),
JSON.stringify({ username: user.username, displayName: user.display_name }),
JSON.stringify({ username: deletedUsername, displayName: 'Deleted Agent', reason }),
now
);
return true;