diff --git a/app/api/beos/route.ts b/app/api/beos/route.ts index 47bc659..c53e250 100644 --- a/app/api/beos/route.ts +++ b/app/api/beos/route.ts @@ -3,7 +3,9 @@ import { query } from '@/lib/db'; export async function GET() { try { - const rows = await query('SELECT ID, Kuerzel, Name FROM beos ORDER BY Name ASC'); + const rows = await query( + 'SELECT id AS ID, `kürzel` AS Kuerzel, CONCAT(IFNULL(vorname, \'\'), IF(vorname IS NOT NULL, \' \', \'\'), name) AS Name FROM beos WHERE `kürzel` IS NOT NULL ORDER BY name ASC' + ) as { ID: number; Kuerzel: string; Name: string }[]; return NextResponse.json(rows); } catch (error) { console.error('GET /api/beos:', error); diff --git a/app/change-password/actions.ts b/app/change-password/actions.ts index a598025..f0122ad 100644 --- a/app/change-password/actions.ts +++ b/app/change-password/actions.ts @@ -25,7 +25,7 @@ export async function changePassword( const hashed = await hashPassword(newPassword); await query( - 'UPDATE beos SET Passwort = ?, MustChangePassword = 0 WHERE ID = ?', + 'UPDATE beos SET pw = ?, MustChangePassword = 0 WHERE id = ?', [hashed, session.beoId] ); diff --git a/app/login/actions.ts b/app/login/actions.ts index 2d126be..daf27d4 100644 --- a/app/login/actions.ts +++ b/app/login/actions.ts @@ -1,7 +1,7 @@ 'use server'; import { redirect } from 'next/navigation'; -import { verifyCredentials } from '@/lib/auth'; +import { verifyCredentials, getBeoDisplayName } from '@/lib/auth'; import { createSession } from '@/lib/session'; export async function login( @@ -22,14 +22,14 @@ export async function login( } await createSession({ - kuerzel: result.beo.Kuerzel, - beoId: result.beo.ID, - beoName: result.beo.Name, + kuerzel: result.beo.kürzel ?? kuerzel, + beoId: result.beo.id, + beoName: getBeoDisplayName(result.beo), mustChangePassword: result.beo.MustChangePassword === 1, isAuthenticated: true, }); - if (result.beo.MustChangePassword === 1) { + if (result.beo.MustChangePassword === 1 || !result.beo.pw) { redirect('/change-password'); } diff --git a/create_table.sql b/create_table.sql index 376122d..22cb55d 100644 --- a/create_table.sql +++ b/create_table.sql @@ -1,11 +1,5 @@ -CREATE TABLE beos ( - ID INT AUTO_INCREMENT PRIMARY KEY, - Kuerzel VARCHAR(10) NOT NULL UNIQUE, - Name VARCHAR(100) NOT NULL, - Passwort VARCHAR(255), - MustChangePassword TINYINT(1) DEFAULT 1, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); +-- Datenbank: sternwarte +-- Die Tabelle 'beos' ist bereits vorhanden und wird hier nicht neu angelegt. CREATE TABLE objekte ( ID INT AUTO_INCREMENT PRIMARY KEY, @@ -27,7 +21,7 @@ CREATE TABLE logbuch ( WetterDruck DECIMAL(7,1), created_by INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (created_by) REFERENCES beos(ID) + FOREIGN KEY (created_by) REFERENCES beos(id) ); CREATE TABLE logbuch_beos ( @@ -35,7 +29,7 @@ CREATE TABLE logbuch_beos ( LogbuchID INT NOT NULL, BeoID INT NOT NULL, FOREIGN KEY (LogbuchID) REFERENCES logbuch(ID) ON DELETE CASCADE, - FOREIGN KEY (BeoID) REFERENCES beos(ID) + FOREIGN KEY (BeoID) REFERENCES beos(id) ); CREATE TABLE logbuch_objekte ( diff --git a/lib/auth.ts b/lib/auth.ts index 9aeb903..ba0334a 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -2,16 +2,17 @@ import bcrypt from 'bcryptjs'; import { query } from './db'; export interface Beo { - ID: number; - Kuerzel: string; - Name: string; - Passwort: string | null; + id: number; + name: string; + vorname: string | null; + kürzel: string | null; + pw: string | null; MustChangePassword: number; } export async function getBeoByKuerzel(kuerzel: string): Promise { const rows = await query( - 'SELECT ID, Kuerzel, Name, Passwort, MustChangePassword FROM beos WHERE Kuerzel = ?', + 'SELECT id, name, vorname, `kürzel`, pw, MustChangePassword FROM beos WHERE `kürzel` = ?', [kuerzel] ) as Beo[]; return rows[0] ?? null; @@ -24,15 +25,19 @@ export async function verifyCredentials( const beo = await getBeoByKuerzel(kuerzel); if (!beo) return null; - if (!beo.Passwort) { + if (!beo.pw) { const valid = password === 'logbuch123'; return { beo, valid }; } - const valid = await bcrypt.compare(password, beo.Passwort); + const valid = await bcrypt.compare(password, beo.pw); return { beo, valid }; } export async function hashPassword(password: string): Promise { return bcrypt.hash(password, 10); } + +export function getBeoDisplayName(beo: Beo): string { + return beo.vorname ? `${beo.vorname} ${beo.name}` : beo.name; +}