- 3 Rollen: admin (voll), user (permanent), client (30 Tage Ablauf) - Ordner-basierte Bildzuweisung statt Einzelbilder (user_folders Tabelle) - Root-Bilder oeffentlich, Unterordner nur fuer zugewiesene Nutzer - Passwort-Aenderung fuer alle Nutzer (Self-Service + Admin) - Admin kann beliebige Admins erstellen/loeschen - Thumbnail-Generierung fuer Unterordner - Admin-Dashboard komplett ueberarbeitet Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
const sqlite3 = require('sqlite3').verbose();
|
|
const path = require('path');
|
|
const bcrypt = require('bcryptjs');
|
|
|
|
const dbPath = process.env.DB_PATH || path.join(__dirname, '../data/database.sqlite');
|
|
const db = new sqlite3.Database(dbPath);
|
|
|
|
console.log('Using database at', dbPath);
|
|
|
|
db.serialize(() => {
|
|
// Users: mit created_at fuer Client-Ablauf (30 Tage)
|
|
db.run(`CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT UNIQUE NOT NULL,
|
|
password_hash TEXT NOT NULL,
|
|
role TEXT NOT NULL DEFAULT 'client',
|
|
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
)`);
|
|
|
|
// Migration: created_at hinzufuegen falls Tabelle schon existiert
|
|
db.run(`ALTER TABLE users ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP`, (err) => {
|
|
// Ignoriere Fehler wenn Spalte schon existiert
|
|
});
|
|
|
|
// Ordner-Zuweisung (neu)
|
|
db.run(`CREATE TABLE IF NOT EXISTS user_folders (
|
|
user_id INTEGER,
|
|
folder_name TEXT,
|
|
FOREIGN KEY(user_id) REFERENCES users(id),
|
|
UNIQUE(user_id, folder_name)
|
|
)`);
|
|
|
|
// Alte Tabelle behalten fuer Kompatibilitaet, aber nicht mehr nutzen
|
|
db.run(`CREATE TABLE IF NOT EXISTS user_images (
|
|
user_id INTEGER,
|
|
image_name TEXT,
|
|
FOREIGN KEY(user_id) REFERENCES users(id),
|
|
UNIQUE(user_id, image_name)
|
|
)`);
|
|
|
|
// Default-Admin erstellen wenn keiner existiert
|
|
db.get('SELECT * FROM users WHERE username = ?', ['admin'], (err, row) => {
|
|
if (!row) {
|
|
const hash = bcrypt.hashSync('admin123', 10);
|
|
db.run('INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)', ['admin', hash, 'admin']);
|
|
console.log('Default admin created: admin / admin123');
|
|
}
|
|
});
|
|
});
|
|
|
|
module.exports = db;
|