#!/usr/bin/env python3 """Initialisiert die SQLite-Datenbank für den PoE Manager.""" import os import sqlite3 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DB_PATH = os.environ.get("POE_DB_PATH", os.path.join(BASE_DIR, "sqlite.db")) conn = sqlite3.connect(DB_PATH) c = conn.cursor() # Switches (Aruba-Switche mit SSH-Zugangsdaten; Passwort wird verschlüsselt gespeichert) c.execute(""" CREATE TABLE IF NOT EXISTS switches ( hostname TEXT PRIMARY KEY, ip TEXT NOT NULL, username TEXT NOT NULL, password TEXT NOT NULL ); """) # Devices c.execute(""" CREATE TABLE IF NOT EXISTS devices ( mac TEXT PRIMARY KEY, rpi_ip TEXT NOT NULL, switch_hostname TEXT, port TEXT, name TEXT NOT NULL, is_active INTEGER DEFAULT 1, FOREIGN KEY (switch_hostname) REFERENCES switches(hostname) ); """) # Benutzer c.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, is_admin INTEGER DEFAULT 0 ); """) # Gruppen (Rechtesystem) — Admins besitzen ohnehin alle Rechte; Gruppen # dienen dazu, normalen Benutzern gezielt einzelne Verwaltungsrechte für # Devices/Switches zu geben, ohne sie zu Admins zu machen. c.execute(""" CREATE TABLE IF NOT EXISTS groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL ); """) # Welche Berechtigungen eine Gruppe gewährt (siehe app.py: PERMISSIONS) c.execute(""" CREATE TABLE IF NOT EXISTS group_permissions ( group_id INTEGER NOT NULL, permission TEXT NOT NULL, PRIMARY KEY (group_id, permission), FOREIGN KEY (group_id) REFERENCES groups(id) ); """) # Gruppenmitgliedschaft (ein Benutzer kann in mehreren Gruppen sein; # effektive Rechte = Vereinigung aller Gruppen) c.execute(""" CREATE TABLE IF NOT EXISTS user_groups ( user_id INTEGER NOT NULL, group_id INTEGER NOT NULL, PRIMARY KEY (user_id, group_id), FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (group_id) REFERENCES groups(id) ); """) # Settings (z.B. Prüfintervall) c.execute(""" CREATE TABLE IF NOT EXISTS settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL ); """) # Standard-Setting: Prüfintervall 5 Minuten (interval = Minuten, check_interval = Sekunden) c.execute("INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)", ("interval", "5")) c.execute("INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)", ("check_interval", "300")) conn.commit() conn.close() print(f"Datenbank '{DB_PATH}' wurde initialisiert inklusive Settings.")