feat: implement core radius service and database schema for guest access management
This commit is contained in:
+120
@@ -0,0 +1,120 @@
|
||||
-- Initialize PostgreSQL database for FreeRADIUS and RadiusController App
|
||||
|
||||
-- Standard FreeRADIUS PostgreSQL Schema
|
||||
CREATE TABLE IF NOT EXISTS radcheck (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL DEFAULT '',
|
||||
attribute VARCHAR(64) NOT NULL DEFAULT '',
|
||||
op VARCHAR(2) NOT NULL DEFAULT ':=',
|
||||
value VARCHAR(253) NOT NULL DEFAULT ''
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS radcheck_username ON radcheck (username);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS radreply (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL DEFAULT '',
|
||||
attribute VARCHAR(64) NOT NULL DEFAULT '',
|
||||
op VARCHAR(2) NOT NULL DEFAULT '=',
|
||||
value VARCHAR(253) NOT NULL DEFAULT ''
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS radreply_username ON radreply (username);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS radgroupcheck (
|
||||
id SERIAL PRIMARY KEY,
|
||||
groupname VARCHAR(64) NOT NULL DEFAULT '',
|
||||
attribute VARCHAR(64) NOT NULL DEFAULT '',
|
||||
op VARCHAR(2) NOT NULL DEFAULT ':=',
|
||||
value VARCHAR(253) NOT NULL DEFAULT ''
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS radgroupcheck_groupname ON radgroupcheck (groupname);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS radgroupreply (
|
||||
id SERIAL PRIMARY KEY,
|
||||
groupname VARCHAR(64) NOT NULL DEFAULT '',
|
||||
attribute VARCHAR(64) NOT NULL DEFAULT '',
|
||||
op VARCHAR(2) NOT NULL DEFAULT '=',
|
||||
value VARCHAR(253) NOT NULL DEFAULT ''
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS radgroupreply_groupname ON radgroupreply (groupname);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS radusergroup (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL DEFAULT '',
|
||||
groupname VARCHAR(64) NOT NULL DEFAULT '',
|
||||
priority INT NOT NULL DEFAULT 1
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS radusergroup_username ON radusergroup (username);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS radacct (
|
||||
radacctid BIGSERIAL PRIMARY KEY,
|
||||
acctsessionid VARCHAR(64) NOT NULL DEFAULT '',
|
||||
acctuniqueid VARCHAR(32) NOT NULL DEFAULT '',
|
||||
username VARCHAR(64) NOT NULL DEFAULT '',
|
||||
realm VARCHAR(64) DEFAULT '',
|
||||
nasipaddress VARCHAR(15) NOT NULL DEFAULT '',
|
||||
nasportid VARCHAR(32) DEFAULT NULL,
|
||||
nasporttype VARCHAR(32) DEFAULT NULL,
|
||||
acctstarttime TIMESTAMP WITH TIME ZONE DEFAULT NULL,
|
||||
acctupdatetime TIMESTAMP WITH TIME ZONE DEFAULT NULL,
|
||||
acctstoptime TIMESTAMP WITH TIME ZONE DEFAULT NULL,
|
||||
acctinterval INT DEFAULT NULL,
|
||||
acctsessiontime BIGINT DEFAULT NULL,
|
||||
acctauthentic VARCHAR(32) DEFAULT NULL,
|
||||
connectinfo_in VARCHAR(50) DEFAULT NULL,
|
||||
connectinfo_out VARCHAR(50) DEFAULT NULL,
|
||||
acctinputoctets BIGINT DEFAULT NULL,
|
||||
acctoutputoctets BIGINT DEFAULT NULL,
|
||||
calledstationid VARCHAR(50) NOT NULL DEFAULT '',
|
||||
callingstationid VARCHAR(50) NOT NULL DEFAULT '',
|
||||
acctterminatecause VARCHAR(32) NOT NULL DEFAULT '',
|
||||
servicetype VARCHAR(32) DEFAULT NULL,
|
||||
framedprotocol VARCHAR(32) DEFAULT NULL,
|
||||
framedipaddress VARCHAR(15) NOT NULL DEFAULT ''
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS radacct_username ON radacct (username);
|
||||
CREATE INDEX IF NOT EXISTS radacct_active ON radacct (acctstoptime) WHERE acctstoptime IS NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS nas (
|
||||
id SERIAL PRIMARY KEY,
|
||||
nasname VARCHAR(128) NOT NULL,
|
||||
shortname VARCHAR(32),
|
||||
type VARCHAR(30) DEFAULT 'other',
|
||||
ports INT,
|
||||
secret VARCHAR(60) NOT NULL,
|
||||
server VARCHAR(64),
|
||||
community VARCHAR(50),
|
||||
description VARCHAR(200) DEFAULT 'RADIUS Client'
|
||||
);
|
||||
|
||||
-- Application Management Tables
|
||||
CREATE TABLE IF NOT EXISTS guest_profiles (
|
||||
id SERIAL PRIMARY KEY,
|
||||
guest_name VARCHAR(255) NOT NULL,
|
||||
username VARCHAR(64) NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
session_time_minutes INT NOT NULL DEFAULT 60,
|
||||
data_limit_mb BIGINT NOT NULL DEFAULT 500,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'Active'
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS admin_users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(64) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS system_settings (
|
||||
key VARCHAR(64) PRIMARY KEY,
|
||||
value VARCHAR(255) NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Seed Default Settings
|
||||
INSERT INTO system_settings (key, value) VALUES ('default_session_time', '60') ON CONFLICT (key) DO NOTHING;
|
||||
INSERT INTO system_settings (key, value) VALUES ('default_data_limit', '500') ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
-- Seed Default Admin User: admin / admin123 (BCrypt hash)
|
||||
INSERT INTO admin_users (username, password_hash)
|
||||
VALUES ('admin', '$2a$11$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy')
|
||||
ON CONFLICT (username) DO NOTHING;
|
||||
Reference in New Issue
Block a user