@@ -312,3 +312,181 @@ CREATE TABLE IF NOT EXISTS user_settings (
312312 json_config TEXT ,
313313 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
314314 );
315+ -- Insert a UserType with full access (e.g., a "System Admin")
316+ INSERT INTO usertypes (id, user_type_name, automation_access, system_access, rule_access, user_access, ztat_access, application_access)
317+ VALUES (- 1 , ' Application Admin' , ' CAN_RUN_AUTOMATION' , ' CAN_MANAGE_SYSTEMS' , ' CAN_VIEW_RULES' , ' CAN_MANAGE_USERS' ,
318+ ' CAN_VIEW_ZTATS' ,
319+ ' CAN_MANAGE_APPLICATION' );
320+
321+ -- Insert a test user and associate with the UserType created above
322+ INSERT INTO users (id, username, name, password, email_address, image_url, role_id, team)
323+ VALUES (- 1 , ' admin' , ' Test User' , ' $2a$10$LcIvlLX3vchavg8I.VmDLeWIoVETLJM7yK0y8qwn5e0v9QwfcakK6' ,
324+ ' [email protected] ' ,
' https://example.com/image.jpg' ,
- 1 ,
' Test Team' );
325+
326+
327+ -- Insert a host group for the test user
328+
329+ -- Insert default host group "Default Host Group" for "Test User"
330+ INSERT INTO host_groups (id, name, description, configuration)
331+ VALUES (- 1 , ' Default Host Group' , ' Default host group for Test User' , ' Default configuration' );
332+
333+ -- Assign "Test User" to "Default Host Group"
334+ INSERT INTO user_hostgroups (user_id, hostgroup_id)
335+ VALUES (- 1 , - 1 );
336+ create table if not exists " configuration_options" (
337+ id BIGSERIAL PRIMARY KEY ,
338+ " configuration_name" character varying (250 ) NOT NULL ,
339+ " configuration_value" text NOT NULL
340+ );-- Add a column for application_key reference to host_groups
341+ ALTER TABLE host_groups
342+ ADD COLUMN application_key_id BIGINT UNIQUE,
343+ ADD CONSTRAINT fk_application_key FOREIGN KEY (application_key_id) REFERENCES application_key(id) ON DELETE CASCADE ;
344+ CREATE TABLE configurations (
345+ id BIGSERIAL PRIMARY KEY ,
346+ config_name VARCHAR (255 ) NOT NULL ,
347+ user_id BIGINT NOT NULL REFERENCES users(id),
348+ content TEXT NOT NULL ,
349+ uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
350+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
351+ );
352+ ALTER TABLE application_key ADD COLUMN is_file BOOLEAN DEFAULT false;
353+ CREATE TABLE known_hosts (
354+ id SERIAL PRIMARY KEY ,
355+ hostname VARCHAR (255 ) NOT NULL ,
356+ key_type VARCHAR (50 ) NOT NULL ,
357+ key_value TEXT NOT NULL ,
358+ UNIQUE (hostname, key_type)
359+ );
360+ ALTER TABLE users RENAME COLUMN image_url TO user_id;
361+ ALTER TABLE users ADD CONSTRAINT unique_user_id UNIQUE (user_id);
362+ ALTER TABLE users ADD COLUMN status VARCHAR (20 ) DEFAULT ' ACTIVE' ;
363+
364+ INSERT INTO usertypes (id, user_type_name, automation_access, system_access, rule_access, user_access, ztat_access,
365+ application_access) VALUES (- 2 , ' System Admin' , ' CAN_RUN_AUTOMATION' , ' CAN_MANAGE_SYSTEMS' , ' CAN_VIEW_RULES' , ' CAN_MANAGE_USERS' ,
366+ ' CAN_VIEW_ZTATS' ,
367+ ' CAN_MANAGE_APPLICATION' );
368+
369+ INSERT INTO usertypes (id, user_type_name, automation_access, system_access, rule_access, user_access, ztat_access,
370+ application_access) VALUES (- 4 , ' Base User' , ' CAN_RUN_AUTOMATION' , ' CAN_MANAGE_SYSTEMS' , ' CAN_VIEW_RULES' , ' CAN_MANAGE_USERS' ,
371+ ' CAN_VIEW_ZTATS' ,
372+ ' CAN_MANAGE_APPLICATION' );CREATE TABLE terminal_session_metadata (
373+ id BIGSERIAL PRIMARY KEY ,
374+ session_id BIGINT NOT NULL REFERENCES session_log(id) ON DELETE CASCADE ,
375+ user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE ,
376+ host_system_id BIGINT NOT NULL REFERENCES host_systems(host_system_id),
377+ start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
378+ end_time TIMESTAMP ,
379+ ip_address VARCHAR (45 ),
380+ session_status VARCHAR (50 ) DEFAULT ' ACTIVE' , -- e.g., ACTIVE, CLOSED, INTERRUPTED
381+ is_suspicious BOOLEAN DEFAULT FALSE
382+ );
383+
384+
385+ CREATE TABLE user_experience_metrics (
386+ id BIGSERIAL PRIMARY KEY ,
387+ user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE ,
388+ session_id BIGINT NOT NULL REFERENCES terminal_session_metadata(id) ON DELETE CASCADE ,
389+ command_diversity INTEGER DEFAULT 0 , -- Number of unique command categories used
390+ advanced_tool_usage BOOLEAN DEFAULT FALSE, -- Use of tools like awk, sed, grep
391+ error_resolution_count INTEGER DEFAULT 0 , -- Number of successfully resolved errors
392+ manual_pages_usage_count INTEGER DEFAULT 0 , -- Number of times man/help was used
393+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
394+ );
395+
396+ CREATE TABLE terminal_risk_indicators (
397+ id BIGSERIAL PRIMARY KEY ,
398+ session_id BIGINT NOT NULL REFERENCES terminal_session_metadata(id) ON DELETE CASCADE ,
399+ dangerous_commands_count INTEGER DEFAULT 0 , -- e.g., "rm -rf"
400+ unauthorized_access_attempts INTEGER DEFAULT 0 , -- Access to restricted files/directories
401+ geo_anomaly BOOLEAN DEFAULT FALSE, -- Access from unusual locations
402+ out_of_hours BOOLEAN DEFAULT FALSE -- Sessions outside expected working hours
403+ );
404+ CREATE TABLE terminal_behavior_metrics (
405+ id BIGSERIAL PRIMARY KEY ,
406+ session_id BIGINT NOT NULL REFERENCES terminal_session_metadata(id) ON DELETE CASCADE ,
407+ total_commands INTEGER DEFAULT 0 , -- Total number of commands issued
408+ unique_commands INTEGER DEFAULT 0 , -- Number of unique commands
409+ avg_command_length FLOAT, -- Average command length in characters
410+ sudo_usage_count INTEGER DEFAULT 0 , -- Number of privileged commands used
411+ max_idle_time INTERVAL, -- Longest idle period between commands
412+ FOREIGN KEY (session_id) REFERENCES terminal_session_metadata(id) ON DELETE CASCADE
413+ );
414+
415+ CREATE TABLE terminal_commands (
416+ id BIGSERIAL PRIMARY KEY ,
417+ session_id BIGINT NOT NULL REFERENCES terminal_session_metadata(id) ON DELETE CASCADE ,
418+ command TEXT NOT NULL , -- Full command issued
419+ command_category VARCHAR (255 ), -- e.g., file_management, networking
420+ execution_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP , -- When the command was issued
421+ execution_status VARCHAR (50 ) DEFAULT ' SUCCESS' , -- e.g., SUCCESS, FAILED
422+ output TEXT , -- Optional: store command output
423+ FOREIGN KEY (session_id) REFERENCES terminal_session_metadata(id) ON DELETE CASCADE
424+ );
425+
426+
427+
428+ CREATE TABLE analytics_tracking (
429+ id BIGSERIAL PRIMARY KEY ,
430+ session_id BIGINT NOT NULL UNIQUE,
431+ processed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
432+ status VARCHAR (50 ) DEFAULT ' PROCESSED' -- Options: 'PENDING', 'PROCESSING', 'PROCESSED'
433+ );
434+ ALTER TABLE terminal_behavior_metrics
435+ ALTER COLUMN max_idle_time
436+ TYPE NUMERIC (21 ,0 )
437+ USING EXTRACT(EPOCH FROM max_idle_time)::NUMERIC (21 ,0 );
438+ CREATE TABLE command_categories (
439+ id SERIAL PRIMARY KEY ,
440+ category_name VARCHAR (50 ) NOT NULL ,
441+ pattern TEXT NOT NULL , -- Store regex patterns
442+ priority INT NOT NULL DEFAULT 0 -- Optional: for matching precedence
443+ );
444+
445+
446+ CREATE INDEX idx_pattern ON command_categories (pattern);CREATE EXTENSION IF NOT EXISTS pg_trgm;
447+
448+ CREATE INDEX idx_command_pattern_trgm ON command_categories USING gin (pattern gin_trgm_ops);
449+ CREATE TABLE work_hours (
450+ id SERIAL PRIMARY KEY ,
451+ user_id INT REFERENCES users(id) ON DELETE CASCADE ,
452+ day_of_week SMALLINT CHECK (day_of_week BETWEEN 0 AND 6 ), -- 0 = Sunday, 6 = Saturday
453+ start_time TIME NOT NULL , -- Example: '09:00:00'
454+ end_time TIME NOT NULL -- Example: '17:00:00'
455+ );
456+
457+ -- Ensure fast lookups for checking dem hours
458+ CREATE INDEX idx_work_hours ON work_hours (user_id, day_of_week);
459+
460+ ALTER TABLE operations_request
461+ ADD COLUMN summary TEXT ;
462+ CREATE TABLE IF NOT EXISTS chat_log (
463+ id BIGSERIAL PRIMARY KEY ,
464+ session_id BIGINT NOT NULL ,
465+ chat_group_id VARCHAR NOT NULL , -- Unique identifier for different chat dialogs within the session
466+ instance_id INTEGER ,
467+ sender VARCHAR NOT NULL , -- username or system (e.g., AI agent)
468+ message TEXT NOT NULL ,
469+ message_tm TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
470+ FOREIGN KEY (session_id) REFERENCES session_log(id) ON DELETE CASCADE
471+ );
472+ ALTER TABLE ztat_approvals ADD COLUMN rationale TEXT ;
473+ ALTER TABLE ops_approvals ADD COLUMN rationale TEXT ;
474+
475+ CREATE TABLE IF NOT EXISTS ztat_uses (
476+ id BIGSERIAL PRIMARY KEY ,
477+ ztat_approval_id BIGINT NOT NULL ,
478+ user_id BIGINT NOT NULL ,
479+ used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
480+ FOREIGN KEY (ztat_approval_id) REFERENCES ztat_approvals(id),
481+ FOREIGN KEY (user_id) REFERENCES users(id)
482+ );
483+
484+
485+ CREATE TABLE IF NOT EXISTS ops_uses (
486+ id BIGSERIAL PRIMARY KEY ,
487+ ops_approval_id BIGINT NOT NULL ,
488+ user_id BIGINT NOT NULL ,
489+ used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
490+ FOREIGN KEY (ops_approval_id) REFERENCES ops_approvals(id),
491+ FOREIGN KEY (user_id) REFERENCES users(id)
492+ );
0 commit comments