Files
logbuch/app/admin/actions.ts
T

49 lines
1.3 KiB
TypeScript

'use server';
import { redirect } from 'next/navigation';
import { getSession } from '@/lib/session';
import { query } from '@/lib/db';
export interface BeoUser {
id: number;
kürzel: string | null;
name: string;
vorname: string | null;
pw: string | null;
role: string | null;
}
export async function listUsers(): Promise<BeoUser[]> {
const session = await getSession();
if (!session || !session.role?.includes('admin')) redirect('/');
const rows = await query(
'SELECT id, `kürzel`, name, vorname, pw, role FROM beos ORDER BY name, vorname',
[]
) as BeoUser[];
return rows;
}
export async function resetPassword(
_prevState: { error?: string; success?: string } | undefined,
formData: FormData
): Promise<{ error?: string; success?: string }> {
const session = await getSession();
if (!session || !session.role?.includes('admin')) {
return { error: 'Keine Berechtigung.' };
}
const idRaw = formData.get('id');
const id = Number(idRaw);
if (!id || isNaN(id)) {
return { error: 'Ungültige Benutzer-ID.' };
}
await query(
'UPDATE beos SET pw = NULL, MustChangePassword = 1 WHERE id = ?',
[id]
);
return { success: 'Passwort wurde zurückgesetzt. Der Benutzer muss sich mit dem Standard-Passwort anmelden und es dann ändern.' };
}