Documentation
¶
Overview ¶
Package db provides database connectivity and data models for scanorama. It handles database migrations, host management, scan results storage, and provides the core data access layer for the application.
Index ¶
- Constants
- type ActiveHost
- type Config
- type DB
- func (db *DB) BeginTx(ctx context.Context) (*sqlx.Tx, error)
- func (db *DB) Close() error
- func (db *DB) CreateDiscoveryJob(ctx context.Context, jobData interface{}) (*DiscoveryJob, error)
- func (db *DB) CreateHost(ctx context.Context, hostData interface{}) (*Host, error)
- func (db *DB) CreateProfile(ctx context.Context, profileData interface{}) (*ScanProfile, error)
- func (db *DB) CreateScan(ctx context.Context, input interface{}) (*Scan, error)
- func (db *DB) CreateSchedule(ctx context.Context, scheduleData interface{}) (*Schedule, error)
- func (db *DB) DeleteDiscoveryJob(ctx context.Context, id uuid.UUID) error
- func (db *DB) DeleteHost(ctx context.Context, id uuid.UUID) error
- func (db *DB) DeleteProfile(ctx context.Context, id string) error
- func (db *DB) DeleteScan(ctx context.Context, id uuid.UUID) error
- func (db *DB) DeleteSchedule(ctx context.Context, id uuid.UUID) error
- func (db *DB) DisableSchedule(ctx context.Context, id uuid.UUID) error
- func (db *DB) EnableSchedule(ctx context.Context, id uuid.UUID) error
- func (db *DB) GetDiscoveryJob(ctx context.Context, id uuid.UUID) (*DiscoveryJob, error)
- func (db *DB) GetHost(ctx context.Context, id uuid.UUID) (*Host, error)
- func (db *DB) GetHostScans(ctx context.Context, hostID uuid.UUID, offset, limit int) ([]*Scan, int64, error)
- func (db *DB) GetProfile(ctx context.Context, id string) (*ScanProfile, error)
- func (db *DB) GetScan(ctx context.Context, id uuid.UUID) (*Scan, error)
- func (db *DB) GetScanResults(ctx context.Context, scanID uuid.UUID, offset, limit int) ([]*ScanResult, int64, error)
- func (db *DB) GetScanSummary(ctx context.Context, scanID uuid.UUID) (*ScanSummary, error)
- func (db *DB) GetSchedule(ctx context.Context, id uuid.UUID) (*Schedule, error)
- func (db *DB) ListDiscoveryJobs(ctx context.Context, filters DiscoveryFilters, offset, limit int) ([]*DiscoveryJob, int64, error)
- func (db *DB) ListHosts(ctx context.Context, filters HostFilters, offset, limit int) ([]*Host, int64, error)
- func (db *DB) ListProfiles(ctx context.Context, filters ProfileFilters, offset, limit int) ([]*ScanProfile, int64, error)
- func (db *DB) ListScans(ctx context.Context, filters ScanFilters, offset, limit int) ([]*Scan, int64, error)
- func (db *DB) ListSchedules(ctx context.Context, filters ScheduleFilters, offset, limit int) ([]*Schedule, int64, error)
- func (db *DB) Ping(ctx context.Context) error
- func (db *DB) StartDiscoveryJob(ctx context.Context, id uuid.UUID) error
- func (db *DB) StartScan(ctx context.Context, id uuid.UUID) error
- func (db *DB) StopDiscoveryJob(ctx context.Context, id uuid.UUID) error
- func (db *DB) StopScan(ctx context.Context, id uuid.UUID) error
- func (db *DB) UpdateDiscoveryJob(ctx context.Context, id uuid.UUID, jobData interface{}) (*DiscoveryJob, error)
- func (db *DB) UpdateHost(ctx context.Context, id uuid.UUID, hostData interface{}) (*Host, error)
- func (db *DB) UpdateProfile(ctx context.Context, id string, profileData interface{}) (*ScanProfile, error)
- func (db *DB) UpdateScan(ctx context.Context, id uuid.UUID, scanData interface{}) (*Scan, error)
- func (db *DB) UpdateSchedule(ctx context.Context, id uuid.UUID, scheduleData interface{}) (*Schedule, error)
- type DiscoveryFilters
- type DiscoveryJob
- type Host
- type HostFilters
- type HostHistory
- type HostRepository
- type IPAddr
- type JSONB
- type MACAddr
- type Migration
- type Migrator
- type Network
- type NetworkAddr
- type NetworkExclusion
- type NetworkSummary
- type NetworkSummaryRepository
- type OSFingerprint
- type PortScan
- type PortScanRepository
- type ProfileFilters
- type Repository
- type Scan
- type ScanFilters
- type ScanJob
- type ScanJobRepository
- type ScanProfile
- type ScanResult
- type ScanSummary
- type ScanTarget
- type ScanTargetRepository
- func (r *ScanTargetRepository) Create(ctx context.Context, target *ScanTarget) error
- func (r *ScanTargetRepository) Delete(ctx context.Context, id uuid.UUID) error
- func (r *ScanTargetRepository) GetAll(ctx context.Context) ([]*ScanTarget, error)
- func (r *ScanTargetRepository) GetByID(ctx context.Context, id uuid.UUID) (*ScanTarget, error)
- func (r *ScanTargetRepository) GetEnabled(ctx context.Context) ([]*ScanTarget, error)
- func (r *ScanTargetRepository) Update(ctx context.Context, target *ScanTarget) error
- type Schedule
- type ScheduleFilters
- type ScheduledJob
- type Service
Constants ¶
const ( ScanJobStatusPending = "pending" ScanJobStatusRunning = "running" ScanJobStatusCompleted = "completed" ScanJobStatusFailed = "failed" )
ScanJobStatus constants.
const ( DiscoveryJobStatusPending = "pending" DiscoveryJobStatusRunning = "running" DiscoveryJobStatusCompleted = "completed" DiscoveryJobStatusFailed = "failed" )
DiscoveryJobStatus constants.
const ( ScheduledJobTypeDiscovery = "discovery" ScheduledJobTypeScan = "scan" )
ScheduledJobType constants.
const ( DiscoveryMethodPing = "ping" DiscoveryMethodARP = "arp" DiscoveryMethodTCP = "tcp" )
DiscoveryMethod constants.
const ( OSFamilyWindows = "windows" OSFamilyLinux = "linux" OSFamilyMacOS = "macos" OSFamilyFreeBSD = "freebsd" OSFamilyUnix = "unix" OSFamilyUnknown = "unknown" )
OSFamily constants.
const ( ScanTimingParanoid = "paranoid" ScanTimingPolite = "polite" ScanTimingNormal = "normal" ScanTimingAggressive = "aggressive" ScanTimingInsane = "insane" )
ScanTiming constants.
const ( HostStatusUp = "up" HostStatusDown = "down" HostStatusUnknown = "unknown" )
HostStatus constants.
const ( PortStateOpen = "open" PortStateClosed = "closed" PortStateFiltered = "filtered" PortStateUnknown = "unknown" )
PortState constants.
const ( ScanTypeConnect = "connect" ScanTypeSYN = "syn" ScanTypeVersion = "version" )
ScanType constants.
const ( ProtocolTCP = "tcp" ProtocolUDP = "udp" )
Protocol constants.
const ( HostEventDiscovered = "discovered" HostEventStatusChange = "status_change" HostEventPortsChanged = "ports_changed" HostEventServiceFound = "service_found" )
HostHistoryEvent constants.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ActiveHost ¶
type ActiveHost struct { IPAddress IPAddr `db:"ip_address" json:"ip_address"` Hostname *string `db:"hostname" json:"hostname,omitempty"` MACAddress *MACAddr `db:"mac_address" json:"mac_address,omitempty"` Vendor *string `db:"vendor" json:"vendor,omitempty"` Status string `db:"status" json:"status"` LastSeen time.Time `db:"last_seen" json:"last_seen"` OpenPorts int `db:"open_ports" json:"open_ports"` TotalPortsScanned int `db:"total_ports_scanned" json:"total_ports_scanned"` }
ActiveHost represents the active_hosts view.
type Config ¶
type Config struct { Host string `yaml:"host" json:"host"` Port int `yaml:"port" json:"port"` Database string `yaml:"database" json:"database"` Username string `yaml:"username" json:"username"` Password string `yaml:"password" json:"password"` SSLMode string `yaml:"ssl_mode" json:"ssl_mode"` MaxOpenConns int `yaml:"max_open_conns" json:"max_open_conns"` MaxIdleConns int `yaml:"max_idle_conns" json:"max_idle_conns"` ConnMaxLifetime time.Duration `yaml:"conn_max_lifetime" json:"conn_max_lifetime"` ConnMaxIdleTime time.Duration `yaml:"conn_max_idle_time" json:"conn_max_idle_time"` }
Config holds database configuration.
func DefaultConfig ¶
func DefaultConfig() Config
DefaultConfig returns the default database configuration. Database name, username, and password must be explicitly configured.
type DB ¶
DB wraps sqlx.DB with additional functionality.
func ConnectAndMigrate ¶
ConnectAndMigrate is a convenience function to connect to database and run migrations.
func (*DB) CreateDiscoveryJob ¶
func (db *DB) CreateDiscoveryJob(ctx context.Context, jobData interface{}) (*DiscoveryJob, error)
CreateDiscoveryJob creates a new discovery job.
func (*DB) CreateHost ¶
CreateHost creates a new host record.
func (*DB) CreateProfile ¶
func (db *DB) CreateProfile(ctx context.Context, profileData interface{}) (*ScanProfile, error)
CreateProfile creates a new profile.
func (*DB) CreateScan ¶
CreateScan creates a new scan record.
func (*DB) CreateSchedule ¶
CreateSchedule creates a new schedule.
func (*DB) DeleteDiscoveryJob ¶
DeleteDiscoveryJob deletes a discovery job by ID.
func (*DB) DeleteHost ¶
DeleteHost deletes a host by ID.
func (*DB) DeleteProfile ¶
DeleteProfile deletes a profile by ID.
func (*DB) DeleteScan ¶
DeleteScan deletes a scan by ID.
func (*DB) DeleteSchedule ¶
DeleteSchedule deletes a schedule by ID.
func (*DB) DisableSchedule ¶
DisableSchedule disables a schedule.
func (*DB) EnableSchedule ¶
EnableSchedule enables a schedule.
func (*DB) GetDiscoveryJob ¶
GetDiscoveryJob retrieves a discovery job by ID.
func (*DB) GetHostScans ¶
func (db *DB) GetHostScans(ctx context.Context, hostID uuid.UUID, offset, limit int) ([]*Scan, int64, error)
GetHostScans retrieves scans for a specific host with pagination.
func (*DB) GetProfile ¶
GetProfile retrieves a profile by ID.
func (*DB) GetScanResults ¶
func (db *DB) GetScanResults(ctx context.Context, scanID uuid.UUID, offset, limit int) ([]*ScanResult, int64, error)
GetScanResults retrieves scan results with pagination.
func (*DB) GetScanSummary ¶
GetScanSummary retrieves aggregated scan statistics.
func (*DB) GetSchedule ¶
GetSchedule retrieves a schedule by ID.
func (*DB) ListDiscoveryJobs ¶
func (db *DB) ListDiscoveryJobs( ctx context.Context, filters DiscoveryFilters, offset, limit int, ) ([]*DiscoveryJob, int64, error)
ListDiscoveryJobs retrieves discovery jobs with filtering and pagination.
func (*DB) ListHosts ¶
func (db *DB) ListHosts(ctx context.Context, filters HostFilters, offset, limit int) ([]*Host, int64, error)
ListHosts retrieves hosts with filtering and pagination.
func (*DB) ListProfiles ¶
func (db *DB) ListProfiles(ctx context.Context, filters ProfileFilters, offset, limit int) ([]*ScanProfile, int64, error)
ListProfiles retrieves profiles with filtering and pagination.
func (*DB) ListSchedules ¶
func (db *DB) ListSchedules( ctx context.Context, filters ScheduleFilters, offset, limit int, ) ([]*Schedule, int64, error)
ListSchedules retrieves schedules with filtering and pagination.
func (*DB) StartDiscoveryJob ¶
StartDiscoveryJob starts discovery job execution.
func (*DB) StopDiscoveryJob ¶
StopDiscoveryJob stops discovery job execution.
func (*DB) UpdateDiscoveryJob ¶
func (db *DB) UpdateDiscoveryJob(ctx context.Context, id uuid.UUID, jobData interface{}) (*DiscoveryJob, error)
UpdateDiscoveryJob updates an existing discovery job.
func (*DB) UpdateHost ¶
UpdateHost updates an existing host.
func (*DB) UpdateProfile ¶
func (db *DB) UpdateProfile(ctx context.Context, id string, profileData interface{}) (*ScanProfile, error)
UpdateProfile updates an existing profile.
func (*DB) UpdateScan ¶
UpdateScan updates an existing scan.
type DiscoveryFilters ¶
DiscoveryFilters represents filters for listing discovery jobs.
type DiscoveryJob ¶
type DiscoveryJob struct { ID uuid.UUID `db:"id" json:"id"` Network NetworkAddr `db:"network" json:"network"` Method string `db:"method" json:"method"` StartedAt *time.Time `db:"started_at" json:"started_at,omitempty"` CompletedAt *time.Time `db:"completed_at" json:"completed_at,omitempty"` HostsDiscovered int `db:"hosts_discovered" json:"hosts_discovered"` HostsResponsive int `db:"hosts_responsive" json:"hosts_responsive"` Status string `db:"status" json:"status"` CreatedAt time.Time `db:"created_at" json:"created_at"` }
DiscoveryJob represents a network discovery job.
type Host ¶
type Host struct { ID uuid.UUID `db:"id" json:"id"` IPAddress IPAddr `db:"ip_address" json:"ip_address"` Hostname *string `db:"hostname" json:"hostname,omitempty"` MACAddress *MACAddr `db:"mac_address" json:"mac_address,omitempty"` Vendor *string `db:"vendor" json:"vendor,omitempty"` OSFamily *string `db:"os_family" json:"os_family,omitempty"` OSName *string `db:"os_name" json:"os_name,omitempty"` OSVersion *string `db:"os_version" json:"os_version,omitempty"` OSConfidence *int `db:"os_confidence" json:"os_confidence,omitempty"` OSDetectedAt *time.Time `db:"os_detected_at" json:"os_detected_at,omitempty"` OSMethod *string `db:"os_method" json:"os_method,omitempty"` OSDetails JSONB `db:"os_details" json:"os_details,omitempty"` DiscoveryMethod *string `db:"discovery_method" json:"discovery_method,omitempty"` ResponseTimeMS *int `db:"response_time_ms" json:"response_time_ms,omitempty"` DiscoveryCount int `db:"discovery_count" json:"discovery_count"` IgnoreScanning bool `db:"ignore_scanning" json:"ignore_scanning"` FirstSeen time.Time `db:"first_seen" json:"first_seen"` LastSeen time.Time `db:"last_seen" json:"last_seen"` Status string `db:"status" json:"status"` }
Host represents a discovered host.
func (*Host) GetOSFingerprint ¶
func (h *Host) GetOSFingerprint() *OSFingerprint
GetOSFingerprint returns the OS fingerprint information.
func (*Host) SetOSFingerprint ¶
func (h *Host) SetOSFingerprint(fp *OSFingerprint) error
SetOSFingerprint updates the host with OS fingerprint information.
type HostFilters ¶
HostFilters represents filters for listing hosts.
type HostHistory ¶
type HostHistory struct { ID uuid.UUID `db:"id" json:"id"` HostID uuid.UUID `db:"host_id" json:"host_id"` JobID uuid.UUID `db:"job_id" json:"job_id"` EventType string `db:"event_type" json:"event_type"` OldValue JSONB `db:"old_value" json:"old_value,omitempty"` NewValue JSONB `db:"new_value" json:"new_value,omitempty"` CreatedAt time.Time `db:"created_at" json:"created_at"` ChangedBy *string `db:"changed_by" json:"changed_by,omitempty"` ChangeReason *string `db:"change_reason" json:"change_reason,omitempty"` ClientIP *IPAddr `db:"client_ip" json:"client_ip,omitempty"` }
HostHistory represents changes to hosts over time.
type HostRepository ¶
type HostRepository struct {
// contains filtered or unexported fields
}
HostRepository handles host operations.
func NewHostRepository ¶
func NewHostRepository(db *DB) *HostRepository
NewHostRepository creates a new host repository.
func (*HostRepository) CreateOrUpdate ¶
func (r *HostRepository) CreateOrUpdate(ctx context.Context, host *Host) error
CreateOrUpdate creates a new host or updates existing one.
func (*HostRepository) GetActiveHosts ¶
func (r *HostRepository) GetActiveHosts(ctx context.Context) ([]*ActiveHost, error)
GetActiveHosts retrieves all active hosts.
type IPAddr ¶
IPAddr wraps net.IP to implement PostgreSQL INET type.
type JSONB ¶
type JSONB json.RawMessage
JSONB wraps json.RawMessage for PostgreSQL JSONB type.
func (JSONB) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
func (*JSONB) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler.
type MACAddr ¶
type MACAddr struct {
net.HardwareAddr
}
MACAddr wraps net.HardwareAddr to implement PostgreSQL MACADDR type.
type Migration ¶
type Migration struct { ID int `db:"id"` Name string `db:"name"` AppliedAt time.Time `db:"applied_at"` Checksum string `db:"checksum"` }
Migration represents a database migration.
type Migrator ¶
type Migrator struct {
// contains filtered or unexported fields
}
Migrator handles database migrations.
func NewMigrator ¶
NewMigrator creates a new migrator instance.
type Network ¶
type Network struct { ID uuid.UUID `db:"id" json:"id"` Name string `db:"name" json:"name"` CIDR NetworkAddr `db:"cidr" json:"cidr"` Description *string `db:"description" json:"description,omitempty"` DiscoveryMethod string `db:"discovery_method" json:"discovery_method"` IsActive bool `db:"is_active" json:"is_active"` ScanEnabled bool `db:"scan_enabled" json:"scan_enabled"` LastDiscovery *time.Time `db:"last_discovery" json:"last_discovery,omitempty"` LastScan *time.Time `db:"last_scan" json:"last_scan,omitempty"` HostCount int `db:"host_count" json:"host_count"` ActiveHostCount int `db:"active_host_count" json:"active_host_count"` CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` CreatedBy *string `db:"created_by" json:"created_by,omitempty"` }
Network represents a network configured for discovery and scanning.
type NetworkAddr ¶
NetworkAddr wraps net.IPNet to implement PostgreSQL CIDR type.
func (*NetworkAddr) Scan ¶
func (n *NetworkAddr) Scan(value interface{}) error
Scan implements sql.Scanner for PostgreSQL CIDR type.
func (NetworkAddr) String ¶
func (n NetworkAddr) String() string
String returns the CIDR notation string.
type NetworkExclusion ¶
type NetworkExclusion struct { ID uuid.UUID `db:"id" json:"id"` NetworkID *uuid.UUID `db:"network_id" json:"network_id,omitempty"` // NULL for global exclusions ExcludedCIDR string `db:"excluded_cidr" json:"excluded_cidr"` Reason *string `db:"reason" json:"reason,omitempty"` Enabled bool `db:"enabled" json:"enabled"` CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` CreatedBy *string `db:"created_by" json:"created_by,omitempty"` }
NetworkExclusion represents an IP exclusion rule for networks.
type NetworkSummary ¶
type NetworkSummary struct { TargetName string `db:"target_name" json:"target_name"` Network NetworkAddr `db:"network" json:"network"` ActiveHosts int `db:"active_hosts" json:"active_hosts"` TotalHosts int `db:"total_hosts" json:"total_hosts"` OpenPorts int `db:"open_ports" json:"open_ports"` LastScan *time.Time `db:"last_scan" json:"last_scan,omitempty"` }
NetworkSummary represents the network_summary view.
type NetworkSummaryRepository ¶
type NetworkSummaryRepository struct {
// contains filtered or unexported fields
}
NetworkSummaryRepository handles network summary operations.
func NewNetworkSummaryRepository ¶
func NewNetworkSummaryRepository(db *DB) *NetworkSummaryRepository
NewNetworkSummaryRepository creates a new network summary repository.
func (*NetworkSummaryRepository) GetAll ¶
func (r *NetworkSummaryRepository) GetAll(ctx context.Context) ([]*NetworkSummary, error)
GetAll retrieves network summary for all targets.
type OSFingerprint ¶
type OSFingerprint struct { Family string `json:"family"` // "windows", "linux", "macos", "freebsd", etc. Name string `json:"name"` // "Windows Server 2019", "Ubuntu 22.04", etc. Version string `json:"version"` // "10.0.17763", "22.04.1", etc. Confidence int `json:"confidence"` // 0-100 confidence score Method string `json:"method"` // "tcp_fingerprint", "banner", "ttl_analysis" Details map[string]interface{} `json:"details"` // Additional OS-specific data }
OSFingerprint represents OS detection information.
type PortScan ¶
type PortScan struct { ID uuid.UUID `db:"id" json:"id"` JobID uuid.UUID `db:"job_id" json:"job_id"` HostID uuid.UUID `db:"host_id" json:"host_id"` Port int `db:"port" json:"port"` Protocol string `db:"protocol" json:"protocol"` State string `db:"state" json:"state"` ServiceName *string `db:"service_name" json:"service_name,omitempty"` ServiceVersion *string `db:"service_version" json:"service_version,omitempty"` ServiceProduct *string `db:"service_product" json:"service_product,omitempty"` Banner *string `db:"banner" json:"banner,omitempty"` ScannedAt time.Time `db:"scanned_at" json:"scanned_at"` }
PortScan represents a port scan result.
type PortScanRepository ¶
type PortScanRepository struct {
// contains filtered or unexported fields
}
PortScanRepository handles port scan operations.
func NewPortScanRepository ¶
func NewPortScanRepository(db *DB) *PortScanRepository
NewPortScanRepository creates a new port scan repository.
func (*PortScanRepository) CreateBatch ¶
func (r *PortScanRepository) CreateBatch(ctx context.Context, scans []*PortScan) error
CreateBatch creates multiple port scan results in a transaction.
type ProfileFilters ¶
type ProfileFilters struct {
ScanType string
}
ProfileFilters represents filters for listing profiles.
type Repository ¶
type Repository struct {
// contains filtered or unexported fields
}
Repository provides database operations.
func NewRepository ¶
func NewRepository(db *DB) *Repository
NewRepository creates a new repository instance.
type Scan ¶
type Scan struct { ID uuid.UUID `json:"id" db:"id"` Name string `json:"name" db:"name"` Description string `json:"description" db:"description"` Targets []string `json:"targets" db:"targets"` ScanType string `json:"scan_type" db:"scan_type"` Ports string `json:"ports" db:"ports"` ProfileID *int64 `json:"profile_id" db:"profile_id"` Options map[string]interface{} `json:"options" db:"options"` ScheduleID *int64 `json:"schedule_id" db:"schedule_id"` Tags []string `json:"tags" db:"tags"` Status string `json:"status" db:"status"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` StartedAt *time.Time `json:"started_at" db:"started_at"` CompletedAt *time.Time `json:"completed_at" db:"completed_at"` }
Scan represents a scan configuration and execution state.
type ScanFilters ¶
ScanFilters represents filters for listing scans.
type ScanJob ¶
type ScanJob struct { ID uuid.UUID `db:"id" json:"id"` TargetID uuid.UUID `db:"target_id" json:"target_id"` ProfileID *string `db:"profile_id" json:"profile_id,omitempty"` Status string `db:"status" json:"status"` StartedAt *time.Time `db:"started_at" json:"started_at,omitempty"` CompletedAt *time.Time `db:"completed_at" json:"completed_at,omitempty"` ErrorMessage *string `db:"error_message" json:"error_message,omitempty"` ScanStats JSONB `db:"scan_stats" json:"scan_stats,omitempty"` CreatedAt time.Time `db:"created_at" json:"created_at"` ProgressPercent *int `db:"progress_percent" json:"progress_percent,omitempty"` TimeoutAt *time.Time `db:"timeout_at" json:"timeout_at,omitempty"` ExecutionDetails JSONB `db:"execution_details" json:"execution_details,omitempty"` WorkerID *string `db:"worker_id" json:"worker_id,omitempty"` CreatedBy *string `db:"created_by" json:"created_by,omitempty"` }
ScanJob represents a scan job execution.
type ScanJobRepository ¶
type ScanJobRepository struct {
// contains filtered or unexported fields
}
ScanJobRepository handles scan job operations.
func NewScanJobRepository ¶
func NewScanJobRepository(db *DB) *ScanJobRepository
NewScanJobRepository creates a new scan job repository.
func (*ScanJobRepository) Create ¶
func (r *ScanJobRepository) Create(ctx context.Context, job *ScanJob) error
Create creates a new scan job.
func (*ScanJobRepository) UpdateStatus ¶
func (r *ScanJobRepository) UpdateStatus(ctx context.Context, id uuid.UUID, status string, errorMsg *string) error
UpdateStatus updates a scan job status.
type ScanProfile ¶
type ScanProfile struct { ID string `db:"id" json:"id"` Name string `db:"name" json:"name"` Description string `db:"description" json:"description"` OSFamily pq.StringArray `db:"os_family" json:"os_family"` OSPattern pq.StringArray `db:"os_pattern" json:"os_pattern"` Ports string `db:"ports" json:"ports"` ScanType string `db:"scan_type" json:"scan_type"` Timing string `db:"timing" json:"timing"` Scripts pq.StringArray `db:"scripts" json:"scripts"` Options JSONB `db:"options" json:"options"` Priority int `db:"priority" json:"priority"` BuiltIn bool `db:"built_in" json:"built_in"` CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` }
ScanProfile represents a scanning profile configuration.
type ScanResult ¶
type ScanResult struct { ID uuid.UUID `json:"id" db:"id"` ScanID uuid.UUID `json:"scan_id" db:"scan_id"` HostID uuid.UUID `json:"host_id" db:"host_id"` Port int `json:"port" db:"port"` Protocol string `json:"protocol" db:"protocol"` State string `json:"state" db:"state"` Service string `json:"service" db:"service"` ScannedAt time.Time `json:"scanned_at" db:"scanned_at"` }
ScanResult represents a scan result entry.
type ScanSummary ¶
type ScanSummary struct { ScanID uuid.UUID `json:"scan_id"` TotalHosts int `json:"total_hosts"` TotalPorts int `json:"total_ports"` OpenPorts int `json:"open_ports"` ClosedPorts int `json:"closed_ports"` Duration int64 `json:"duration_ms"` }
ScanSummary represents aggregated scan statistics.
type ScanTarget ¶
type ScanTarget struct { ID uuid.UUID `db:"id" json:"id"` Name string `db:"name" json:"name"` Network NetworkAddr `db:"network" json:"network"` Description *string `db:"description" json:"description,omitempty"` ScanIntervalSeconds int `db:"scan_interval_seconds" json:"scan_interval_seconds"` ScanPorts string `db:"scan_ports" json:"scan_ports"` ScanType string `db:"scan_type" json:"scan_type"` Enabled bool `db:"enabled" json:"enabled"` CreatedAt time.Time `db:"created_at" json:"created_at"` UpdatedAt time.Time `db:"updated_at" json:"updated_at"` CreatedBy *string `db:"created_by" json:"created_by,omitempty"` ModifiedBy *string `db:"modified_by" json:"modified_by,omitempty"` }
ScanTarget represents a network target to scan.
type ScanTargetRepository ¶
type ScanTargetRepository struct {
// contains filtered or unexported fields
}
ScanTargetRepository handles scan target operations.
func NewScanTargetRepository ¶
func NewScanTargetRepository(db *DB) *ScanTargetRepository
NewScanTargetRepository creates a new scan target repository.
func (*ScanTargetRepository) Create ¶
func (r *ScanTargetRepository) Create(ctx context.Context, target *ScanTarget) error
Create creates a new scan target.
func (*ScanTargetRepository) GetAll ¶
func (r *ScanTargetRepository) GetAll(ctx context.Context) ([]*ScanTarget, error)
GetAll retrieves all scan targets.
func (*ScanTargetRepository) GetByID ¶
func (r *ScanTargetRepository) GetByID(ctx context.Context, id uuid.UUID) (*ScanTarget, error)
GetByID retrieves a scan target by ID.
func (*ScanTargetRepository) GetEnabled ¶
func (r *ScanTargetRepository) GetEnabled(ctx context.Context) ([]*ScanTarget, error)
GetEnabled retrieves all enabled scan targets.
func (*ScanTargetRepository) Update ¶
func (r *ScanTargetRepository) Update(ctx context.Context, target *ScanTarget) error
Update updates a scan target.
type Schedule ¶
type Schedule struct { ID uuid.UUID `json:"id" db:"id"` Name string `json:"name" db:"name"` Description string `json:"description" db:"description"` CronExpression string `json:"cron_expression" db:"cron_expression"` JobType string `json:"job_type" db:"job_type"` JobConfig map[string]interface{} `json:"job_config" db:"job_config"` Enabled bool `json:"enabled" db:"enabled"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` LastRun *time.Time `json:"last_run" db:"last_run"` NextRun *time.Time `json:"next_run" db:"next_run"` }
Schedule represents a scheduled task.
type ScheduleFilters ¶
ScheduleFilters represents filters for listing schedules.
type ScheduledJob ¶
type ScheduledJob struct { ID uuid.UUID `db:"id" json:"id"` Name string `db:"name" json:"name"` Type string `db:"type" json:"type"` // 'discovery' or 'scan' CronExpression string `db:"cron_expression" json:"cron_expression"` Config JSONB `db:"config" json:"config"` Enabled bool `db:"enabled" json:"enabled"` LastRun *time.Time `db:"last_run" json:"last_run,omitempty"` NextRun *time.Time `db:"next_run" json:"next_run,omitempty"` CreatedAt time.Time `db:"created_at" json:"created_at"` LastRunDurationMs *int `db:"last_run_duration_ms" json:"last_run_duration_ms,omitempty"` LastRunStatus *string `db:"last_run_status" json:"last_run_status,omitempty"` ConsecutiveFailures *int `db:"consecutive_failures" json:"consecutive_failures,omitempty"` MaxFailures *int `db:"max_failures" json:"max_failures,omitempty"` }
ScheduledJob represents a scheduled scanning or discovery job.
type Service ¶
type Service struct { ID uuid.UUID `db:"id" json:"id"` PortScanID uuid.UUID `db:"port_scan_id" json:"port_scan_id"` ServiceType *string `db:"service_type" json:"service_type,omitempty"` Version *string `db:"version" json:"version,omitempty"` CPE *string `db:"cpe" json:"cpe,omitempty"` Confidence *int `db:"confidence" json:"confidence,omitempty"` Details JSONB `db:"details" json:"details,omitempty"` DetectedAt time.Time `db:"detected_at" json:"detected_at"` }
Service represents detailed service detection.