mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-18 08:57:18 +02:00
Add files via upload
This commit is contained in:
@@ -5,8 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sync"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
@@ -388,9 +388,12 @@ func (db *DB) initTables() error {
|
|||||||
status TEXT NOT NULL DEFAULT 'open',
|
status TEXT NOT NULL DEFAULT 'open',
|
||||||
vulnerability_type TEXT,
|
vulnerability_type TEXT,
|
||||||
target TEXT,
|
target TEXT,
|
||||||
proof TEXT,
|
preconditions TEXT,
|
||||||
|
reproduction_steps TEXT,
|
||||||
|
evidence TEXT,
|
||||||
impact TEXT,
|
impact TEXT,
|
||||||
recommendation TEXT,
|
recommendation TEXT,
|
||||||
|
retest_notes TEXT,
|
||||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
project_id TEXT,
|
project_id TEXT,
|
||||||
@@ -1224,9 +1227,12 @@ func (db *DB) migrateVulnerabilitiesConversationFK() error {
|
|||||||
status TEXT NOT NULL DEFAULT 'open',
|
status TEXT NOT NULL DEFAULT 'open',
|
||||||
vulnerability_type TEXT,
|
vulnerability_type TEXT,
|
||||||
target TEXT,
|
target TEXT,
|
||||||
proof TEXT,
|
preconditions TEXT,
|
||||||
|
reproduction_steps TEXT,
|
||||||
|
evidence TEXT,
|
||||||
impact TEXT,
|
impact TEXT,
|
||||||
recommendation TEXT,
|
recommendation TEXT,
|
||||||
|
retest_notes TEXT,
|
||||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
project_id TEXT,
|
project_id TEXT,
|
||||||
@@ -1239,12 +1245,15 @@ func (db *DB) migrateVulnerabilitiesConversationFK() error {
|
|||||||
const copyRows = `
|
const copyRows = `
|
||||||
INSERT INTO vulnerabilities_new (
|
INSERT INTO vulnerabilities_new (
|
||||||
id, conversation_id, conversation_tag, task_tag, title, description,
|
id, conversation_id, conversation_tag, task_tag, title, description,
|
||||||
severity, status, vulnerability_type, target, proof, impact, recommendation,
|
severity, status, vulnerability_type, target, preconditions, reproduction_steps,
|
||||||
|
evidence, impact, recommendation, retest_notes,
|
||||||
created_at, updated_at, project_id
|
created_at, updated_at, project_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
id, conversation_id, conversation_tag, task_tag, title, description,
|
id, conversation_id, conversation_tag, task_tag, title, description,
|
||||||
severity, status, vulnerability_type, target, proof, impact, recommendation,
|
severity, status, vulnerability_type, target,
|
||||||
|
COALESCE(preconditions, ''), COALESCE(reproduction_steps, ''),
|
||||||
|
COALESCE(evidence, ''), impact, recommendation, COALESCE(retest_notes, ''),
|
||||||
created_at, updated_at, project_id
|
created_at, updated_at, project_id
|
||||||
FROM vulnerabilities;`
|
FROM vulnerabilities;`
|
||||||
if _, err := tx.Exec(copyRows); err != nil {
|
if _, err := tx.Exec(copyRows); err != nil {
|
||||||
@@ -1315,6 +1324,10 @@ func (db *DB) migrateVulnerabilitiesTable() error {
|
|||||||
{name: "conversation_tag", stmt: "ALTER TABLE vulnerabilities ADD COLUMN conversation_tag TEXT"},
|
{name: "conversation_tag", stmt: "ALTER TABLE vulnerabilities ADD COLUMN conversation_tag TEXT"},
|
||||||
{name: "task_tag", stmt: "ALTER TABLE vulnerabilities ADD COLUMN task_tag TEXT"},
|
{name: "task_tag", stmt: "ALTER TABLE vulnerabilities ADD COLUMN task_tag TEXT"},
|
||||||
{name: "project_id", stmt: "ALTER TABLE vulnerabilities ADD COLUMN project_id TEXT"},
|
{name: "project_id", stmt: "ALTER TABLE vulnerabilities ADD COLUMN project_id TEXT"},
|
||||||
|
{name: "preconditions", stmt: "ALTER TABLE vulnerabilities ADD COLUMN preconditions TEXT"},
|
||||||
|
{name: "reproduction_steps", stmt: "ALTER TABLE vulnerabilities ADD COLUMN reproduction_steps TEXT"},
|
||||||
|
{name: "evidence", stmt: "ALTER TABLE vulnerabilities ADD COLUMN evidence TEXT"},
|
||||||
|
{name: "retest_notes", stmt: "ALTER TABLE vulnerabilities ADD COLUMN retest_notes TEXT"},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, col := range columns {
|
for _, col := range columns {
|
||||||
|
|||||||
@@ -72,14 +72,17 @@ func (f VulnerabilityListFilter) appendWhere(query string, args []interface{}) (
|
|||||||
LOWER(COALESCE(description, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(description, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(vulnerability_type, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(vulnerability_type, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(target, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(target, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(proof, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(preconditions, '')) LIKE LOWER(?) OR
|
||||||
|
LOWER(COALESCE(reproduction_steps, '')) LIKE LOWER(?) OR
|
||||||
|
LOWER(COALESCE(evidence, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(impact, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(impact, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(recommendation, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(recommendation, '')) LIKE LOWER(?) OR
|
||||||
|
LOWER(COALESCE(retest_notes, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(conversation_id, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(conversation_id, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(conversation_tag, '')) LIKE LOWER(?) OR
|
LOWER(COALESCE(conversation_tag, '')) LIKE LOWER(?) OR
|
||||||
LOWER(COALESCE(task_tag, '')) LIKE LOWER(?)
|
LOWER(COALESCE(task_tag, '')) LIKE LOWER(?)
|
||||||
)`
|
)`
|
||||||
for i := 0; i < 11; i++ {
|
for i := 0; i < 14; i++ {
|
||||||
args = append(args, pattern)
|
args = append(args, pattern)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,9 +104,12 @@ type Vulnerability struct {
|
|||||||
Status string `json:"status"` // open, confirmed, fixed, false_positive, ignored
|
Status string `json:"status"` // open, confirmed, fixed, false_positive, ignored
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Target string `json:"target"`
|
Target string `json:"target"`
|
||||||
Proof string `json:"proof"`
|
Preconditions string `json:"preconditions"`
|
||||||
|
ReproSteps string `json:"reproduction_steps"`
|
||||||
|
Evidence string `json:"evidence"`
|
||||||
Impact string `json:"impact"`
|
Impact string `json:"impact"`
|
||||||
Recommendation string `json:"recommendation"`
|
Recommendation string `json:"recommendation"`
|
||||||
|
RetestNotes string `json:"retest_notes"`
|
||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
}
|
}
|
||||||
@@ -131,16 +137,16 @@ func (db *DB) CreateVulnerability(vuln *Vulnerability) (*Vulnerability, error) {
|
|||||||
query := `
|
query := `
|
||||||
INSERT INTO vulnerabilities (
|
INSERT INTO vulnerabilities (
|
||||||
id, conversation_id, project_id, conversation_tag, task_tag, title, description, severity, status,
|
id, conversation_id, project_id, conversation_tag, task_tag, title, description, severity, status,
|
||||||
vulnerability_type, target, proof, impact, recommendation,
|
vulnerability_type, target, preconditions, reproduction_steps, evidence, impact, recommendation, retest_notes,
|
||||||
created_at, updated_at
|
created_at, updated_at
|
||||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
`
|
`
|
||||||
|
|
||||||
_, err := db.Exec(
|
_, err := db.Exec(
|
||||||
query,
|
query,
|
||||||
vuln.ID, nullIfEmpty(vuln.ConversationID), nullIfEmpty(vuln.ProjectID), vuln.ConversationTag, vuln.TaskTag, vuln.Title, vuln.Description,
|
vuln.ID, nullIfEmpty(vuln.ConversationID), nullIfEmpty(vuln.ProjectID), vuln.ConversationTag, vuln.TaskTag, vuln.Title, vuln.Description,
|
||||||
vuln.Severity, vuln.Status, vuln.Type, vuln.Target,
|
vuln.Severity, vuln.Status, vuln.Type, vuln.Target,
|
||||||
vuln.Proof, vuln.Impact, vuln.Recommendation,
|
vuln.Preconditions, vuln.ReproSteps, vuln.Evidence, vuln.Impact, vuln.Recommendation, vuln.RetestNotes,
|
||||||
vuln.CreatedAt, vuln.UpdatedAt,
|
vuln.CreatedAt, vuln.UpdatedAt,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -155,7 +161,9 @@ func (db *DB) GetVulnerability(id string) (*Vulnerability, error) {
|
|||||||
var vuln Vulnerability
|
var vuln Vulnerability
|
||||||
query := `
|
query := `
|
||||||
SELECT id, COALESCE(conversation_id,''), COALESCE(project_id,''), title, description, severity, status,
|
SELECT id, COALESCE(conversation_id,''), COALESCE(project_id,''), title, description, severity, status,
|
||||||
conversation_tag, task_tag, vulnerability_type, target, proof, impact, recommendation,
|
conversation_tag, task_tag, vulnerability_type, target,
|
||||||
|
COALESCE(preconditions,''), COALESCE(reproduction_steps,''), COALESCE(evidence,''),
|
||||||
|
impact, recommendation, COALESCE(retest_notes,''),
|
||||||
COALESCE((SELECT bt.id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_id,
|
COALESCE((SELECT bt.id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_id,
|
||||||
COALESCE((SELECT bt.queue_id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_queue_id,
|
COALESCE((SELECT bt.queue_id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_queue_id,
|
||||||
created_at, updated_at
|
created_at, updated_at
|
||||||
@@ -166,7 +174,7 @@ func (db *DB) GetVulnerability(id string) (*Vulnerability, error) {
|
|||||||
err := db.QueryRow(query, id).Scan(
|
err := db.QueryRow(query, id).Scan(
|
||||||
&vuln.ID, &vuln.ConversationID, &vuln.ProjectID, &vuln.Title, &vuln.Description,
|
&vuln.ID, &vuln.ConversationID, &vuln.ProjectID, &vuln.Title, &vuln.Description,
|
||||||
&vuln.Severity, &vuln.Status, &vuln.ConversationTag, &vuln.TaskTag, &vuln.Type, &vuln.Target,
|
&vuln.Severity, &vuln.Status, &vuln.ConversationTag, &vuln.TaskTag, &vuln.Type, &vuln.Target,
|
||||||
&vuln.Proof, &vuln.Impact, &vuln.Recommendation,
|
&vuln.Preconditions, &vuln.ReproSteps, &vuln.Evidence, &vuln.Impact, &vuln.Recommendation, &vuln.RetestNotes,
|
||||||
&vuln.TaskID, &vuln.TaskQueueID,
|
&vuln.TaskID, &vuln.TaskQueueID,
|
||||||
&vuln.CreatedAt, &vuln.UpdatedAt,
|
&vuln.CreatedAt, &vuln.UpdatedAt,
|
||||||
)
|
)
|
||||||
@@ -184,7 +192,9 @@ func (db *DB) GetVulnerability(id string) (*Vulnerability, error) {
|
|||||||
func (db *DB) ListVulnerabilities(limit, offset int, filter VulnerabilityListFilter) ([]*Vulnerability, error) {
|
func (db *DB) ListVulnerabilities(limit, offset int, filter VulnerabilityListFilter) ([]*Vulnerability, error) {
|
||||||
query := `
|
query := `
|
||||||
SELECT id, COALESCE(conversation_id,''), COALESCE(project_id,''), title, description, severity, status, conversation_tag, task_tag,
|
SELECT id, COALESCE(conversation_id,''), COALESCE(project_id,''), title, description, severity, status, conversation_tag, task_tag,
|
||||||
vulnerability_type, target, proof, impact, recommendation,
|
vulnerability_type, target,
|
||||||
|
COALESCE(preconditions,''), COALESCE(reproduction_steps,''), COALESCE(evidence,''),
|
||||||
|
impact, recommendation, COALESCE(retest_notes,''),
|
||||||
COALESCE((SELECT bt.id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_id,
|
COALESCE((SELECT bt.id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_id,
|
||||||
COALESCE((SELECT bt.queue_id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_queue_id,
|
COALESCE((SELECT bt.queue_id FROM batch_tasks bt WHERE bt.conversation_id = vulnerabilities.conversation_id LIMIT 1), '') AS task_queue_id,
|
||||||
created_at, updated_at
|
created_at, updated_at
|
||||||
@@ -209,7 +219,7 @@ func (db *DB) ListVulnerabilities(limit, offset int, filter VulnerabilityListFil
|
|||||||
err := rows.Scan(
|
err := rows.Scan(
|
||||||
&vuln.ID, &vuln.ConversationID, &vuln.ProjectID, &vuln.Title, &vuln.Description,
|
&vuln.ID, &vuln.ConversationID, &vuln.ProjectID, &vuln.Title, &vuln.Description,
|
||||||
&vuln.Severity, &vuln.Status, &vuln.ConversationTag, &vuln.TaskTag, &vuln.Type, &vuln.Target,
|
&vuln.Severity, &vuln.Status, &vuln.ConversationTag, &vuln.TaskTag, &vuln.Type, &vuln.Target,
|
||||||
&vuln.Proof, &vuln.Impact, &vuln.Recommendation,
|
&vuln.Preconditions, &vuln.ReproSteps, &vuln.Evidence, &vuln.Impact, &vuln.Recommendation, &vuln.RetestNotes,
|
||||||
&vuln.TaskID, &vuln.TaskQueueID,
|
&vuln.TaskID, &vuln.TaskQueueID,
|
||||||
&vuln.CreatedAt, &vuln.UpdatedAt,
|
&vuln.CreatedAt, &vuln.UpdatedAt,
|
||||||
)
|
)
|
||||||
@@ -245,16 +255,16 @@ func (db *DB) UpdateVulnerability(id string, vuln *Vulnerability) error {
|
|||||||
query := `
|
query := `
|
||||||
UPDATE vulnerabilities
|
UPDATE vulnerabilities
|
||||||
SET project_id = ?, conversation_tag = ?, task_tag = ?, title = ?, description = ?, severity = ?, status = ?,
|
SET project_id = ?, conversation_tag = ?, task_tag = ?, title = ?, description = ?, severity = ?, status = ?,
|
||||||
vulnerability_type = ?, target = ?, proof = ?, impact = ?,
|
vulnerability_type = ?, target = ?, preconditions = ?, reproduction_steps = ?, evidence = ?, impact = ?,
|
||||||
recommendation = ?, updated_at = ?
|
recommendation = ?, retest_notes = ?, updated_at = ?
|
||||||
WHERE id = ?
|
WHERE id = ?
|
||||||
`
|
`
|
||||||
|
|
||||||
_, err := db.Exec(
|
_, err := db.Exec(
|
||||||
query,
|
query,
|
||||||
nullIfEmpty(vuln.ProjectID), vuln.ConversationTag, vuln.TaskTag, vuln.Title, vuln.Description, vuln.Severity, vuln.Status,
|
nullIfEmpty(vuln.ProjectID), vuln.ConversationTag, vuln.TaskTag, vuln.Title, vuln.Description, vuln.Severity, vuln.Status,
|
||||||
vuln.Type, vuln.Target, vuln.Proof, vuln.Impact,
|
vuln.Type, vuln.Target, vuln.Preconditions, vuln.ReproSteps, vuln.Evidence, vuln.Impact,
|
||||||
vuln.Recommendation, vuln.UpdatedAt, id,
|
vuln.Recommendation, vuln.RetestNotes, vuln.UpdatedAt, id,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("更新漏洞失败: %w", err)
|
return fmt.Errorf("更新漏洞失败: %w", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user