-- +goose Up -- +goose StatementBegin -- RADIUS (FreeRADIUS) — node-lokale Singleton-Settings (ob DIESE Node -- RADIUS betreibt + Listen). Clients/Users sind geteilte Config (repliziert). CREATE TABLE IF NOT EXISTS radius_settings ( id INTEGER PRIMARY KEY DEFAULT 1, enabled BOOLEAN NOT NULL DEFAULT false, listen_addresses TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT radius_settings_singleton CHECK (id = 1) ); INSERT INTO radius_settings (id) VALUES (1) ON CONFLICT DO NOTHING; -- NAS-Clients (Geräte, die RADIUS-Requests senden): IP/CIDR + Shared Secret -- (verschlüsselt via secrets.Box). CREATE TABLE IF NOT EXISTS radius_clients ( id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL, ipaddr TEXT NOT NULL, secret_enc BYTEA, active BOOLEAN NOT NULL DEFAULT true, description TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT radius_clients_name_unique UNIQUE (name) ); -- Benutzer (PAP/CHAP): Name + Passwort (verschlüsselt; Cleartext nur zur -- Render-Zeit in die freeradius-lesbare authorize-Datei). CREATE TABLE IF NOT EXISTS radius_users ( id BIGSERIAL PRIMARY KEY, username TEXT NOT NULL, password_enc BYTEA, active BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT radius_users_username_unique UNIQUE (username) ); -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DROP TABLE IF EXISTS radius_users; DROP TABLE IF EXISTS radius_clients; DROP TABLE IF EXISTS radius_settings; -- +goose StatementEnd