revoke admin session when admin is deleted
This commit is contained in:
1 parent
316f83edf2
commit
efe40a4d7d
2 files changed
+8
-1
No files matched your search
@@ -2,6 +2,7 @@ import { type ActionReturnType, actions } from 'astro:actions';
|
|||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
import { actionErrorPopup } from '@util/action.ts';
|
import { actionErrorPopup } from '@util/action.ts';
|
||||||
import { addToWritableArray, deleteFromWritableArray, updateWritableArray } from '@util/state.ts';
|
import { addToWritableArray, deleteFromWritableArray, updateWritableArray } from '@util/state.ts';
|
||||||
|
import { Session } from '@util/session';
|
||||||
|
|
||||||
// types
|
// types
|
||||||
export type Admins = Exclude<ActionReturnType<typeof actions.admin.admins>['data'], undefined>['admins'];
|
export type Admins = Exclude<ActionReturnType<typeof actions.admin.admins>['data'], undefined>['admins'];
|
||||||
@@ -49,4 +50,6 @@ export async function deleteAdmin(admin: Admin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deleteFromWritableArray(admins, (t) => t.id == admin.id);
|
deleteFromWritableArray(admins, (t) => t.id == admin.id);
|
||||||
|
|
||||||
|
Session.revokeForAdminId(admin.id);
|
||||||
}
|
}
|
||||||
+5
-1
@@ -27,7 +27,7 @@ export class Session {
|
|||||||
invalidate(cookies?: AstroCookies) {
|
invalidate(cookies?: AstroCookies) {
|
||||||
for (let i = 0; i < Session.#sessions.length; i++) {
|
for (let i = 0; i < Session.#sessions.length; i++) {
|
||||||
if (Session.#sessions[i] == this) {
|
if (Session.#sessions[i] == this) {
|
||||||
Session.#sessions = Session.#sessions.splice(i, 1);
|
Session.#sessions.splice(i, 1);
|
||||||
if (cookies) cookies.delete(ADMIN_COOKIE, Session.#cookieOptions);
|
if (cookies) cookies.delete(ADMIN_COOKIE, Session.#cookieOptions);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -74,4 +74,8 @@ export class Session {
|
|||||||
|
|
||||||
throw new ActionError({ code: 'UNAUTHORIZED' });
|
throw new ActionError({ code: 'UNAUTHORIZED' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static revokeForAdminId(adminId: number) {
|
||||||
|
Session.#sessions = Session.#sessions.filter((session) => session.adminId != adminId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user