CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TYPE JobType AS ENUM ('shell', 'manage', 'binary', 'python'); CREATE TYPE JobState AS ENUM ('queued', 'running', 'finished'); CREATE TABLE IF NOT EXISTS agents ( alias TEXT , hostname TEXT NOT NULL , id UUID NOT NULL DEFAULT uuid_generate_v4() , is_root BOOLEAN NOT NULL DEFAULT false , is_root_allowed BOOLEAN NOT NULL DEFAULT false , last_active TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -- target triplet , platform TEXT NOT NULL , regtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , status TEXT -- is needed to processing requests , token TEXT , username TEXT NOT NULL , PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS ip_addrs ( agent_id UUID NOT NULL , check_ts TIMESTAMP NOT NULL , gateway TEXT , id UUID NOT NULL DEFAULT uuid_generate_v4() , iface TEXT NOT NULL , ip_addr TEXT NOT NULL , is_gray BOOLEAN NOT NULL DEFAULT true , netmask TEXT NOT NULL , PRIMARY KEY(id) , FOREIGN KEY(agent_id) REFERENCES agents(id) ); CREATE TABLE IF NOT EXISTS jobs ( alias TEXT NOT NULL , id UUID NOT NULL DEFAULT uuid_generate_v4() -- Shell, Binary (with program download), -- Python (with program and python download if not exist), Management , exec_type JobType NOT NULL DEFAULT 'shell' , platform TEXT NOT NULL , payload BYTEA , PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS results ( agent_id UUID NOT NULL , created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , id UUID NOT NULL DEFAULT uuid_generate_v4() , job_id UUID NOT NULL , result BYTEA , state JobState NOT NULL DEFAULT 'queued' , retcode INTEGER , updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , FOREIGN KEY(agent_id) REFERENCES agents(id) ON DELETE CASCADE , FOREIGN KEY(job_id) REFERENCES jobs(id) ON DELETE CASCADE , PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS certificates ( agent_id UUID NOT NULL , id UUID NOT NULL DEFAULT uuid_generate_v4() , is_revoked BOOLEAN NOT NULL DEFAULT FALSE , PRIMARY KEY(id) , FOREIGN KEY(agent_id) REFERENCES agents(id) );