mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-04-26 21:06:21 +02:00
Release prep: 54 engines, self-hosted signatures, i18n, dashboard updates
This commit is contained in:
parent
694e32be26
commit
41cbfd6e0a
178 changed files with 36008 additions and 399 deletions
|
|
@ -0,0 +1,65 @@
|
|||
-- +goose Up
|
||||
-- SENTINEL SOC — PostgreSQL Schema
|
||||
-- Tables: soc_events, soc_incidents, soc_sensors
|
||||
|
||||
CREATE TABLE soc_events (
|
||||
id TEXT PRIMARY KEY,
|
||||
source TEXT NOT NULL,
|
||||
sensor_id TEXT NOT NULL DEFAULT '',
|
||||
severity TEXT NOT NULL,
|
||||
category TEXT NOT NULL,
|
||||
subcategory TEXT NOT NULL DEFAULT '',
|
||||
confidence DOUBLE PRECISION NOT NULL DEFAULT 0.0,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
session_id TEXT NOT NULL DEFAULT '',
|
||||
content_hash TEXT NOT NULL DEFAULT '',
|
||||
decision_hash TEXT NOT NULL DEFAULT '',
|
||||
verdict TEXT NOT NULL DEFAULT 'REVIEW',
|
||||
timestamp TIMESTAMPTZ NOT NULL,
|
||||
metadata JSONB NOT NULL DEFAULT '{}'
|
||||
);
|
||||
|
||||
CREATE TABLE soc_incidents (
|
||||
id TEXT PRIMARY KEY,
|
||||
status TEXT NOT NULL DEFAULT 'OPEN',
|
||||
severity TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT '',
|
||||
event_ids JSONB NOT NULL DEFAULT '[]',
|
||||
event_count INTEGER NOT NULL DEFAULT 0,
|
||||
decision_chain_anchor TEXT NOT NULL DEFAULT '',
|
||||
chain_length INTEGER NOT NULL DEFAULT 0,
|
||||
correlation_rule TEXT NOT NULL DEFAULT '',
|
||||
kill_chain_phase TEXT NOT NULL DEFAULT '',
|
||||
mitre_mapping JSONB NOT NULL DEFAULT '[]',
|
||||
playbook_applied TEXT NOT NULL DEFAULT '',
|
||||
created_at TIMESTAMPTZ NOT NULL,
|
||||
updated_at TIMESTAMPTZ NOT NULL,
|
||||
resolved_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
CREATE TABLE soc_sensors (
|
||||
sensor_id TEXT PRIMARY KEY,
|
||||
sensor_type TEXT NOT NULL,
|
||||
status TEXT DEFAULT 'UNKNOWN',
|
||||
first_seen TIMESTAMPTZ NOT NULL,
|
||||
last_seen TIMESTAMPTZ NOT NULL,
|
||||
event_count INTEGER DEFAULT 0,
|
||||
missed_heartbeats INTEGER DEFAULT 0,
|
||||
hostname TEXT NOT NULL DEFAULT '',
|
||||
version TEXT NOT NULL DEFAULT ''
|
||||
);
|
||||
|
||||
-- Indexes
|
||||
CREATE INDEX idx_soc_events_timestamp ON soc_events(timestamp);
|
||||
CREATE INDEX idx_soc_events_severity ON soc_events(severity);
|
||||
CREATE INDEX idx_soc_events_category ON soc_events(category);
|
||||
CREATE INDEX idx_soc_events_sensor ON soc_events(sensor_id);
|
||||
CREATE INDEX idx_soc_events_content_hash ON soc_events(content_hash);
|
||||
CREATE INDEX idx_soc_incidents_status ON soc_incidents(status);
|
||||
CREATE INDEX idx_soc_sensors_status ON soc_sensors(status);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS soc_sensors;
|
||||
DROP TABLE IF EXISTS soc_incidents;
|
||||
DROP TABLE IF EXISTS soc_events;
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
-- +goose Up
|
||||
-- SENTINEL SOC — Auth & Multi-Tenancy (PostgreSQL)
|
||||
-- Tables: users, api_keys, tenants
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id TEXT PRIMARY KEY,
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
name TEXT NOT NULL DEFAULT '',
|
||||
password TEXT NOT NULL,
|
||||
role TEXT NOT NULL DEFAULT 'viewer',
|
||||
tenant_id TEXT NOT NULL DEFAULT '',
|
||||
active BOOLEAN NOT NULL DEFAULT true,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS api_keys (
|
||||
id TEXT PRIMARY KEY,
|
||||
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
key_hash TEXT UNIQUE NOT NULL,
|
||||
key_prefix TEXT NOT NULL,
|
||||
role TEXT NOT NULL DEFAULT 'viewer',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
last_used TIMESTAMPTZ,
|
||||
active BOOLEAN NOT NULL DEFAULT true
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tenants (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT UNIQUE NOT NULL,
|
||||
plan_id TEXT NOT NULL DEFAULT 'free',
|
||||
stripe_customer_id TEXT NOT NULL DEFAULT '',
|
||||
stripe_sub_id TEXT NOT NULL DEFAULT '',
|
||||
owner_user_id TEXT NOT NULL,
|
||||
active BOOLEAN NOT NULL DEFAULT true,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
events_this_month INTEGER NOT NULL DEFAULT 0,
|
||||
month_reset_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Add assigned_to column to incidents (was missing in 001)
|
||||
ALTER TABLE soc_incidents ADD COLUMN IF NOT EXISTS assigned_to TEXT NOT NULL DEFAULT '';
|
||||
|
||||
-- Indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
|
||||
CREATE INDEX IF NOT EXISTS idx_users_tenant ON users(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_api_keys_hash ON api_keys(key_hash);
|
||||
CREATE INDEX IF NOT EXISTS idx_api_keys_user ON api_keys(user_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_tenants_slug ON tenants(slug);
|
||||
CREATE INDEX IF NOT EXISTS idx_tenants_owner ON tenants(owner_user_id);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE IF EXISTS tenants;
|
||||
DROP TABLE IF EXISTS api_keys;
|
||||
DROP TABLE IF EXISTS users;
|
||||
ALTER TABLE soc_incidents DROP COLUMN IF EXISTS assigned_to;
|
||||
Loading…
Add table
Add a link
Reference in a new issue