Documentation
¶
Overview ¶
Package handlers provides HTTP request handlers for the Scanorama API. This file implements administrative endpoints for system management, worker control, configuration management, and log retrieval.
Package handlers provides HTTP request handlers for the Scanorama API. This file contains common utilities shared across all handlers to reduce code duplication and provide consistent patterns.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements discovery job management endpoints including CRUD operations, discovery execution control, and results retrieval.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements health check and system status endpoints.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements host management endpoints including CRUD operations and host-related scan retrieval.
Package handlers provides HTTP request handlers for the Scanorama API. This package implements REST endpoint handlers for scanning, discovery, host management, and administrative operations.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements scan profile management endpoints including CRUD operations and profile configurations for different scan types.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements scan management endpoints including CRUD operations, scan execution control, and results retrieval.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements schedule management endpoints including CRUD operations and schedule activation/deactivation.
Package handlers provides HTTP request handlers for the Scanorama API. This file implements WebSocket endpoints for real-time updates on scan and discovery job progress, status changes, and results.
Index ¶
- Constants
- func CreateEntity[T any, R any](w http.ResponseWriter, r *http.Request, entityType string, logger *slog.Logger, ...)
- func SetBuildInfo(v, c, bt string)
- func UpdateEntity[T any, R any](w http.ResponseWriter, r *http.Request, entityType string, logger *slog.Logger, ...)
- type APIConfigUpdate
- type AdminHandler
- func (h *AdminHandler) GetConfig(w http.ResponseWriter, r *http.Request)
- func (h *AdminHandler) GetLogs(w http.ResponseWriter, r *http.Request)
- func (h *AdminHandler) GetWorkerStatus(w http.ResponseWriter, r *http.Request)
- func (h *AdminHandler) StopWorker(w http.ResponseWriter, r *http.Request)
- func (h *AdminHandler) UpdateConfig(w http.ResponseWriter, r *http.Request)
- type BaseHandler
- type CRUDMetrics
- type CRUDOperation
- type ConfigResponse
- type ConfigUpdateData
- type ConfigUpdateRequest
- type ContextKey
- type CreateExclusionRequest
- type CreateNetworkRequest
- type DaemonConfigUpdate
- type DatabaseConfigUpdate
- type DatabaseInfo
- type DatabasePinger
- type DiscoveryHandler
- func (h *DiscoveryHandler) CreateDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (h *DiscoveryHandler) DeleteDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (h *DiscoveryHandler) GetDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (h *DiscoveryHandler) ListDiscoveryJobs(w http.ResponseWriter, r *http.Request)
- func (h *DiscoveryHandler) StartDiscovery(w http.ResponseWriter, r *http.Request)
- func (h *DiscoveryHandler) StopDiscovery(w http.ResponseWriter, r *http.Request)
- func (h *DiscoveryHandler) UpdateDiscoveryJob(w http.ResponseWriter, r *http.Request)
- type DiscoveryRequest
- type DiscoveryResponse
- type DiscoveryResult
- type DiscoveryResultsResponse
- type DiscoveryUpdateMessage
- type Duration
- type ErrorResponse
- type HandlerManager
- func (hm *HandlerManager) CreateDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) CreateHost(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) CreateProfile(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) CreateScan(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) CreateSchedule(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DeleteDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DeleteHost(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DeleteProfile(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DeleteScan(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DeleteSchedule(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DisableSchedule(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) DiscoveryWebSocket(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) EnableSchedule(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetConfig(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetDatabase() *db.DB
- func (hm *HandlerManager) GetDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetHost(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetHostScans(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetLogger() *slog.Logger
- func (hm *HandlerManager) GetLogs(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetMetrics() *metrics.Registry
- func (hm *HandlerManager) GetProfile(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetScan(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetScanResults(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetSchedule(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) GetWorkerStatus(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) Health(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) ListDiscoveryJobs(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) ListHosts(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) ListProfiles(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) ListScans(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) ListSchedules(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) Metrics(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) ScanWebSocket(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) StartDiscovery(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) StartScan(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) Status(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) StopDiscovery(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) StopScan(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) StopWorker(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) UpdateConfig(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) UpdateDiscoveryJob(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) UpdateHost(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) UpdateProfile(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) UpdateScan(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) UpdateSchedule(w http.ResponseWriter, r *http.Request)
- func (hm *HandlerManager) Version(w http.ResponseWriter, r *http.Request)
- type HealthHandler
- func (h *HealthHandler) Health(w http.ResponseWriter, r *http.Request)
- func (h *HealthHandler) Liveness(w http.ResponseWriter, r *http.Request)
- func (h *HealthHandler) Metrics(w http.ResponseWriter, r *http.Request)
- func (h *HealthHandler) Status(w http.ResponseWriter, r *http.Request)
- func (h *HealthHandler) Version(w http.ResponseWriter, r *http.Request)
- type HealthResponse
- type HostHandler
- func (h *HostHandler) CreateHost(w http.ResponseWriter, r *http.Request)
- func (h *HostHandler) DeleteHost(w http.ResponseWriter, r *http.Request)
- func (h *HostHandler) GetHost(w http.ResponseWriter, r *http.Request)
- func (h *HostHandler) GetHostScans(w http.ResponseWriter, r *http.Request)
- func (h *HostHandler) ListHosts(w http.ResponseWriter, r *http.Request)
- func (h *HostHandler) UpdateHost(w http.ResponseWriter, r *http.Request)
- type HostRequest
- type HostResponse
- type HostScanResponse
- type JobControlOperation
- type JobInfo
- type ListOperation
- type LivenessResponse
- type LogEntry
- type LoggingConfigUpdate
- type LogsResponse
- type MemoryInfo
- type MetricsInfo
- type NetworkHandler
- func (h *NetworkHandler) CreateGlobalExclusion(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) CreateNetwork(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) CreateNetworkExclusion(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) DeleteExclusion(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) DeleteNetwork(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) DisableNetwork(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) EnableNetwork(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) GetNetwork(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) GetNetworkStats(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) ListGlobalExclusions(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) ListNetworkExclusions(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) ListNetworks(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) RenameNetwork(w http.ResponseWriter, r *http.Request)
- func (h *NetworkHandler) UpdateNetwork(w http.ResponseWriter, r *http.Request)
- type NetworkStatsResponse
- type PaginatedResponse
- type PaginationParams
- type ProfileHandler
- func (h *ProfileHandler) CreateProfile(w http.ResponseWriter, r *http.Request)
- func (h *ProfileHandler) DeleteProfile(w http.ResponseWriter, r *http.Request)
- func (h *ProfileHandler) GetProfile(w http.ResponseWriter, r *http.Request)
- func (h *ProfileHandler) ListProfiles(w http.ResponseWriter, r *http.Request)
- func (h *ProfileHandler) UpdateProfile(w http.ResponseWriter, r *http.Request)
- type ProfileRequest
- type ProfileResponse
- type RenameNetworkRequest
- type ScanHandler
- func (h *ScanHandler) CreateScan(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) DeleteScan(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) GetScan(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) GetScanResults(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) ListScans(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) StartScan(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) StopScan(w http.ResponseWriter, r *http.Request)
- func (h *ScanHandler) UpdateScan(w http.ResponseWriter, r *http.Request)
- type ScanRequest
- type ScanResponse
- type ScanResult
- type ScanResultsResponse
- type ScanUpdateMessage
- type ScanningConfigUpdate
- type ScheduleHandler
- func (h *ScheduleHandler) CreateSchedule(w http.ResponseWriter, r *http.Request)
- func (h *ScheduleHandler) DeleteSchedule(w http.ResponseWriter, r *http.Request)
- func (h *ScheduleHandler) DisableSchedule(w http.ResponseWriter, r *http.Request)
- func (h *ScheduleHandler) EnableSchedule(w http.ResponseWriter, r *http.Request)
- func (h *ScheduleHandler) GetSchedule(w http.ResponseWriter, r *http.Request)
- func (h *ScheduleHandler) ListSchedules(w http.ResponseWriter, r *http.Request)
- func (h *ScheduleHandler) UpdateSchedule(w http.ResponseWriter, r *http.Request)
- type ScheduleRequest
- type ScheduleResponse
- type ServiceInfo
- type StatusResponse
- type SystemInfo
- type TimingProfile
- type UpdateNetworkRequest
- type VersionResponse
- type WebSocketHandler
- func (h *WebSocketHandler) BroadcastDiscoveryUpdate(update *DiscoveryUpdateMessage) error
- func (h *WebSocketHandler) BroadcastScanUpdate(update *ScanUpdateMessage) error
- func (h *WebSocketHandler) BroadcastSystemMessage(messageType, content string) error
- func (h *WebSocketHandler) Close() error
- func (h *WebSocketHandler) DiscoveryWebSocket(w http.ResponseWriter, r *http.Request)
- func (h *WebSocketHandler) GetConnectedClients() map[string]int
- func (h *WebSocketHandler) ScanWebSocket(w http.ResponseWriter, r *http.Request)
- func (h *WebSocketHandler) Shutdown()
- type WebSocketMessage
- type WorkerInfo
- type WorkerStatusResponse
Constants ¶
const ( StatusHealthy = "healthy" StatusUnhealthy = "unhealthy" StatusNotConfigured = "not configured" )
Status constants.
Variables ¶
This section is empty.
Functions ¶
func CreateEntity ¶
func CreateEntity[T any, R any]( w http.ResponseWriter, r *http.Request, entityType string, logger *slog.Logger, metricsRegistry metrics.MetricsRegistry, parseAndConvert func(*http.Request) (interface{}, error), createInDB func(context.Context, interface{}) (*T, error), toResponse func(*T) interface{}, metricName string, )
CreateEntity is a generic helper to eliminate duplication in create operations.
func SetBuildInfo ¶
func SetBuildInfo(v, c, bt string)
SetBuildInfo sets build information (called by main package).
func UpdateEntity ¶
func UpdateEntity[T any, R any]( w http.ResponseWriter, r *http.Request, entityType string, logger *slog.Logger, metricsRegistry metrics.MetricsRegistry, parseAndConvert func(*http.Request) (interface{}, error), updateInDB func(context.Context, uuid.UUID, interface{}) (*T, error), toResponse func(*T) interface{}, metricName string, )
UpdateEntity is a generic helper to eliminate duplication in update operations.
Types ¶
type APIConfigUpdate ¶
type APIConfigUpdate struct { Enabled *bool `json:"enabled,omitempty"` Host *string `json:"host,omitempty"` Port *int `json:"port,omitempty" validate:"omitempty,min=1,max=65535"` ReadTimeout *string `json:"read_timeout,omitempty"` WriteTimeout *string `json:"write_timeout,omitempty"` IdleTimeout *string `json:"idle_timeout,omitempty"` MaxHeaderBytes *int `json:"max_header_bytes,omitempty" validate:"omitempty,min=1024,max=1048576"` EnableCORS *bool `json:"enable_cors,omitempty"` CORSOrigins []string `json:"cors_origins,omitempty"` AuthEnabled *bool `json:"auth_enabled,omitempty"` RateLimitEnabled *bool `json:"rate_limit_enabled,omitempty"` RateLimitRequests *int `json:"rate_limit_requests,omitempty" validate:"omitempty,min=1,max=10000"` RateLimitWindow *string `json:"rate_limit_window,omitempty"` RequestTimeout *string `json:"request_timeout,omitempty"` MaxRequestSize *int `json:"max_request_size,omitempty" validate:"omitempty,min=1,max=104857600"` }
APIConfigUpdate represents updatable API configuration fields
type AdminHandler ¶
type AdminHandler struct {
// contains filtered or unexported fields
}
AdminHandler handles administrative API endpoints.
func NewAdminHandler ¶
func NewAdminHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *AdminHandler
NewAdminHandler creates a new admin handler.
func (*AdminHandler) GetConfig ¶
func (h *AdminHandler) GetConfig(w http.ResponseWriter, r *http.Request)
GetConfig handles GET /api/v1/admin/config - get current configuration.
func (*AdminHandler) GetLogs ¶
func (h *AdminHandler) GetLogs(w http.ResponseWriter, r *http.Request)
GetLogs handles GET /api/v1/admin/logs - retrieve system logs.
func (*AdminHandler) GetWorkerStatus ¶
func (h *AdminHandler) GetWorkerStatus(w http.ResponseWriter, r *http.Request)
GetWorkerStatus handles GET /api/v1/admin/workers - get worker pool status.
func (*AdminHandler) StopWorker ¶
func (h *AdminHandler) StopWorker(w http.ResponseWriter, r *http.Request)
StopWorker handles POST /api/v1/admin/workers/{id}/stop - stop a specific worker.
func (*AdminHandler) UpdateConfig ¶
func (h *AdminHandler) UpdateConfig(w http.ResponseWriter, r *http.Request)
UpdateConfig handles PUT /api/v1/admin/config - update configuration.
type BaseHandler ¶
type BaseHandler struct {
// contains filtered or unexported fields
}
BaseHandler provides common functionality for all handlers.
func NewBaseHandler ¶
func NewBaseHandler(logger *slog.Logger, metricsRegistry metrics.MetricsRegistry) *BaseHandler
NewBaseHandler creates a new base handler.
type CRUDMetrics ¶
type CRUDMetrics struct { Listed string Created string Retrieved string Updated string Deleted string Started string Stopped string }
CRUDMetrics holds metric names for CRUD operations.
type CRUDOperation ¶
type CRUDOperation[T any] struct { EntityType string Logger *slog.Logger Metrics metrics.MetricsRegistry }
CRUDOperation is a generic CRUD operation pattern.
func (*CRUDOperation[T]) ExecuteDelete ¶
func (op *CRUDOperation[T]) ExecuteDelete( w http.ResponseWriter, r *http.Request, id uuid.UUID, deleteFromDB func(context.Context, uuid.UUID) error, metricName string, )
ExecuteDelete performs a generic delete operation.
func (*CRUDOperation[T]) ExecuteGet ¶
func (op *CRUDOperation[T]) ExecuteGet( w http.ResponseWriter, r *http.Request, id uuid.UUID, getFromDB func(context.Context, uuid.UUID) (*T, error), toResponse func(*T) interface{}, metricName string, )
ExecuteGet performs a generic get operation.
func (*CRUDOperation[T]) ExecuteUpdate ¶
func (op *CRUDOperation[T]) ExecuteUpdate( w http.ResponseWriter, r *http.Request, id uuid.UUID, parseRequest func(*http.Request) (interface{}, error), validateRequest func(interface{}) error, updateInDB func(context.Context, uuid.UUID, interface{}) (*T, error), toResponse func(*T) interface{}, metricName string, )
ExecuteUpdate performs a generic update operation.
type ConfigResponse ¶
type ConfigResponse struct { API interface{} `json:"api"` Database interface{} `json:"database"` Scanning interface{} `json:"scanning"` Logging interface{} `json:"logging"` Daemon interface{} `json:"daemon"` }
ConfigResponse represents configuration information.
type ConfigUpdateData ¶
type ConfigUpdateData struct { API *APIConfigUpdate `json:"api,omitempty"` Database *DatabaseConfigUpdate `json:"database,omitempty"` Scanning *ScanningConfigUpdate `json:"scanning,omitempty"` Logging *LoggingConfigUpdate `json:"logging,omitempty"` Daemon *DaemonConfigUpdate `json:"daemon,omitempty"` }
ConfigUpdateData represents the configuration data for updates
type ConfigUpdateRequest ¶
type ConfigUpdateRequest struct { Section string `json:"section" validate:"required,oneof=api database scanning logging daemon"` Config ConfigUpdateData `json:"config" validate:"required"` }
ConfigUpdateRequest represents a configuration update request. ConfigUpdateRequest represents a request to update configuration
type CreateExclusionRequest ¶ added in v0.8.0
type CreateNetworkRequest ¶ added in v0.8.0
type CreateNetworkRequest struct { Name string `json:"name" validate:"required,min=1,max=100"` CIDR string `json:"cidr" validate:"required,cidr"` Description *string `json:"description,omitempty"` DiscoveryMethod string `json:"discovery_method" validate:"required,oneof=ping tcp arp"` IsActive *bool `json:"is_active,omitempty"` ScanEnabled *bool `json:"scan_enabled,omitempty"` }
CreateNetworkRequest represents the request body for creating a network
type DaemonConfigUpdate ¶
type DaemonConfigUpdate struct { PIDFile *string `json:"pid_file,omitempty" validate:"omitempty,min=1,max=255"` WorkDir *string `json:"work_dir,omitempty" validate:"omitempty,min=1,max=255"` User *string `json:"user,omitempty" validate:"omitempty,min=1,max=32"` Group *string `json:"group,omitempty" validate:"omitempty,min=1,max=32"` Daemonize *bool `json:"daemonize,omitempty"` ShutdownTimeout *string `json:"shutdown_timeout,omitempty"` }
DaemonConfigUpdate represents updatable daemon configuration fields
type DatabaseConfigUpdate ¶
type DatabaseConfigUpdate struct { Host *string `json:"host,omitempty"` Port *int `json:"port,omitempty" validate:"omitempty,min=1,max=65535"` Database *string `json:"database,omitempty" validate:"omitempty,min=1,max=63"` Username *string `json:"username,omitempty" validate:"omitempty,min=1,max=63"` SSLMode *string `json:"ssl_mode,omitempty" validate:"omitempty,oneof=disable require verify-ca verify-full"` MaxOpenConns *int `json:"max_open_conns,omitempty" validate:"omitempty,min=1,max=100"` MaxIdleConns *int `json:"max_idle_conns,omitempty" validate:"omitempty,min=1,max=100"` ConnMaxLifetime *string `json:"conn_max_lifetime,omitempty"` ConnMaxIdleTime *string `json:"conn_max_idle_time,omitempty"` }
DatabaseConfigUpdate represents updatable database configuration fields
type DatabaseInfo ¶
type DatabaseInfo struct { Connected bool `json:"connected"` Driver string `json:"driver"` Host string `json:"host"` Database string `json:"database"` LastPing time.Time `json:"last_ping"` ResponseTime time.Duration `json:"response_time_ms"` Error string `json:"error,omitempty"` }
DatabaseInfo contains database connection information.
type DatabasePinger ¶
DatabasePinger defines the interface for database health checking.
type DiscoveryHandler ¶
type DiscoveryHandler struct {
// contains filtered or unexported fields
}
DiscoveryHandler handles discovery-related API endpoints.
func NewDiscoveryHandler ¶
func NewDiscoveryHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *DiscoveryHandler
NewDiscoveryHandler creates a new discovery handler.
func (*DiscoveryHandler) CreateDiscoveryJob ¶
func (h *DiscoveryHandler) CreateDiscoveryJob(w http.ResponseWriter, r *http.Request)
CreateDiscoveryJob handles POST /api/v1/discovery - create a new discovery job.
func (*DiscoveryHandler) DeleteDiscoveryJob ¶
func (h *DiscoveryHandler) DeleteDiscoveryJob(w http.ResponseWriter, r *http.Request)
DeleteDiscoveryJob handles DELETE /api/v1/discovery/{id} - delete a discovery job.
func (*DiscoveryHandler) GetDiscoveryJob ¶
func (h *DiscoveryHandler) GetDiscoveryJob(w http.ResponseWriter, r *http.Request)
GetDiscoveryJob handles GET /api/v1/discovery/{id} - get a discovery job.
func (*DiscoveryHandler) ListDiscoveryJobs ¶
func (h *DiscoveryHandler) ListDiscoveryJobs(w http.ResponseWriter, r *http.Request)
ListDiscoveryJobs handles GET /api/v1/discovery - list discovery jobs with filtering and pagination.
func (*DiscoveryHandler) StartDiscovery ¶
func (h *DiscoveryHandler) StartDiscovery(w http.ResponseWriter, r *http.Request)
StartDiscovery handles POST /api/v1/discovery/{id}/start - start a discovery job.
func (*DiscoveryHandler) StopDiscovery ¶
func (h *DiscoveryHandler) StopDiscovery(w http.ResponseWriter, r *http.Request)
StopDiscovery handles POST /api/v1/discovery/{id}/stop - stop a running discovery job.
func (*DiscoveryHandler) UpdateDiscoveryJob ¶
func (h *DiscoveryHandler) UpdateDiscoveryJob(w http.ResponseWriter, r *http.Request)
UpdateDiscoveryJob handles PUT /api/v1/discovery/{id} - update an existing discovery job.
type DiscoveryRequest ¶
type DiscoveryRequest struct { Name string `json:"name" validate:"required,min=1,max=255"` Description string `json:"description,omitempty"` Networks []string `json:"networks" validate:"required,min=1"` Method string `json:"method" validate:"required,oneof=ping arp icmp tcp_connect"` Ports string `json:"ports,omitempty"` Timeout time.Duration `json:"timeout,omitempty"` Retries int `json:"retries,omitempty"` Options map[string]string `json:"options,omitempty"` ScheduleID *int64 `json:"schedule_id,omitempty"` Tags []string `json:"tags,omitempty"` Enabled bool `json:"enabled"` }
DiscoveryRequest represents a discovery job creation/update request.
type DiscoveryResponse ¶
type DiscoveryResponse struct { ID int64 `json:"id"` Name string `json:"name"` Description string `json:"description,omitempty"` Networks []string `json:"networks"` Method string `json:"method"` Ports string `json:"ports,omitempty"` Timeout time.Duration `json:"timeout,omitempty"` Retries int `json:"retries,omitempty"` Options map[string]string `json:"options,omitempty"` ScheduleID *int64 `json:"schedule_id,omitempty"` Tags []string `json:"tags,omitempty"` Enabled bool `json:"enabled"` Status string `json:"status"` Progress float64 `json:"progress"` HostsFound int `json:"hosts_found"` LastRun *time.Time `json:"last_run,omitempty"` NextRun *time.Time `json:"next_run,omitempty"` RunCount int `json:"run_count"` ErrorCount int `json:"error_count"` LastError string `json:"last_error,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` CreatedBy string `json:"created_by,omitempty"` }
DiscoveryResponse represents a discovery job response.
type DiscoveryResult ¶
type DiscoveryResult struct { ID int64 `json:"id"` HostIP string `json:"host_ip"` Hostname string `json:"hostname,omitempty"` MACAddress string `json:"mac_address,omitempty"` ResponseTime float64 `json:"response_time_ms"` Method string `json:"method"` IsNew bool `json:"is_new"` FirstSeen time.Time `json:"first_seen"` LastSeen time.Time `json:"last_seen"` }
DiscoveryResult represents an individual discovery result.
type DiscoveryResultsResponse ¶
type DiscoveryResultsResponse struct { JobID int64 `json:"job_id"` TotalHosts int `json:"total_hosts"` NewHosts int `json:"new_hosts"` UpdatedAt time.Time `json:"updated_at"` Results []DiscoveryResult `json:"results"` Summary map[string]interface{} `json:"summary"` GeneratedAt time.Time `json:"generated_at"` }
DiscoveryResultsResponse represents discovery results.
type DiscoveryUpdateMessage ¶
type DiscoveryUpdateMessage struct { JobID int64 `json:"job_id"` Status string `json:"status"` Progress float64 `json:"progress"` Message string `json:"message,omitempty"` Error string `json:"error,omitempty"` HostsFound int `json:"hosts_found,omitempty"` NewHosts int `json:"new_hosts,omitempty"` }
DiscoveryUpdateMessage represents a discovery job status update.
type Duration ¶
Duration is a custom type that can unmarshal duration strings from JSON
func NewDuration ¶
NewDuration creates a Duration from time.Duration
func (Duration) MarshalJSON ¶
MarshalJSON implements json.Marshaler for Duration
func (Duration) ToDuration ¶
ToDuration converts custom Duration to time.Duration
func (*Duration) UnmarshalJSON ¶
UnmarshalJSON implements json.Unmarshaler for Duration
type ErrorResponse ¶
type ErrorResponse struct { Error string `json:"error"` Message string `json:"message"` Timestamp time.Time `json:"timestamp"` RequestID string `json:"request_id,omitempty"` }
ErrorResponse represents an API error response.
type HandlerManager ¶
type HandlerManager struct {
// contains filtered or unexported fields
}
HandlerManager manages all API handlers and their dependencies.
func (*HandlerManager) CreateDiscoveryJob ¶
func (hm *HandlerManager) CreateDiscoveryJob(w http.ResponseWriter, r *http.Request)
CreateDiscoveryJob handles POST /api/v1/discovery - create a new discovery job.
func (*HandlerManager) CreateHost ¶
func (hm *HandlerManager) CreateHost(w http.ResponseWriter, r *http.Request)
CreateHost handles POST /api/v1/hosts - create a new host.
func (*HandlerManager) CreateProfile ¶
func (hm *HandlerManager) CreateProfile(w http.ResponseWriter, r *http.Request)
CreateProfile handles POST /api/v1/profiles - create a new profile.
func (*HandlerManager) CreateScan ¶
func (hm *HandlerManager) CreateScan(w http.ResponseWriter, r *http.Request)
CreateScan handles POST /api/v1/scans - create a new scan.
func (*HandlerManager) CreateSchedule ¶
func (hm *HandlerManager) CreateSchedule(w http.ResponseWriter, r *http.Request)
CreateSchedule handles POST /api/v1/schedules - create a new schedule.
func (*HandlerManager) DeleteDiscoveryJob ¶
func (hm *HandlerManager) DeleteDiscoveryJob(w http.ResponseWriter, r *http.Request)
DeleteDiscoveryJob handles DELETE /api/v1/discovery/{id} - delete a discovery job.
func (*HandlerManager) DeleteHost ¶
func (hm *HandlerManager) DeleteHost(w http.ResponseWriter, r *http.Request)
DeleteHost handles DELETE /api/v1/hosts/{id} - delete a host.
func (*HandlerManager) DeleteProfile ¶
func (hm *HandlerManager) DeleteProfile(w http.ResponseWriter, r *http.Request)
DeleteProfile handles DELETE /api/v1/profiles/{id} - delete a profile.
func (*HandlerManager) DeleteScan ¶
func (hm *HandlerManager) DeleteScan(w http.ResponseWriter, r *http.Request)
DeleteScan handles DELETE /api/v1/scans/{id} - delete a scan.
func (*HandlerManager) DeleteSchedule ¶
func (hm *HandlerManager) DeleteSchedule(w http.ResponseWriter, r *http.Request)
DeleteSchedule handles DELETE /api/v1/schedules/{id} - delete a schedule.
func (*HandlerManager) DisableSchedule ¶
func (hm *HandlerManager) DisableSchedule(w http.ResponseWriter, r *http.Request)
DisableSchedule handles POST /api/v1/schedules/{id}/disable - disable a schedule.
func (*HandlerManager) DiscoveryWebSocket ¶
func (hm *HandlerManager) DiscoveryWebSocket(w http.ResponseWriter, r *http.Request)
DiscoveryWebSocket handles WebSocket connections for discovery updates.
func (*HandlerManager) EnableSchedule ¶
func (hm *HandlerManager) EnableSchedule(w http.ResponseWriter, r *http.Request)
EnableSchedule handles POST /api/v1/schedules/{id}/enable - enable a schedule.
func (*HandlerManager) GetConfig ¶
func (hm *HandlerManager) GetConfig(w http.ResponseWriter, r *http.Request)
GetConfig retrieves the current configuration.
func (*HandlerManager) GetDatabase ¶
func (hm *HandlerManager) GetDatabase() *db.DB
GetDatabase returns the database instance.
func (*HandlerManager) GetDiscoveryJob ¶
func (hm *HandlerManager) GetDiscoveryJob(w http.ResponseWriter, r *http.Request)
GetDiscoveryJob handles GET /api/v1/discovery/{id} - get a specific discovery job.
func (*HandlerManager) GetHost ¶
func (hm *HandlerManager) GetHost(w http.ResponseWriter, r *http.Request)
GetHost handles GET /api/v1/hosts/{id} - get a specific host.
func (*HandlerManager) GetHostScans ¶
func (hm *HandlerManager) GetHostScans(w http.ResponseWriter, r *http.Request)
GetHostScans handles GET /api/v1/hosts/{id}/scans - get scans for a host.
func (*HandlerManager) GetLogger ¶
func (hm *HandlerManager) GetLogger() *slog.Logger
GetLogger returns the logger instance.
func (*HandlerManager) GetLogs ¶
func (hm *HandlerManager) GetLogs(w http.ResponseWriter, r *http.Request)
GetLogs retrieves system logs.
func (*HandlerManager) GetMetrics ¶
func (hm *HandlerManager) GetMetrics() *metrics.Registry
GetMetrics returns the metrics manager.
func (*HandlerManager) GetProfile ¶
func (hm *HandlerManager) GetProfile(w http.ResponseWriter, r *http.Request)
GetProfile handles GET /api/v1/profiles/{id} - get a specific profile.
func (*HandlerManager) GetScan ¶
func (hm *HandlerManager) GetScan(w http.ResponseWriter, r *http.Request)
GetScan handles GET /api/v1/scans/{id} - get a specific scan.
func (*HandlerManager) GetScanResults ¶
func (hm *HandlerManager) GetScanResults(w http.ResponseWriter, r *http.Request)
GetScanResults handles GET /api/v1/scans/{id}/results - get scan results.
func (*HandlerManager) GetSchedule ¶
func (hm *HandlerManager) GetSchedule(w http.ResponseWriter, r *http.Request)
GetSchedule handles GET /api/v1/schedules/{id} - get a specific schedule.
func (*HandlerManager) GetWorkerStatus ¶
func (hm *HandlerManager) GetWorkerStatus(w http.ResponseWriter, r *http.Request)
GetWorkerStatus retrieves the status of workers.
func (*HandlerManager) Health ¶
func (hm *HandlerManager) Health(w http.ResponseWriter, r *http.Request)
Health and status endpoints.
func (*HandlerManager) ListDiscoveryJobs ¶
func (hm *HandlerManager) ListDiscoveryJobs(w http.ResponseWriter, r *http.Request)
ListDiscoveryJobs handles GET /api/v1/discovery - list all discovery jobs.
func (*HandlerManager) ListHosts ¶
func (hm *HandlerManager) ListHosts(w http.ResponseWriter, r *http.Request)
ListHosts handles GET /api/v1/hosts - list all hosts.
func (*HandlerManager) ListProfiles ¶
func (hm *HandlerManager) ListProfiles(w http.ResponseWriter, r *http.Request)
ListProfiles handles GET /api/v1/profiles - list all profiles.
func (*HandlerManager) ListScans ¶
func (hm *HandlerManager) ListScans(w http.ResponseWriter, r *http.Request)
ListScans handles GET /api/v1/scans - list all scans.
func (*HandlerManager) ListSchedules ¶
func (hm *HandlerManager) ListSchedules(w http.ResponseWriter, r *http.Request)
ListSchedules handles GET /api/v1/schedules - list all schedules.
func (*HandlerManager) Metrics ¶
func (hm *HandlerManager) Metrics(w http.ResponseWriter, r *http.Request)
Metrics handles GET /metrics - get application metrics.
func (*HandlerManager) ScanWebSocket ¶
func (hm *HandlerManager) ScanWebSocket(w http.ResponseWriter, r *http.Request)
ScanWebSocket handles WebSocket connections for scan updates.
func (*HandlerManager) StartDiscovery ¶
func (hm *HandlerManager) StartDiscovery(w http.ResponseWriter, r *http.Request)
StartDiscovery handles POST /api/v1/discovery/{id}/start - start discovery.
func (*HandlerManager) StartScan ¶
func (hm *HandlerManager) StartScan(w http.ResponseWriter, r *http.Request)
StartScan handles POST /api/v1/scans/{id}/start - start a scan.
func (*HandlerManager) Status ¶
func (hm *HandlerManager) Status(w http.ResponseWriter, r *http.Request)
Status handles GET /status - get system status.
func (*HandlerManager) StopDiscovery ¶
func (hm *HandlerManager) StopDiscovery(w http.ResponseWriter, r *http.Request)
StopDiscovery handles POST /api/v1/discovery/{id}/stop - stop discovery.
func (*HandlerManager) StopScan ¶
func (hm *HandlerManager) StopScan(w http.ResponseWriter, r *http.Request)
StopScan handles POST /api/v1/scans/{id}/stop - stop a scan.
func (*HandlerManager) StopWorker ¶
func (hm *HandlerManager) StopWorker(w http.ResponseWriter, r *http.Request)
StopWorker stops a specific worker.
func (*HandlerManager) UpdateConfig ¶
func (hm *HandlerManager) UpdateConfig(w http.ResponseWriter, r *http.Request)
UpdateConfig updates the configuration.
func (*HandlerManager) UpdateDiscoveryJob ¶
func (hm *HandlerManager) UpdateDiscoveryJob(w http.ResponseWriter, r *http.Request)
UpdateDiscoveryJob handles PUT /api/v1/discovery/{id} - update an existing discovery job.
func (*HandlerManager) UpdateHost ¶
func (hm *HandlerManager) UpdateHost(w http.ResponseWriter, r *http.Request)
UpdateHost handles PUT /api/v1/hosts/{id} - update an existing host.
func (*HandlerManager) UpdateProfile ¶
func (hm *HandlerManager) UpdateProfile(w http.ResponseWriter, r *http.Request)
UpdateProfile handles PUT /api/v1/profiles/{id} - update an existing profile.
func (*HandlerManager) UpdateScan ¶
func (hm *HandlerManager) UpdateScan(w http.ResponseWriter, r *http.Request)
UpdateScan handles PUT /api/v1/scans/{id} - update an existing scan.
func (*HandlerManager) UpdateSchedule ¶
func (hm *HandlerManager) UpdateSchedule(w http.ResponseWriter, r *http.Request)
UpdateSchedule handles PUT /api/v1/schedules/{id} - update an existing schedule.
func (*HandlerManager) Version ¶
func (hm *HandlerManager) Version(w http.ResponseWriter, r *http.Request)
Version handles GET /version - get version information.
type HealthHandler ¶
type HealthHandler struct {
// contains filtered or unexported fields
}
HealthHandler handles health check and status endpoints.
func NewHealthHandler ¶
func NewHealthHandler( database DatabasePinger, logger *slog.Logger, metricsManager metrics.MetricsRegistry, ) *HealthHandler
NewHealthHandler creates a new health handler.
func (*HealthHandler) Health ¶
func (h *HealthHandler) Health(w http.ResponseWriter, r *http.Request)
Health performs a basic health check.
func (*HealthHandler) Liveness ¶
func (h *HealthHandler) Liveness(w http.ResponseWriter, r *http.Request)
Liveness performs a simple liveness check without dependencies.
func (*HealthHandler) Metrics ¶
func (h *HealthHandler) Metrics(w http.ResponseWriter, r *http.Request)
Metrics provides metrics endpoint (Prometheus format).
func (*HealthHandler) Status ¶
func (h *HealthHandler) Status(w http.ResponseWriter, r *http.Request)
Status provides detailed system status information.
func (*HealthHandler) Version ¶
func (h *HealthHandler) Version(w http.ResponseWriter, r *http.Request)
Version provides version information.
type HealthResponse ¶
type HealthResponse struct { Status string `json:"status"` Timestamp time.Time `json:"timestamp"` Uptime string `json:"uptime"` Checks map[string]string `json:"checks"` }
HealthResponse represents a health check response.
type HostHandler ¶
type HostHandler struct {
// contains filtered or unexported fields
}
HostHandler handles host-related API endpoints.
func NewHostHandler ¶
func NewHostHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *HostHandler
NewHostHandler creates a new host handler.
func (*HostHandler) CreateHost ¶
func (h *HostHandler) CreateHost(w http.ResponseWriter, r *http.Request)
CreateHost handles POST /api/v1/hosts - create a new host.
func (*HostHandler) DeleteHost ¶
func (h *HostHandler) DeleteHost(w http.ResponseWriter, r *http.Request)
DeleteHost handles DELETE /api/v1/hosts/{id} - delete a host.
func (*HostHandler) GetHost ¶
func (h *HostHandler) GetHost(w http.ResponseWriter, r *http.Request)
GetHost handles GET /api/v1/hosts/{id} - get a specific host.
func (*HostHandler) GetHostScans ¶
func (h *HostHandler) GetHostScans(w http.ResponseWriter, r *http.Request)
GetHostScans handles GET /api/v1/hosts/{id}/scans - get scans for a specific host.
func (*HostHandler) ListHosts ¶
func (h *HostHandler) ListHosts(w http.ResponseWriter, r *http.Request)
ListHosts handles GET /api/v1/hosts - list all hosts with pagination.
func (*HostHandler) UpdateHost ¶
func (h *HostHandler) UpdateHost(w http.ResponseWriter, r *http.Request)
UpdateHost handles PUT /api/v1/hosts/{id} - update a host.
type HostRequest ¶
type HostRequest struct { IP string `json:"ip" validate:"required,ip"` Hostname string `json:"hostname,omitempty"` Description string `json:"description,omitempty"` OS string `json:"os,omitempty"` OSVersion string `json:"os_version,omitempty"` Tags []string `json:"tags,omitempty"` Metadata map[string]string `json:"metadata,omitempty"` Active bool `json:"active"` }
HostRequest represents a host creation/update request.
type HostResponse ¶
type HostResponse struct { ID string `json:"id"` IP string `json:"ip"` Hostname string `json:"hostname,omitempty"` Description string `json:"description,omitempty"` OS string `json:"os,omitempty"` OSVersion string `json:"os_version,omitempty"` Tags []string `json:"tags,omitempty"` Metadata map[string]string `json:"metadata,omitempty"` Active bool `json:"active"` LastSeen *time.Time `json:"last_seen,omitempty"` LastScanID *int64 `json:"last_scan_id,omitempty"` ScanCount int `json:"scan_count"` OpenPorts int `json:"open_ports"` TotalPorts int `json:"total_ports"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DiscoveredBy string `json:"discovered_by,omitempty"` }
HostResponse represents a host response.
type HostScanResponse ¶
type HostScanResponse struct { ID int64 `json:"id"` Name string `json:"name"` ScanType string `json:"scan_type"` Status string `json:"status"` Progress float64 `json:"progress"` StartTime *time.Time `json:"start_time,omitempty"` EndTime *time.Time `json:"end_time,omitempty"` Duration *string `json:"duration,omitempty"` CreatedAt time.Time `json:"created_at"` }
HostScanResponse represents a scan associated with a host.
type JobControlOperation ¶
type JobControlOperation struct { EntityType string Logger *slog.Logger Metrics metrics.MetricsRegistry }
JobControlOperation is a job control operation pattern for start/stop operations.
func (*JobControlOperation) ExecuteStart ¶
func (op *JobControlOperation) ExecuteStart( w http.ResponseWriter, r *http.Request, id uuid.UUID, startInDB func(context.Context, uuid.UUID) error, getFromDB func(context.Context, uuid.UUID) (interface{}, error), toResponse func(interface{}) interface{}, metricName string, )
ExecuteStart performs a generic start operation.
func (*JobControlOperation) ExecuteStop ¶
func (op *JobControlOperation) ExecuteStop( w http.ResponseWriter, r *http.Request, id uuid.UUID, stopInDB func(context.Context, uuid.UUID) error, metricName string, )
ExecuteStop performs a generic stop operation.
type JobInfo ¶
type JobInfo struct { ID string `json:"id"` Type string `json:"type"` Target string `json:"target,omitempty"` StartTime time.Time `json:"start_time"` Duration time.Duration `json:"duration"` Progress float64 `json:"progress"` }
JobInfo represents current job information.
type ListOperation ¶
type ListOperation[T any, F any] struct { EntityType string MetricName string Logger *slog.Logger Metrics metrics.MetricsRegistry GetFilters func(*http.Request) F ListFromDB func(context.Context, F, int, int) ([]T, int64, error) ToResponse func(T) interface{} }
ListOperation is a generic list operation pattern.
func (*ListOperation[T, F]) Execute ¶
func (op *ListOperation[T, F]) Execute(w http.ResponseWriter, r *http.Request)
Execute performs a generic list operation.
type LivenessResponse ¶
type LivenessResponse struct { Status string `json:"status"` Timestamp time.Time `json:"timestamp"` Uptime string `json:"uptime"` }
LivenessResponse represents a simple liveness check response.
type LogEntry ¶
type LogEntry struct { Timestamp time.Time `json:"timestamp"` Level string `json:"level"` Message string `json:"message"` Component string `json:"component,omitempty"` Fields map[string]interface{} `json:"fields,omitempty"` Error string `json:"error,omitempty"` }
LogEntry represents a single log entry.
type LoggingConfigUpdate ¶
type LoggingConfigUpdate struct { Level *string `json:"level,omitempty" validate:"omitempty,oneof=debug info warn error"` Format *string `json:"format,omitempty" validate:"omitempty,oneof=text json"` Output *string `json:"output,omitempty" validate:"omitempty,min=1,max=255"` Structured *bool `json:"structured,omitempty"` RequestLogging *bool `json:"request_logging,omitempty"` }
LoggingConfigUpdate represents updatable logging configuration fields
type LogsResponse ¶
type LogsResponse struct { Lines []LogEntry `json:"lines"` TotalLines int `json:"total_lines"` StartLine int `json:"start_line"` EndLine int `json:"end_line"` HasMore bool `json:"has_more"` GeneratedAt time.Time `json:"generated_at"` }
LogsResponse represents log retrieval response.
type MemoryInfo ¶
type MemoryInfo struct { Allocated uint64 `json:"allocated_bytes"` TotalAlloc uint64 `json:"total_alloc_bytes"` System uint64 `json:"system_bytes"` GCCycles uint32 `json:"gc_cycles"` LastGC string `json:"last_gc"` HeapObjects uint64 `json:"heap_objects"` }
MemoryInfo contains memory usage information.
type MetricsInfo ¶
type MetricsInfo struct { Enabled bool `json:"enabled"` TotalCounters int `json:"total_counters"` TotalGauges int `json:"total_gauges"` TotalHistos int `json:"total_histograms"` LastUpdated time.Time `json:"last_updated"` Summary map[string]interface{} `json:"summary,omitempty"` }
MetricsInfo contains metrics system information.
type NetworkHandler ¶ added in v0.8.0
type NetworkHandler struct { *BaseHandler // contains filtered or unexported fields }
NetworkHandler handles network-related API requests
func NewNetworkHandler ¶ added in v0.8.0
func NewNetworkHandler(database *db.DB, logger *slog.Logger, metricsRegistry metrics.MetricsRegistry) *NetworkHandler
NewNetworkHandler creates a new network handler
func (*NetworkHandler) CreateGlobalExclusion ¶ added in v0.8.0
func (h *NetworkHandler) CreateGlobalExclusion(w http.ResponseWriter, r *http.Request)
CreateGlobalExclusion handles POST /api/v1/exclusions
func (*NetworkHandler) CreateNetwork ¶ added in v0.8.0
func (h *NetworkHandler) CreateNetwork(w http.ResponseWriter, r *http.Request)
CreateNetwork handles POST /api/v1/networks
func (*NetworkHandler) CreateNetworkExclusion ¶ added in v0.8.0
func (h *NetworkHandler) CreateNetworkExclusion(w http.ResponseWriter, r *http.Request)
CreateNetworkExclusion handles POST /api/v1/networks/{id}/exclusions
func (*NetworkHandler) DeleteExclusion ¶ added in v0.8.0
func (h *NetworkHandler) DeleteExclusion(w http.ResponseWriter, r *http.Request)
DeleteExclusion handles DELETE /api/v1/exclusions/{id}
func (*NetworkHandler) DeleteNetwork ¶ added in v0.8.0
func (h *NetworkHandler) DeleteNetwork(w http.ResponseWriter, r *http.Request)
DeleteNetwork handles DELETE /api/v1/networks/{id}
func (*NetworkHandler) DisableNetwork ¶ added in v0.8.0
func (h *NetworkHandler) DisableNetwork(w http.ResponseWriter, r *http.Request)
DisableNetwork handles POST /api/v1/networks/{id}/disable
func (*NetworkHandler) EnableNetwork ¶ added in v0.8.0
func (h *NetworkHandler) EnableNetwork(w http.ResponseWriter, r *http.Request)
EnableNetwork handles POST /api/v1/networks/{id}/enable
func (*NetworkHandler) GetNetwork ¶ added in v0.8.0
func (h *NetworkHandler) GetNetwork(w http.ResponseWriter, r *http.Request)
GetNetwork handles GET /api/v1/networks/{id}
func (*NetworkHandler) GetNetworkStats ¶ added in v0.8.0
func (h *NetworkHandler) GetNetworkStats(w http.ResponseWriter, r *http.Request)
GetNetworkStats handles GET /api/v1/networks/stats
func (*NetworkHandler) ListGlobalExclusions ¶ added in v0.8.0
func (h *NetworkHandler) ListGlobalExclusions(w http.ResponseWriter, r *http.Request)
ListGlobalExclusions handles GET /api/v1/exclusions
func (*NetworkHandler) ListNetworkExclusions ¶ added in v0.8.0
func (h *NetworkHandler) ListNetworkExclusions(w http.ResponseWriter, r *http.Request)
ListNetworkExclusions handles GET /api/v1/networks/{id}/exclusions
func (*NetworkHandler) ListNetworks ¶ added in v0.8.0
func (h *NetworkHandler) ListNetworks(w http.ResponseWriter, r *http.Request)
ListNetworks handles GET /api/v1/networks
func (*NetworkHandler) RenameNetwork ¶ added in v0.8.0
func (h *NetworkHandler) RenameNetwork(w http.ResponseWriter, r *http.Request)
RenameNetwork handles PUT /api/v1/networks/{id}/rename
func (*NetworkHandler) UpdateNetwork ¶ added in v0.8.0
func (h *NetworkHandler) UpdateNetwork(w http.ResponseWriter, r *http.Request)
UpdateNetwork handles PUT /api/v1/networks/{id}
type NetworkStatsResponse ¶ added in v0.8.0
type PaginatedResponse ¶
type PaginatedResponse struct { Data interface{} `json:"data"` Pagination struct { Page int `json:"page"` PageSize int `json:"page_size"` TotalItems int64 `json:"total_items"` TotalPages int `json:"total_pages"` } `json:"pagination"` }
PaginatedResponse represents a paginated API response.
type PaginationParams ¶
type PaginationParams struct { Page int `json:"page"` PageSize int `json:"page_size"` Offset int `json:"offset"` }
PaginationParams holds pagination parameters.
type ProfileHandler ¶
type ProfileHandler struct {
// contains filtered or unexported fields
}
ProfileHandler handles profile-related API endpoints.
func NewProfileHandler ¶
func NewProfileHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *ProfileHandler
NewProfileHandler creates a new profile handler.
func (*ProfileHandler) CreateProfile ¶
func (h *ProfileHandler) CreateProfile(w http.ResponseWriter, r *http.Request)
CreateProfile handles POST /api/v1/profiles - create a new profile.
func (*ProfileHandler) DeleteProfile ¶
func (h *ProfileHandler) DeleteProfile(w http.ResponseWriter, r *http.Request)
DeleteProfile handles DELETE /api/v1/profiles/{id} - delete a profile.
func (*ProfileHandler) GetProfile ¶
func (h *ProfileHandler) GetProfile(w http.ResponseWriter, r *http.Request)
GetProfile handles GET /api/v1/profiles/{id} - get a specific profile.
func (*ProfileHandler) ListProfiles ¶
func (h *ProfileHandler) ListProfiles(w http.ResponseWriter, r *http.Request)
ListProfiles handles GET /api/v1/profiles - list all profiles with pagination.
func (*ProfileHandler) UpdateProfile ¶
func (h *ProfileHandler) UpdateProfile(w http.ResponseWriter, r *http.Request)
UpdateProfile handles PUT /api/v1/profiles/{id} - update a profile.
type ProfileRequest ¶
type ProfileRequest struct { Name string `json:"name" validate:"required,min=1,max=255"` Description string `json:"description,omitempty"` // ScanType supports: connect, syn, ack, aggressive, comprehensive ScanType string `json:"scan_type" validate:"required"` Ports string `json:"ports,omitempty"` Options map[string]string `json:"options,omitempty"` Timing TimingProfile `json:"timing,omitempty"` ServiceDetection bool `json:"service_detection"` OSDetection bool `json:"os_detection"` ScriptScan bool `json:"script_scan"` UDPScan bool `json:"udp_scan"` MaxRetries int `json:"max_retries,omitempty"` HostTimeout Duration `json:"host_timeout,omitempty"` ScanDelay Duration `json:"scan_delay,omitempty"` MaxRatePPS int `json:"max_rate_pps,omitempty"` MaxHostGroupSize int `json:"max_host_group_size,omitempty"` MinHostGroupSize int `json:"min_host_group_size,omitempty"` Tags []string `json:"tags,omitempty"` Default bool `json:"default"` }
ProfileRequest represents a profile creation/update request.
type ProfileResponse ¶
type ProfileResponse struct { ID string `json:"id"` Name string `json:"name"` Description string `json:"description,omitempty"` ScanType string `json:"scan_type"` Ports string `json:"ports,omitempty"` Options map[string]string `json:"options,omitempty"` Timing TimingProfile `json:"timing,omitempty"` ServiceDetection bool `json:"service_detection"` OSDetection bool `json:"os_detection"` ScriptScan bool `json:"script_scan"` UDPScan bool `json:"udp_scan"` MaxRetries int `json:"max_retries,omitempty"` HostTimeout time.Duration `json:"host_timeout,omitempty"` ScanDelay time.Duration `json:"scan_delay,omitempty"` MaxRatePPS int `json:"max_rate_pps,omitempty"` MaxHostGroupSize int `json:"max_host_group_size,omitempty"` MinHostGroupSize int `json:"min_host_group_size,omitempty"` Tags []string `json:"tags,omitempty"` Default bool `json:"default"` UsageCount int `json:"usage_count"` LastUsed *time.Time `json:"last_used,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` CreatedBy string `json:"created_by,omitempty"` }
ProfileResponse represents a profile response.
type RenameNetworkRequest ¶ added in v0.8.0
type RenameNetworkRequest struct {
NewName string `json:"new_name" validate:"required,min=1,max=100"`
}
type ScanHandler ¶
type ScanHandler struct {
// contains filtered or unexported fields
}
ScanHandler handles scan-related API endpoints.
func NewScanHandler ¶
func NewScanHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *ScanHandler
NewScanHandler creates a new scan handler.
func (*ScanHandler) CreateScan ¶
func (h *ScanHandler) CreateScan(w http.ResponseWriter, r *http.Request)
CreateScan handles POST /api/v1/scans - create a new scan.
func (*ScanHandler) DeleteScan ¶
func (h *ScanHandler) DeleteScan(w http.ResponseWriter, r *http.Request)
DeleteScan handles DELETE /api/v1/scans/{id} - delete a scan.
func (*ScanHandler) GetScan ¶
func (h *ScanHandler) GetScan(w http.ResponseWriter, r *http.Request)
GetScan handles GET /api/v1/scans/{id} - get a specific scan.
func (*ScanHandler) GetScanResults ¶
func (h *ScanHandler) GetScanResults(w http.ResponseWriter, r *http.Request)
GetScanResults handles GET /api/v1/scans/{id}/results - get scan results.
func (*ScanHandler) ListScans ¶
func (h *ScanHandler) ListScans(w http.ResponseWriter, r *http.Request)
ListScans handles GET /api/v1/scans - list all scans with pagination. ListScans handles GET /api/v1/scans - list scans with filtering and pagination.
func (*ScanHandler) StartScan ¶
func (h *ScanHandler) StartScan(w http.ResponseWriter, r *http.Request)
StartScan handles POST /api/v1/scans/{id}/start - start scan execution.
func (*ScanHandler) StopScan ¶
func (h *ScanHandler) StopScan(w http.ResponseWriter, r *http.Request)
StopScan handles POST /api/v1/scans/{id}/stop - stop scan execution.
func (*ScanHandler) UpdateScan ¶
func (h *ScanHandler) UpdateScan(w http.ResponseWriter, r *http.Request)
UpdateScan handles PUT /api/v1/scans/{id} - update a scan.
type ScanRequest ¶
type ScanRequest struct { Name string `json:"name" validate:"required,min=1,max=255"` Description string `json:"description,omitempty"` Targets []string `json:"targets" validate:"required,min=1"` ScanType string `json:"scan_type" validate:"required,oneof=connect syn ack aggressive comprehensive"` Ports string `json:"ports,omitempty"` ProfileID *int64 `json:"profile_id,omitempty"` Options map[string]string `json:"options,omitempty"` ScheduleID *int64 `json:"schedule_id,omitempty"` Tags []string `json:"tags,omitempty"` }
ScanRequest represents a scan creation/update request.
type ScanResponse ¶
type ScanResponse struct { ID uuid.UUID `json:"id"` Name string `json:"name"` Description string `json:"description,omitempty"` Targets []string `json:"targets"` ScanType string `json:"scan_type"` Ports string `json:"ports,omitempty"` ProfileID *int64 `json:"profile_id,omitempty"` Options map[string]string `json:"options,omitempty"` ScheduleID *int64 `json:"schedule_id,omitempty"` Tags []string `json:"tags,omitempty"` Status string `json:"status"` Progress float64 `json:"progress"` StartTime *time.Time `json:"start_time,omitempty"` EndTime *time.Time `json:"end_time,omitempty"` Duration *string `json:"duration,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` CreatedBy string `json:"created_by,omitempty"` }
ScanResponse represents a scan response.
type ScanResult ¶
type ScanResult struct { ID uuid.UUID `json:"id"` HostIP string `json:"host_ip"` Hostname string `json:"hostname,omitempty"` Port int `json:"port"` Protocol string `json:"protocol"` State string `json:"state"` Service string `json:"service,omitempty"` Version string `json:"version,omitempty"` Banner string `json:"banner,omitempty"` ScanTime time.Time `json:"scan_time"` }
ScanResult represents an individual scan result.
type ScanResultsResponse ¶
type ScanResultsResponse 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"` Results []ScanResult `json:"results"` Summary *db.ScanSummary `json:"summary"` GeneratedAt time.Time `json:"generated_at"` }
ScanResultsResponse represents scan results.
type ScanUpdateMessage ¶
type ScanUpdateMessage struct { ScanID int64 `json:"scan_id"` Status string `json:"status"` Progress float64 `json:"progress"` Message string `json:"message,omitempty"` Error string `json:"error,omitempty"` StartTime *time.Time `json:"start_time,omitempty"` EndTime *time.Time `json:"end_time,omitempty"` ResultsCount int `json:"results_count,omitempty"` }
ScanUpdateMessage represents a scan status update.
type ScanningConfigUpdate ¶
type ScanningConfigUpdate struct { WorkerPoolSize *int `json:"worker_pool_size,omitempty" validate:"omitempty,min=1,max=1000"` DefaultInterval *string `json:"default_interval,omitempty"` MaxScanTimeout *string `json:"max_scan_timeout,omitempty"` DefaultPorts *string `json:"default_ports,omitempty" validate:"omitempty,max=1000"` DefaultScanType *string `json:"default_scan_type,omitempty" validate:"omitempty,oneof=connect syn ack window fin null xmas maimon"` //nolint:lll MaxConcurrentTargets *int `json:"max_concurrent_targets,omitempty" validate:"omitempty,min=1,max=10000"` EnableServiceDetection *bool `json:"enable_service_detection,omitempty"` EnableOSDetection *bool `json:"enable_os_detection,omitempty"` }
ScanningConfigUpdate represents updatable scanning configuration fields
type ScheduleHandler ¶
type ScheduleHandler struct {
// contains filtered or unexported fields
}
ScheduleHandler handles schedule-related API endpoints.
func NewScheduleHandler ¶
func NewScheduleHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *ScheduleHandler
NewScheduleHandler creates a new schedule handler.
func (*ScheduleHandler) CreateSchedule ¶
func (h *ScheduleHandler) CreateSchedule(w http.ResponseWriter, r *http.Request)
CreateSchedule handles POST /api/v1/schedules - create a new schedule.
func (*ScheduleHandler) DeleteSchedule ¶
func (h *ScheduleHandler) DeleteSchedule(w http.ResponseWriter, r *http.Request)
DeleteSchedule handles DELETE /api/v1/schedules/{id} - delete a schedule.
func (*ScheduleHandler) DisableSchedule ¶
func (h *ScheduleHandler) DisableSchedule(w http.ResponseWriter, r *http.Request)
DisableSchedule handles POST /api/v1/schedules/{id}/disable - disable a schedule.
func (*ScheduleHandler) EnableSchedule ¶
func (h *ScheduleHandler) EnableSchedule(w http.ResponseWriter, r *http.Request)
EnableSchedule handles POST /api/v1/schedules/{id}/enable - enable a schedule.
func (*ScheduleHandler) GetSchedule ¶
func (h *ScheduleHandler) GetSchedule(w http.ResponseWriter, r *http.Request)
GetSchedule handles GET /api/v1/schedules/{id} - get a specific schedule.
func (*ScheduleHandler) ListSchedules ¶
func (h *ScheduleHandler) ListSchedules(w http.ResponseWriter, r *http.Request)
ListSchedules handles GET /api/v1/schedules - list all schedules with pagination.
func (*ScheduleHandler) UpdateSchedule ¶
func (h *ScheduleHandler) UpdateSchedule(w http.ResponseWriter, r *http.Request)
UpdateSchedule handles PUT /api/v1/schedules/{id} - update a schedule.
type ScheduleRequest ¶
type ScheduleRequest struct { Name string `json:"name" validate:"required,min=1,max=255"` Description string `json:"description,omitempty"` CronExpr string `json:"cron_expr" validate:"required"` Type string `json:"type" validate:"required,oneof=scan discovery"` TargetID int64 `json:"target_id" validate:"required"` Enabled bool `json:"enabled"` MaxRunTime time.Duration `json:"max_run_time,omitempty"` RetryOnError bool `json:"retry_on_error"` MaxRetries int `json:"max_retries,omitempty"` RetryDelay time.Duration `json:"retry_delay,omitempty"` Options map[string]string `json:"options,omitempty"` Tags []string `json:"tags,omitempty"` NotifyOnFail bool `json:"notify_on_fail"` NotifyEmails []string `json:"notify_emails,omitempty"` }
ScheduleRequest represents a schedule creation/update request.
type ScheduleResponse ¶
type ScheduleResponse struct { ID int64 `json:"id"` Name string `json:"name"` Description string `json:"description,omitempty"` CronExpr string `json:"cron_expr"` Type string `json:"type"` TargetID int64 `json:"target_id"` TargetName string `json:"target_name,omitempty"` Enabled bool `json:"enabled"` MaxRunTime time.Duration `json:"max_run_time,omitempty"` RetryOnError bool `json:"retry_on_error"` MaxRetries int `json:"max_retries,omitempty"` RetryDelay time.Duration `json:"retry_delay,omitempty"` Options map[string]string `json:"options,omitempty"` Tags []string `json:"tags,omitempty"` NotifyOnFail bool `json:"notify_on_fail"` NotifyEmails []string `json:"notify_emails,omitempty"` Status string `json:"status"` LastRun *time.Time `json:"last_run,omitempty"` NextRun *time.Time `json:"next_run,omitempty"` RunCount int `json:"run_count"` SuccessCount int `json:"success_count"` ErrorCount int `json:"error_count"` LastError string `json:"last_error,omitempty"` LastDuration *time.Duration `json:"last_duration,omitempty"` AvgDuration *time.Duration `json:"avg_duration,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` CreatedBy string `json:"created_by,omitempty"` }
ScheduleResponse represents a schedule response.
type ServiceInfo ¶
type ServiceInfo struct { Name string `json:"name"` Version string `json:"version"` StartTime time.Time `json:"start_time"` Uptime string `json:"uptime"` PID int `json:"pid"` }
ServiceInfo contains service-related information.
type StatusResponse ¶
type StatusResponse struct { Service ServiceInfo `json:"service"` System SystemInfo `json:"system"` Database DatabaseInfo `json:"database"` Metrics MetricsInfo `json:"metrics"` Health HealthResponse `json:"health"` Timestamp time.Time `json:"timestamp"` }
StatusResponse represents a detailed status response.
type SystemInfo ¶
type SystemInfo struct { OS string `json:"os"` Architecture string `json:"architecture"` CPUs int `json:"cpus"` GoVersion string `json:"go_version"` Memory MemoryInfo `json:"memory"` Goroutines int `json:"goroutines"` Environment map[string]string `json:"environment,omitempty"` }
SystemInfo contains system-related information.
type TimingProfile ¶
type TimingProfile struct { Template string `json:"template,omitempty"` // paranoid, sneaky, polite, normal, aggressive, insane MinRTTTimeout Duration `json:"min_rtt_timeout,omitempty"` MaxRTTTimeout Duration `json:"max_rtt_timeout,omitempty"` InitialRTTTimeout Duration `json:"initial_rtt_timeout,omitempty"` MaxRetries int `json:"max_retries,omitempty"` HostTimeout Duration `json:"host_timeout,omitempty"` ScanDelay Duration `json:"scan_delay,omitempty"` MaxScanDelay Duration `json:"max_scan_delay,omitempty"` }
TimingProfile represents timing configuration for scans.
type UpdateNetworkRequest ¶ added in v0.8.0
type UpdateNetworkRequest struct { Name *string `json:"name,omitempty" validate:"omitempty,min=1,max=100"` CIDR *string `json:"cidr,omitempty" validate:"omitempty,cidr"` Description *string `json:"description,omitempty"` DiscoveryMethod *string `json:"discovery_method,omitempty" validate:"omitempty,oneof=ping tcp arp"` IsActive *bool `json:"is_active,omitempty"` ScanEnabled *bool `json:"scan_enabled,omitempty"` }
type VersionResponse ¶
type VersionResponse struct { Version string `json:"version"` Commit string `json:"commit"` BuildTime string `json:"build_time"` GoVersion string `json:"go_version"` Timestamp time.Time `json:"timestamp"` }
VersionResponse represents version information.
type WebSocketHandler ¶
type WebSocketHandler struct {
// contains filtered or unexported fields
}
WebSocketHandler handles WebSocket connections for real-time updates.
func NewWebSocketHandler ¶
func NewWebSocketHandler(database *db.DB, logger *slog.Logger, metricsManager *metrics.Registry) *WebSocketHandler
NewWebSocketHandler creates a new WebSocket handler.
func (*WebSocketHandler) BroadcastDiscoveryUpdate ¶
func (h *WebSocketHandler) BroadcastDiscoveryUpdate(update *DiscoveryUpdateMessage) error
BroadcastDiscoveryUpdate sends a discovery update to all connected discovery clients.
func (*WebSocketHandler) BroadcastScanUpdate ¶
func (h *WebSocketHandler) BroadcastScanUpdate(update *ScanUpdateMessage) error
BroadcastScanUpdate sends a scan update to all connected scan clients.
func (*WebSocketHandler) BroadcastSystemMessage ¶
func (h *WebSocketHandler) BroadcastSystemMessage(messageType, content string) error
BroadcastSystemMessage sends a system message to all connected clients.
func (*WebSocketHandler) Close ¶
func (h *WebSocketHandler) Close() error
Close gracefully shuts down the WebSocket handler.
func (*WebSocketHandler) DiscoveryWebSocket ¶
func (h *WebSocketHandler) DiscoveryWebSocket(w http.ResponseWriter, r *http.Request)
DiscoveryWebSocket handles WebSocket connections for discovery updates.
func (*WebSocketHandler) GetConnectedClients ¶
func (h *WebSocketHandler) GetConnectedClients() map[string]int
GetConnectedClients returns the number of connected clients by type.
func (*WebSocketHandler) ScanWebSocket ¶
func (h *WebSocketHandler) ScanWebSocket(w http.ResponseWriter, r *http.Request)
ScanWebSocket handles WebSocket connections for scan updates.
func (*WebSocketHandler) Shutdown ¶
func (h *WebSocketHandler) Shutdown()
Shutdown gracefully stops the WebSocket handler.
type WebSocketMessage ¶
type WebSocketMessage struct { Type string `json:"type"` Timestamp time.Time `json:"timestamp"` Data interface{} `json:"data"` RequestID string `json:"request_id,omitempty"` }
WebSocketMessage represents a WebSocket message structure.
type WorkerInfo ¶
type WorkerInfo struct { ID string `json:"id"` Status string `json:"status"` CurrentJob *JobInfo `json:"current_job,omitempty"` JobsProcessed int64 `json:"jobs_processed"` JobsFailed int64 `json:"jobs_failed"` LastJobTime *time.Time `json:"last_job_time,omitempty"` StartTime time.Time `json:"start_time"` Uptime time.Duration `json:"uptime"` MemoryUsage int64 `json:"memory_usage_bytes"` CPUUsage float64 `json:"cpu_usage_percent"` ErrorRate float64 `json:"error_rate"` Metrics map[string]int `json:"metrics"` }
WorkerInfo represents individual worker information.
type WorkerStatusResponse ¶
type WorkerStatusResponse struct { TotalWorkers int `json:"total_workers"` ActiveWorkers int `json:"active_workers"` IdleWorkers int `json:"idle_workers"` QueueSize int `json:"queue_size"` ProcessedJobs int64 `json:"processed_jobs"` FailedJobs int64 `json:"failed_jobs"` AvgJobDuration time.Duration `json:"avg_job_duration"` Workers []WorkerInfo `json:"workers"` Summary map[string]interface{} `json:"summary"` Timestamp time.Time `json:"timestamp"` }
WorkerStatusResponse represents worker pool status information.