mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
feat(admin): GitHub OAuth login, admin whitelist and Nuxt WebUI
Add an admin WebUI (Nuxt static SPA in admin/, served via the ASSETS binding) for managing routes and viewing send logs. Access is gated by GitHub OAuth plus an ADMIN_USER_IDS whitelist with cookie sessions (admin-session.ts). Expose routes/logs CRUD API (admin-routes.ts), add a discord-link mapping in token-store.ts, and mount admin routes with an SPA assets fallback in the server.
This commit is contained in:
parent
cfdf37e273
commit
407514f3c9
20 changed files with 3242 additions and 13 deletions
23
admin/composables/useToasts.ts
Normal file
23
admin/composables/useToasts.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
export interface Toast {
|
||||
id: number;
|
||||
msg: string;
|
||||
kind: "ok" | "bad";
|
||||
}
|
||||
|
||||
export function useToasts() {
|
||||
const toasts = useState<Toast[]>("app-toasts", () => []);
|
||||
|
||||
function push(msg: string, kind: "ok" | "bad" = "ok"): void {
|
||||
const id = Date.now() + Math.floor(Math.random() * 1000);
|
||||
toasts.value.push({ id, msg, kind });
|
||||
setTimeout(() => {
|
||||
toasts.value = toasts.value.filter((t) => t.id !== id);
|
||||
}, 2600);
|
||||
}
|
||||
|
||||
function dismiss(id: number): void {
|
||||
toasts.value = toasts.value.filter((t) => t.id !== id);
|
||||
}
|
||||
|
||||
return { toasts, push, dismiss };
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue