feat: web frontend; middleware; serde (WIP?)

This commit is contained in:
2025-11-30 09:41:37 +08:00
parent be35040e26
commit 531ac029af
45 changed files with 6806 additions and 82 deletions

View File

@@ -0,0 +1,62 @@
-- Initial schema for My Linspirer MITM server
-- Global configuration
CREATE TABLE IF NOT EXISTS config (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
description TEXT,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Interception rules for JSON-RPC methods
CREATE TABLE IF NOT EXISTS interception_rules (
id INTEGER PRIMARY KEY AUTOINCREMENT,
method_name TEXT NOT NULL UNIQUE,
action TEXT NOT NULL CHECK(action IN ('passthrough', 'modify', 'replace')),
custom_response TEXT,
is_enabled BOOLEAN DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Template responses (for building custom_response)
CREATE TABLE IF NOT EXISTS response_templates (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
method_name TEXT NOT NULL,
response_json TEXT NOT NULL,
description TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Command queue persistence
CREATE TABLE IF NOT EXISTS commands (
id INTEGER PRIMARY KEY AUTOINCREMENT,
command_json TEXT NOT NULL,
status TEXT NOT NULL CHECK(status IN ('unverified', 'verified', 'rejected')),
received_at DATETIME DEFAULT CURRENT_TIMESTAMP,
processed_at DATETIME,
notes TEXT
);
-- Request/Response logs (optional, can be large)
CREATE TABLE IF NOT EXISTS request_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
method TEXT,
path TEXT,
request_body TEXT,
response_body TEXT,
status_code INTEGER,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Indexes for performance
CREATE INDEX IF NOT EXISTS idx_commands_status ON commands(status);
CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON request_logs(timestamp);
CREATE INDEX IF NOT EXISTS idx_logs_method ON request_logs(method);
-- Insert default config values
INSERT OR IGNORE INTO config (key, value, description) VALUES
('target_url', 'https://cloud.linspirer.com:883', 'Target server URL for proxying'),
('logging_enabled', 'true', 'Enable request/response logging'),
('log_retention_days', '7', 'Number of days to keep request logs');