Files
DenozordecandCursor d5784b9f35
Build and Push EvoFirewall Docker Image / build-and-push (push) Successful in 1m48s
Build and Push EvoFirewall Docker Image / create-release (push) Skipped
feat(api, web): enhance agent installation process with invited status and policy support
- Updated the agent enrollment process to include an 'invited' status, allowing for better tracking of agent states.
- Implemented support for install links that can now include an `install_link_id`, facilitating the transition from invited to pending status upon enrollment.
- Enhanced the MikroTik installation script to include the `EvofwInstallLinkId` for better tracking and management.
- Added new API endpoints for fetching agent policies and serving MikroTik-specific installation scripts.
- Improved the web UI to reflect the new agent statuses and provide copyable installation commands for agents.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 01:45:38 +07:00

65 lines
2.4 KiB
SQL

-- Allow invited agents (created in UI before enroll) + link install invites to agents.
-- Rebuild agents to widen status CHECK (FK temporarily off).
PRAGMA foreign_keys = OFF;
CREATE TABLE agents_v2 (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
hostname TEXT,
platform TEXT NOT NULL DEFAULT 'linux',
token_prefix TEXT NOT NULL,
token_hash TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
policy_mode TEXT NOT NULL DEFAULT 'blacklist',
policy_generation INTEGER NOT NULL DEFAULT 1,
last_seen_at TEXT,
last_seen_ip TEXT,
last_apply_at TEXT,
last_apply_status TEXT,
last_apply_error TEXT,
last_apply_prefix_count INTEGER DEFAULT 0,
last_apply_packets_dropped INTEGER NOT NULL DEFAULT 0,
last_apply_packets_accepted INTEGER NOT NULL DEFAULT 0,
last_apply_kernel_method TEXT,
client_version TEXT,
settings_json TEXT NOT NULL DEFAULT '{}',
created_by_user_id TEXT,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
approved_at TEXT,
revoked_at TEXT,
CHECK (status IN ('invited', 'pending', 'approved', 'revoked')),
CHECK (platform IN ('linux', 'mikrotik')),
CHECK (policy_mode IN ('blacklist', 'whitelist')),
CHECK (length(trim(name)) > 0)
);
INSERT INTO agents_v2 (
id, name, hostname, platform, token_prefix, token_hash, status, policy_mode,
policy_generation, last_seen_at, last_seen_ip, last_apply_at, last_apply_status,
last_apply_error, last_apply_prefix_count, last_apply_packets_dropped,
last_apply_packets_accepted, last_apply_kernel_method, client_version,
settings_json, created_by_user_id, created_at, approved_at, revoked_at
)
SELECT
id, name, hostname, platform, token_prefix, token_hash, status, policy_mode,
policy_generation, last_seen_at, last_seen_ip, last_apply_at, last_apply_status,
last_apply_error, last_apply_prefix_count, last_apply_packets_dropped,
last_apply_packets_accepted, last_apply_kernel_method, client_version,
settings_json, created_by_user_id, created_at, approved_at, revoked_at
FROM agents;
DROP TABLE agents;
ALTER TABLE agents_v2 RENAME TO agents;
CREATE UNIQUE INDEX IF NOT EXISTS idx_agents_token_hash ON agents (token_hash);
CREATE INDEX IF NOT EXISTS idx_agents_status ON agents (status);
PRAGMA foreign_keys = ON;
-- Bind install links to agents
ALTER TABLE agent_install_links ADD COLUMN agent_id TEXT REFERENCES agents (id) ON DELETE CASCADE;
CREATE INDEX IF NOT EXISTS idx_agent_install_links_agent
ON agent_install_links (agent_id);