web

package
v0.0.0-...-890248b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 21, 2026 License: AGPL-3.0 Imports: 187 Imported by: 0

Documentation

Overview

Package web provides the web UI layer for usulnet.

Index

Constants

View Source
const (
	CookieSession       = "usulnet_session"
	CookieTheme         = "usulnet_theme"
	CookieOAuthState    = "oauth_state"
	CookieOAuthProvider = "oauth_provider"
)

Cookie name constants used throughout the web layer.

View Source
const ReconLegalNotice = `The Privacy & Recon module performs passive and light-active OSINT against ` +
	`identifiers you control. Before enabling it you must acknowledge:

  1. You will only scan targets you own or are explicitly authorized to assess.
  2. Recon jobs may contact third-party services; opt-in connectors (HIBP, ` +
	`Shodan, etc.) require your own API keys and are off by default.
  3. Findings may include personal data subject to GDPR or similar regimes. ` +
	`usulnet stores them encrypted at rest with a tenant retention TTL.
  4. Every scan is recorded in the recon audit log, including the ` +
	`acting user and the target.
  5. Active offensive testing (exploits, port floods, credential probing) is ` +
	`out of scope. The module is passive + light-active recon only.

By acknowledging you accept responsibility for the targets you submit and ` +
	`agree that misuse may be logged and audited.`

ReconLegalNotice is the text shown on the acknowledgement modal before the recon module is usable. It is loaded inline so the package has no run-time file-system dependency. See docs/recon.md §7.4.

Variables

View Source
var ErrServiceNotConfigured = errors.New("service not configured")

ErrServiceNotConfigured is returned when an operation is attempted on a service that is not configured.

Functions

func BindForm

func BindForm(r *http.Request, dst any) string

BindForm parses r.Form into dst and validates the resulting struct.

dst must be a non-nil pointer to a struct. Each exported field is mapped from a form value by the `form:"<name>"` tag (falling back to a snake_case version of the field name); validation rules are taken from the `validate:"..."` tag and dispatched through the internal/pkg/validator package so the error messages stay consistent with the JSON API layer.

Returns "" on success. On any failure (form parse error, decode error, validation error) returns a single human-readable message suitable for setFlash. Use BindFormFields when the caller needs the per-field error map (e.g. to re-render the form with hints next to each input).

func BindFormFields

func BindFormFields(r *http.Request, dst any) (string, map[string]string)

BindFormFields is the field-level variant of BindForm. On a validation failure it returns both the flattened flash message and the field→message map; on a parse / decode failure only the message (the map is nil because the validator never ran).

The field names in the returned map are the form-key names — the same identifiers the HTML inputs use — even when the struct does not carry an explicit json tag. The internal/pkg/validator package resolves field names from json tags and would otherwise leak the Go field name (PascalCase) into flash messages.

func CalculateScoreFromIssues

func CalculateScoreFromIssues(issues []IssueView) int

CalculateScoreFromIssues calculates security score from issues.

func ContainerStateIcon

func ContainerStateIcon(state string) string

ContainerStateIcon returns the icon class for container state.

func EmptyStateCatalogBackupVerify

func EmptyStateCatalogBackupVerify() components.EmptyStateData

EmptyStateCatalogBackupVerify returns the empty-state for /backup-verify.

func EmptyStateCatalogBackups

func EmptyStateCatalogBackups() components.EmptyStateData

EmptyStateCatalogBackups returns the empty-state for /backups.

func EmptyStateCatalogCalendar

func EmptyStateCatalogCalendar() components.EmptyStateData

EmptyStateCatalogCalendar returns the empty-state for /calendar.

func EmptyStateCatalogCrontab

func EmptyStateCatalogCrontab() components.EmptyStateData

EmptyStateCatalogCrontab returns the empty-state for /crontab.

func EmptyStateCatalogDNS

func EmptyStateCatalogDNS() components.EmptyStateData

EmptyStateCatalogDNS returns the empty-state for /dns.

func EmptyStateCatalogFirewall

func EmptyStateCatalogFirewall() components.EmptyStateData

EmptyStateCatalogFirewall returns the empty-state for /firewall.

func EmptyStateCatalogImageBuilder

func EmptyStateCatalogImageBuilder() components.EmptyStateData

EmptyStateCatalogImageBuilder returns the empty-state for /image-builder.

func EmptyStateCatalogMarketplace

func EmptyStateCatalogMarketplace() components.EmptyStateData

EmptyStateCatalogMarketplace returns the empty-state for /marketplace (shown when the catalogue exists but is filtered to zero results).

func EmptyStateCatalogProxy

func EmptyStateCatalogProxy() components.EmptyStateData

EmptyStateCatalogProxy returns the empty-state for /proxy (shown when no NPM connection is configured; replaces the bare "NPM Not Connected" message from v26.5.1).

func EmptyStateCatalogRollback

func EmptyStateCatalogRollback() components.EmptyStateData

EmptyStateCatalogRollback returns the empty-state for /rollback.

func EmptyStateCatalogSSLObservatory

func EmptyStateCatalogSSLObservatory() components.EmptyStateData

EmptyStateCatalogSSLObservatory returns the empty-state for /ssl.

func EmptyStateCatalogWireGuard

func EmptyStateCatalogWireGuard() components.EmptyStateData

EmptyStateCatalogWireGuard returns the empty-state for /wireguard.

func ExtractStackName

func ExtractStackName(labels map[string]string) string

ExtractStackName extracts stack name from container labels.

func FormatPortMappings

func FormatPortMappings(ports []PortView) string

FormatPortMappings formats a list of port mappings for display.

func GenerateCSRFToken

func GenerateCSRFToken() string

GenerateCSRFToken generates a random CSRF token.

func GetActiveHostIDFromContext

func GetActiveHostIDFromContext(ctx context.Context) string

GetActiveHostIDFromContext extracts the active host ID from the request context.

func GetCSRFTokenFromContext

func GetCSRFTokenFromContext(ctx context.Context) string

GetCSRFTokenFromContext extracts CSRF token from request context.

func GetCatalogCategories

func GetCatalogCategories() []string

GetCatalogCategories returns unique categories.

func GetQueryParam

func GetQueryParam(r *http.Request, key string, defaultValue string) string

GetQueryParam extracts query parameter from request.

func GetQueryParamInt

func GetQueryParamInt(r *http.Request, key string, defaultValue int) int

GetQueryParamInt extracts integer query parameter.

func GetScopeFromContext

func GetScopeFromContext(ctx context.Context) *models.ResourceScope

GetScopeFromContext extracts the ResourceScope from context. Returns a non-filtering scope if not present.

func GetThemeFromContext

func GetThemeFromContext(ctx context.Context) string

GetThemeFromContext extracts theme from request context.

func IsInternalNetwork

func IsInternalNetwork(name string) bool

IsInternalNetwork checks if a network name is an internal Docker network.

func MaxRequestBody

func MaxRequestBody(maxBytes int64) func(http.Handler) http.Handler

MaxRequestBody limits the size of request bodies to prevent memory exhaustion. Uses http.MaxBytesReader which returns a proper 413 error when exceeded.

func NetworkDriverIcon

func NetworkDriverIcon(driver string) string

NetworkDriverIcon returns icon class for network driver.

func NoCache

func NoCache(next http.Handler) http.Handler

NoCache middleware adds headers to prevent caching.

func OnboardingRequired

func OnboardingRequired(svc onboardingChecker) func(http.Handler) http.Handler

OnboardingRequired redirects an unfinished admin to /onboarding/welcome before any other page renders. Non-admins and finished installs pass through unchanged.

Mounts AFTER AuthRequired so the user is already in context. Mounts BEFORE the per-route permission middleware so the redirect happens before any RBAC denial — an admin trying to view /containers during onboarding ends up on the wizard, not a "Forbidden" page.

func PreferencesMiddleware

func PreferencesMiddleware(loader PreferencesLoader) func(http.Handler) http.Handler

PreferencesMiddleware loads user preferences for the authenticated user and injects them into the request context. All downstream handlers and templates can then access preferences without additional DB calls.

Must be placed AFTER authentication middleware (needs UserInfo in context).

func ReconSeverityClass

func ReconSeverityClass(severity string) string

ReconSeverityClass returns the Tailwind classes for a severity badge, matching the palette used by the security and vulnerability pages.

func RecordAccessEvent

func RecordAccessEvent(userName, userID, action, resourceType, resourceID, resourceName, details, ip, ua string, success bool, errMsg string)

RecordAccessEvent records an access event to the in-memory audit log and persists it to the database via the audit service if configured.

func RecoverPanic

func RecoverPanic(handler *Handler) func(http.Handler) http.Handler

RecoverPanic middleware recovers from panics and shows error page.

func RegisterBackupVerifyRoutes

func RegisterBackupVerifyRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterBackupVerifyRoutes attaches the backup verification web UI to the authenticated frontend tree. v26.2.7 mounted these on the top-level router; v26.5.1 keeps the same paths but groups them so session-cookie + CSRF middleware applies.

All routes degrade gracefully when the service is nil (handler renders a "not configured" page) so this registration is unconditional — no edition gate, in line with principles.md §2.

func RegisterCalendarRoutes

func RegisterCalendarRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterCalendarRoutes attaches the calendar web UI to the authenticated frontend tree. All routes degrade gracefully when the calendar service is nil (handler_calendar.go renders a "not configured" error page), so registration is unconditional — no feature flag.

func RegisterCrontabRoutes

func RegisterCrontabRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterCrontabRoutes attaches the crontab web UI to the authenticated frontend tree. v26.2.7 mounted these on the top-level router; v26.5.1 keeps the same paths but groups them so the session-cookie + CSRF middleware applied to the frontend group also gates the crontab surface.

All routes degrade gracefully when the crontab service is nil (handler_crontab.go renders a "not configured" error page) so this registration is unconditional — no feature flag.

func RegisterDNSRoutes

func RegisterDNSRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterDNSRoutes attaches the DNS provider web UI to the authenticated frontend tree. v26.5.1 nil-safe pattern: registration is unconditional and the handler renders a "not configured" page when wiring is missing (typically because the data encryption key is unset).

func RegisterDockerEngineRoutes

func RegisterDockerEngineRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterDockerEngineRoutes attaches the Docker engine config editor to the authenticated frontend tree.

Read endpoints (editor + history) require security:view; the destructive endpoints (apply + restore) require admin because they touch the host's daemon configuration and can take dockerd offline.

Registration is unconditional — the handler renders an "unavailable" page when the service is nil. No biz gate, no edition check.

func RegisterEgressRoutes

func RegisterEgressRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterEgressRoutes attaches the L7 egress filter web UI to the authenticated frontend tree. Same nil-safe pattern as the rest of the v26.5.x ports: the handler renders a "not configured" page when the service is unwired, so registration is unconditional — there is no feature flag.

Routes:

GET  /egress                — list policies + recent denies
POST /egress                — create a policy (form-encoded)
POST /egress/{id}/delete    — delete a policy (form-encoded)

Reads sit under security:view; mutations sit under security:scan — matches the firewall module so role grants compose cleanly.

func RegisterFirewallRoutes

func RegisterFirewallRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterFirewallRoutes attaches the firewall web UI to the authenticated frontend tree. v26.2.7 mounted these on the top-level router; v26.5.1 keeps the same paths but groups them so the session-cookie + CSRF middleware applied to the frontend group also gates the firewall surface.

All routes degrade gracefully when the firewall service is nil (handler_firewall.go renders a "not configured" error page) so this registration is unconditional — no feature flag.

func RegisterFrontendRoutes

func RegisterFrontendRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterFrontendRoutes registers all web routes using Templ handlers. All routes are wrapped in a Group so that Use() calls do not conflict with routes already registered on the parent router (API routes).

func RegisterImageBuilderRoutes

func RegisterImageBuilderRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterImageBuilderRoutes attaches the image builder web UI to the authenticated frontend tree. Per the v26.5.1 "one AGPL build" principle, registration is unconditional — when the service is nil the handler renders a "not configured" page instead.

RBAC: read endpoints require `image:view`, mutations require `image:create` (the same permissions that gate the existing image pull/build buttons in the regular images view).

func RegisterMarketplaceRoutes

func RegisterMarketplaceRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterMarketplaceRoutes attaches the marketplace web UI to the authenticated frontend tree. All routes degrade gracefully when the marketplace service is nil (the handler renders a "not configured" page), so registration is unconditional — no biz gate.

func RegisterReconRoutes

func RegisterReconRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterReconRoutes attaches the v26.5.0 recon and metadata routes to the given router. It is called from RegisterFrontendRoutes inside the authenticated group so the existing auth/CSRF middleware applies.

The recon module is feature-flag gated at the service layer: when the service is nil or IsEnabled() returns false the handlers themselves short-circuit with 404, matching the API behavior described in docs/v26.5/technical-notes.md "Feature flag".

func RegisterRollbackRoutes

func RegisterRollbackRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterRollbackRoutes attaches the automated rollback web UI to the authenticated frontend tree.

All routes degrade gracefully when the rollback service is nil (handler_rollback.go renders a "not configured" error page). The registration is unconditional — no feature flag, no biz gate.

func RegisterSSLObservatoryRoutes

func RegisterSSLObservatoryRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterSSLObservatoryRoutes attaches the SSL observatory web UI to the authenticated frontend tree. v26.5.1 keeps the same paths as v26.2.7 but drops the biz gate — the registration is unconditional.

All routes degrade gracefully when the service is nil (handler_ssl_observatory.go renders a "not configured" error page).

func RegisterWireGuardRoutes

func RegisterWireGuardRoutes(r chi.Router, h *Handler, m *Middleware)

RegisterWireGuardRoutes attaches the WireGuard web UI to the authenticated frontend tree. v26.2.7 mounted these on the top-level router; v26.5.1 keeps the same paths but applies per-method RBAC.

Registration is unconditional — when the service is nil the handler renders a "not configured" page (typically because the data encryption key is unset). No biz/edition gating.

func RegisterYARARoutes

func RegisterYARARoutes(r chi.Router, h *Handler, m *Middleware)

RegisterYARARoutes attaches the YARA scanner UI to the authenticated frontend tree. Same nil-safe pattern as the rest of the v26.5.x modules: the handler renders a "not configured" page when the service is unwired (typically because the toolkit image isn't available), so registration is unconditional.

Routes:

GET  /scan/yara      — render form, list rulesets
POST /scan/yara      — submit scan, render result inline

Both share a single handler because the result is request-scoped — there's no DB row to redirect to, and HTMX partial updates would be overkill for a manual on-demand operator action.

Reads + mutations both sit under security:scan (operator+); a scanner is an operator surface, not a viewer one.

func ScoreToGrade

func ScoreToGrade(score int) string

ScoreToGrade converts numeric score to letter grade.

func SecureHeaders

func SecureHeaders(next http.Handler) http.Handler

SecureHeaders adds security headers to response.

func SetAuditDBService

func SetAuditDBService(svc *auditsvc.Service)

SetAuditDBService sets the audit service for database persistence of access events. Called during app startup to wire the persistent audit log.

func SetFlash

func SetFlash(w http.ResponseWriter, r *http.Request, sessionStore SessionStore, sessionName string, msgType, message string) error

SetFlash stores a flash message in the session.

func ToTemplContainerDetailData

func ToTemplContainerDetailData(p *PageData, c *ContainerView, tab string) containers.ContainerDetailData

ToTemplContainerDetailData converts data for container detail page

func ToTemplContainerFilesData

func ToTemplContainerFilesData(p *PageData, c *ContainerView, path string) containers.ContainerFilesData

ToTemplContainerFilesData converts data for container file browser page

func ToTemplContainerInspectData

func ToTemplContainerInspectData(p *PageData, c *ContainerView, inspectJSON string) containers.ContainerInspectData

ToTemplContainerInspectData converts data for container inspect page

func ToTemplContainerLogsData

func ToTemplContainerLogsData(p *PageData, c *ContainerView, tail int, since string, follow bool) containers.ContainerLogsData

ToTemplContainerLogsData converts data for container logs page

func ToTemplContainerSettingsData

func ToTemplContainerSettingsData(p *PageData, c *ContainerView, networks []string, details *ContainerSettingsDetails) containers.ContainerSettingsData

ToTemplContainerSettingsData converts data for container settings page

func ToTemplContainerStatsData

func ToTemplContainerStatsData(p *PageData, c *ContainerView) containers.ContainerStatsData

ToTemplContainerStatsData converts data for container stats page

func ToTemplContainerTerminalData

func ToTemplContainerTerminalData(p *PageData, c *ContainerView, shell string) containers.ContainerTerminalData

ToTemplContainerTerminalData converts data for container terminal page

func ToTemplContainersListData

func ToTemplContainersListData(p *PageData, containersList []ContainerView) containers.ContainersListData

ToTemplContainersListData converts data for containers list page

func ToTemplDashboardData

func ToTemplDashboardData(p *PageData, containersList []ContainerView, eventsList []EventView, sysInfo *SystemInfoView) pages.DashboardData

ToTemplDashboardData converts data for dashboard page

func ToTemplImagesListData

func ToTemplImagesListData(p *PageData, imagesList []ImageView, totalSize int64, filters images.ImageFilters) images.ImagesListData

ToTemplImagesListData converts data for images list page

func ToTemplLoginData

func ToTemplLoginData(p *PageData, error, username, returnURL string, ldapEnabled, oauthEnabled bool, oauthProvider string) pages.LoginData

ToTemplLoginData converts PageData to pages.LoginData

func ToTemplNetworksListData

func ToTemplNetworksListData(p *PageData, networksList []NetworkView, filters networks.NetworkFilters) networks.NetworksListData

ToTemplNetworksListData converts data for networks list page

func ToTemplPageData

func ToTemplPageData(p *PageData) layouts.PageData

ToTemplPageData converts web.PageData to layouts.PageData

func ToTemplSecurityContainerData

func ToTemplSecurityContainerData(p *PageData, scan *SecurityScanView, issues []IssueView) securitytmpl.ContainerSecurityData

ToTemplSecurityContainerData converts scan data for a single container.

func ToTemplSecurityListData

func ToTemplSecurityListData(p *PageData, overview *SecurityOverviewData, containers []ContainerSecurityView, scans []SecurityScanView) securitytmpl.SecurityData

ToTemplSecurityListData converts SecurityOverviewData and containers to template data.

func ToTemplSecurityTrendsData

func ToTemplSecurityTrendsData(p *PageData, trends *SecurityTrendsViewData) securitytmpl.TrendsData

ToTemplUpdatesListData converts UpdateView slices to the template data type. ToTemplSecurityTrendsData converts trends data to the templ template type.

func ToTemplUpdatesListData

func ToTemplUpdatesListData(p *PageData, available []UpdateView, history []UpdateHistoryView) updatestmpl.UpdatesData

func ToTemplVolumesListData

func ToTemplVolumesListData(p *PageData, volumesList []VolumeView, totalSize int64, filters volumes.VolumeFilters) volumes.VolumesListData

ToTemplVolumesListData converts data for volumes list page

func VolumeDriverIcon

func VolumeDriverIcon(driver string) string

VolumeDriverIcon returns icon class for volume driver.

func WebSocketRateLimit

func WebSocketRateLimit() func(http.Handler) http.Handler

WebSocketRateLimit limits WebSocket connection upgrades to 10 per minute per IP.

func WithUserInfo

func WithUserInfo(ctx context.Context, info *UserInfo) context.Context

WithUserInfo adds UserInfo to the context. Used by the auth middleware when setting up the authenticated user.

Types

type AccessListClientView

type AccessListClientView struct {
	Address   string `json:"address"`
	Directive string `json:"directive"`
}

AccessListClientView for ACL IP rules.

type AccessListDetailView

type AccessListDetailView struct {
	ID         int                    `json:"id"`
	Name       string                 `json:"name"`
	SatisfyAny bool                   `json:"satisfy_any"`
	PassAuth   bool                   `json:"pass_auth"`
	Items      []AccessListItemView   `json:"items"`
	Clients    []AccessListClientView `json:"clients"`
}

AccessListDetailView includes items and clients.

type AccessListItemView

type AccessListItemView struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

AccessListItemView for ACL user entries.

type AccessListView

type AccessListView struct {
	ID          int    `json:"id"`
	Name        string `json:"name"`
	SatisfyAny  bool   `json:"satisfy_any"`
	PassAuth    bool   `json:"pass_auth"`
	ItemCount   int    `json:"item_count"`
	ClientCount int    `json:"client_count"`
}

AccessListView for NPM access lists.

type AckRecorder

type AckRecorder interface {
	IsAcknowledged(ctx context.Context) (bool, error)
	Acknowledge(ctx context.Context, actorID *uuid.UUID, ip string) error
}

AckRecorder is the minimal contract the web layer needs to read and write the recon acknowledgement state. internal/api/handlers MemoryAckStore (and any Postgres-backed replacement) satisfies it.

type AlertsService

type AlertsService interface {
	ListRules(ctx context.Context, opts models.AlertListOptions) ([]*models.AlertRule, int64, error)
	GetRule(ctx context.Context, id uuid.UUID) (*models.AlertRule, error)
	CreateRule(ctx context.Context, input models.CreateAlertRuleInput, createdBy *uuid.UUID) (*models.AlertRule, error)
	UpdateRule(ctx context.Context, id uuid.UUID, input models.UpdateAlertRuleInput) (*models.AlertRule, error)
	DeleteRule(ctx context.Context, id uuid.UUID) error
	ListEvents(ctx context.Context, opts models.AlertEventListOptions) ([]*models.AlertEvent, int64, error)
	AcknowledgeEvent(ctx context.Context, id uuid.UUID, userID uuid.UUID) error
	ListSilences(ctx context.Context) ([]*models.AlertSilence, error)
	CreateSilence(ctx context.Context, input models.CreateAlertSilenceInput, createdBy *uuid.UUID) (*models.AlertSilence, error)
	DeleteSilence(ctx context.Context, id uuid.UUID) error
	GetStats(ctx context.Context) (*models.AlertStats, error)
}

AlertsService is the interface for alert operations.

type AuditLogView

type AuditLogView struct {
	ID           string `json:"id"`
	Operation    string `json:"operation"`
	ResourceType string `json:"resource_type"`
	ResourceID   int    `json:"resource_id"`
	ResourceName string `json:"resource_name"`
	UserName     string `json:"user_name"`
	CreatedAt    string `json:"created_at"`
}

AuditLogView for NPM audit log entries.

type AuthService

type AuthService interface {
	ValidateSession(ctx context.Context, sessionID string) (*UserContext, error)
	GetUserByID(ctx context.Context, userID string) (*UserContext, error)
	Login(ctx context.Context, username, password, userAgent, ipAddress string) (*UserContext, error)
	VerifyCredentials(ctx context.Context, username, password, userAgent, ipAddress string) (*UserContext, error)
	CreateSessionForUser(ctx context.Context, userID, userAgent, ipAddress string) (*UserContext, error)
	Logout(ctx context.Context, sessionID string) error
	// OAuth SSO
	OAuthGetAuthURL(providerName, state string) (string, error)
	OAuthCallback(ctx context.Context, providerName, code, userAgent, ipAddress string) (*UserContext, error)
}

AuthService interface for authentication.

type AutoDeployRepo

type AutoDeployRepo interface {
	Create(ctx context.Context, rule *models.AutoDeployRule) error
	GetByID(ctx context.Context, id uuid.UUID) (*models.AutoDeployRule, error)
	List(ctx context.Context) ([]*models.AutoDeployRule, error)
	Delete(ctx context.Context, id uuid.UUID) error
	MatchRules(ctx context.Context, sourceType, sourceRepo string, branch *string) ([]*models.AutoDeployRule, error)
}

AutoDeployRepo defines the interface for auto-deploy rule persistence.

type BackupCreateInput

type BackupCreateInput struct {
	Type          string `json:"type"`
	TargetID      string `json:"target_id"`
	TargetName    string `json:"target_name"`
	Compression   string `json:"compression"`
	Encrypt       bool   `json:"encrypt"`
	RetentionDays int    `json:"retention_days"`
	StopContainer bool   `json:"stop_container"`
}

BackupCreateInput for creating a backup with full options.

type BackupEncryptor

type BackupEncryptor interface {
	Encrypt(data []byte) (string, error)
	Decrypt(ciphertext string) ([]byte, error)
}

BackupEncryptor encrypts and decrypts byte data for instance backups. Satisfied directly by *crypto.AESEncryptor.

type BackupScheduleInput

type BackupScheduleInput struct {
	Type          string `json:"type"`
	TargetID      string `json:"target_id"`
	TargetName    string `json:"target_name"`
	Schedule      string `json:"schedule"`
	Compression   string `json:"compression"`
	Encrypted     bool   `json:"encrypted"`
	RetentionDays int    `json:"retention_days"`
	MaxBackups    int    `json:"max_backups"`
}

BackupScheduleInput for creating a backup schedule.

type BackupScheduleView

type BackupScheduleView struct {
	ID            string `json:"id"`
	Type          string `json:"type"`
	TargetID      string `json:"target_id"`
	TargetName    string `json:"target_name"`
	Schedule      string `json:"schedule"`
	Compression   string `json:"compression"`
	Encrypted     bool   `json:"encrypted"`
	RetentionDays int    `json:"retention_days"`
	MaxBackups    int    `json:"max_backups"`
	IsEnabled     bool   `json:"is_enabled"`
	LastRunAt     string `json:"last_run_at"`
	LastRunStatus string `json:"last_run_status"`
	NextRunAt     string `json:"next_run_at"`
	CreatedAt     string `json:"created_at"`
}

BackupScheduleView for schedule list.

type BackupService

type BackupService interface {
	List(ctx context.Context, containerID string) ([]BackupView, error)
	Get(ctx context.Context, id string) (*BackupView, error)
	Create(ctx context.Context, containerID string) (*BackupView, error)
	CreateWithOptions(ctx context.Context, opts BackupCreateInput) (*BackupView, error)
	Restore(ctx context.Context, id string) error
	Remove(ctx context.Context, id string) error
	Download(ctx context.Context, id string) (string, error)
	DownloadStream(ctx context.Context, id string) (io.ReadCloser, string, int64, error)
	GetStats(ctx context.Context) (*BackupStatsView, error)
	GetStorageInfo(ctx context.Context) (*BackupStorageView, error)
	// Schedules
	ListSchedules(ctx context.Context) ([]BackupScheduleView, error)
	CreateSchedule(ctx context.Context, input BackupScheduleInput) (*BackupScheduleView, error)
	DeleteSchedule(ctx context.Context, id string) error
	RunSchedule(ctx context.Context, id string) error
}

type BackupStatsView

type BackupStatsView struct {
	TotalBackups     int    `json:"total_backups"`
	CompletedBackups int    `json:"completed_backups"`
	FailedBackups    int    `json:"failed_backups"`
	TotalSize        int64  `json:"total_size"`
	TotalSizeHuman   string `json:"total_size_human"`
	LastBackupAt     string `json:"last_backup_at"`
}

BackupStatsView for backup statistics dashboard.

type BackupStorageView

type BackupStorageView struct {
	Type            string  `json:"type"`
	Path            string  `json:"path"`
	TotalSpace      int64   `json:"total_space"`
	TotalSpaceHuman string  `json:"total_space_human"`
	UsedSpace       int64   `json:"used_space"`
	UsedSpaceHuman  string  `json:"used_space_human"`
	BackupCount     int64   `json:"backup_count"`
	UsagePercent    float64 `json:"usage_percent"`
}

BackupStorageView for storage info display.

type BackupView

type BackupView struct {
	ID            string    `json:"id"`
	HostID        string    `json:"host_id"`
	ContainerID   string    `json:"container_id"`
	ContainerName string    `json:"container_name"`
	Type          string    `json:"type"`
	Status        string    `json:"status"`
	Trigger       string    `json:"trigger"`
	Size          int64     `json:"size"`
	SizeHuman     string    `json:"size_human"`
	Compression   string    `json:"compression"`
	Encrypted     bool      `json:"encrypted"`
	Verified      bool      `json:"verified"`
	Checksum      string    `json:"checksum"`
	ErrorMessage  string    `json:"error_message"`
	Duration      string    `json:"duration"`
	Created       time.Time `json:"created"`
	CreatedHuman  string    `json:"created_human"`
	CompletedAt   string    `json:"completed_at"`
	ExpiresAt     string    `json:"expires_at"`
	Path          string    `json:"path"`
}

BackupView for backup list/detail.

type BreadcrumbItem struct {
	Label string `json:"label"`
	URL   string `json:"url,omitempty"`
	Icon  string `json:"icon,omitempty"`
}

BreadcrumbItem represents a breadcrumb navigation item.

type BulkOperationResult

type BulkOperationResult struct {
	ContainerID string
	Name        string
	Success     bool
	Error       string
}

BulkOperationResult represents the result of a single container operation.

type BulkOperationResults

type BulkOperationResults struct {
	Total      int
	Successful int
	Failed     int
	Results    []BulkOperationResult
}

BulkOperationResults represents the results of a bulk operation.

type CaptureService

type CaptureService interface {
	Available() bool
	StartCapture(ctx context.Context, userID uuid.UUID, input models.CreateCaptureInput) (*models.PacketCapture, error)
	StopCapture(ctx context.Context, id uuid.UUID) error
	GetCapture(ctx context.Context, id uuid.UUID) (*models.PacketCapture, error)
	ListCaptures(ctx context.Context, userID uuid.UUID) ([]*models.PacketCapture, error)
	DeleteCapture(ctx context.Context, id uuid.UUID) error
	GetPcapPath(ctx context.Context, id uuid.UUID) (string, error)
	AnalyzeCapture(ctx context.Context, id uuid.UUID) (*models.CaptureAnalysis, error)
	Cleanup()
}

CaptureService defines the interface for packet capture operations.

type CatalogApp

type CatalogApp struct {
	Slug        string         `json:"slug"`
	Name        string         `json:"name"`
	Description string         `json:"description"`
	Icon        string         `json:"icon"`       // FontAwesome class
	IconColor   string         `json:"icon_color"` // Tailwind color class
	Category    string         `json:"category"`
	Version     string         `json:"version"`
	Website     string         `json:"website"`
	Source      string         `json:"source"` // GitHub URL
	Fields      []CatalogField `json:"fields"`
	ComposeTPL  string         `json:"-"` // Go template for docker-compose.yml
	Notes       string         `json:"notes,omitempty"`
}

CatalogApp represents an application template in the catalog.

func GetCatalogApp

func GetCatalogApp(slug string) *CatalogApp

GetCatalogApp returns a catalog app by slug, or nil if not found.

func GetCatalogApps

func GetCatalogApps() []CatalogApp

GetCatalogApps returns all available catalog apps.

func (*CatalogApp) GetDefaultValues

func (app *CatalogApp) GetDefaultValues() map[string]string

GetDefaultValues returns a map of field keys to their default values.

func (*CatalogApp) RenderCompose

func (app *CatalogApp) RenderCompose(values map[string]string) string

RenderCompose renders the docker-compose template with the given field values. Uses simple {{KEY}} placeholder replacement (not Go templates, to avoid complexity).

func (*CatalogApp) Validate

func (app *CatalogApp) Validate(values map[string]string) []string

Validate checks that all required fields have values.

type CatalogField

type CatalogField struct {
	Key         string           `json:"key"`
	Label       string           `json:"label"`
	Description string           `json:"description"`
	Type        CatalogFieldType `json:"type"`
	Default     string           `json:"default"`
	Required    bool             `json:"required"`
	Options     []string         `json:"options,omitempty"` // For select type
	Placeholder string           `json:"placeholder,omitempty"`
	Pattern     string           `json:"pattern,omitempty"` // HTML input pattern
}

CatalogField represents a configurable field in an app template.

type CatalogFieldType

type CatalogFieldType string

CatalogFieldType defines the type of a configuration field.

const (
	FieldText     CatalogFieldType = "text"
	FieldPassword CatalogFieldType = "password"
	FieldNumber   CatalogFieldType = "number"
	FieldSelect   CatalogFieldType = "select"
	FieldCheckbox CatalogFieldType = "checkbox"
)

type CertificateView

type CertificateView struct {
	ID          int      `json:"id"`
	NiceName    string   `json:"nice_name"`
	Provider    string   `json:"provider"`
	DomainNames []string `json:"domain_names"`
	ExpiresOn   string   `json:"expires_on"`
}

CertificateView for NPM SSL certificates.

type CompliancePolicyRecord

type CompliancePolicyRecord = models.CompliancePolicyRecord

Type aliases pointing to shared models for DB record types.

type ComplianceRepo

type ComplianceRepo interface {
	CreatePolicy(ctx context.Context, p *CompliancePolicyRecord) error
	GetPolicy(ctx context.Context, id uuid.UUID) (*CompliancePolicyRecord, error)
	ListPolicies(ctx context.Context) ([]*CompliancePolicyRecord, error)
	DeletePolicy(ctx context.Context, id uuid.UUID) error
	TogglePolicy(ctx context.Context, id uuid.UUID) (bool, error)
	UpdateLastCheck(ctx context.Context, id uuid.UUID, t time.Time) error
	CreateViolation(ctx context.Context, v *ComplianceViolationRecord) error
	ListViolations(ctx context.Context, status *string) ([]*ComplianceViolationRecord, error)
	UpdateViolationStatus(ctx context.Context, id uuid.UUID, status string, resolvedBy *uuid.UUID) error
	ViolationExistsForPolicy(ctx context.Context, policyID uuid.UUID, containerID string) (bool, error)
	CountViolationsByPolicy(ctx context.Context, policyID uuid.UUID) (int, error)
}

ComplianceRepo defines the interface for compliance policy persistence.

type ComplianceViolationRecord

type ComplianceViolationRecord = models.ComplianceViolationRecord

type Config

type Config struct {
	// StaticPath is the path to static files
	StaticPath string

	// Version is the application version
	Version string

	// Debug enables debug mode
	Debug bool
}

Config holds web server configuration

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig returns default web configuration

type ConfigService

type ConfigService interface {
	ListVariables(ctx context.Context, scope, scopeID string) ([]ConfigVarView, error)
	GetVariable(ctx context.Context, id string) (*ConfigVarView, error)
	CreateVariable(ctx context.Context, v *ConfigVarView) error
	UpdateVariable(ctx context.Context, v *ConfigVarView) error
	DeleteVariable(ctx context.Context, id string) error
	ListTemplates(ctx context.Context) ([]interface{}, error)
	CreateTemplate(ctx context.Context, input models.CreateTemplateInput, userID *uuid.UUID) (*models.ConfigTemplate, error)
	UpdateTemplate(ctx context.Context, id uuid.UUID, input models.UpdateTemplateInput, userID *uuid.UUID) (*models.ConfigTemplate, error)
	GetAuditLogs(ctx context.Context, limit int) ([]interface{}, error)
}

type ConfigVarView

type ConfigVarView struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Value       string   `json:"value"`
	IsSecret    bool     `json:"is_secret"`
	VarType     string   `json:"var_type"`
	Scope       string   `json:"scope"`
	ScopeID     string   `json:"scope_id"`
	UsedBy      []string `json:"used_by"`
	UsedByCount int      `json:"used_by_count"`
	UpdatedAt   string   `json:"updated_at"`
	UpdatedBy   string   `json:"updated_by"`
}

ConfigVarView for config variables.

type ContainerCreateInput

type ContainerCreateInput struct {
	Name          string
	Image         string
	Ports         []string // "hostPort:containerPort" format
	Environment   string   // KEY=value per line
	Volumes       []string // "source:target" format
	Network       string
	Command       string
	RestartPolicy string
	Privileged    bool
	AutoRemove    bool
}

ContainerCreateInput holds form data for creating a container.

type ContainerFileContentView

type ContainerFileContentView struct {
	Path      string `json:"path"`
	Content   string `json:"content"`
	Size      int64  `json:"size"`
	Truncated bool   `json:"truncated"`
	Binary    bool   `json:"binary"`
}

ContainerFileContentView for file content display.

type ContainerFileView

type ContainerFileView struct {
	Name       string `json:"name"`
	Path       string `json:"path"`
	IsDir      bool   `json:"is_dir"`
	Size       int64  `json:"size"`
	SizeHuman  string `json:"size_human"`
	Mode       string `json:"mode"`
	ModTime    string `json:"mod_time"`
	ModTimeAgo string `json:"mod_time_ago"`
	Owner      string `json:"owner"`
	Group      string `json:"group"`
	LinkTarget string `json:"link_target,omitempty"`
	IsSymlink  bool   `json:"is_symlink"`
}

ContainerFileView for file browser display.

type ContainerSecurityView

type ContainerSecurityView struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Image       string `json:"image"`
	State       string `json:"state"`
	HasScan     bool   `json:"has_scan"`
	Score       int    `json:"score"`
	Grade       string `json:"grade"`
	IssueCount  int    `json:"issue_count"`
	LastScanned string `json:"last_scanned"`
}

ContainerSecurityView represents a container with its security scan status.

type ContainerService

type ContainerService interface {
	List(ctx context.Context, filters map[string]string) ([]ContainerView, error)
	Get(ctx context.Context, id string) (*ContainerView, error)
	Create(ctx context.Context, input *ContainerCreateInput) (string, error)
	Start(ctx context.Context, id string) error
	Stop(ctx context.Context, id string) error
	Restart(ctx context.Context, id string) error
	Pause(ctx context.Context, id string) error
	Unpause(ctx context.Context, id string) error
	Kill(ctx context.Context, id string) error
	Remove(ctx context.Context, id string, force bool) error
	Rename(ctx context.Context, id, name string) error
	GetLogs(ctx context.Context, id string, tail int) ([]string, error)
	GetDockerClient(ctx context.Context) (docker.ClientAPI, error)
	GetHostID() uuid.UUID
	// Bulk operations
	BulkStart(ctx context.Context, containerIDs []string) (*BulkOperationResults, error)
	BulkStop(ctx context.Context, containerIDs []string) (*BulkOperationResults, error)
	BulkRestart(ctx context.Context, containerIDs []string) (*BulkOperationResults, error)
	BulkPause(ctx context.Context, containerIDs []string) (*BulkOperationResults, error)
	BulkUnpause(ctx context.Context, containerIDs []string) (*BulkOperationResults, error)
	BulkKill(ctx context.Context, containerIDs []string) (*BulkOperationResults, error)
	BulkRemove(ctx context.Context, containerIDs []string, force bool) (*BulkOperationResults, error)
	// File browser
	BrowseFiles(ctx context.Context, containerID, path string) ([]ContainerFileView, error)
	ReadFile(ctx context.Context, containerID, path string) (*ContainerFileContentView, error)
	WriteFile(ctx context.Context, containerID, path, content string) error
	DeleteFile(ctx context.Context, containerID, path string, recursive bool) error
	CreateDirectory(ctx context.Context, containerID, path string) error
}

Service interfaces (defined here for compilation, actual implementations in services package)

type ContainerSettingsDetails

type ContainerSettingsDetails struct {
	NetworkMode   string
	Hostname      string
	Privileged    bool
	CPUShares     int64
	NanoCPUs      int64
	MemoryLimit   int64
	RestartPolicy string
	CapAdd        []string
	CapDrop       []string
	Devices       []containers.DeviceSettingInfo
	Ports         []containers.PortSettingInfo // Port bindings from Docker inspect
}

ContainerSettingsDetails holds extra details from Docker inspect needed for settings

type ContainerStatsData

type ContainerStatsData struct {
	ID            string  `json:"id"`
	Name          string  `json:"name"`
	State         string  `json:"state"`
	Health        string  `json:"health,omitempty"`
	CPUPercent    float64 `json:"cpu_percent"`
	MemoryUsed    string  `json:"memory_used"`
	MemoryLimit   string  `json:"memory_limit"`
	MemoryPercent float64 `json:"memory_percent"`
	NetworkRx     string  `json:"network_rx"`
	NetworkTx     string  `json:"network_tx"`
	BlockRead     string  `json:"block_read"`
	BlockWrite    string  `json:"block_write"`
	PIDs          int     `json:"pids"`
	Uptime        string  `json:"uptime,omitempty"`
}

type ContainerTemplateRecord

type ContainerTemplateRecord = models.ContainerTemplateRecord

type ContainerTemplateRepo

type ContainerTemplateRepo interface {
	Create(ctx context.Context, t *ContainerTemplateRecord) error
	GetByID(ctx context.Context, id uuid.UUID) (*ContainerTemplateRecord, error)
	List(ctx context.Context) ([]*ContainerTemplateRecord, error)
	Delete(ctx context.Context, id uuid.UUID) error
	IncrementUsage(ctx context.Context, id uuid.UUID) error
	GetCategories(ctx context.Context) ([]string, error)
}

ContainerTemplateRepo defines the interface for container template persistence.

type ContainerTrendViewData

type ContainerTrendViewData struct {
	Name          string `json:"name"`
	CurrentScore  int    `json:"current_score"`
	CurrentGrade  string `json:"current_grade"`
	PreviousScore int    `json:"previous_score"`
	Change        int    `json:"change"`
}

ContainerTrendViewData shows trend for a single container.

type ContainerView

type ContainerView struct {
	ID              string                  `json:"id"`
	ShortID         string                  `json:"short_id"`
	HostID          string                  `json:"host_id"`
	Name            string                  `json:"name"`
	Image           string                  `json:"image"`
	ImageShort      string                  `json:"image_short"`
	State           string                  `json:"state"`
	Status          string                  `json:"status"`
	Health          string                  `json:"health"`
	Created         time.Time               `json:"created"`
	CreatedHuman    string                  `json:"created_human"`
	Ports           []PortView              `json:"ports"`
	Networks        []string                `json:"networks"`
	NetworkDetails  []NetworkAttachmentView `json:"network_details"`
	Mounts          []MountView             `json:"mounts"`
	Env             []EnvView               `json:"env"`
	Labels          map[string]string       `json:"labels"`
	Stack           string                  `json:"stack"`
	RestartPolicy   string                  `json:"restart_policy"`
	CPUPercent      float64                 `json:"cpu_percent"`
	MemoryUsage     int64                   `json:"memory_usage"`
	MemoryLimit     int64                   `json:"memory_limit"`
	MemoryHuman     string                  `json:"memory_human"`
	SecurityScore   int                     `json:"security_score"`
	SecurityGrade   string                  `json:"security_grade"`
	UpdateAvailable bool                    `json:"update_available"`
	Command         string                  `json:"command"`
	Entrypoint      string                  `json:"entrypoint"`
}

ContainerView for container list/detail templates.

type ContextKey

type ContextKey string

ContextKey is a custom type for context keys to avoid collisions.

const (
	// Context keys
	ContextKeyUser       ContextKey = "user"
	ContextKeyTheme      ContextKey = "theme"
	ContextKeyRequestID  ContextKey = "request_id"
	ContextKeyCSRFToken  ContextKey = "csrf_token"
	ContextKeyFlash      ContextKey = "flash"
	ContextKeyStats      ContextKey = "stats"
	ContextKeyActiveHost ContextKey = "active_host_id"
	ContextKeySession    ContextKey = "session"
)
const ContextKeyRole ContextKey = "user_role"

ContextKeyRole is the context key for the user's role with permissions.

const ContextKeyScope ContextKey = "resource_scope"

ContextKeyScope is the context key for the computed ResourceScope.

type CookieConfig

type CookieConfig struct {
	Secure   bool          // Force Secure flag (overrides TLS auto-detection)
	SameSite http.SameSite // SameSite attribute (default Lax)
	Domain   string        // Cookie Domain (empty = browser default)
}

CookieConfig holds session cookie settings wired from app config.

type CreateTerminalSessionInput

type CreateTerminalSessionInput struct {
	UserID     uuid.UUID
	Username   string
	TargetType string
	TargetID   string
	TargetName string
	HostID     *uuid.UUID
	Shell      string
	TermCols   int
	TermRows   int
	ClientIP   string
	UserAgent  string
}

CreateTerminalSessionInput is the input for creating a terminal session.

type CustomLogUploadRepository

type CustomLogUploadRepository interface {
	Create(ctx context.Context, upload *models.CustomLogUpload) error
	GetByID(ctx context.Context, id uuid.UUID) (*models.CustomLogUpload, error)
	ListByUser(ctx context.Context, userID uuid.UUID) ([]*models.CustomLogUpload, error)
	Delete(ctx context.Context, id uuid.UUID) error
}

CustomLogUploadRepository defines the interface for log upload persistence.

type DatabaseProber

type DatabaseProber interface {
	Ping(ctx context.Context) error
	GetVersion(ctx context.Context) (string, error)
	DumpSQL(ctx context.Context) ([]byte, error)
	RestoreSQL(ctx context.Context, data []byte) error
}

DatabaseProber provides database connectivity checks and backup operations.

type DatabaseService

type DatabaseService interface {
	CreateConnection(ctx context.Context, input models.CreateDatabaseConnectionInput, userID uuid.UUID) (*models.DatabaseConnection, error)
	GetConnection(ctx context.Context, id uuid.UUID) (*models.DatabaseConnection, error)
	ListConnections(ctx context.Context, userID uuid.UUID) ([]*models.DatabaseConnection, error)
	UpdateConnection(ctx context.Context, id uuid.UUID, input models.UpdateDatabaseConnectionInput) error
	DeleteConnection(ctx context.Context, id uuid.UUID) error
	TestConnection(ctx context.Context, id uuid.UUID) (models.DatabaseTestResulter, error)
	ListTables(ctx context.Context, id uuid.UUID) ([]models.DatabaseTable, error)
	GetTableColumns(ctx context.Context, id uuid.UUID, tableName string) ([]models.DatabaseColumn, error)
	GetTableData(ctx context.Context, id uuid.UUID, tableName string, page, pageSize int) ([]map[string]interface{}, int64, error)
	ExecuteQuery(ctx context.Context, id uuid.UUID, query string, writeMode bool) (*models.DatabaseQueryResult, error)
}

DatabaseService interface for managing database connections.

type DateFormat

type DateFormat string

DateFormat represents how dates are displayed.

const (
	DateFormatISO   DateFormat = "2006-01-02"          // ISO 8601
	DateFormatEU    DateFormat = "02/01/2006"          // DD/MM/YYYY
	DateFormatUS    DateFormat = "01/02/2006"          // MM/DD/YYYY
	DateFormatHuman DateFormat = "02 Jan 2006"         // 02 Jan 2006
	DateFormatFull  DateFormat = "Monday, 02 Jan 2006" // Full
)

type DeadHostView

type DeadHostView struct {
	ID          int      `json:"id"`
	DomainNames []string `json:"domain_names"`
	Domain      string   `json:"domain"`
	SSLForced   bool     `json:"ssl_forced"`
	CertID      int      `json:"cert_id"`
	Enabled     bool     `json:"enabled"`
}

DeadHostView for NPM dead hosts (404).

type DeployService

type DeployService interface {
	Deploy(ctx context.Context, req deploy.DeployRequest) (string, error)
	GetDeployment(id string) (*deploy.DeployResult, bool)
	ListDeployments() []*deploy.DeployResult
}

DeployService defines the interface for agent deployment operations.

type DockerInfoView

type DockerInfoView struct {
	ID                string
	Name              string
	ServerVersion     string
	APIVersion        string
	OS                string
	OSType            string
	Architecture      string
	KernelVersion     string
	Containers        int
	ContainersRunning int
	ContainersPaused  int
	ContainersStopped int
	Images            int
	MemTotal          int64
	NCPU              int
	DockerRootDir     string
	StorageDriver     string
	LoggingDriver     string
	CgroupDriver      string
	CgroupVersion     string
	DefaultRuntime    string
	SecurityOptions   []string
	Runtimes          []string
	Swarm             bool
}

DockerInfoView contains Docker daemon information for templates.

type Encryptor

type Encryptor interface {
	Encrypt(plaintext string) (string, error)
	Decrypt(ciphertext string) (string, error)
}

Encryptor defines the interface for encryption operations.

type EnvView

type EnvView struct {
	Key      string `json:"key"`
	Value    string `json:"value"`
	IsSecret bool   `json:"is_secret"`
}

EnvView for environment variable display.

type EventService

type EventService interface {
	List(ctx context.Context, limit int) ([]EventView, error)
	Stream(ctx context.Context) (<-chan EventView, error)
}

type EventView

type EventView struct {
	ID        string    `json:"id"`
	Type      string    `json:"type"`
	Action    string    `json:"action"`
	ActorID   string    `json:"actor_id"`
	ActorName string    `json:"actor_name"`
	ActorType string    `json:"actor_type"`
	Message   string    `json:"message"`
	Timestamp time.Time `json:"timestamp"`
	TimeHuman string    `json:"time_human"`
}

EventView for events list.

type FlashMessage

type FlashMessage struct {
	Type    string `json:"type"` // success, error, warning, info
	Message string `json:"message"`
}

FlashMessage represents a notification.

func GetFlashFromContext

func GetFlashFromContext(ctx context.Context) *FlashMessage

GetFlashFromContext extracts flash message from request context.

type GitOpsDeploymentRecord

type GitOpsDeploymentRecord = models.GitOpsDeploymentRecord

type GitOpsPipelineRecord

type GitOpsPipelineRecord = models.GitOpsPipelineRecord

type GitOpsRepo

type GitOpsRepo interface {
	CreatePipeline(ctx context.Context, p *GitOpsPipelineRecord) error
	GetPipeline(ctx context.Context, id uuid.UUID) (*GitOpsPipelineRecord, error)
	ListPipelines(ctx context.Context) ([]*GitOpsPipelineRecord, error)
	DeletePipeline(ctx context.Context, id uuid.UUID) error
	TogglePipeline(ctx context.Context, id uuid.UUID) (bool, error)
	IncrementDeployCount(ctx context.Context, id uuid.UUID, deployAt time.Time, status string) error
	CreateDeployment(ctx context.Context, d *GitOpsDeploymentRecord) error
	ListDeployments(ctx context.Context, limit int) ([]*GitOpsDeploymentRecord, error)
}

GitOpsRepo defines the interface for GitOps pipeline persistence.

type GitService

type GitService interface {
	CreateConnection(ctx context.Context, input *gitsvc.CreateConnectionInput) (*models.GitConnection, error)
	TestConnection(ctx context.Context, id uuid.UUID) (*gitsvc.TestResult, error)
	SyncRepositories(ctx context.Context, connID uuid.UUID) (int, error)
	DeleteConnection(ctx context.Context, id uuid.UUID) error
}

GitService defines the interface for the unified Git multi-provider service.

type GiteaService

type GiteaService interface {
	// Connections
	CreateConnection(ctx context.Context, input *gitea.CreateConnectionInput) (*models.GiteaConnection, error)
	GetConnection(ctx context.Context, id uuid.UUID) (*models.GiteaConnection, error)
	ListConnections(ctx context.Context, hostID uuid.UUID) ([]*models.GiteaConnection, error)
	ListAllConnections(ctx context.Context) ([]*models.GiteaConnection, error)
	DeleteConnection(ctx context.Context, id uuid.UUID) error
	TestConnection(ctx context.Context, id uuid.UUID) (*gitea.TestResult, error)

	// Repositories
	SyncRepositories(ctx context.Context, connectionID uuid.UUID) (int, error)
	ListRepositories(ctx context.Context, connectionID uuid.UUID) ([]*models.GiteaRepository, error)
	GetRepository(ctx context.Context, repoID uuid.UUID) (*models.GiteaRepository, error)

	// Tier 1: Repository management
	CreateRepository(ctx context.Context, input *gitea.CreateRepositoryInput) (*models.GiteaRepository, error)
	EditRepository(ctx context.Context, input *gitea.EditRepositoryInput) (*models.GiteaRepository, error)
	DeleteRepository(ctx context.Context, repoID uuid.UUID) error

	// File operations
	ListFiles(ctx context.Context, repoID uuid.UUID, path, ref string) ([]gitea.APIContentEntry, error)
	GetFileContent(ctx context.Context, repoID uuid.UUID, path, ref string) ([]byte, error)
	UpdateFile(ctx context.Context, repoID uuid.UUID, path, ref, content, message string) error

	// Tier 1: Branches
	ListBranches(ctx context.Context, repoID uuid.UUID) ([]gitea.APIBranch, error)
	GetBranch(ctx context.Context, repoID uuid.UUID, branch string) (*gitea.APIBranch, error)
	CreateBranch(ctx context.Context, repoID uuid.UUID, newBranch, sourceBranch string) (*gitea.APIBranch, error)
	DeleteBranch(ctx context.Context, repoID uuid.UUID, branch string) error

	// Tier 1: Tags
	ListTags(ctx context.Context, repoID uuid.UUID, page, limit int) ([]gitea.APITag, error)
	CreateTag(ctx context.Context, repoID uuid.UUID, tagName, target, message string) (*gitea.APITag, error)
	DeleteTag(ctx context.Context, repoID uuid.UUID, tag string) error

	// Tier 1: Commits & Diff
	ListCommits(ctx context.Context, repoID uuid.UUID, ref string, limit int) ([]gitea.APICommitListItem, error)
	ListCommitsFiltered(ctx context.Context, repoID uuid.UUID, opts gitea.CommitListOptions) ([]gitea.APICommitListItem, error)
	GetCommit(ctx context.Context, repoID uuid.UUID, sha string) (*gitea.APICommitListItem, error)
	Compare(ctx context.Context, repoID uuid.UUID, base, head string) (*gitea.APICompare, error)
	GetDiff(ctx context.Context, repoID uuid.UUID, base, head string) ([]byte, error)

	// Tier 1: Templates (for repo creation)
	ListGitignoreTemplates(ctx context.Context, connectionID uuid.UUID) ([]string, error)
	ListLicenseTemplates(ctx context.Context, connectionID uuid.UUID) ([]gitea.APILicenseTemplate, error)

	// Tier 2: Pull Requests
	ListPullRequests(ctx context.Context, repoID uuid.UUID, opts gitea.PRListOptions) ([]gitea.APIPullRequest, error)
	GetPullRequest(ctx context.Context, repoID uuid.UUID, number int64) (*gitea.APIPullRequest, error)
	CreatePullRequest(ctx context.Context, repoID uuid.UUID, opts gitea.CreatePullRequestOptions) (*gitea.APIPullRequest, error)
	EditPullRequest(ctx context.Context, repoID uuid.UUID, number int64, opts gitea.EditPullRequestOptions) (*gitea.APIPullRequest, error)
	MergePullRequest(ctx context.Context, repoID uuid.UUID, number int64, opts gitea.MergePullRequestOptions) error
	GetPullRequestDiff(ctx context.Context, repoID uuid.UUID, number int64) ([]byte, error)
	ListPRReviews(ctx context.Context, repoID uuid.UUID, number int64) ([]gitea.APIPRReview, error)
	CreatePRReview(ctx context.Context, repoID uuid.UUID, number int64, opts gitea.CreatePRReviewOptions) (*gitea.APIPRReview, error)
	ListPRComments(ctx context.Context, repoID uuid.UUID, number int64) ([]gitea.APIComment, error)

	// Tier 2: Issues
	ListIssues(ctx context.Context, repoID uuid.UUID, opts gitea.IssueListOptions) ([]gitea.APIIssue, error)
	GetIssue(ctx context.Context, repoID uuid.UUID, number int64) (*gitea.APIIssue, error)
	CreateIssue(ctx context.Context, repoID uuid.UUID, opts gitea.CreateIssueOptions) (*gitea.APIIssue, error)
	EditIssue(ctx context.Context, repoID uuid.UUID, number int64, opts gitea.EditIssueOptions) (*gitea.APIIssue, error)
	ListIssueComments(ctx context.Context, repoID uuid.UUID, number int64) ([]gitea.APIComment, error)
	CreateIssueComment(ctx context.Context, repoID uuid.UUID, number int64, body string) (*gitea.APIComment, error)
	EditIssueComment(ctx context.Context, repoID uuid.UUID, commentID int64, body string) (*gitea.APIComment, error)
	DeleteIssueComment(ctx context.Context, repoID uuid.UUID, commentID int64) error
	ListLabels(ctx context.Context, repoID uuid.UUID) ([]gitea.APILabel, error)
	ListMilestones(ctx context.Context, repoID uuid.UUID, state string) ([]gitea.APIMilestone, error)

	// Tier 2: Collaborators
	ListCollaborators(ctx context.Context, repoID uuid.UUID) ([]gitea.APICollaborator, error)
	IsCollaborator(ctx context.Context, repoID uuid.UUID, username string) (bool, error)
	AddCollaborator(ctx context.Context, repoID uuid.UUID, username, permission string) error
	RemoveCollaborator(ctx context.Context, repoID uuid.UUID, username string) error
	GetCollaboratorPermission(ctx context.Context, repoID uuid.UUID, username string) (*gitea.APIPermissions, error)
	ListRepoTeams(ctx context.Context, repoID uuid.UUID) ([]gitea.APITeam, error)

	// Tier 3: Webhooks (repo webhooks management)
	ListHooks(ctx context.Context, repoID uuid.UUID) ([]gitea.APIHook, error)
	GetHook(ctx context.Context, repoID uuid.UUID, hookID int64) (*gitea.APIHook, error)
	CreateHook(ctx context.Context, repoID uuid.UUID, opts gitea.CreateHookOptions) (*gitea.APIHook, error)
	EditHook(ctx context.Context, repoID uuid.UUID, hookID int64, opts gitea.EditHookOptions) (*gitea.APIHook, error)
	DeleteHook(ctx context.Context, repoID uuid.UUID, hookID int64) error
	TestHook(ctx context.Context, repoID uuid.UUID, hookID int64) error

	// Tier 3: Deploy Keys
	ListDeployKeys(ctx context.Context, repoID uuid.UUID) ([]gitea.APIDeployKey, error)
	GetDeployKey(ctx context.Context, repoID uuid.UUID, keyID int64) (*gitea.APIDeployKey, error)
	CreateDeployKey(ctx context.Context, repoID uuid.UUID, opts gitea.CreateDeployKeyOptions) (*gitea.APIDeployKey, error)
	DeleteDeployKey(ctx context.Context, repoID uuid.UUID, keyID int64) error

	// Tier 3: Releases
	ListReleases(ctx context.Context, repoID uuid.UUID, page, limit int) ([]gitea.APIRelease, error)
	GetRelease(ctx context.Context, repoID uuid.UUID, releaseID int64) (*gitea.APIRelease, error)
	GetReleaseByTag(ctx context.Context, repoID uuid.UUID, tag string) (*gitea.APIRelease, error)
	GetLatestRelease(ctx context.Context, repoID uuid.UUID) (*gitea.APIRelease, error)
	CreateRelease(ctx context.Context, repoID uuid.UUID, opts gitea.CreateReleaseOptions) (*gitea.APIRelease, error)
	EditRelease(ctx context.Context, repoID uuid.UUID, releaseID int64, opts gitea.EditReleaseOptions) (*gitea.APIRelease, error)
	DeleteRelease(ctx context.Context, repoID uuid.UUID, releaseID int64) error
	ListReleaseAssets(ctx context.Context, repoID uuid.UUID, releaseID int64) ([]gitea.APIReleaseAsset, error)
	DeleteReleaseAsset(ctx context.Context, repoID uuid.UUID, releaseID, assetID int64) error

	// Tier 3: Actions / CI Status
	ListWorkflows(ctx context.Context, repoID uuid.UUID) ([]gitea.APIWorkflow, error)
	ListActionRuns(ctx context.Context, repoID uuid.UUID, opts gitea.ActionRunListOptions) ([]gitea.APIActionRun, error)
	GetActionRun(ctx context.Context, repoID uuid.UUID, runID int64) (*gitea.APIActionRun, error)
	ListActionJobs(ctx context.Context, repoID uuid.UUID, runID int64) ([]gitea.APIActionJob, error)
	GetActionJobLogs(ctx context.Context, repoID uuid.UUID, jobID int64) ([]byte, error)
	CancelActionRun(ctx context.Context, repoID uuid.UUID, runID int64) error
	RerunActionRun(ctx context.Context, repoID uuid.UUID, runID int64) error
	GetCombinedStatus(ctx context.Context, repoID uuid.UUID, ref string) (*gitea.APICombinedStatus, error)
	ListCommitStatuses(ctx context.Context, repoID uuid.UUID, ref string, page, limit int) ([]gitea.APICommitStatus, error)
	CreateCommitStatus(ctx context.Context, repoID uuid.UUID, sha string, opts gitea.CreateStatusOptions) (*gitea.APICommitStatus, error)

	// Internal Webhooks (usulnet sync)
	RegisterWebhook(ctx context.Context, connID, repoID uuid.UUID, callbackURL string) error
	HandleWebhook(ctx context.Context, connectionID uuid.UUID, eventType, deliveryID string, payload []byte) error
	GetWebhookSecret(ctx context.Context, connectionID uuid.UUID) (string, error)
	ListWebhookEvents(ctx context.Context, connectionID uuid.UUID, limit int) ([]*models.GiteaWebhookEvent, error)
}

GiteaService defines the interface for Gitea integration operations.

type GlobalStats

type GlobalStats struct {
	ContainersRunning int    `json:"containers_running"`
	ContainersStopped int    `json:"containers_stopped"`
	ContainersPaused  int    `json:"containers_paused"`
	ContainersTotal   int    `json:"containers_total"`
	ImagesCount       int    `json:"images_count"`
	VolumesCount      int    `json:"volumes_count"`
	NetworksCount     int    `json:"networks_count"`
	StacksCount       int    `json:"stacks_count"`
	SecurityScore     int    `json:"security_score"`
	SecurityGrade     string `json:"security_grade"`
	SecurityIssues    int    `json:"security_issues"`
	UpdatesAvailable  int    `json:"updates_available"`
	HostsOnline       int    `json:"hosts_online"`
	HostsTotal        int    `json:"hosts_total"`
}

GlobalStats for sidebar badges.

func GetStatsFromContext

func GetStatsFromContext(ctx context.Context) *GlobalStats

GetStatsFromContext extracts global stats from request context.

type GuacdConfig

type GuacdConfig struct {
	Enabled bool   // GUACD_ENABLED (default: true)
	Host    string // GUACD_HOST (default: guacd)
	Port    int    // GUACD_PORT (default: 4822)
}

GuacdConfig holds Apache Guacamole daemon connection settings.

func DefaultGuacdConfig

func DefaultGuacdConfig() GuacdConfig

DefaultGuacdConfig returns default guacd configuration.

type Handler

type Handler struct {
	// contains filtered or unexported fields
}

Handler manages all web page handlers.

func NewTemplHandler

func NewTemplHandler(deps HandlerDeps) *Handler

NewTemplHandler creates a new web handler with all dependencies injected via HandlerDeps.

func (*Handler) ACLCreate

func (h *Handler) ACLCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) ACLDelete

func (h *Handler) ACLDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) ACLEditTempl

func (h *Handler) ACLEditTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ACLListTempl

func (h *Handler) ACLListTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ACLNewTempl

func (h *Handler) ACLNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ACLUpdate

func (h *Handler) ACLUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) APIHostBrowse

func (h *Handler) APIHostBrowse(w http.ResponseWriter, r *http.Request)

APIHostBrowse lists files on the host filesystem via nsenter. GET /api/v1/hosts/{hostID}/browse GET /api/v1/hosts/{hostID}/browse/*

func (*Handler) APIHostDeleteFile

func (h *Handler) APIHostDeleteFile(w http.ResponseWriter, r *http.Request)

APIHostDeleteFile deletes a file or directory on the host filesystem via nsenter. DELETE /api/v1/hosts/{hostID}/file/*

func (*Handler) APIHostDownloadFile

func (h *Handler) APIHostDownloadFile(w http.ResponseWriter, r *http.Request)

APIHostDownloadFile downloads a file from the host filesystem. GET /api/v1/hosts/{hostID}/download/*

func (*Handler) APIHostMkdir

func (h *Handler) APIHostMkdir(w http.ResponseWriter, r *http.Request)

APIHostMkdir creates a directory on the host filesystem via nsenter. POST /api/v1/hosts/{hostID}/mkdir/*

func (*Handler) APIHostReadFile

func (h *Handler) APIHostReadFile(w http.ResponseWriter, r *http.Request)

APIHostReadFile reads a file from the host filesystem via nsenter. GET /api/v1/hosts/{hostID}/file/*

func (*Handler) APITerminalSessionGet

func (h *Handler) APITerminalSessionGet(w http.ResponseWriter, r *http.Request)

APITerminalSessionGet returns a specific terminal session. GET /api/v1/terminal/sessions/{id}

func (*Handler) APITerminalSessionList

func (h *Handler) APITerminalSessionList(w http.ResponseWriter, r *http.Request)

APITerminalSessionList returns a list of terminal sessions. GET /api/v1/terminal/sessions

func (*Handler) APITerminalSessionsActive

func (h *Handler) APITerminalSessionsActive(w http.ResponseWriter, r *http.Request)

APITerminalSessionsActive returns all active terminal sessions. GET /api/v1/terminal/sessions/active

func (*Handler) APITerminalSessionsByTarget

func (h *Handler) APITerminalSessionsByTarget(w http.ResponseWriter, r *http.Request)

APITerminalSessionsByTarget returns terminal sessions for a specific target. GET /api/v1/terminal/sessions/target/{type}/{id}

func (*Handler) AboutTempl

func (h *Handler) AboutTempl(w http.ResponseWriter, r *http.Request)

AboutTempl renders the About page with system information.

func (*Handler) AccessAuditExport

func (h *Handler) AccessAuditExport(w http.ResponseWriter, r *http.Request)

AccessAuditExport exports the audit log as CSV.

func (*Handler) AccessAuditSessionRevoke

func (h *Handler) AccessAuditSessionRevoke(w http.ResponseWriter, r *http.Request)

AccessAuditSessionRevoke revokes/terminates a user session.

func (*Handler) AccessAuditTempl

func (h *Handler) AccessAuditTempl(w http.ResponseWriter, r *http.Request)

AccessAuditTempl renders the access control audit page.

func (*Handler) AgentDeployStatusJSON

func (h *Handler) AgentDeployStatusJSON(w http.ResponseWriter, r *http.Request)

AgentDeployStatusJSON handles GET /api/deploy/{deployID} - JSON deployment status.

func (*Handler) AgentDeployStatusTempl

func (h *Handler) AgentDeployStatusTempl(w http.ResponseWriter, r *http.Request)

AgentDeployStatusTempl handles GET /nodes/{id}/deploy/{deployID} - shows deployment status.

func (*Handler) AgentDeployTempl

func (h *Handler) AgentDeployTempl(w http.ResponseWriter, r *http.Request)

AgentDeployTempl handles POST /nodes/{id}/deploy - starts agent deployment.

func (*Handler) AlertCreate

func (h *Handler) AlertCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertDelete

func (h *Handler) AlertDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertDisable

func (h *Handler) AlertDisable(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertEditTempl

func (h *Handler) AlertEditTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertEnable

func (h *Handler) AlertEnable(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertEventAck

func (h *Handler) AlertEventAck(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertSilenceCreate

func (h *Handler) AlertSilenceCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertSilenceDelete

func (h *Handler) AlertSilenceDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertUpdate

func (h *Handler) AlertUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) AlertsTempl

func (h *Handler) AlertsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) AnsibleInventory

func (h *Handler) AnsibleInventory(w http.ResponseWriter, r *http.Request)

AnsibleInventory renders the Ansible inventory browser page. GET /tools/ansible

func (*Handler) AnsibleInventoryDelete

func (h *Handler) AnsibleInventoryDelete(w http.ResponseWriter, r *http.Request)

AnsibleInventoryDelete deletes an inventory. DELETE /tools/ansible/{id}

func (*Handler) AnsibleInventoryParse

func (h *Handler) AnsibleInventoryParse(w http.ResponseWriter, r *http.Request)

AnsibleInventoryParse handles pasted inventory content. POST /tools/ansible/parse

func (*Handler) AnsibleInventoryUpload

func (h *Handler) AnsibleInventoryUpload(w http.ResponseWriter, r *http.Request)

AnsibleInventoryUpload handles inventory file uploads. POST /tools/ansible/upload

func (*Handler) AuditListTempl

func (h *Handler) AuditListTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) AutoDeployCreate

func (h *Handler) AutoDeployCreate(w http.ResponseWriter, r *http.Request)

AutoDeployCreate handles creation of a new auto-deploy rule.

func (*Handler) AutoDeployDelete

func (h *Handler) AutoDeployDelete(w http.ResponseWriter, r *http.Request)

AutoDeployDelete handles deletion of an auto-deploy rule.

func (*Handler) AutoUpdatePoliciesTempl

func (h *Handler) AutoUpdatePoliciesTempl(w http.ResponseWriter, r *http.Request)

AutoUpdatePoliciesTempl renders the auto-update policies page.

func (*Handler) AutoUpdatePolicyCreate

func (h *Handler) AutoUpdatePolicyCreate(w http.ResponseWriter, r *http.Request)

AutoUpdatePolicyCreate creates a new auto-update policy.

func (*Handler) AutoUpdatePolicyDelete

func (h *Handler) AutoUpdatePolicyDelete(w http.ResponseWriter, r *http.Request)

AutoUpdatePolicyDelete deletes an auto-update policy.

func (*Handler) AutoUpdatePolicyToggle

func (h *Handler) AutoUpdatePolicyToggle(w http.ResponseWriter, r *http.Request)

AutoUpdatePolicyToggle toggles an auto-update policy on/off.

func (*Handler) BackupCreate

func (h *Handler) BackupCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupDetailTempl

func (h *Handler) BackupDetailTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupDownload

func (h *Handler) BackupDownload(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupNewTempl

func (h *Handler) BackupNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupRemove

func (h *Handler) BackupRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupRestore

func (h *Handler) BackupRestore(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupScheduleCreate

func (h *Handler) BackupScheduleCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupScheduleDelete

func (h *Handler) BackupScheduleDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupScheduleRun

func (h *Handler) BackupScheduleRun(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupSchedulesTempl

func (h *Handler) BackupSchedulesTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) BackupVerifyDetailTempl

func (h *Handler) BackupVerifyDetailTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyDetailTempl renders a single verification's detail page.

func (*Handler) BackupVerifyListTempl

func (h *Handler) BackupVerifyListTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyListTempl renders the verification list page.

func (*Handler) BackupVerifyRunTempl

func (h *Handler) BackupVerifyRunTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyRunTempl handles POST /backup-verify/{backupID}/verify.

func (*Handler) BackupVerifyScheduleCreateTempl

func (h *Handler) BackupVerifyScheduleCreateTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyScheduleCreateTempl handles POST /backup-verify/schedules.

func (*Handler) BackupVerifyScheduleDeleteTempl

func (h *Handler) BackupVerifyScheduleDeleteTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyScheduleDeleteTempl handles DELETE /backup-verify/schedules/{id}.

func (*Handler) BackupVerifyScheduleListTempl

func (h *Handler) BackupVerifyScheduleListTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyScheduleListTempl renders the verification schedules page.

func (*Handler) BackupVerifyScheduleNewTempl

func (h *Handler) BackupVerifyScheduleNewTempl(w http.ResponseWriter, r *http.Request)

BackupVerifyScheduleNewTempl renders the new schedule form.

func (*Handler) BackupsTempl

func (h *Handler) BackupsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) BulkOpsAction

func (h *Handler) BulkOpsAction(w http.ResponseWriter, r *http.Request)

BulkOpsAction handles bulk operations from the dedicated page and stores results.

func (*Handler) BulkOpsTempl

func (h *Handler) BulkOpsTempl(w http.ResponseWriter, r *http.Request)

BulkOpsTempl renders the bulk operations page.

func (*Handler) CalendarCreateTempl

func (h *Handler) CalendarCreateTempl(w http.ResponseWriter, r *http.Request)

CalendarCreateTempl handles POST /calendar.

func (*Handler) CalendarDeleteTempl

func (h *Handler) CalendarDeleteTempl(w http.ResponseWriter, r *http.Request)

CalendarDeleteTempl handles DELETE /calendar/{id}.

func (*Handler) CalendarEditTempl

func (h *Handler) CalendarEditTempl(w http.ResponseWriter, r *http.Request)

CalendarEditTempl renders the edit-event form.

func (*Handler) CalendarListTempl

func (h *Handler) CalendarListTempl(w http.ResponseWriter, r *http.Request)

CalendarListTempl renders the operations calendar.

func (*Handler) CalendarNewTempl

func (h *Handler) CalendarNewTempl(w http.ResponseWriter, r *http.Request)

CalendarNewTempl renders the create-event form.

func (*Handler) CalendarUpdateTempl

func (h *Handler) CalendarUpdateTempl(w http.ResponseWriter, r *http.Request)

CalendarUpdateTempl handles POST /calendar/{id}.

func (*Handler) CertCreateCustom

func (h *Handler) CertCreateCustom(w http.ResponseWriter, r *http.Request)

func (*Handler) CertCreateLE

func (h *Handler) CertCreateLE(w http.ResponseWriter, r *http.Request)

func (*Handler) CertDelete

func (h *Handler) CertDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) CertDetailTempl

func (h *Handler) CertDetailTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) CertListTempl

func (h *Handler) CertListTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) CertNewCustomTempl

func (h *Handler) CertNewCustomTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) CertNewLETempl

func (h *Handler) CertNewLETempl(w http.ResponseWriter, r *http.Request)

func (*Handler) CertRenew

func (h *Handler) CertRenew(w http.ResponseWriter, r *http.Request)

func (*Handler) ChangeDetailAPI

func (h *Handler) ChangeDetailAPI(w http.ResponseWriter, r *http.Request)

ChangeDetailAPI returns a single change event with full state as JSON.

func (*Handler) ChangeExportCSV

func (h *Handler) ChangeExportCSV(w http.ResponseWriter, r *http.Request)

ChangeExportCSV exports change events as a CSV file.

func (*Handler) ChangeListAPI

func (h *Handler) ChangeListAPI(w http.ResponseWriter, r *http.Request)

ChangeListAPI returns change events as JSON with pagination.

func (*Handler) ChangeResourceAPI

func (h *Handler) ChangeResourceAPI(w http.ResponseWriter, r *http.Request)

ChangeResourceAPI returns change events for a specific resource.

func (*Handler) ChangeStatsAPI

func (h *Handler) ChangeStatsAPI(w http.ResponseWriter, r *http.Request)

ChangeStatsAPI returns change event statistics as JSON.

func (*Handler) ChangesTempl

func (h *Handler) ChangesTempl(w http.ResponseWriter, r *http.Request)

ChangesTempl renders the Change Management Audit Trail page.

func (*Handler) CheatSheet

func (h *Handler) CheatSheet(w http.ResponseWriter, r *http.Request)

CheatSheet renders the command cheat sheet page. GET /tools/cheatsheet

func (*Handler) CheatSheetCustomCreate

func (h *Handler) CheatSheetCustomCreate(w http.ResponseWriter, r *http.Request)

CheatSheetCustomCreate creates a new custom command. POST /tools/cheatsheet/custom

func (*Handler) CheatSheetCustomDelete

func (h *Handler) CheatSheetCustomDelete(w http.ResponseWriter, r *http.Request)

CheatSheetCustomDelete deletes a custom command. DELETE /tools/cheatsheet/custom/{id}

func (*Handler) ComplianceControlUpdateStatus

func (h *Handler) ComplianceControlUpdateStatus(w http.ResponseWriter, r *http.Request)

ComplianceControlUpdateStatus updates a control's implementation status.

func (*Handler) ComplianceEvidenceCreate

func (h *Handler) ComplianceEvidenceCreate(w http.ResponseWriter, r *http.Request)

ComplianceEvidenceCreate creates a new evidence entry for an assessment.

func (*Handler) ComplianceEvidenceList

func (h *Handler) ComplianceEvidenceList(w http.ResponseWriter, r *http.Request)

ComplianceEvidenceList returns all evidence for an assessment.

func (*Handler) ComplianceFrameworkAssess

func (h *Handler) ComplianceFrameworkAssess(w http.ResponseWriter, r *http.Request)

ComplianceFrameworkAssess runs an assessment for a framework.

func (*Handler) ComplianceFrameworkAssessments

func (h *Handler) ComplianceFrameworkAssessments(w http.ResponseWriter, r *http.Request)

ComplianceFrameworkAssessments returns all assessments for a framework.

func (*Handler) ComplianceFrameworkControls

func (h *Handler) ComplianceFrameworkControls(w http.ResponseWriter, r *http.Request)

ComplianceFrameworkControls returns all controls for a framework.

func (*Handler) ComplianceFrameworkReport

func (h *Handler) ComplianceFrameworkReport(w http.ResponseWriter, r *http.Request)

ComplianceFrameworkReport generates a compliance report.

func (*Handler) ComplianceFrameworkSeed

func (h *Handler) ComplianceFrameworkSeed(w http.ResponseWriter, r *http.Request)

ComplianceFrameworkSeed seeds default frameworks.

func (*Handler) ComplianceFrameworkStatus

func (h *Handler) ComplianceFrameworkStatus(w http.ResponseWriter, r *http.Request)

ComplianceFrameworkStatus returns the compliance posture for a single framework.

func (*Handler) ComplianceFrameworksPageTempl

func (h *Handler) ComplianceFrameworksPageTempl(w http.ResponseWriter, r *http.Request)

ComplianceFrameworksPageTempl renders the compliance frameworks page.

func (*Handler) ComplianceFrameworksTempl

func (h *Handler) ComplianceFrameworksTempl(w http.ResponseWriter, r *http.Request)

ComplianceFrameworksTempl returns the list of compliance frameworks as JSON.

func (*Handler) CompliancePolicyCreate

func (h *Handler) CompliancePolicyCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) CompliancePolicyDelete

func (h *Handler) CompliancePolicyDelete(w http.ResponseWriter, r *http.Request)

CompliancePolicyDelete deletes a compliance policy.

func (*Handler) CompliancePolicyToggle

func (h *Handler) CompliancePolicyToggle(w http.ResponseWriter, r *http.Request)

CompliancePolicyToggle toggles a policy enabled/disabled.

func (*Handler) ComplianceScan

func (h *Handler) ComplianceScan(w http.ResponseWriter, r *http.Request)

ComplianceScan runs a compliance check against all running containers.

func (*Handler) ComplianceTempl

func (h *Handler) ComplianceTempl(w http.ResponseWriter, r *http.Request)

ComplianceTempl renders the compliance policies page.

func (*Handler) ComplianceViolationAcknowledge

func (h *Handler) ComplianceViolationAcknowledge(w http.ResponseWriter, r *http.Request)

ComplianceViolationAcknowledge acknowledges a violation.

func (*Handler) ComplianceViolationExempt

func (h *Handler) ComplianceViolationExempt(w http.ResponseWriter, r *http.Request)

ComplianceViolationExempt marks a violation as exempted.

func (*Handler) ComplianceViolationResolve

func (h *Handler) ComplianceViolationResolve(w http.ResponseWriter, r *http.Request)

ComplianceViolationResolve marks a violation as resolved.

func (*Handler) ConfigExport

func (h *Handler) ConfigExport(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigImport

func (h *Handler) ConfigImport(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigSync

func (h *Handler) ConfigSync(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigTempl

func (h *Handler) ConfigTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigTemplateCreate

func (h *Handler) ConfigTemplateCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigTemplateUpdate

func (h *Handler) ConfigTemplateUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigVarCreate

func (h *Handler) ConfigVarCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigVarDelete

func (h *Handler) ConfigVarDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) ConfigVarUpdate

func (h *Handler) ConfigVarUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) ConnectionsTempl

func (h *Handler) ConnectionsTempl(w http.ResponseWriter, r *http.Request)

ConnectionsTempl renders the main connections dashboard.

func (*Handler) ContainerBrowseAPI

func (h *Handler) ContainerBrowseAPI(w http.ResponseWriter, r *http.Request)

ContainerBrowseAPI handles file browsing via web session auth. GET /containers/{id}/files/api/browse/*

func (*Handler) ContainerBulkKill

func (h *Handler) ContainerBulkKill(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerBulkPause

func (h *Handler) ContainerBulkPause(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerBulkRemove

func (h *Handler) ContainerBulkRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerBulkRestart

func (h *Handler) ContainerBulkRestart(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerBulkStart

func (h *Handler) ContainerBulkStart(w http.ResponseWriter, r *http.Request)

Bulk container operations

func (*Handler) ContainerBulkStop

func (h *Handler) ContainerBulkStop(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerBulkUnpause

func (h *Handler) ContainerBulkUnpause(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerCreateSubmit

func (h *Handler) ContainerCreateSubmit(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerDeleteFileAPI

func (h *Handler) ContainerDeleteFileAPI(w http.ResponseWriter, r *http.Request)

ContainerDeleteFileAPI deletes a file in a container via web session auth. DELETE /containers/{id}/files/api/file/*

func (*Handler) ContainerDetailTempl

func (h *Handler) ContainerDetailTempl(w http.ResponseWriter, r *http.Request)

ContainerDetailTempl shows container details using Templ.

func (*Handler) ContainerDownloadFileAPI

func (h *Handler) ContainerDownloadFileAPI(w http.ResponseWriter, r *http.Request)

ContainerDownloadFileAPI downloads a raw file from a container. GET /containers/{id}/files/api/download/*

func (*Handler) ContainerExecTempl

func (h *Handler) ContainerExecTempl(w http.ResponseWriter, r *http.Request)

ContainerExecTempl provides exec interface using Templ.

func (*Handler) ContainerFilesTempl

func (h *Handler) ContainerFilesTempl(w http.ResponseWriter, r *http.Request)

ContainerFilesTempl shows container file browser using Templ.

func (*Handler) ContainerInspectTempl

func (h *Handler) ContainerInspectTempl(w http.ResponseWriter, r *http.Request)

ContainerInspectTempl shows container inspect JSON using Templ.

func (*Handler) ContainerKill

func (h *Handler) ContainerKill(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerLogsTempl

func (h *Handler) ContainerLogsTempl(w http.ResponseWriter, r *http.Request)

ContainerLogsTempl shows container logs using Templ.

func (*Handler) ContainerMkdirAPI

func (h *Handler) ContainerMkdirAPI(w http.ResponseWriter, r *http.Request)

ContainerMkdirAPI creates a directory in a container via web session auth. POST /containers/{id}/files/api/mkdir/*

func (*Handler) ContainerNewTempl

func (h *Handler) ContainerNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerPause

func (h *Handler) ContainerPause(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerReadFileAPI

func (h *Handler) ContainerReadFileAPI(w http.ResponseWriter, r *http.Request)

ContainerReadFileAPI reads a file from a container via web session auth. GET /containers/{id}/files/api/file/*

func (*Handler) ContainerRemove

func (h *Handler) ContainerRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerRename

func (h *Handler) ContainerRename(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerRestart

func (h *Handler) ContainerRestart(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerRowPartial

func (h *Handler) ContainerRowPartial(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerSettingsSummary

func (h *Handler) ContainerSettingsSummary(w http.ResponseWriter, r *http.Request)

ContainerSettingsSummary returns an HTMX fragment with read-only container config summary.

func (*Handler) ContainerSettingsTempl

func (h *Handler) ContainerSettingsTempl(w http.ResponseWriter, r *http.Request)

ContainerSettingsTempl shows container settings page using Templ.

func (*Handler) ContainerSettingsUpdate

func (h *Handler) ContainerSettingsUpdate(w http.ResponseWriter, r *http.Request)

ContainerSettingsUpdate handles the POST to save container settings.

func (*Handler) ContainerStart

func (h *Handler) ContainerStart(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerStatsTempl

func (h *Handler) ContainerStatsTempl(w http.ResponseWriter, r *http.Request)

ContainerStatsTempl shows container resource stats using Templ.

func (*Handler) ContainerStop

func (h *Handler) ContainerStop(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerTemplateCreate

func (h *Handler) ContainerTemplateCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerTemplateDelete

func (h *Handler) ContainerTemplateDelete(w http.ResponseWriter, r *http.Request)

ContainerTemplateDelete deletes a container template.

func (*Handler) ContainerTemplateDeploy

func (h *Handler) ContainerTemplateDeploy(w http.ResponseWriter, r *http.Request)

ContainerTemplateDeploy deploys a container from a template.

func (*Handler) ContainerTemplatesTempl

func (h *Handler) ContainerTemplatesTempl(w http.ResponseWriter, r *http.Request)

ContainerTemplatesTempl renders the container templates page.

func (*Handler) ContainerUnpause

func (h *Handler) ContainerUnpause(w http.ResponseWriter, r *http.Request)

func (*Handler) ContainerWriteFileAPI

func (h *Handler) ContainerWriteFileAPI(w http.ResponseWriter, r *http.Request)

ContainerWriteFileAPI writes a file in a container via web session auth. PUT /containers/{id}/files/api/file/*

func (*Handler) ContainersPartialTempl

func (h *Handler) ContainersPartialTempl(w http.ResponseWriter, r *http.Request)

ContainersPartialTempl renders just the container table for HTMX requests.

func (*Handler) ContainersTempl

func (h *Handler) ContainersTempl(w http.ResponseWriter, r *http.Request)

ContainersTempl lists all containers using Templ.

func (*Handler) CostOptApplyAPI

func (h *Handler) CostOptApplyAPI(w http.ResponseWriter, r *http.Request)

CostOptApplyAPI applies a resource optimization recommendation (POST).

func (*Handler) CostOptDismissAPI

func (h *Handler) CostOptDismissAPI(w http.ResponseWriter, r *http.Request)

CostOptDismissAPI dismisses a resource optimization recommendation (POST).

func (*Handler) CostOptStatsAPI

func (h *Handler) CostOptStatsAPI(w http.ResponseWriter, r *http.Request)

CostOptStatsAPI returns resource optimization statistics as JSON.

func (*Handler) CostOptTempl

func (h *Handler) CostOptTempl(w http.ResponseWriter, r *http.Request)

CostOptTempl renders the resource optimization dashboard page.

func (*Handler) CrontabCreateTempl

func (h *Handler) CrontabCreateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) CrontabDeleteTempl

func (h *Handler) CrontabDeleteTempl(w http.ResponseWriter, r *http.Request)

CrontabDeleteTempl handles DELETE /crontab/{id}.

func (*Handler) CrontabDetailTempl

func (h *Handler) CrontabDetailTempl(w http.ResponseWriter, r *http.Request)

CrontabDetailTempl renders the entry detail page with paginated executions.

func (*Handler) CrontabEditTempl

func (h *Handler) CrontabEditTempl(w http.ResponseWriter, r *http.Request)

CrontabEditTempl renders the entry edit form.

func (*Handler) CrontabListTempl

func (h *Handler) CrontabListTempl(w http.ResponseWriter, r *http.Request)

CrontabListTempl renders the crontab entries list page.

func (*Handler) CrontabNewTempl

func (h *Handler) CrontabNewTempl(w http.ResponseWriter, r *http.Request)

CrontabNewTempl renders the new crontab entry form.

func (*Handler) CrontabRunNowTempl

func (h *Handler) CrontabRunNowTempl(w http.ResponseWriter, r *http.Request)

CrontabRunNowTempl handles POST /crontab/{id}/run.

func (*Handler) CrontabToggleTempl

func (h *Handler) CrontabToggleTempl(w http.ResponseWriter, r *http.Request)

CrontabToggleTempl handles POST /crontab/{id}/toggle.

func (*Handler) CrontabUpdateTempl

func (h *Handler) CrontabUpdateTempl(w http.ResponseWriter, r *http.Request)

CrontabUpdateTempl handles POST /crontab/{id}.

func (*Handler) CustomDashboardsPageTempl

func (h *Handler) CustomDashboardsPageTempl(w http.ResponseWriter, r *http.Request)

CustomDashboardsPageTempl renders the custom dashboards page.

func (*Handler) DNSACMEDetailTempl

func (h *Handler) DNSACMEDetailTempl(w http.ResponseWriter, r *http.Request)

DNSACMEDetailTempl renders /dns/acme/{id}.

func (*Handler) DNSACMEProcessTempl

func (h *Handler) DNSACMEProcessTempl(w http.ResponseWriter, r *http.Request)

DNSACMEProcessTempl handles POST /dns/acme/{id}/process.

func (*Handler) DNSACMETempl

func (h *Handler) DNSACMETempl(w http.ResponseWriter, r *http.Request)

DNSACMETempl renders /dns/acme.

func (*Handler) DNSAuditTempl

func (h *Handler) DNSAuditTempl(w http.ResponseWriter, r *http.Request)

DNSAuditTempl renders /dns/audit.

func (*Handler) DNSProviderCreateTempl

func (h *Handler) DNSProviderCreateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) DNSProviderDeleteTempl

func (h *Handler) DNSProviderDeleteTempl(w http.ResponseWriter, r *http.Request)

DNSProviderDeleteTempl handles POST /dns/{id}/delete.

func (*Handler) DNSProviderDetailTempl

func (h *Handler) DNSProviderDetailTempl(w http.ResponseWriter, r *http.Request)

DNSProviderDetailTempl renders /dns/{id}.

func (*Handler) DNSProviderEditTempl

func (h *Handler) DNSProviderEditTempl(w http.ResponseWriter, r *http.Request)

DNSProviderEditTempl renders /dns/{id}/edit.

func (*Handler) DNSProviderNewTempl

func (h *Handler) DNSProviderNewTempl(w http.ResponseWriter, r *http.Request)

DNSProviderNewTempl renders /dns/new.

func (*Handler) DNSProviderUpdateTempl

func (h *Handler) DNSProviderUpdateTempl(w http.ResponseWriter, r *http.Request)

DNSProviderUpdateTempl handles POST /dns/{id}.

func (*Handler) DNSProvidersTempl

func (h *Handler) DNSProvidersTempl(w http.ResponseWriter, r *http.Request)

DNSProvidersTempl renders /dns.

func (*Handler) DNSRecordCreateTempl

func (h *Handler) DNSRecordCreateTempl(w http.ResponseWriter, r *http.Request)

DNSRecordCreateTempl handles POST /dns/{id}/records.

func (*Handler) DNSRecordDeleteTempl

func (h *Handler) DNSRecordDeleteTempl(w http.ResponseWriter, r *http.Request)

DNSRecordDeleteTempl handles POST /dns/records/{id}/delete.

func (*Handler) DNSRecordNewTempl

func (h *Handler) DNSRecordNewTempl(w http.ResponseWriter, r *http.Request)

DNSRecordNewTempl renders /dns/{id}/records/new.

func (*Handler) DNSRecordsTempl

func (h *Handler) DNSRecordsTempl(w http.ResponseWriter, r *http.Request)

DNSRecordsTempl renders /dns/records.

func (*Handler) DNSSupportedTempl

func (h *Handler) DNSSupportedTempl(w http.ResponseWriter, r *http.Request)

DNSSupportedTempl renders /dns/supported.

func (*Handler) DashboardLayoutCreateJSON

func (h *Handler) DashboardLayoutCreateJSON(w http.ResponseWriter, r *http.Request)

DashboardLayoutCreateJSON creates a new dashboard layout.

func (*Handler) DashboardLayoutDeleteJSON

func (h *Handler) DashboardLayoutDeleteJSON(w http.ResponseWriter, r *http.Request)

DashboardLayoutDeleteJSON deletes a dashboard layout.

func (*Handler) DashboardLayoutGetJSON

func (h *Handler) DashboardLayoutGetJSON(w http.ResponseWriter, r *http.Request)

DashboardLayoutGetJSON returns a single dashboard layout by ID.

func (*Handler) DashboardLayoutUpdateJSON

func (h *Handler) DashboardLayoutUpdateJSON(w http.ResponseWriter, r *http.Request)

DashboardLayoutUpdateJSON updates a dashboard layout.

func (*Handler) DashboardLayoutsJSON

func (h *Handler) DashboardLayoutsJSON(w http.ResponseWriter, r *http.Request)

DashboardLayoutsJSON returns the user's dashboard layouts.

func (*Handler) DashboardTempl

func (h *Handler) DashboardTempl(w http.ResponseWriter, r *http.Request)

DashboardTempl renders the main dashboard using Templ.

func (*Handler) DashboardWidgetCreateJSON

func (h *Handler) DashboardWidgetCreateJSON(w http.ResponseWriter, r *http.Request)

DashboardWidgetCreateJSON adds a widget to a layout.

func (*Handler) DashboardWidgetDeleteJSON

func (h *Handler) DashboardWidgetDeleteJSON(w http.ResponseWriter, r *http.Request)

DashboardWidgetDeleteJSON removes a widget.

func (*Handler) DashboardWidgetUpdateJSON

func (h *Handler) DashboardWidgetUpdateJSON(w http.ResponseWriter, r *http.Request)

DashboardWidgetUpdateJSON updates a widget.

func (*Handler) DashboardWidgetsJSON

func (h *Handler) DashboardWidgetsJSON(w http.ResponseWriter, r *http.Request)

DashboardWidgetsJSON returns all widgets for a layout.

func (*Handler) DatabaseBrowserTempl

func (h *Handler) DatabaseBrowserTempl(w http.ResponseWriter, r *http.Request)

DatabaseBrowserTempl renders the database browser page.

func (*Handler) DatabaseConnectionCreate

func (h *Handler) DatabaseConnectionCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) DatabaseConnectionDelete

func (h *Handler) DatabaseConnectionDelete(w http.ResponseWriter, r *http.Request)

DatabaseConnectionDelete deletes a database connection.

func (*Handler) DatabaseConnectionTest

func (h *Handler) DatabaseConnectionTest(w http.ResponseWriter, r *http.Request)

DatabaseConnectionTest tests a database connection.

func (*Handler) DatabaseConnectionsTempl

func (h *Handler) DatabaseConnectionsTempl(w http.ResponseWriter, r *http.Request)

DatabaseConnectionsTempl renders the database connections list page.

func (*Handler) DatabaseQueryExecute

func (h *Handler) DatabaseQueryExecute(w http.ResponseWriter, r *http.Request)

DatabaseQueryExecute executes a database query.

func (*Handler) DatabaseQueryTempl

func (h *Handler) DatabaseQueryTempl(w http.ResponseWriter, r *http.Request)

DatabaseQueryTempl renders the database query page.

func (*Handler) DatabaseWriteModeToggle

func (h *Handler) DatabaseWriteModeToggle(w http.ResponseWriter, r *http.Request)

DatabaseWriteModeToggle toggles write mode for database browser.

func (*Handler) DeadCreate

func (h *Handler) DeadCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) DeadDelete

func (h *Handler) DeadDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) DeadListTempl

func (h *Handler) DeadListTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) DeadNewTempl

func (h *Handler) DeadNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) DeleteAccount

func (h *Handler) DeleteAccount(w http.ResponseWriter, r *http.Request)

DeleteAccount handles account self-deletion.

func (*Handler) DeleteAllSessions

func (h *Handler) DeleteAllSessions(w http.ResponseWriter, r *http.Request)

DeleteAllSessions revokes all sessions except current (DELETE /profile/sessions).

func (*Handler) DeleteSession

func (h *Handler) DeleteSession(w http.ResponseWriter, r *http.Request)

DeleteSession revokes a single session (DELETE /profile/sessions/{id}).

func (*Handler) DependenciesTempl

func (h *Handler) DependenciesTempl(w http.ResponseWriter, r *http.Request)

DependenciesTempl renders the dependency graph page.

func (*Handler) DockerEngineApplyTempl

func (h *Handler) DockerEngineApplyTempl(w http.ResponseWriter, r *http.Request)

DockerEngineApplyTempl handles POST /config/docker/apply. The form posts raw JSON in the "raw" field. We forward verbatim to the service which parses, validates, snapshots and applies. The result is stashed in a flash cookie so the next GET renders the success or rollback banner inline.

func (*Handler) DockerEngineEditorTempl

func (h *Handler) DockerEngineEditorTempl(w http.ResponseWriter, r *http.Request)

DockerEngineEditorTempl renders the editor page (GET /config/docker).

On a fresh install with no daemon.json on disk, the page still renders — the editor opens on "{}" and the operator can author from scratch. When the dockerconfig service is nil (the container did not mount /etc/docker), the page surfaces an unavailable banner with remediation guidance instead of erroring.

func (*Handler) DockerEngineHistoryTempl

func (h *Handler) DockerEngineHistoryTempl(w http.ResponseWriter, r *http.Request)

DockerEngineHistoryTempl renders the history page.

func (*Handler) DockerEngineRestoreTempl

func (h *Handler) DockerEngineRestoreTempl(w http.ResponseWriter, r *http.Request)

DockerEngineRestoreTempl handles POST /config/docker/restore/{id}.

func (*Handler) DriftAcceptAPI

func (h *Handler) DriftAcceptAPI(w http.ResponseWriter, r *http.Request)

DriftAcceptAPI accepts a drift detection (POST).

func (*Handler) DriftDetailAPI

func (h *Handler) DriftDetailAPI(w http.ResponseWriter, r *http.Request)

DriftDetailAPI returns a single drift detection with full diffs as JSON.

func (*Handler) DriftRemediateAPI

func (h *Handler) DriftRemediateAPI(w http.ResponseWriter, r *http.Request)

DriftRemediateAPI remediates a drift detection (POST).

func (*Handler) DriftStatsAPI

func (h *Handler) DriftStatsAPI(w http.ResponseWriter, r *http.Request)

DriftStatsAPI returns drift statistics as JSON.

func (*Handler) DriftTempl

func (h *Handler) DriftTempl(w http.ResponseWriter, r *http.Request)

DriftTempl renders the drift detection dashboard page.

func (*Handler) EditorHub

func (h *Handler) EditorHub(w http.ResponseWriter, r *http.Request)

EditorHub renders the editor landing page with quick actions and connected repos. Works without Gitea configured - shows scratch pad options. GET /editor

func (*Handler) EditorMonaco

func (h *Handler) EditorMonaco(w http.ResponseWriter, r *http.Request)

EditorMonaco renders the Monaco editor page. With repo param: loads file from git provider. Without repo param: opens scratch editor (empty file). GET /editor/monaco?repo={id}&file={path}&ref={branch} GET /editor/monaco (scratch mode)

func (*Handler) EditorNvim

func (h *Handler) EditorNvim(w http.ResponseWriter, r *http.Request)

EditorNvim renders the nvim terminal page. With repo param: opens file from git provider. Without repo param: opens clean nvim session. GET /editor/nvim?repo={id}&file={path}&ref={branch} GET /editor/nvim (standalone)

func (*Handler) EgressCreateTempl

func (h *Handler) EgressCreateTempl(w http.ResponseWriter, r *http.Request)

EgressCreateTempl handles POST /egress: form submission to add a new policy. allow="true" / "false" comes from the <select>.

func (*Handler) EgressDeleteTempl

func (h *Handler) EgressDeleteTempl(w http.ResponseWriter, r *http.Request)

EgressDeleteTempl handles POST /egress/{id}/delete.

func (*Handler) EgressListTempl

func (h *Handler) EgressListTempl(w http.ResponseWriter, r *http.Request)

EgressListTempl renders /egress: policies for the active host plus the most-recent denies.

func (*Handler) EphemeralEnvCreate

func (h *Handler) EphemeralEnvCreate(w http.ResponseWriter, r *http.Request)

EphemeralEnvCreate creates a new ephemeral environment.

func (*Handler) EphemeralEnvDashboardJSON

func (h *Handler) EphemeralEnvDashboardJSON(w http.ResponseWriter, r *http.Request)

EphemeralEnvDashboardJSON returns ephemeral environment dashboard data.

func (*Handler) EphemeralEnvDestroy

func (h *Handler) EphemeralEnvDestroy(w http.ResponseWriter, r *http.Request)

EphemeralEnvDestroy destroys an ephemeral environment.

func (*Handler) EphemeralEnvExtendTTL

func (h *Handler) EphemeralEnvExtendTTL(w http.ResponseWriter, r *http.Request)

EphemeralEnvExtendTTL extends the TTL of an ephemeral environment.

func (*Handler) EphemeralEnvGet

func (h *Handler) EphemeralEnvGet(w http.ResponseWriter, r *http.Request)

EphemeralEnvGet returns a single ephemeral environment.

func (*Handler) EphemeralEnvLogsJSON

func (h *Handler) EphemeralEnvLogsJSON(w http.ResponseWriter, r *http.Request)

EphemeralEnvLogsJSON returns logs for an ephemeral environment.

func (*Handler) EphemeralEnvProvision

func (h *Handler) EphemeralEnvProvision(w http.ResponseWriter, r *http.Request)

EphemeralEnvProvision provisions a pending ephemeral environment by deploying its stack. Requires compose content to have been set at creation time. POST /ephemeral-envs/{id}/provision

func (*Handler) EphemeralEnvStop

func (h *Handler) EphemeralEnvStop(w http.ResponseWriter, r *http.Request)

EphemeralEnvStop stops a running ephemeral environment.

func (*Handler) EphemeralEnvsJSON

func (h *Handler) EphemeralEnvsJSON(w http.ResponseWriter, r *http.Request)

EphemeralEnvsJSON returns all ephemeral environments.

func (*Handler) EphemeralEnvsPageTempl

func (h *Handler) EphemeralEnvsPageTempl(w http.ResponseWriter, r *http.Request)

EphemeralEnvsPageTempl renders the ephemeral environments page.

func (*Handler) EventsPartialTempl

func (h *Handler) EventsPartialTempl(w http.ResponseWriter, r *http.Request)

EventsPartialTempl renders recent events for HTMX requests.

func (*Handler) EventsTempl

func (h *Handler) EventsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ExportUserData

func (h *Handler) ExportUserData(w http.ResponseWriter, r *http.Request)

ExportUserData exports user data as JSON (POST /profile/export).

func (*Handler) FirewallApplyTempl

func (h *Handler) FirewallApplyTempl(w http.ResponseWriter, r *http.Request)

FirewallApplyTempl handles POST /firewall/apply — pushes rules to host.

func (*Handler) FirewallAuditTempl

func (h *Handler) FirewallAuditTempl(w http.ResponseWriter, r *http.Request)

FirewallAuditTempl renders the firewall audit log page.

func (*Handler) FirewallCreateTempl

func (h *Handler) FirewallCreateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) FirewallDeleteTempl

func (h *Handler) FirewallDeleteTempl(w http.ResponseWriter, r *http.Request)

FirewallDeleteTempl handles DELETE /firewall/{id}.

func (*Handler) FirewallDetailTempl

func (h *Handler) FirewallDetailTempl(w http.ResponseWriter, r *http.Request)

FirewallDetailTempl renders the firewall rule detail page.

func (*Handler) FirewallEditTempl

func (h *Handler) FirewallEditTempl(w http.ResponseWriter, r *http.Request)

FirewallEditTempl renders the firewall rule edit form.

func (*Handler) FirewallListTempl

func (h *Handler) FirewallListTempl(w http.ResponseWriter, r *http.Request)

FirewallListTempl renders the firewall rules list page.

func (*Handler) FirewallNewTempl

func (h *Handler) FirewallNewTempl(w http.ResponseWriter, r *http.Request)

FirewallNewTempl renders the new firewall rule form.

func (*Handler) FirewallSyncTempl

func (h *Handler) FirewallSyncTempl(w http.ResponseWriter, r *http.Request)

FirewallSyncTempl handles POST /firewall/sync — reads rules from host.

func (*Handler) FirewallUpdateTempl

func (h *Handler) FirewallUpdateTempl(w http.ResponseWriter, r *http.Request)

FirewallUpdateTempl handles POST /firewall/{id} — updates a rule.

func (*Handler) GitCreateBranch

func (h *Handler) GitCreateBranch(w http.ResponseWriter, r *http.Request)

GitCreateBranch creates a new branch

func (*Handler) GitCreateConnection

func (h *Handler) GitCreateConnection(w http.ResponseWriter, r *http.Request)

GitCreateConnection creates a new Git connection (any provider)

func (*Handler) GitCreateIssue

func (h *Handler) GitCreateIssue(w http.ResponseWriter, r *http.Request)

GitCreateIssue creates an issue

func (*Handler) GitCreatePR

func (h *Handler) GitCreatePR(w http.ResponseWriter, r *http.Request)

GitCreatePR creates a pull request

func (*Handler) GitCreateRepo

func (h *Handler) GitCreateRepo(w http.ResponseWriter, r *http.Request)

GitCreateRepo creates a new repository

func (*Handler) GitDeleteBranch

func (h *Handler) GitDeleteBranch(w http.ResponseWriter, r *http.Request)

GitDeleteBranch deletes a branch

func (*Handler) GitDeleteConnection

func (h *Handler) GitDeleteConnection(w http.ResponseWriter, r *http.Request)

GitDeleteConnection deletes a Git connection

func (*Handler) GitDeleteRepo

func (h *Handler) GitDeleteRepo(w http.ResponseWriter, r *http.Request)

GitDeleteRepo deletes a repository

func (*Handler) GitEditRepo

func (h *Handler) GitEditRepo(w http.ResponseWriter, r *http.Request)

GitEditRepo edits repository settings

func (*Handler) GitFileContent

func (h *Handler) GitFileContent(w http.ResponseWriter, r *http.Request)

GitFileContent gets file content

func (*Handler) GitFileSave

func (h *Handler) GitFileSave(w http.ResponseWriter, r *http.Request)

GitFileSave saves file content

func (*Handler) GitGetCommit

func (h *Handler) GitGetCommit(w http.ResponseWriter, r *http.Request)

GitGetCommit gets a commit

func (*Handler) GitGetIssue

func (h *Handler) GitGetIssue(w http.ResponseWriter, r *http.Request)

GitGetIssue gets an issue

func (*Handler) GitGetLatestRelease

func (h *Handler) GitGetLatestRelease(w http.ResponseWriter, r *http.Request)

GitGetLatestRelease gets the latest release

func (*Handler) GitGetPR

func (h *Handler) GitGetPR(w http.ResponseWriter, r *http.Request)

GitGetPR gets a pull request

func (*Handler) GitListBranches

func (h *Handler) GitListBranches(w http.ResponseWriter, r *http.Request)

GitListBranches lists branches

func (*Handler) GitListCommits

func (h *Handler) GitListCommits(w http.ResponseWriter, r *http.Request)

GitListCommits lists commits

func (*Handler) GitListIssues

func (h *Handler) GitListIssues(w http.ResponseWriter, r *http.Request)

GitListIssues lists issues

func (*Handler) GitListPRs

func (h *Handler) GitListPRs(w http.ResponseWriter, r *http.Request)

GitListPRs lists pull requests

func (*Handler) GitListReleases

func (h *Handler) GitListReleases(w http.ResponseWriter, r *http.Request)

GitListReleases lists releases

func (*Handler) GitListTags

func (h *Handler) GitListTags(w http.ResponseWriter, r *http.Request)

GitListTags lists tags

func (*Handler) GitListTempl

func (h *Handler) GitListTempl(w http.ResponseWriter, r *http.Request)

GitListTempl renders the unified repositories page

func (*Handler) GitMergePR

func (h *Handler) GitMergePR(w http.ResponseWriter, r *http.Request)

GitMergePR merges a pull request

func (*Handler) GitOpsPipelineCreate

func (h *Handler) GitOpsPipelineCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) GitOpsPipelineDelete

func (h *Handler) GitOpsPipelineDelete(w http.ResponseWriter, r *http.Request)

GitOpsPipelineDelete deletes a pipeline.

func (*Handler) GitOpsPipelineDeploy

func (h *Handler) GitOpsPipelineDeploy(w http.ResponseWriter, r *http.Request)

GitOpsPipelineDeploy triggers a manual deployment for a pipeline.

func (*Handler) GitOpsPipelineToggle

func (h *Handler) GitOpsPipelineToggle(w http.ResponseWriter, r *http.Request)

GitOpsPipelineToggle toggles a pipeline enabled/disabled.

func (*Handler) GitOpsTempl

func (h *Handler) GitOpsTempl(w http.ResponseWriter, r *http.Request)

GitOpsTempl renders the GitOps pipelines page.

func (*Handler) GitRepoDetail

func (h *Handler) GitRepoDetail(w http.ResponseWriter, r *http.Request)

GitRepoDetail shows repository details

func (*Handler) GitRepoFiles

func (h *Handler) GitRepoFiles(w http.ResponseWriter, r *http.Request)

GitRepoFiles lists repository files

func (*Handler) GitSyncConfigCreate

func (h *Handler) GitSyncConfigCreate(w http.ResponseWriter, r *http.Request)

GitSyncConfigCreate creates a new sync configuration.

func (*Handler) GitSyncConfigDelete

func (h *Handler) GitSyncConfigDelete(w http.ResponseWriter, r *http.Request)

GitSyncConfigDelete deletes a sync configuration.

func (*Handler) GitSyncConfigGet

func (h *Handler) GitSyncConfigGet(w http.ResponseWriter, r *http.Request)

GitSyncConfigGet returns a single sync configuration.

func (*Handler) GitSyncConfigToggle

func (h *Handler) GitSyncConfigToggle(w http.ResponseWriter, r *http.Request)

GitSyncConfigToggle toggles a sync configuration enabled/disabled.

func (*Handler) GitSyncConfigsJSON

func (h *Handler) GitSyncConfigsJSON(w http.ResponseWriter, r *http.Request)

GitSyncConfigsJSON returns all git sync configurations.

func (*Handler) GitSyncConflictResolve

func (h *Handler) GitSyncConflictResolve(w http.ResponseWriter, r *http.Request)

GitSyncConflictResolve resolves a sync conflict.

func (*Handler) GitSyncConflictsJSON

func (h *Handler) GitSyncConflictsJSON(w http.ResponseWriter, r *http.Request)

GitSyncConflictsJSON returns conflicts for a configuration.

func (*Handler) GitSyncEventsJSON

func (h *Handler) GitSyncEventsJSON(w http.ResponseWriter, r *http.Request)

GitSyncEventsJSON returns sync events for a configuration.

func (*Handler) GitSyncPageTempl

func (h *Handler) GitSyncPageTempl(w http.ResponseWriter, r *http.Request)

GitSyncPageTempl renders the Git sync page.

func (*Handler) GitSyncRepos

func (h *Handler) GitSyncRepos(w http.ResponseWriter, r *http.Request)

GitSyncRepos syncs repositories for a connection

func (*Handler) GitSyncStatsJSON

func (h *Handler) GitSyncStatsJSON(w http.ResponseWriter, r *http.Request)

GitSyncStatsJSON returns aggregated sync statistics.

func (*Handler) GitSyncTrigger

func (h *Handler) GitSyncTrigger(w http.ResponseWriter, r *http.Request)

GitSyncTrigger manually triggers a sync operation for a configuration.

func (*Handler) GitTemplates

func (h *Handler) GitTemplates(w http.ResponseWriter, r *http.Request)

GitTemplates returns gitignore and license templates

func (*Handler) GitTestConnection

func (h *Handler) GitTestConnection(w http.ResponseWriter, r *http.Request)

GitTestConnection tests a Git connection

func (*Handler) GiteaAddCollaborator

func (h *Handler) GiteaAddCollaborator(w http.ResponseWriter, r *http.Request)

GiteaAddCollaborator adds a user as a collaborator. PUT /integrations/gitea/repos/{id}/collaborators/{username}

func (*Handler) GiteaCancelActionRun

func (h *Handler) GiteaCancelActionRun(w http.ResponseWriter, r *http.Request)

GiteaCancelActionRun cancels a workflow run. POST /integrations/gitea/repos/{id}/actions/runs/{runId}/cancel

func (*Handler) GiteaCompare

func (h *Handler) GiteaCompare(w http.ResponseWriter, r *http.Request)

GiteaCompare compares two refs (branches, tags, or commits). GET /integrations/gitea/repos/{id}/compare?base=main&head=feature

func (*Handler) GiteaCreateBranch

func (h *Handler) GiteaCreateBranch(w http.ResponseWriter, r *http.Request)

GiteaCreateBranch creates a new branch. POST /integrations/gitea/repos/{id}/branches

func (*Handler) GiteaCreateCommitStatus

func (h *Handler) GiteaCreateCommitStatus(w http.ResponseWriter, r *http.Request)

GiteaCreateCommitStatus creates a status for a commit. POST /integrations/gitea/repos/{id}/statuses/{sha}

func (*Handler) GiteaCreateConnection

func (h *Handler) GiteaCreateConnection(w http.ResponseWriter, r *http.Request)

GiteaCreateConnection handles POST /integrations/gitea/connections.

func (*Handler) GiteaCreateDeployKey

func (h *Handler) GiteaCreateDeployKey(w http.ResponseWriter, r *http.Request)

GiteaCreateDeployKey creates a deploy key. POST /integrations/gitea/repos/{id}/keys

func (*Handler) GiteaCreateHook

func (h *Handler) GiteaCreateHook(w http.ResponseWriter, r *http.Request)

GiteaCreateHook creates a webhook. POST /integrations/gitea/repos/{id}/hooks

func (*Handler) GiteaCreateIssue

func (h *Handler) GiteaCreateIssue(w http.ResponseWriter, r *http.Request)

GiteaCreateIssue creates a new issue. POST /integrations/gitea/repos/{id}/issues

func (*Handler) GiteaCreateIssueComment

func (h *Handler) GiteaCreateIssueComment(w http.ResponseWriter, r *http.Request)

GiteaCreateIssueComment creates a comment on an issue. POST /integrations/gitea/repos/{id}/issues/{number}/comments

func (*Handler) GiteaCreatePR

func (h *Handler) GiteaCreatePR(w http.ResponseWriter, r *http.Request)

GiteaCreatePR creates a new pull request. POST /integrations/gitea/repos/{id}/pulls

func (*Handler) GiteaCreatePRReview

func (h *Handler) GiteaCreatePRReview(w http.ResponseWriter, r *http.Request)

GiteaCreatePRReview creates a review on a pull request. POST /integrations/gitea/repos/{id}/pulls/{number}/reviews

func (*Handler) GiteaCreateRelease

func (h *Handler) GiteaCreateRelease(w http.ResponseWriter, r *http.Request)

GiteaCreateRelease creates a release. POST /integrations/gitea/repos/{id}/releases

func (*Handler) GiteaCreateRepo

func (h *Handler) GiteaCreateRepo(w http.ResponseWriter, r *http.Request)

GiteaCreateRepo creates a new repository. POST /integrations/gitea/repos

func (*Handler) GiteaCreateTag

func (h *Handler) GiteaCreateTag(w http.ResponseWriter, r *http.Request)

GiteaCreateTag creates a new tag. POST /integrations/gitea/repos/{id}/tags

func (*Handler) GiteaDeleteBranch

func (h *Handler) GiteaDeleteBranch(w http.ResponseWriter, r *http.Request)

GiteaDeleteBranch deletes a branch. DELETE /integrations/gitea/repos/{id}/branches/{name}

func (*Handler) GiteaDeleteConnection

func (h *Handler) GiteaDeleteConnection(w http.ResponseWriter, r *http.Request)

GiteaDeleteConnection handles POST /integrations/gitea/connections/{id}/delete.

func (*Handler) GiteaDeleteDeployKey

func (h *Handler) GiteaDeleteDeployKey(w http.ResponseWriter, r *http.Request)

GiteaDeleteDeployKey deletes a deploy key. DELETE /integrations/gitea/repos/{id}/keys/{keyId}

func (*Handler) GiteaDeleteHook

func (h *Handler) GiteaDeleteHook(w http.ResponseWriter, r *http.Request)

GiteaDeleteHook deletes a webhook. DELETE /integrations/gitea/repos/{id}/hooks/{hookId}

func (*Handler) GiteaDeleteIssueComment

func (h *Handler) GiteaDeleteIssueComment(w http.ResponseWriter, r *http.Request)

GiteaDeleteIssueComment deletes a comment. DELETE /integrations/gitea/repos/{id}/issues/comments/{commentId}

func (*Handler) GiteaDeleteRelease

func (h *Handler) GiteaDeleteRelease(w http.ResponseWriter, r *http.Request)

GiteaDeleteRelease deletes a release. DELETE /integrations/gitea/repos/{id}/releases/{releaseId}

func (*Handler) GiteaDeleteReleaseAsset

func (h *Handler) GiteaDeleteReleaseAsset(w http.ResponseWriter, r *http.Request)

GiteaDeleteReleaseAsset deletes a release asset. DELETE /integrations/gitea/repos/{id}/releases/{releaseId}/assets/{assetId}

func (*Handler) GiteaDeleteRepo

func (h *Handler) GiteaDeleteRepo(w http.ResponseWriter, r *http.Request)

GiteaDeleteRepo deletes a repository. POST /integrations/gitea/repos/{id}/delete

func (*Handler) GiteaDeleteTag

func (h *Handler) GiteaDeleteTag(w http.ResponseWriter, r *http.Request)

GiteaDeleteTag deletes a tag. DELETE /integrations/gitea/repos/{id}/tags/{name}

func (*Handler) GiteaEditHook

func (h *Handler) GiteaEditHook(w http.ResponseWriter, r *http.Request)

GiteaEditHook updates a webhook. PATCH /integrations/gitea/repos/{id}/hooks/{hookId}

func (*Handler) GiteaEditIssue

func (h *Handler) GiteaEditIssue(w http.ResponseWriter, r *http.Request)

GiteaEditIssue updates an issue. PATCH /integrations/gitea/repos/{id}/issues/{number}

func (*Handler) GiteaEditPR

func (h *Handler) GiteaEditPR(w http.ResponseWriter, r *http.Request)

GiteaEditPR updates a pull request. PATCH /integrations/gitea/repos/{id}/pulls/{number}

func (*Handler) GiteaEditRelease

func (h *Handler) GiteaEditRelease(w http.ResponseWriter, r *http.Request)

GiteaEditRelease updates a release. PATCH /integrations/gitea/repos/{id}/releases/{releaseId}

func (*Handler) GiteaEditRepo

func (h *Handler) GiteaEditRepo(w http.ResponseWriter, r *http.Request)

GiteaEditRepo updates repository settings. POST /integrations/gitea/repos/{id}/edit

func (*Handler) GiteaFileContent

func (h *Handler) GiteaFileContent(w http.ResponseWriter, r *http.Request)

GiteaFileContent returns the content of a single file. GET /integrations/gitea/repos/{id}/file?path=&ref=

func (*Handler) GiteaFileSave

func (h *Handler) GiteaFileSave(w http.ResponseWriter, r *http.Request)

GiteaFileSave saves (commits) a file to Gitea. POST /integrations/gitea/repos/{id}/file

func (*Handler) GiteaGetActionJobLogs

func (h *Handler) GiteaGetActionJobLogs(w http.ResponseWriter, r *http.Request)

GiteaGetActionJobLogs returns logs for a job. GET /integrations/gitea/repos/{id}/actions/jobs/{jobId}/logs

func (*Handler) GiteaGetActionRun

func (h *Handler) GiteaGetActionRun(w http.ResponseWriter, r *http.Request)

GiteaGetActionRun returns a single workflow run. GET /integrations/gitea/repos/{id}/actions/runs/{runId}

func (*Handler) GiteaGetCollaboratorPermission

func (h *Handler) GiteaGetCollaboratorPermission(w http.ResponseWriter, r *http.Request)

GiteaGetCollaboratorPermission returns the permission level for a collaborator. GET /integrations/gitea/repos/{id}/collaborators/{username}/permission

func (*Handler) GiteaGetCombinedStatus

func (h *Handler) GiteaGetCombinedStatus(w http.ResponseWriter, r *http.Request)

GiteaGetCombinedStatus returns the combined status for a commit. GET /integrations/gitea/repos/{id}/commits/{sha}/status

func (*Handler) GiteaGetCommit

func (h *Handler) GiteaGetCommit(w http.ResponseWriter, r *http.Request)

GiteaGetCommit returns a single commit with details. GET /integrations/gitea/repos/{id}/commits/{sha}

func (*Handler) GiteaGetDeployKey

func (h *Handler) GiteaGetDeployKey(w http.ResponseWriter, r *http.Request)

GiteaGetDeployKey returns a single deploy key. GET /integrations/gitea/repos/{id}/keys/{keyId}

func (*Handler) GiteaGetDiff

func (h *Handler) GiteaGetDiff(w http.ResponseWriter, r *http.Request)

GiteaGetDiff returns raw diff between two refs. GET /integrations/gitea/repos/{id}/diff?base=main&head=feature

func (*Handler) GiteaGetHook

func (h *Handler) GiteaGetHook(w http.ResponseWriter, r *http.Request)

GiteaGetHook returns a single webhook. GET /integrations/gitea/repos/{id}/hooks/{hookId}

func (*Handler) GiteaGetIssue

func (h *Handler) GiteaGetIssue(w http.ResponseWriter, r *http.Request)

GiteaGetIssue returns a single issue. GET /integrations/gitea/repos/{id}/issues/{number}

func (*Handler) GiteaGetLatestRelease

func (h *Handler) GiteaGetLatestRelease(w http.ResponseWriter, r *http.Request)

GiteaGetLatestRelease returns the latest release. GET /integrations/gitea/repos/{id}/releases/latest

func (*Handler) GiteaGetPR

func (h *Handler) GiteaGetPR(w http.ResponseWriter, r *http.Request)

GiteaGetPR returns a single pull request. GET /integrations/gitea/repos/{id}/pulls/{number}

func (*Handler) GiteaGetPRDiff

func (h *Handler) GiteaGetPRDiff(w http.ResponseWriter, r *http.Request)

GiteaGetPRDiff returns the diff for a pull request. GET /integrations/gitea/repos/{id}/pulls/{number}/diff

func (*Handler) GiteaGetRelease

func (h *Handler) GiteaGetRelease(w http.ResponseWriter, r *http.Request)

GiteaGetRelease returns a single release. GET /integrations/gitea/repos/{id}/releases/{releaseId}

func (*Handler) GiteaGetReleaseByTag

func (h *Handler) GiteaGetReleaseByTag(w http.ResponseWriter, r *http.Request)

GiteaGetReleaseByTag returns a release by tag name. GET /integrations/gitea/repos/{id}/releases/tags/{tag}

func (*Handler) GiteaIssuesPage

func (h *Handler) GiteaIssuesPage(w http.ResponseWriter, r *http.Request)

GiteaIssuesPage renders the issues list page. GET /integrations/gitea/repos/{id}/issues

func (*Handler) GiteaListActionJobs

func (h *Handler) GiteaListActionJobs(w http.ResponseWriter, r *http.Request)

GiteaListActionJobs returns jobs for a workflow run. GET /integrations/gitea/repos/{id}/actions/runs/{runId}/jobs

func (*Handler) GiteaListActionRuns

func (h *Handler) GiteaListActionRuns(w http.ResponseWriter, r *http.Request)

GiteaListActionRuns returns workflow runs for a repository. GET /integrations/gitea/repos/{id}/actions/runs

func (*Handler) GiteaListBranches

func (h *Handler) GiteaListBranches(w http.ResponseWriter, r *http.Request)

GiteaListBranches returns branches as JSON. GET /integrations/gitea/repos/{id}/branches

func (*Handler) GiteaListCollaborators

func (h *Handler) GiteaListCollaborators(w http.ResponseWriter, r *http.Request)

GiteaListCollaborators returns collaborators for a repository. GET /integrations/gitea/repos/{id}/collaborators

func (*Handler) GiteaListCommitStatuses

func (h *Handler) GiteaListCommitStatuses(w http.ResponseWriter, r *http.Request)

GiteaListCommitStatuses returns statuses for a commit. GET /integrations/gitea/repos/{id}/commits/{sha}/statuses

func (*Handler) GiteaListCommitsFiltered

func (h *Handler) GiteaListCommitsFiltered(w http.ResponseWriter, r *http.Request)

GiteaListCommitsFiltered returns commits with filtering as JSON. GET /integrations/gitea/repos/{id}/commits?sha=&path=&author=&since=&until=&page=&limit=

func (*Handler) GiteaListDeployKeys

func (h *Handler) GiteaListDeployKeys(w http.ResponseWriter, r *http.Request)

GiteaListDeployKeys returns deploy keys for a repository. GET /integrations/gitea/repos/{id}/keys

func (*Handler) GiteaListHooks

func (h *Handler) GiteaListHooks(w http.ResponseWriter, r *http.Request)

GiteaListHooks returns webhooks for a repository. GET /integrations/gitea/repos/{id}/hooks

func (*Handler) GiteaListIssueComments

func (h *Handler) GiteaListIssueComments(w http.ResponseWriter, r *http.Request)

GiteaListIssueComments returns comments on an issue. GET /integrations/gitea/repos/{id}/issues/{number}/comments

func (*Handler) GiteaListIssues

func (h *Handler) GiteaListIssues(w http.ResponseWriter, r *http.Request)

GiteaListIssues returns issues for a repository. GET /integrations/gitea/repos/{id}/issues If tab=issues query param or Accept: text/html, renders page; otherwise returns JSON.

func (*Handler) GiteaListLabels

func (h *Handler) GiteaListLabels(w http.ResponseWriter, r *http.Request)

GiteaListLabels returns labels for a repository. GET /integrations/gitea/repos/{id}/labels

func (*Handler) GiteaListMilestones

func (h *Handler) GiteaListMilestones(w http.ResponseWriter, r *http.Request)

GiteaListMilestones returns milestones for a repository. GET /integrations/gitea/repos/{id}/milestones

func (*Handler) GiteaListPRReviews

func (h *Handler) GiteaListPRReviews(w http.ResponseWriter, r *http.Request)

GiteaListPRReviews returns reviews for a pull request. GET /integrations/gitea/repos/{id}/pulls/{number}/reviews

func (*Handler) GiteaListPRs

func (h *Handler) GiteaListPRs(w http.ResponseWriter, r *http.Request)

GiteaListPRs returns pull requests for a repository. GET /integrations/gitea/repos/{id}/pulls If tab=pulls query param or Accept: text/html, renders page; otherwise returns JSON.

func (*Handler) GiteaListReleaseAssets

func (h *Handler) GiteaListReleaseAssets(w http.ResponseWriter, r *http.Request)

GiteaListReleaseAssets returns assets for a release. GET /integrations/gitea/repos/{id}/releases/{releaseId}/assets

func (*Handler) GiteaListReleases

func (h *Handler) GiteaListReleases(w http.ResponseWriter, r *http.Request)

GiteaListReleases returns releases for a repository. GET /integrations/gitea/repos/{id}/releases

func (*Handler) GiteaListRepoTeams

func (h *Handler) GiteaListRepoTeams(w http.ResponseWriter, r *http.Request)

GiteaListRepoTeams returns teams with access to a repository. GET /integrations/gitea/repos/{id}/teams

func (*Handler) GiteaListTags

func (h *Handler) GiteaListTags(w http.ResponseWriter, r *http.Request)

GiteaListTags returns tags as JSON. GET /integrations/gitea/repos/{id}/tags

func (*Handler) GiteaListWorkflows

func (h *Handler) GiteaListWorkflows(w http.ResponseWriter, r *http.Request)

GiteaListWorkflows returns workflows for a repository. GET /integrations/gitea/repos/{id}/actions/workflows

func (*Handler) GiteaMergePR

func (h *Handler) GiteaMergePR(w http.ResponseWriter, r *http.Request)

GiteaMergePR merges a pull request. POST /integrations/gitea/repos/{id}/pulls/{number}/merge

func (*Handler) GiteaPullRequestsPage

func (h *Handler) GiteaPullRequestsPage(w http.ResponseWriter, r *http.Request)

GiteaPullRequestsPage renders the pull requests list page. GET /integrations/gitea/repos/{id}/pulls

func (*Handler) GiteaRemoveCollaborator

func (h *Handler) GiteaRemoveCollaborator(w http.ResponseWriter, r *http.Request)

GiteaRemoveCollaborator removes a collaborator from a repository. DELETE /integrations/gitea/repos/{id}/collaborators/{username}

func (*Handler) GiteaRepoDetail

func (h *Handler) GiteaRepoDetail(w http.ResponseWriter, r *http.Request)

GiteaRepoDetail renders the repo detail page with branches and recent commits. GET /integrations/gitea/repos/{id}

func (*Handler) GiteaRepoFiles

func (h *Handler) GiteaRepoFiles(w http.ResponseWriter, r *http.Request)

GiteaRepoFiles returns the file tree for a path in a repo. GET /integrations/gitea/repos/{id}/files?path=&ref=

func (*Handler) GiteaRerunActionRun

func (h *Handler) GiteaRerunActionRun(w http.ResponseWriter, r *http.Request)

GiteaRerunActionRun reruns a workflow run. POST /integrations/gitea/repos/{id}/actions/runs/{runId}/rerun

func (*Handler) GiteaSyncRepos

func (h *Handler) GiteaSyncRepos(w http.ResponseWriter, r *http.Request)

GiteaSyncRepos handles POST /integrations/gitea/connections/{id}/sync.

func (*Handler) GiteaTempl

func (h *Handler) GiteaTempl(w http.ResponseWriter, r *http.Request)

GiteaTempl renders the Gitea integrations page listing connections and repos. GET /integrations/gitea

func (*Handler) GiteaTemplates

func (h *Handler) GiteaTemplates(w http.ResponseWriter, r *http.Request)

GiteaTemplates returns gitignore and license templates. GET /integrations/gitea/connections/{id}/templates

func (*Handler) GiteaTestConnection

func (h *Handler) GiteaTestConnection(w http.ResponseWriter, r *http.Request)

GiteaTestConnection handles POST /integrations/gitea/connections/{id}/test.

func (*Handler) GiteaTestHook

func (h *Handler) GiteaTestHook(w http.ResponseWriter, r *http.Request)

GiteaTestHook tests a webhook. POST /integrations/gitea/repos/{id}/hooks/{hookId}/test

func (*Handler) GiteaWebhookReceiver

func (h *Handler) GiteaWebhookReceiver(w http.ResponseWriter, r *http.Request)

GiteaWebhookReceiver handles POST /webhooks/gitea. Validates HMAC-SHA256 signature and stores the event.

func (*Handler) HealthCheck

func (h *Handler) HealthCheck(w http.ResponseWriter, r *http.Request)

HealthCheck returns health status.

func (*Handler) HealthDashTempl

func (h *Handler) HealthDashTempl(w http.ResponseWriter, r *http.Request)

HealthDashTempl renders the container health check dashboard.

func (*Handler) HostCreateFormTempl

func (h *Handler) HostCreateFormTempl(w http.ResponseWriter, r *http.Request)

HostCreateFormTempl renders the "Add Node" form page.

func (*Handler) HostCreateTempl

func (h *Handler) HostCreateTempl(w http.ResponseWriter, r *http.Request)

HostCreateTempl handles POST /nodes/create - creates a new host.

func (*Handler) HostDetailTempl

func (h *Handler) HostDetailTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) HostEditFormTempl

func (h *Handler) HostEditFormTempl(w http.ResponseWriter, r *http.Request)

HostEditFormTempl renders the "Edit Node" form page.

func (*Handler) HostFilesTempl

func (h *Handler) HostFilesTempl(w http.ResponseWriter, r *http.Request)

HostFilesTempl renders the host file browser page.

func (*Handler) HostRemoveTempl

func (h *Handler) HostRemoveTempl(w http.ResponseWriter, r *http.Request)

HostRemoveTempl handles DELETE /nodes/{id} - deletes a host.

func (*Handler) HostTerminalTempl

func (h *Handler) HostTerminalTempl(w http.ResponseWriter, r *http.Request)

HostTerminalTempl renders the host terminal page.

func (*Handler) HostTest

func (h *Handler) HostTest(w http.ResponseWriter, r *http.Request)

func (*Handler) HostUpdateTempl

func (h *Handler) HostUpdateTempl(w http.ResponseWriter, r *http.Request)

HostUpdateTempl handles POST /nodes/{id} - updates a host.

func (*Handler) HostsTempl

func (h *Handler) HostsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ImageBuilderCreateTempl

func (h *Handler) ImageBuilderCreateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ImageBuilderDetailTempl

func (h *Handler) ImageBuilderDetailTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderDetailTempl renders a build detail page with a live log pane wired to the API's WebSocket endpoint.

func (*Handler) ImageBuilderListTempl

func (h *Handler) ImageBuilderListTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderListTempl renders the image builder list page.

func (*Handler) ImageBuilderNewTempl

func (h *Handler) ImageBuilderNewTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderNewTempl renders the new build form. When ?template=<id> is present the Dockerfile field pre-fills from that template.

func (*Handler) ImageBuilderTemplateCreateTempl

func (h *Handler) ImageBuilderTemplateCreateTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderTemplateCreateTempl handles POST /image-builder/templates.

func (*Handler) ImageBuilderTemplateDeleteTempl

func (h *Handler) ImageBuilderTemplateDeleteTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderTemplateDeleteTempl handles POST /image-builder/templates/{id}/delete. Built-in templates surface a 403 instead of being removed.

func (*Handler) ImageBuilderTemplateListTempl

func (h *Handler) ImageBuilderTemplateListTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderTemplateListTempl renders the Dockerfile templates page.

func (*Handler) ImageBuilderTemplateNewTempl

func (h *Handler) ImageBuilderTemplateNewTempl(w http.ResponseWriter, r *http.Request)

ImageBuilderTemplateNewTempl renders the new template form.

func (*Handler) ImageDetailTempl

func (h *Handler) ImageDetailTempl(w http.ResponseWriter, r *http.Request)

ImageDetailTempl renders the image detail page using templ

func (*Handler) ImagePull

func (h *Handler) ImagePull(w http.ResponseWriter, r *http.Request)

ImagePull renders the image pull page.

func (*Handler) ImagePullSubmit

func (h *Handler) ImagePullSubmit(w http.ResponseWriter, r *http.Request)

func (*Handler) ImageRemove

func (h *Handler) ImageRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) ImageSignSeed

func (h *Handler) ImageSignSeed(w http.ResponseWriter, r *http.Request)

ImageSignSeed seeds default trust policies.

func (*Handler) ImageSignaturesJSON

func (h *Handler) ImageSignaturesJSON(w http.ResponseWriter, r *http.Request)

ImageSignaturesJSON returns signatures for an image.

func (*Handler) ImageSigningPageTempl

func (h *Handler) ImageSigningPageTempl(w http.ResponseWriter, r *http.Request)

ImageSigningPageTempl renders the image signing page.

func (*Handler) ImageTrustPoliciesJSON

func (h *Handler) ImageTrustPoliciesJSON(w http.ResponseWriter, r *http.Request)

ImageTrustPoliciesJSON lists trust policies.

func (*Handler) ImageVerifyJSON

func (h *Handler) ImageVerifyJSON(w http.ResponseWriter, r *http.Request)

ImageVerifyJSON verifies an image's signatures against trust policies.

func (*Handler) ImagesPartial

func (h *Handler) ImagesPartial(w http.ResponseWriter, r *http.Request)

func (*Handler) ImagesPrune

func (h *Handler) ImagesPrune(w http.ResponseWriter, r *http.Request)

func (*Handler) ImagesTempl

func (h *Handler) ImagesTempl(w http.ResponseWriter, r *http.Request)

ImagesTempl lists all images using Templ.

func (*Handler) InstanceBackup

func (h *Handler) InstanceBackup(w http.ResponseWriter, r *http.Request)

InstanceBackup creates an encrypted backup of the entire usulnet instance. It exports the database (via SQL dump) into a tar.gz file encrypted with AES-256-GCM.

func (*Handler) InstanceRestore

func (h *Handler) InstanceRestore(w http.ResponseWriter, r *http.Request)

InstanceRestore restores an instance from an encrypted backup.

func (*Handler) JobCancel

func (h *Handler) JobCancel(w http.ResponseWriter, r *http.Request)

JobCancel handles canceling a pending or running job.

func (*Handler) JobDelete

func (h *Handler) JobDelete(w http.ResponseWriter, r *http.Request)

JobDelete handles deleting a completed/failed/canceled job.

func (*Handler) JobDetailTempl

func (h *Handler) JobDetailTempl(w http.ResponseWriter, r *http.Request)

JobDetailTempl renders the detail page for a single job.

func (*Handler) JobsTempl

func (h *Handler) JobsTempl(w http.ResponseWriter, r *http.Request)

JobsTempl renders the scheduler jobs list page.

func (*Handler) LDAPBrowserTempl

func (h *Handler) LDAPBrowserTempl(w http.ResponseWriter, r *http.Request)

LDAPBrowserTempl renders the LDAP browser page.

func (*Handler) LDAPConnectionCreate

func (h *Handler) LDAPConnectionCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) LDAPConnectionDelete

func (h *Handler) LDAPConnectionDelete(w http.ResponseWriter, r *http.Request)

LDAPConnectionDelete deletes an LDAP connection.

func (*Handler) LDAPConnectionSettingsTempl

func (h *Handler) LDAPConnectionSettingsTempl(w http.ResponseWriter, r *http.Request)

LDAPConnectionSettingsTempl renders the LDAP connection settings/edit page.

func (*Handler) LDAPConnectionSettingsUpdate

func (h *Handler) LDAPConnectionSettingsUpdate(w http.ResponseWriter, r *http.Request)

LDAPConnectionSettingsUpdate updates an LDAP connection from the settings form.

func (*Handler) LDAPConnectionTest

func (h *Handler) LDAPConnectionTest(w http.ResponseWriter, r *http.Request)

LDAPConnectionTest tests an LDAP connection.

func (*Handler) LDAPConnectionsTempl

func (h *Handler) LDAPConnectionsTempl(w http.ResponseWriter, r *http.Request)

LDAPConnectionsTempl renders the LDAP connections list page.

func (*Handler) LDAPProviderCreate

func (h *Handler) LDAPProviderCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) LDAPProviderDelete

func (h *Handler) LDAPProviderDelete(w http.ResponseWriter, r *http.Request)

LDAPProviderDelete handles deleting an LDAP provider.

func (*Handler) LDAPProviderDisable

func (h *Handler) LDAPProviderDisable(w http.ResponseWriter, r *http.Request)

LDAPProviderDisable handles disabling an LDAP provider.

func (*Handler) LDAPProviderEditTempl

func (h *Handler) LDAPProviderEditTempl(w http.ResponseWriter, r *http.Request)

LDAPProviderEditTempl renders the LDAP provider edit page.

func (*Handler) LDAPProviderEnable

func (h *Handler) LDAPProviderEnable(w http.ResponseWriter, r *http.Request)

LDAPProviderEnable handles enabling an LDAP provider.

func (*Handler) LDAPProviderTest

func (h *Handler) LDAPProviderTest(w http.ResponseWriter, r *http.Request)

LDAPProviderTest handles testing an LDAP provider connection.

func (*Handler) LDAPProviderUpdate

func (h *Handler) LDAPProviderUpdate(w http.ResponseWriter, r *http.Request)

LDAPProviderUpdate handles updating an LDAP provider.

func (*Handler) LDAPProvidersTempl

func (h *Handler) LDAPProvidersTempl(w http.ResponseWriter, r *http.Request)

LDAPProvidersTempl renders the LDAP providers list page.

func (*Handler) LDAPSearchExecute

func (h *Handler) LDAPSearchExecute(w http.ResponseWriter, r *http.Request)

LDAPSearchExecute executes an LDAP search.

func (*Handler) LDAPSearchTempl

func (h *Handler) LDAPSearchTempl(w http.ResponseWriter, r *http.Request)

LDAPSearchTempl renders the LDAP search page.

func (*Handler) LDAPWriteModeToggle

func (h *Handler) LDAPWriteModeToggle(w http.ResponseWriter, r *http.Request)

LDAPWriteModeToggle toggles write mode for LDAP browser.

func (*Handler) LicenseActivate

func (h *Handler) LicenseActivate(w http.ResponseWriter, r *http.Request)

LicenseActivate handles license key activation via JWT.

func (*Handler) LicenseDeactivate

func (h *Handler) LicenseDeactivate(w http.ResponseWriter, r *http.Request)

LicenseDeactivate handles license deactivation (reverts to CE).

func (*Handler) LicenseTempl

func (h *Handler) LicenseTempl(w http.ResponseWriter, r *http.Request)

LicenseTempl renders the license management page.

func (*Handler) LifecyclePoliciesTempl

func (h *Handler) LifecyclePoliciesTempl(w http.ResponseWriter, r *http.Request)

LifecyclePoliciesTempl renders the lifecycle policies page.

func (*Handler) LifecyclePolicyCreate

func (h *Handler) LifecyclePolicyCreate(w http.ResponseWriter, r *http.Request)

LifecyclePolicyCreate creates a new lifecycle policy.

func (*Handler) LifecyclePolicyDelete

func (h *Handler) LifecyclePolicyDelete(w http.ResponseWriter, r *http.Request)

LifecyclePolicyDelete deletes a lifecycle policy.

func (*Handler) LifecyclePolicyExecute

func (h *Handler) LifecyclePolicyExecute(w http.ResponseWriter, r *http.Request)

LifecyclePolicyExecute executes a lifecycle policy immediately.

func (*Handler) LifecyclePolicyToggle

func (h *Handler) LifecyclePolicyToggle(w http.ResponseWriter, r *http.Request)

LifecyclePolicyToggle toggles a policy enabled/disabled.

func (*Handler) LogManagement

func (h *Handler) LogManagement(w http.ResponseWriter, r *http.Request)

LogManagement renders the log management page. GET /logs/management

func (*Handler) LogSearchAPI

func (h *Handler) LogSearchAPI(w http.ResponseWriter, r *http.Request)

LogSearchAPI handles log search requests. GET /api/logs/search

TODO(session 16): wire this through a real search backend (logagg.Service.Search with models.LogSearchOptions). The current implementation fetches container logs directly and filters them in memory, ignoring time_range entirely. The time-range parsing block was previously here but unused; restore it together with the repository-backed search.

func (*Handler) LogSearchJSON

func (h *Handler) LogSearchJSON(w http.ResponseWriter, r *http.Request)

LogSearchJSON handles log search requests.

func (*Handler) LogStatsJSON

func (h *Handler) LogStatsJSON(w http.ResponseWriter, r *http.Request)

LogStatsJSON returns log aggregation statistics.

func (*Handler) LogUpload

func (h *Handler) LogUpload(w http.ResponseWriter, r *http.Request)

LogUpload handles log file uploads. POST /logs/uploads

func (*Handler) LogUploadAnalyze

func (h *Handler) LogUploadAnalyze(w http.ResponseWriter, r *http.Request)

LogUploadAnalyze shows analysis of an uploaded log file. GET /logs/uploads/{id}

func (*Handler) LogUploadDelete

func (h *Handler) LogUploadDelete(w http.ResponseWriter, r *http.Request)

LogUploadDelete deletes an uploaded log file. DELETE /logs/uploads/{id}

func (*Handler) LoginPageTempl

func (h *Handler) LoginPageTempl(w http.ResponseWriter, r *http.Request)

LoginPageTempl renders the login page using Templ.

func (*Handler) LoginSubmit

func (h *Handler) LoginSubmit(w http.ResponseWriter, r *http.Request)

LoginSubmit handles login form submission.

func (*Handler) Logout

func (h *Handler) Logout(w http.ResponseWriter, r *http.Request)

Logout handles user logout.

func (*Handler) LogsPageTempl

func (h *Handler) LogsPageTempl(w http.ResponseWriter, r *http.Request)

LogsPageTempl renders the centralized multi-container logs viewer.

func (*Handler) MaintenanceCreate

func (h *Handler) MaintenanceCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) MaintenanceDelete

func (h *Handler) MaintenanceDelete(w http.ResponseWriter, r *http.Request)

MaintenanceDelete deletes a maintenance window.

func (*Handler) MaintenanceExecute

func (h *Handler) MaintenanceExecute(w http.ResponseWriter, r *http.Request)

MaintenanceExecute manually triggers a maintenance window.

func (*Handler) MaintenanceTempl

func (h *Handler) MaintenanceTempl(w http.ResponseWriter, r *http.Request)

MaintenanceTempl renders the maintenance windows page.

func (*Handler) MaintenanceToggle

func (h *Handler) MaintenanceToggle(w http.ResponseWriter, r *http.Request)

MaintenanceToggle toggles a maintenance window enabled/disabled.

func (*Handler) ManifestBuilderPageTempl

func (h *Handler) ManifestBuilderPageTempl(w http.ResponseWriter, r *http.Request)

ManifestBuilderPageTempl renders the manifest builder page.

func (*Handler) ManifestComponentsJSON

func (h *Handler) ManifestComponentsJSON(w http.ResponseWriter, r *http.Request)

ManifestComponentsJSON returns available builder components.

func (*Handler) ManifestGenerateJSON

func (h *Handler) ManifestGenerateJSON(w http.ResponseWriter, r *http.Request)

ManifestGenerateJSON generates a manifest from service blocks.

func (*Handler) ManifestSeedJSON

func (h *Handler) ManifestSeedJSON(w http.ResponseWriter, r *http.Request)

ManifestSeedJSON seeds builtin templates and components.

func (*Handler) ManifestSessionCreate

func (h *Handler) ManifestSessionCreate(w http.ResponseWriter, r *http.Request)

ManifestSessionCreate creates a new builder session.

func (*Handler) ManifestSessionDelete

func (h *Handler) ManifestSessionDelete(w http.ResponseWriter, r *http.Request)

ManifestSessionDelete deletes a builder session.

func (*Handler) ManifestSessionGet

func (h *Handler) ManifestSessionGet(w http.ResponseWriter, r *http.Request)

ManifestSessionGet returns a single builder session.

func (*Handler) ManifestSessionSave

func (h *Handler) ManifestSessionSave(w http.ResponseWriter, r *http.Request)

ManifestSessionSave marks a builder session as saved.

func (*Handler) ManifestSessionUpdate

func (h *Handler) ManifestSessionUpdate(w http.ResponseWriter, r *http.Request)

ManifestSessionUpdate updates a builder session's canvas state and services.

func (*Handler) ManifestSessionsJSON

func (h *Handler) ManifestSessionsJSON(w http.ResponseWriter, r *http.Request)

ManifestSessionsJSON returns all builder sessions for the current user.

func (*Handler) ManifestTemplateCategoriesJSON

func (h *Handler) ManifestTemplateCategoriesJSON(w http.ResponseWriter, r *http.Request)

ManifestTemplateCategoriesJSON returns available template categories.

func (*Handler) ManifestTemplateCreate

func (h *Handler) ManifestTemplateCreate(w http.ResponseWriter, r *http.Request)

ManifestTemplateCreate creates a new manifest template.

func (*Handler) ManifestTemplateDelete

func (h *Handler) ManifestTemplateDelete(w http.ResponseWriter, r *http.Request)

ManifestTemplateDelete deletes a manifest template.

func (*Handler) ManifestTemplateGet

func (h *Handler) ManifestTemplateGet(w http.ResponseWriter, r *http.Request)

ManifestTemplateGet returns a single manifest template.

func (*Handler) ManifestTemplateRender

func (h *Handler) ManifestTemplateRender(w http.ResponseWriter, r *http.Request)

ManifestTemplateRender renders a template with provided variables.

func (*Handler) ManifestTemplatesJSON

func (h *Handler) ManifestTemplatesJSON(w http.ResponseWriter, r *http.Request)

ManifestTemplatesJSON returns all manifest templates.

func (*Handler) ManifestValidateJSON

func (h *Handler) ManifestValidateJSON(w http.ResponseWriter, r *http.Request)

ManifestValidateJSON validates a manifest.

func (*Handler) MarketplaceDetailTempl

func (h *Handler) MarketplaceDetailTempl(w http.ResponseWriter, r *http.Request)

MarketplaceDetailTempl renders the app detail page.

func (*Handler) MarketplaceInstallCreateTempl

func (h *Handler) MarketplaceInstallCreateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) MarketplaceInstallTempl

func (h *Handler) MarketplaceInstallTempl(w http.ResponseWriter, r *http.Request)

MarketplaceInstallTempl renders the per-app install form.

func (*Handler) MarketplaceInstalledTempl

func (h *Handler) MarketplaceInstalledTempl(w http.ResponseWriter, r *http.Request)

MarketplaceInstalledTempl renders the installed apps page.

func (*Handler) MarketplaceListTempl

func (h *Handler) MarketplaceListTempl(w http.ResponseWriter, r *http.Request)

MarketplaceListTempl renders the marketplace browse page.

func (*Handler) MarketplaceReviewCreateTempl

func (h *Handler) MarketplaceReviewCreateTempl(w http.ResponseWriter, r *http.Request)

MarketplaceReviewCreateTempl handles the review form submission.

func (*Handler) MarketplaceReviewTempl

func (h *Handler) MarketplaceReviewTempl(w http.ResponseWriter, r *http.Request)

MarketplaceReviewTempl renders the leave-a-review form.

func (*Handler) MarketplaceSubmitCreateTempl

func (h *Handler) MarketplaceSubmitCreateTempl(w http.ResponseWriter, r *http.Request)

MarketplaceSubmitCreateTempl handles the submit app form submission.

func (*Handler) MarketplaceSubmitTempl

func (h *Handler) MarketplaceSubmitTempl(w http.ResponseWriter, r *http.Request)

MarketplaceSubmitTempl renders the submit app form.

func (*Handler) MarketplaceUninstallTempl

func (h *Handler) MarketplaceUninstallTempl(w http.ResponseWriter, r *http.Request)

MarketplaceUninstallTempl handles uninstalling an app.

func (*Handler) MetadataDownloadStripped

func (h *Handler) MetadataDownloadStripped(w http.ResponseWriter, r *http.Request)

MetadataDownloadStripped streams the stripped bytes for an artifact.

func (*Handler) MetadataJobDetailTempl

func (h *Handler) MetadataJobDetailTempl(w http.ResponseWriter, r *http.Request)

MetadataJobDetailTempl renders /recon/metadata/jobs/{id}.

func (*Handler) MetadataUploadSubmit

func (h *Handler) MetadataUploadSubmit(w http.ResponseWriter, r *http.Request)

MetadataUploadSubmit handles POST /recon/metadata/jobs (multipart). Returns the upload_result partial when called via HTMX, or a JSON shape for regular form consumers. The canonical JSON-API equivalent lives at POST /api/v1/metadata/jobs and is owned by internal/api/handlers/metadata.go.

func (*Handler) MetadataUploadTempl

func (h *Handler) MetadataUploadTempl(w http.ResponseWriter, r *http.Request)

MetadataUploadTempl renders /recon/metadata — drag-drop upload page.

func (*Handler) MonitoringContainerPage

func (h *Handler) MonitoringContainerPage(w http.ResponseWriter, r *http.Request)

MonitoringContainerPage renders the detail monitoring page for a single container.

func (*Handler) MonitoringContainersPartial

func (h *Handler) MonitoringContainersPartial(w http.ResponseWriter, r *http.Request)

MonitoringContainersPartial returns per-container stats as HTMX partial or JSON.

func (*Handler) MonitoringHistoryJSON

func (h *Handler) MonitoringHistoryJSON(w http.ResponseWriter, r *http.Request)

MonitoringHistoryJSON returns time-series data for Chart.js rendering. Query params: type=host|container, container_id=xxx, range=1h|6h|24h|7d, interval=1m|5m|1h|1d

func (*Handler) MonitoringHostPartial

func (h *Handler) MonitoringHostPartial(w http.ResponseWriter, r *http.Request)

MonitoringHostPartial returns host stats as HTMX partial or JSON.

func (*Handler) MonitoringPage

func (h *Handler) MonitoringPage(w http.ResponseWriter, r *http.Request)

MonitoringPage renders the main monitoring dashboard.

func (*Handler) MonitoringTempl

func (h *Handler) MonitoringTempl(w http.ResponseWriter, r *http.Request)

MonitoringTempl renders the main monitoring page with current host + container stats. Phase 8 will add Templ templates; for now returns JSON.

func (*Handler) NetworkConnect

func (h *Handler) NetworkConnect(w http.ResponseWriter, r *http.Request)

func (*Handler) NetworkCreate

func (h *Handler) NetworkCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) NetworkDetailTempl

func (h *Handler) NetworkDetailTempl(w http.ResponseWriter, r *http.Request)

NetworkDetailTempl renders the network detail page using templ

func (*Handler) NetworkDisconnect

func (h *Handler) NetworkDisconnect(w http.ResponseWriter, r *http.Request)

func (*Handler) NetworkNewTempl

func (h *Handler) NetworkNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) NetworkRemove

func (h *Handler) NetworkRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) NetworksPrune

func (h *Handler) NetworksPrune(w http.ResponseWriter, r *http.Request)

func (*Handler) NetworksTempl

func (h *Handler) NetworksTempl(w http.ResponseWriter, r *http.Request)

NetworksTempl lists all networks using Templ.

func (*Handler) NotificationChannelCreate

func (h *Handler) NotificationChannelCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) NotificationChannelDelete

func (h *Handler) NotificationChannelDelete(w http.ResponseWriter, r *http.Request)

NotificationChannelDelete deletes a notification channel.

func (*Handler) NotificationChannelEditTempl

func (h *Handler) NotificationChannelEditTempl(w http.ResponseWriter, r *http.Request)

NotificationChannelEditTempl renders the notification channel edit page.

func (*Handler) NotificationChannelTest

func (h *Handler) NotificationChannelTest(w http.ResponseWriter, r *http.Request)

NotificationChannelTest sends a test notification to a channel.

func (*Handler) NotificationChannelsTempl

func (h *Handler) NotificationChannelsTempl(w http.ResponseWriter, r *http.Request)

NotificationChannelsTempl renders the notification channels configuration page.

func (*Handler) NotificationDelete

func (h *Handler) NotificationDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) NotificationMarkRead

func (h *Handler) NotificationMarkRead(w http.ResponseWriter, r *http.Request)

func (*Handler) NotificationsMarkAllRead

func (h *Handler) NotificationsMarkAllRead(w http.ResponseWriter, r *http.Request)

func (*Handler) NotificationsPartialTempl

func (h *Handler) NotificationsPartialTempl(w http.ResponseWriter, r *http.Request)

NotificationsPartialTempl renders notifications dropdown content (from alert events).

func (*Handler) NotificationsTempl

func (h *Handler) NotificationsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) OAuthCallbackHandler

func (h *Handler) OAuthCallbackHandler(w http.ResponseWriter, r *http.Request)

OAuthCallbackHandler handles the OAuth provider's callback after user authorization.

func (*Handler) OAuthLogin

func (h *Handler) OAuthLogin(w http.ResponseWriter, r *http.Request)

OAuthLogin initiates the OAuth login flow by redirecting to the provider's authorization URL.

func (*Handler) OAuthProviderCreate

func (h *Handler) OAuthProviderCreate(w http.ResponseWriter, r *http.Request)

OAuthProviderCreate handles creating a new OAuth provider.

func (*Handler) OAuthProviderDelete

func (h *Handler) OAuthProviderDelete(w http.ResponseWriter, r *http.Request)

OAuthProviderDelete handles deleting an OAuth provider.

func (*Handler) OAuthProviderDisable

func (h *Handler) OAuthProviderDisable(w http.ResponseWriter, r *http.Request)

OAuthProviderDisable handles disabling an OAuth provider.

func (*Handler) OAuthProviderEditTempl

func (h *Handler) OAuthProviderEditTempl(w http.ResponseWriter, r *http.Request)

OAuthProviderEditTempl renders the OAuth provider edit page.

func (*Handler) OAuthProviderEnable

func (h *Handler) OAuthProviderEnable(w http.ResponseWriter, r *http.Request)

OAuthProviderEnable handles enabling an OAuth provider.

func (*Handler) OAuthProviderUpdate

func (h *Handler) OAuthProviderUpdate(w http.ResponseWriter, r *http.Request)

OAuthProviderUpdate handles updating an OAuth provider.

func (*Handler) OAuthProvidersTempl

func (h *Handler) OAuthProvidersTempl(w http.ResponseWriter, r *http.Request)

OAuthProvidersTempl renders the OAuth providers list page.

func (*Handler) OPAPoliciesJSON

func (h *Handler) OPAPoliciesJSON(w http.ResponseWriter, r *http.Request)

OPAPoliciesJSON returns OPA policies as JSON.

func (*Handler) OPAPoliciesPageTempl

func (h *Handler) OPAPoliciesPageTempl(w http.ResponseWriter, r *http.Request)

OPAPoliciesPageTempl renders the OPA policies management page.

func (*Handler) OPAPolicyEvaluateContainer

func (h *Handler) OPAPolicyEvaluateContainer(w http.ResponseWriter, r *http.Request)

OPAPolicyEvaluateContainer evaluates OPA policies against a container.

func (*Handler) OPAPolicySeed

func (h *Handler) OPAPolicySeed(w http.ResponseWriter, r *http.Request)

OPAPolicySeed seeds default OPA policies.

func (*Handler) OnboardingCompleted

func (h *Handler) OnboardingCompleted() bool

OnboardingCompleted is the nil-safe form of OnboardingSvc().IsCompleted(). When the service isn't wired, we report completed so the wizard pages don't render — same fail-open behaviour as the middleware.

func (*Handler) OnboardingDoneTempl

func (h *Handler) OnboardingDoneTempl(w http.ResponseWriter, r *http.Request)

OnboardingDoneTempl renders the "you're set" step. The redirect to here only happens after a successful password write, so reaching it implies the mandatory step is satisfied.

func (*Handler) OnboardingFinish

func (h *Handler) OnboardingFinish(w http.ResponseWriter, r *http.Request)

OnboardingFinish handles POST /onboarding/finish — flips the onboarding_completed flag and sends the operator to the dashboard. The middleware stops redirecting after the flag flips, so future requests skip the wizard.

func (*Handler) OnboardingSvc

func (h *Handler) OnboardingSvc() OnboardingService

OnboardingSvc returns the wired onboarding service, or nil if the dependency was never injected (e.g., in tests).

func (*Handler) OnboardingWelcomeSubmit

func (h *Handler) OnboardingWelcomeSubmit(w http.ResponseWriter, r *http.Request)

OnboardingWelcomeSubmit handles POST /onboarding/welcome — it validates and writes the new admin password, then renders the "done" step. It does NOT call MarkComplete yet; the operator has to explicitly click "Finish setup" on the done page.

func (*Handler) OnboardingWelcomeTempl

func (h *Handler) OnboardingWelcomeTempl(w http.ResponseWriter, r *http.Request)

OnboardingWelcomeTempl renders the mandatory password-change form.

func (*Handler) OpenAPIDocsTempl

func (h *Handler) OpenAPIDocsTempl(w http.ResponseWriter, r *http.Request)

OpenAPIDocsTempl serves a Swagger UI page that loads the OpenAPI spec.

func (*Handler) OverviewTempl

func (h *Handler) OverviewTempl(w http.ResponseWriter, r *http.Request)

OverviewTempl renders the multi-node aggregate dashboard.

func (*Handler) PacketCapture

func (h *Handler) PacketCapture(w http.ResponseWriter, r *http.Request)

PacketCapture renders the packet capture page. GET /tools/capture

func (*Handler) PacketCaptureAnalyze

func (h *Handler) PacketCaptureAnalyze(w http.ResponseWriter, r *http.Request)

PacketCaptureAnalyze returns PCAP analysis results as JSON. GET /tools/capture/{id}/analyze

func (*Handler) PacketCaptureDelete

func (h *Handler) PacketCaptureDelete(w http.ResponseWriter, r *http.Request)

PacketCaptureDelete deletes a capture. DELETE /tools/capture/{id}

func (*Handler) PacketCaptureDetail

func (h *Handler) PacketCaptureDetail(w http.ResponseWriter, r *http.Request)

PacketCaptureDetail shows capture details. GET /tools/capture/{id}

func (*Handler) PacketCaptureDownload

func (h *Handler) PacketCaptureDownload(w http.ResponseWriter, r *http.Request)

PacketCaptureDownload downloads the PCAP file. GET /tools/capture/{id}/download

func (*Handler) PacketCaptureStart

func (h *Handler) PacketCaptureStart(w http.ResponseWriter, r *http.Request)

PacketCaptureStart starts a new packet capture. POST /tools/capture/start

func (*Handler) PacketCaptureStop

func (h *Handler) PacketCaptureStop(w http.ResponseWriter, r *http.Request)

PacketCaptureStop stops a running capture. POST /tools/capture/{id}/stop

func (*Handler) PortsTempl

func (h *Handler) PortsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ProfilePage

func (h *Handler) ProfilePage(w http.ResponseWriter, r *http.Request)

ProfilePage renders the user profile page.

func (*Handler) ProfileTempl

func (h *Handler) ProfileTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) PrometheusMetrics

func (h *Handler) PrometheusMetrics(w http.ResponseWriter, r *http.Request)

PrometheusMetrics returns metrics in Prometheus text exposition format. Public endpoint (no auth), suitable for Prometheus scraping.

func (*Handler) ProxyDetailTempl

func (h *Handler) ProxyDetailTempl(w http.ResponseWriter, r *http.Request)

ProxyDetailTempl renders proxy host detail page.

func (*Handler) ProxyEditTempl

func (h *Handler) ProxyEditTempl(w http.ResponseWriter, r *http.Request)

ProxyEditTempl renders the edit proxy host form.

func (*Handler) ProxyHostCreateTempl

func (h *Handler) ProxyHostCreateTempl(w http.ResponseWriter, r *http.Request)

ProxyHostCreateTempl handles POST /proxy/hosts to create a new proxy host.

func (*Handler) ProxyHostDeleteTempl

func (h *Handler) ProxyHostDeleteTempl(w http.ResponseWriter, r *http.Request)

ProxyHostDeleteTempl handles DELETE /proxy/hosts/{id}.

func (*Handler) ProxyHostDisableTempl

func (h *Handler) ProxyHostDisableTempl(w http.ResponseWriter, r *http.Request)

ProxyHostDisableTempl handles POST /proxy/hosts/{id}/disable.

func (*Handler) ProxyHostEnableTempl

func (h *Handler) ProxyHostEnableTempl(w http.ResponseWriter, r *http.Request)

ProxyHostEnableTempl handles POST /proxy/hosts/{id}/enable.

func (*Handler) ProxyHostUpdateTempl

func (h *Handler) ProxyHostUpdateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ProxyNewTempl

func (h *Handler) ProxyNewTempl(w http.ResponseWriter, r *http.Request)

ProxyNewTempl renders the new proxy host form.

func (*Handler) ProxySetupDeleteTempl

func (h *Handler) ProxySetupDeleteTempl(w http.ResponseWriter, r *http.Request)

ProxySetupDeleteTempl handles POST /proxy/setup/delete to remove NPM connection.

func (*Handler) ProxySetupSaveTempl

func (h *Handler) ProxySetupSaveTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) ProxySetupTempl

func (h *Handler) ProxySetupTempl(w http.ResponseWriter, r *http.Request)

ProxySetupTempl renders the NPM connection setup page.

func (*Handler) ProxySetupTestTempl

func (h *Handler) ProxySetupTestTempl(w http.ResponseWriter, r *http.Request)

ProxySetupTestTempl handles POST /proxy/setup/test to test NPM connection.

func (*Handler) ProxySyncTempl

func (h *Handler) ProxySyncTempl(w http.ResponseWriter, r *http.Request)

ProxySyncTempl handles POST /proxy/sync to trigger NPM sync.

func (*Handler) ProxyTempl

func (h *Handler) ProxyTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) QuotaCreate

func (h *Handler) QuotaCreate(w http.ResponseWriter, r *http.Request)

QuotaCreate creates a new resource quota.

func (*Handler) QuotaDelete

func (h *Handler) QuotaDelete(w http.ResponseWriter, r *http.Request)

QuotaDelete deletes a resource quota.

func (*Handler) QuotaToggle

func (h *Handler) QuotaToggle(w http.ResponseWriter, r *http.Request)

QuotaToggle toggles a quota enabled/disabled.

func (*Handler) QuotasTempl

func (h *Handler) QuotasTempl(w http.ResponseWriter, r *http.Request)

QuotasTempl renders the resource quotas page.

func (*Handler) RDPConnectionCreate

func (h *Handler) RDPConnectionCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) RDPConnectionDelete

func (h *Handler) RDPConnectionDelete(w http.ResponseWriter, r *http.Request)

RDPConnectionDelete deletes an RDP connection.

func (*Handler) RDPConnectionDetailTempl

func (h *Handler) RDPConnectionDetailTempl(w http.ResponseWriter, r *http.Request)

RDPConnectionDetailTempl renders the RDP connection detail page.

func (*Handler) RDPConnectionDownload

func (h *Handler) RDPConnectionDownload(w http.ResponseWriter, r *http.Request)

RDPConnectionDownload generates and serves a .rdp file for the connection.

func (*Handler) RDPConnectionNewTempl

func (h *Handler) RDPConnectionNewTempl(w http.ResponseWriter, r *http.Request)

RDPConnectionNewTempl renders the new RDP connection form.

func (*Handler) RDPConnectionTest

func (h *Handler) RDPConnectionTest(w http.ResponseWriter, r *http.Request)

RDPConnectionTest tests an RDP connection via TCP dial to the specified host:port.

func (*Handler) RDPConnectionUpdate

func (h *Handler) RDPConnectionUpdate(w http.ResponseWriter, r *http.Request)

RDPConnectionUpdate updates an RDP connection.

func (*Handler) RDPConnectionsTempl

func (h *Handler) RDPConnectionsTempl(w http.ResponseWriter, r *http.Request)

RDPConnectionsTempl renders the RDP connections list page.

func (*Handler) RDPSessionTempl

func (h *Handler) RDPSessionTempl(w http.ResponseWriter, r *http.Request)

RDPSessionTempl renders the RDP session page with the web client.

func (*Handler) ReconAck

func (h *Handler) ReconAck(w http.ResponseWriter, r *http.Request)

ReconAck handles the POST /recon/ack form (mirrors POST /api/v1/recon/_ack for the in-page modal). Returns the dashboard fragment for HTMX or redirects on a normal form submit.

func (*Handler) ReconConnectorsTempl

func (h *Handler) ReconConnectorsTempl(w http.ResponseWriter, r *http.Request)

ReconConnectorsTempl renders /recon/connectors.

func (*Handler) ReconDashboardTempl

func (h *Handler) ReconDashboardTempl(w http.ResponseWriter, r *http.Request)

ReconDashboardTempl renders /recon/dashboard.

func (*Handler) ReconReportsTempl

func (h *Handler) ReconReportsTempl(w http.ResponseWriter, r *http.Request)

ReconReportsTempl renders /recon/reports.

func (*Handler) ReconScanDetailTempl

func (h *Handler) ReconScanDetailTempl(w http.ResponseWriter, r *http.Request)

ReconScanDetailTempl renders /recon/scans/{id}.

func (*Handler) ReconScanFindingsPartial

func (h *Handler) ReconScanFindingsPartial(w http.ResponseWriter, r *http.Request)

ReconScanFindingsPartial renders the findings table as an HTMX partial. Supports ?severity= and ?module= filters; reuses the same target id used by the full page so swap targets stay stable.

func (*Handler) ReconScanProgressPartial

func (h *Handler) ReconScanProgressPartial(w http.ResponseWriter, r *http.Request)

ReconScanProgressPartial renders the live progress bar for a scan. The partial subscribes to /api/v1/events for SSE updates.

func (*Handler) ReconScansListTempl

func (h *Handler) ReconScansListTempl(w http.ResponseWriter, r *http.Request)

ReconScansListTempl renders /recon/scans.

func (*Handler) ReconTargetDetailTempl

func (h *Handler) ReconTargetDetailTempl(w http.ResponseWriter, r *http.Request)

ReconTargetDetailTempl renders /recon/targets/{id}.

func (*Handler) ReconTargetsListTempl

func (h *Handler) ReconTargetsListTempl(w http.ResponseWriter, r *http.Request)

ReconTargetsListTempl renders /recon/targets.

func (*Handler) RedirCreate

func (h *Handler) RedirCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) RedirDelete

func (h *Handler) RedirDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) RedirEditTempl

func (h *Handler) RedirEditTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) RedirListTempl

func (h *Handler) RedirListTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) RedirNewTempl

func (h *Handler) RedirNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) RedirUpdate

func (h *Handler) RedirUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) RegistriesTempl

func (h *Handler) RegistriesTempl(w http.ResponseWriter, r *http.Request)

RegistriesTempl renders the registries management page.

func (*Handler) RegistryBrowse

func (h *Handler) RegistryBrowse(w http.ResponseWriter, r *http.Request)

RegistryBrowse renders the registry browsing page showing repositories.

func (*Handler) RegistryCreate

func (h *Handler) RegistryCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) RegistryDelete

func (h *Handler) RegistryDelete(w http.ResponseWriter, r *http.Request)

RegistryDelete handles deletion of a registry.

func (*Handler) RegistryRepoTags

func (h *Handler) RegistryRepoTags(w http.ResponseWriter, r *http.Request)

RegistryRepoTags renders the tag list for a specific repository.

func (*Handler) RegistryTagManifest

func (h *Handler) RegistryTagManifest(w http.ResponseWriter, r *http.Request)

RegistryTagManifest renders manifest details for a specific tag.

func (*Handler) RegistryUpdate

func (h *Handler) RegistryUpdate(w http.ResponseWriter, r *http.Request)

RegistryUpdate handles updating a registry.

func (*Handler) RenderError

func (h *Handler) RenderError(w http.ResponseWriter, r *http.Request, code int, title, message string)

RenderError renders an error page using Templ.

func (*Handler) RenderErrorTempl

func (h *Handler) RenderErrorTempl(w http.ResponseWriter, r *http.Request, code int, title, message string)

RenderErrorTempl renders an error page using Templ.

func (*Handler) RenderServiceNotConfigured

func (h *Handler) RenderServiceNotConfigured(w http.ResponseWriter, r *http.Request, serviceName, configHint string)

RenderServiceNotConfigured renders a user-friendly "service not configured" page using the reusable templ component. Use this for full-page HTML handlers where a service is nil; for JSON/API endpoints use renderJSONError instead.

func (*Handler) ResetPreferences

func (h *Handler) ResetPreferences(w http.ResponseWriter, r *http.Request)

func (*Handler) RoleCreate

func (h *Handler) RoleCreate(w http.ResponseWriter, r *http.Request)

RoleCreate handles creating a new role.

func (*Handler) RoleDelete

func (h *Handler) RoleDelete(w http.ResponseWriter, r *http.Request)

RoleDelete handles deleting a role.

func (*Handler) RoleDisable

func (h *Handler) RoleDisable(w http.ResponseWriter, r *http.Request)

RoleDisable handles disabling a role.

func (*Handler) RoleEditTempl

func (h *Handler) RoleEditTempl(w http.ResponseWriter, r *http.Request)

RoleEditTempl renders the role edit page.

func (*Handler) RoleEnable

func (h *Handler) RoleEnable(w http.ResponseWriter, r *http.Request)

RoleEnable handles enabling a role.

func (*Handler) RoleUpdate

func (h *Handler) RoleUpdate(w http.ResponseWriter, r *http.Request)

RoleUpdate handles updating a role.

func (*Handler) RolesTempl

func (h *Handler) RolesTempl(w http.ResponseWriter, r *http.Request)

RolesTempl renders the roles list page.

func (*Handler) RollbackAuditTempl

func (h *Handler) RollbackAuditTempl(w http.ResponseWriter, r *http.Request)

RollbackAuditTempl renders the audit log.

func (*Handler) RollbackCreateTempl

func (h *Handler) RollbackCreateTempl(w http.ResponseWriter, r *http.Request)

RollbackCreateTempl handles POST /rollback.

func (*Handler) RollbackDeleteTempl

func (h *Handler) RollbackDeleteTempl(w http.ResponseWriter, r *http.Request)

RollbackDeleteTempl handles POST /rollback/{id}/delete.

func (*Handler) RollbackDetailTempl

func (h *Handler) RollbackDetailTempl(w http.ResponseWriter, r *http.Request)

RollbackDetailTempl renders a single policy view.

func (*Handler) RollbackDryRunGetTempl

func (h *Handler) RollbackDryRunGetTempl(w http.ResponseWriter, r *http.Request)

RollbackDryRunGetTempl renders the dry-run form.

func (*Handler) RollbackDryRunPostTempl

func (h *Handler) RollbackDryRunPostTempl(w http.ResponseWriter, r *http.Request)

RollbackDryRunPostTempl handles POST /rollback/{id}/dry-run — runs the preview and renders the result inline.

func (*Handler) RollbackEditTempl

func (h *Handler) RollbackEditTempl(w http.ResponseWriter, r *http.Request)

RollbackEditTempl renders the edit form.

func (*Handler) RollbackExecutionDetailTempl

func (h *Handler) RollbackExecutionDetailTempl(w http.ResponseWriter, r *http.Request)

RollbackExecutionDetailTempl renders a single execution row.

func (*Handler) RollbackExecutionsTempl

func (h *Handler) RollbackExecutionsTempl(w http.ResponseWriter, r *http.Request)

RollbackExecutionsTempl renders the execution log.

func (*Handler) RollbackListTempl

func (h *Handler) RollbackListTempl(w http.ResponseWriter, r *http.Request)

RollbackListTempl renders the policy list page.

func (*Handler) RollbackNewTempl

func (h *Handler) RollbackNewTempl(w http.ResponseWriter, r *http.Request)

RollbackNewTempl renders the new-policy form.

func (*Handler) RollbackUpdateTempl

func (h *Handler) RollbackUpdateTempl(w http.ResponseWriter, r *http.Request)

RollbackUpdateTempl handles POST /rollback/{id}/update.

func (*Handler) RunbookCreate

func (h *Handler) RunbookCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) RunbookDelete

func (h *Handler) RunbookDelete(w http.ResponseWriter, r *http.Request)

RunbookDelete handles deletion of a runbook.

func (*Handler) RunbookExecute

func (h *Handler) RunbookExecute(w http.ResponseWriter, r *http.Request)

RunbookExecute triggers manual execution of a runbook. If the scheduler is available, execution is performed asynchronously via a background job. Otherwise, falls back to synchronous execution.

func (*Handler) RunbooksTempl

func (h *Handler) RunbooksTempl(w http.ResponseWriter, r *http.Request)

RunbooksTempl renders the runbooks management page.

func (*Handler) RuntimeDashboardJSON

func (h *Handler) RuntimeDashboardJSON(w http.ResponseWriter, r *http.Request)

RuntimeDashboardJSON returns the runtime security dashboard data.

func (*Handler) RuntimeEventAcknowledge

func (h *Handler) RuntimeEventAcknowledge(w http.ResponseWriter, r *http.Request)

RuntimeEventAcknowledge acknowledges a runtime event.

func (*Handler) RuntimeEventsJSON

func (h *Handler) RuntimeEventsJSON(w http.ResponseWriter, r *http.Request)

RuntimeEventsJSON lists runtime security events.

func (*Handler) RuntimeMonitorAll

func (h *Handler) RuntimeMonitorAll(w http.ResponseWriter, r *http.Request)

RuntimeMonitorAll triggers runtime monitoring for all containers.

func (*Handler) RuntimeRulesJSON

func (h *Handler) RuntimeRulesJSON(w http.ResponseWriter, r *http.Request)

RuntimeRulesJSON lists runtime detection rules.

func (*Handler) RuntimeSecurityPageTempl

func (h *Handler) RuntimeSecurityPageTempl(w http.ResponseWriter, r *http.Request)

RuntimeSecurityPageTempl renders the runtime security page.

func (*Handler) RuntimeSeedRules

func (h *Handler) RuntimeSeedRules(w http.ResponseWriter, r *http.Request)

RuntimeSeedRules seeds default detection rules.

func (*Handler) SFTPBrowserTempl

func (h *Handler) SFTPBrowserTempl(w http.ResponseWriter, r *http.Request)

SFTPBrowserTempl renders the SFTP file browser.

func (*Handler) SFTPDelete

func (h *Handler) SFTPDelete(w http.ResponseWriter, r *http.Request)

SFTPDelete handles file deletion via SFTP.

func (*Handler) SFTPDownload

func (h *Handler) SFTPDownload(w http.ResponseWriter, r *http.Request)

SFTPDownload handles file downloads via SFTP.

func (*Handler) SFTPListFiles

func (h *Handler) SFTPListFiles(w http.ResponseWriter, r *http.Request)

SFTPListFiles returns directory contents as JSON (for HTMX/JS).

func (*Handler) SFTPMkdir

func (h *Handler) SFTPMkdir(w http.ResponseWriter, r *http.Request)

SFTPMkdir creates a directory via SFTP.

func (*Handler) SFTPRename

func (h *Handler) SFTPRename(w http.ResponseWriter, r *http.Request)

SFTPRename renames a file or directory via SFTP.

func (*Handler) SFTPUpload

func (h *Handler) SFTPUpload(w http.ResponseWriter, r *http.Request)

SFTPUpload handles file uploads via SFTP.

func (*Handler) SSHConnectionCreate

func (h *Handler) SSHConnectionCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) SSHConnectionDelete

func (h *Handler) SSHConnectionDelete(w http.ResponseWriter, r *http.Request)

SSHConnectionDelete handles deleting an SSH connection.

func (*Handler) SSHConnectionDetailTempl

func (h *Handler) SSHConnectionDetailTempl(w http.ResponseWriter, r *http.Request)

SSHConnectionDetailTempl renders the SSH connection detail page.

func (*Handler) SSHConnectionDuplicate

func (h *Handler) SSHConnectionDuplicate(w http.ResponseWriter, r *http.Request)

SSHConnectionDuplicate duplicates an existing SSH connection.

func (*Handler) SSHConnectionNewTempl

func (h *Handler) SSHConnectionNewTempl(w http.ResponseWriter, r *http.Request)

SSHConnectionNewTempl renders the new SSH connection form.

func (*Handler) SSHConnectionTerminalTempl

func (h *Handler) SSHConnectionTerminalTempl(w http.ResponseWriter, r *http.Request)

SSHConnectionTerminalTempl renders the SSH terminal page.

func (*Handler) SSHConnectionTest

func (h *Handler) SSHConnectionTest(w http.ResponseWriter, r *http.Request)

SSHConnectionTest tests an SSH connection.

func (*Handler) SSHConnectionUpdate

func (h *Handler) SSHConnectionUpdate(w http.ResponseWriter, r *http.Request)

SSHConnectionUpdate handles updating an SSH connection.

func (*Handler) SSHConnectionsTempl

func (h *Handler) SSHConnectionsTempl(w http.ResponseWriter, r *http.Request)

SSHConnectionsTempl renders the SSH connections list.

func (*Handler) SSHKeyCreate

func (h *Handler) SSHKeyCreate(w http.ResponseWriter, r *http.Request)

SSHKeyCreate handles creating/generating a new SSH key.

func (*Handler) SSHKeyDelete

func (h *Handler) SSHKeyDelete(w http.ResponseWriter, r *http.Request)

SSHKeyDelete handles deleting an SSH key.

func (*Handler) SSHKeyDetailTempl

func (h *Handler) SSHKeyDetailTempl(w http.ResponseWriter, r *http.Request)

SSHKeyDetailTempl renders the SSH key detail page.

func (*Handler) SSHKeyDownload

func (h *Handler) SSHKeyDownload(w http.ResponseWriter, r *http.Request)

SSHKeyDownload downloads the public key.

func (*Handler) SSHKeyNewTempl

func (h *Handler) SSHKeyNewTempl(w http.ResponseWriter, r *http.Request)

SSHKeyNewTempl renders the new SSH key form.

func (*Handler) SSHKeysTempl

func (h *Handler) SSHKeysTempl(w http.ResponseWriter, r *http.Request)

SSHKeysTempl renders the SSH keys list.

func (*Handler) SSHTerminalTempl

func (h *Handler) SSHTerminalTempl(w http.ResponseWriter, r *http.Request)

SSHTerminalTempl renders the SSH terminal page.

func (*Handler) SSHTunnelCreate

func (h *Handler) SSHTunnelCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) SSHTunnelDelete

func (h *Handler) SSHTunnelDelete(w http.ResponseWriter, r *http.Request)

SSHTunnelDelete deletes an SSH tunnel.

func (*Handler) SSHTunnelToggle

func (h *Handler) SSHTunnelToggle(w http.ResponseWriter, r *http.Request)

SSHTunnelToggle toggles an SSH tunnel on/off.

func (*Handler) SSHTunnelsTempl

func (h *Handler) SSHTunnelsTempl(w http.ResponseWriter, r *http.Request)

SSHTunnelsTempl renders the SSH tunnels page.

func (*Handler) SSLDashboardTempl

func (h *Handler) SSLDashboardTempl(w http.ResponseWriter, r *http.Request)

SSLDashboardTempl renders the SSL observatory dashboard.

func (*Handler) SSLScanAllTempl

func (h *Handler) SSLScanAllTempl(w http.ResponseWriter, r *http.Request)

SSLScanAllTempl handles POST /ssl/scan-all.

func (*Handler) SSLScanTargetTempl

func (h *Handler) SSLScanTargetTempl(w http.ResponseWriter, r *http.Request)

SSLScanTargetTempl handles POST /ssl/targets/{id}/scan.

func (*Handler) SSLTargetCreateTempl

func (h *Handler) SSLTargetCreateTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) SSLTargetDeleteTempl

func (h *Handler) SSLTargetDeleteTempl(w http.ResponseWriter, r *http.Request)

SSLTargetDeleteTempl handles DELETE /ssl/targets/{id}.

func (*Handler) SSLTargetDetailTempl

func (h *Handler) SSLTargetDetailTempl(w http.ResponseWriter, r *http.Request)

SSLTargetDetailTempl renders the SSL target detail page.

func (*Handler) SSLTargetEditTempl

func (h *Handler) SSLTargetEditTempl(w http.ResponseWriter, r *http.Request)

SSLTargetEditTempl renders the edit form.

func (*Handler) SSLTargetListTempl

func (h *Handler) SSLTargetListTempl(w http.ResponseWriter, r *http.Request)

SSLTargetListTempl renders the SSL targets list page.

func (*Handler) SSLTargetNewTempl

func (h *Handler) SSLTargetNewTempl(w http.ResponseWriter, r *http.Request)

SSLTargetNewTempl renders the new SSL target form.

func (*Handler) SSLTargetUpdateTempl

func (h *Handler) SSLTargetUpdateTempl(w http.ResponseWriter, r *http.Request)

SSLTargetUpdateTempl handles POST /ssl/targets/{id}/edit.

func (*Handler) ScheduledJobCreate

func (h *Handler) ScheduledJobCreate(w http.ResponseWriter, r *http.Request)

ScheduledJobCreate handles creation of a new scheduled job.

func (*Handler) ScheduledJobDelete

func (h *Handler) ScheduledJobDelete(w http.ResponseWriter, r *http.Request)

ScheduledJobDelete handles deletion of a scheduled job.

func (*Handler) ScheduledJobRunNow

func (h *Handler) ScheduledJobRunNow(w http.ResponseWriter, r *http.Request)

ScheduledJobRunNow triggers immediate execution of a scheduled job.

func (*Handler) ScheduledJobsTempl

func (h *Handler) ScheduledJobsTempl(w http.ResponseWriter, r *http.Request)

ScheduledJobsTempl renders the scheduled jobs management page.

func (*Handler) SearchPartialTempl

func (h *Handler) SearchPartialTempl(w http.ResponseWriter, r *http.Request)

SearchPartialTempl handles search results for the header search.

func (*Handler) SecretCreate

func (h *Handler) SecretCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) SecretDelete

func (h *Handler) SecretDelete(w http.ResponseWriter, r *http.Request)

SecretDelete deletes a managed secret.

func (*Handler) SecretRotate

func (h *Handler) SecretRotate(w http.ResponseWriter, r *http.Request)

SecretRotate generates a new value for a secret.

func (*Handler) SecretsTempl

func (h *Handler) SecretsTempl(w http.ResponseWriter, r *http.Request)

SecretsTempl renders the secret management page.

func (*Handler) SecurityContainerTempl

func (h *Handler) SecurityContainerTempl(w http.ResponseWriter, r *http.Request)

SecurityContainerTempl renders the security detail page for a container.

func (*Handler) SecurityIssueIgnore

func (h *Handler) SecurityIssueIgnore(w http.ResponseWriter, r *http.Request)

func (*Handler) SecurityIssueIgnoreTempl

func (h *Handler) SecurityIssueIgnoreTempl(w http.ResponseWriter, r *http.Request)

SecurityIssueIgnoreTempl marks an issue as ignored.

func (*Handler) SecurityIssueResolve

func (h *Handler) SecurityIssueResolve(w http.ResponseWriter, r *http.Request)

func (*Handler) SecurityIssueResolveTempl

func (h *Handler) SecurityIssueResolveTempl(w http.ResponseWriter, r *http.Request)

SecurityIssueResolveTempl marks an issue as resolved.

func (*Handler) SecurityReportTempl

func (h *Handler) SecurityReportTempl(w http.ResponseWriter, r *http.Request)

SecurityReportTempl generates and serves a security report.

func (*Handler) SecurityScan

func (h *Handler) SecurityScan(w http.ResponseWriter, r *http.Request)

func (*Handler) SecurityScanContainer

func (h *Handler) SecurityScanContainer(w http.ResponseWriter, r *http.Request)

func (*Handler) SecurityScanContainerTempl

func (h *Handler) SecurityScanContainerTempl(w http.ResponseWriter, r *http.Request)

SecurityScanContainerTempl scans a specific container and redirects.

func (*Handler) SecurityScanTempl

func (h *Handler) SecurityScanTempl(w http.ResponseWriter, r *http.Request)

SecurityScanTempl triggers a full security scan and redirects.

func (*Handler) SecurityTempl

func (h *Handler) SecurityTempl(w http.ResponseWriter, r *http.Request)

SecurityTempl renders the security overview page.

func (*Handler) SecurityTrendsTempl

func (h *Handler) SecurityTrendsTempl(w http.ResponseWriter, r *http.Request)

SecurityTrendsTempl renders the security trends page.

func (*Handler) SessionReplayData

func (h *Handler) SessionReplayData(w http.ResponseWriter, r *http.Request)

SessionReplayData serves the recording data (decompressed asciicast). GET /session-replay/{id}/data

func (*Handler) SessionReplayPage

func (h *Handler) SessionReplayPage(w http.ResponseWriter, r *http.Request)

SessionReplayPage renders the session replay player page. GET /session-replay/{id}

func (*Handler) SettingsTempl

func (h *Handler) SettingsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) SettingsUpdate

func (h *Handler) SettingsUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) ShortcutCreate

func (h *Handler) ShortcutCreate(w http.ResponseWriter, r *http.Request)

ShortcutCreate handles creating a new web shortcut.

func (*Handler) ShortcutDelete

func (h *Handler) ShortcutDelete(w http.ResponseWriter, r *http.Request)

ShortcutDelete handles deleting a web shortcut.

func (*Handler) ShortcutEditTempl

func (h *Handler) ShortcutEditTempl(w http.ResponseWriter, r *http.Request)

ShortcutEditTempl renders the edit shortcut form.

func (*Handler) ShortcutNewTempl

func (h *Handler) ShortcutNewTempl(w http.ResponseWriter, r *http.Request)

ShortcutNewTempl renders the new shortcut form.

func (*Handler) ShortcutUpdate

func (h *Handler) ShortcutUpdate(w http.ResponseWriter, r *http.Request)

ShortcutUpdate handles updating a web shortcut.

func (*Handler) ShortcutsTempl

func (h *Handler) ShortcutsTempl(w http.ResponseWriter, r *http.Request)

ShortcutsTempl renders the web shortcuts list.

func (*Handler) SnippetCreate

func (h *Handler) SnippetCreate(w http.ResponseWriter, r *http.Request)

SnippetCreate creates a new snippet. POST /api/snippets

func (*Handler) SnippetDelete

func (h *Handler) SnippetDelete(w http.ResponseWriter, r *http.Request)

SnippetDelete deletes a snippet. DELETE /api/snippets/{id}

func (*Handler) SnippetGet

func (h *Handler) SnippetGet(w http.ResponseWriter, r *http.Request)

SnippetGet returns a single snippet with content. GET /api/snippets/{id}

func (*Handler) SnippetList

func (h *Handler) SnippetList(w http.ResponseWriter, r *http.Request)

SnippetList returns user's snippets. GET /api/snippets

func (*Handler) SnippetPaths

func (h *Handler) SnippetPaths(w http.ResponseWriter, r *http.Request)

SnippetPaths returns unique folder paths for navigation. GET /api/snippets/paths

func (*Handler) SnippetUpdate

func (h *Handler) SnippetUpdate(w http.ResponseWriter, r *http.Request)

SnippetUpdate updates a snippet. PUT /api/snippets/{id}

func (*Handler) StackCatalogDeploySubmit

func (h *Handler) StackCatalogDeploySubmit(w http.ResponseWriter, r *http.Request)

func (*Handler) StackCatalogDeployTempl

func (h *Handler) StackCatalogDeployTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StackCatalogTempl

func (h *Handler) StackCatalogTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StackDeploy

func (h *Handler) StackDeploy(w http.ResponseWriter, r *http.Request)

func (*Handler) StackDetailTempl

func (h *Handler) StackDetailTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StackEditTempl

func (h *Handler) StackEditTempl(w http.ResponseWriter, r *http.Request)

StackEditTempl redirects to the stack detail page with the compose editor tab active.

func (*Handler) StackNewTempl

func (h *Handler) StackNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StackRemove

func (h *Handler) StackRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) StackRestart

func (h *Handler) StackRestart(w http.ResponseWriter, r *http.Request)

func (*Handler) StackStart

func (h *Handler) StackStart(w http.ResponseWriter, r *http.Request)

func (*Handler) StackStop

func (h *Handler) StackStop(w http.ResponseWriter, r *http.Request)

func (*Handler) StacksTempl

func (h *Handler) StacksTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StatsPartial

func (h *Handler) StatsPartial(w http.ResponseWriter, r *http.Request)

func (*Handler) StorageAuditTempl

func (h *Handler) StorageAuditTempl(w http.ResponseWriter, r *http.Request)

StorageAuditTempl renders audit log page for a connection.

func (*Handler) StorageBrowserTempl

func (h *Handler) StorageBrowserTempl(w http.ResponseWriter, r *http.Request)

StorageBrowserTempl renders the object browser for a bucket.

func (*Handler) StorageBucketsTempl

func (h *Handler) StorageBucketsTempl(w http.ResponseWriter, r *http.Request)

StorageBucketsTempl renders the bucket list for a connection.

func (*Handler) StorageCreateBucket

func (h *Handler) StorageCreateBucket(w http.ResponseWriter, r *http.Request)

StorageCreateBucket handles POST /storage/{connID}/buckets.

func (*Handler) StorageCreateConnection

func (h *Handler) StorageCreateConnection(w http.ResponseWriter, r *http.Request)

func (*Handler) StorageCreateFolder

func (h *Handler) StorageCreateFolder(w http.ResponseWriter, r *http.Request)

StorageCreateFolder handles POST /storage/{connID}/buckets/{bucket}/create-folder.

func (*Handler) StorageDeleteBucket

func (h *Handler) StorageDeleteBucket(w http.ResponseWriter, r *http.Request)

StorageDeleteBucket handles POST /storage/{connID}/buckets/{bucket}/delete.

func (*Handler) StorageDeleteConnection

func (h *Handler) StorageDeleteConnection(w http.ResponseWriter, r *http.Request)

StorageDeleteConnection handles POST /storage/{connID}/delete.

func (*Handler) StorageDeleteObject

func (h *Handler) StorageDeleteObject(w http.ResponseWriter, r *http.Request)

StorageDeleteObject handles POST /storage/{connID}/buckets/{bucket}/delete-object.

func (*Handler) StorageDownloadObject

func (h *Handler) StorageDownloadObject(w http.ResponseWriter, r *http.Request)

StorageDownloadObject handles GET /storage/{connID}/buckets/{bucket}/download.

func (*Handler) StoragePresignUpload

func (h *Handler) StoragePresignUpload(w http.ResponseWriter, r *http.Request)

StoragePresignUpload handles GET /storage/{connID}/buckets/{bucket}/presign-upload.

func (*Handler) StorageTempl

func (h *Handler) StorageTempl(w http.ResponseWriter, r *http.Request)

StorageTempl renders the storage connections list page.

func (*Handler) StorageTestConnection

func (h *Handler) StorageTestConnection(w http.ResponseWriter, r *http.Request)

StorageTestConnection handles POST /storage/{connID}/test.

func (*Handler) StorageUpdateConnection

func (h *Handler) StorageUpdateConnection(w http.ResponseWriter, r *http.Request)

StorageUpdateConnection handles POST /storage/{connID}/update.

func (*Handler) StorageUploadObject

func (h *Handler) StorageUploadObject(w http.ResponseWriter, r *http.Request)

StorageUploadObject handles POST /storage/{connID}/buckets/{bucket}/upload.

func (*Handler) StreamCreate

func (h *Handler) StreamCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) StreamDelete

func (h *Handler) StreamDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) StreamEditTempl

func (h *Handler) StreamEditTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StreamListTempl

func (h *Handler) StreamListTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StreamNewTempl

func (h *Handler) StreamNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) StreamUpdate

func (h *Handler) StreamUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) SwarmClusterTempl

func (h *Handler) SwarmClusterTempl(w http.ResponseWriter, r *http.Request)

SwarmClusterTempl renders the Swarm cluster page.

func (*Handler) SwarmConvertContainerTempl

func (h *Handler) SwarmConvertContainerTempl(w http.ResponseWriter, r *http.Request)

SwarmConvertContainerTempl handles POST /swarm/convert - converts container to HA service.

func (*Handler) SwarmInitTempl

func (h *Handler) SwarmInitTempl(w http.ResponseWriter, r *http.Request)

SwarmInitTempl handles POST /swarm/init - initializes Docker Swarm.

func (*Handler) SwarmLeaveTempl

func (h *Handler) SwarmLeaveTempl(w http.ResponseWriter, r *http.Request)

SwarmLeaveTempl handles POST /swarm/leave - leaves the Swarm cluster.

func (*Handler) SwarmNodeRemoveTempl

func (h *Handler) SwarmNodeRemoveTempl(w http.ResponseWriter, r *http.Request)

SwarmNodeRemoveTempl handles DELETE /swarm/nodes/{nodeID}.

func (*Handler) SwarmServiceCreateFormTempl

func (h *Handler) SwarmServiceCreateFormTempl(w http.ResponseWriter, r *http.Request)

SwarmServiceCreateFormTempl renders the create service form.

func (*Handler) SwarmServiceCreateTempl

func (h *Handler) SwarmServiceCreateTempl(w http.ResponseWriter, r *http.Request)

SwarmServiceCreateTempl handles POST /swarm/services/create.

func (*Handler) SwarmServiceRemoveTempl

func (h *Handler) SwarmServiceRemoveTempl(w http.ResponseWriter, r *http.Request)

SwarmServiceRemoveTempl handles DELETE /swarm/services/{serviceID}.

func (*Handler) SwarmServiceScaleTempl

func (h *Handler) SwarmServiceScaleTempl(w http.ResponseWriter, r *http.Request)

SwarmServiceScaleTempl handles POST /swarm/services/{serviceID}/scale.

func (*Handler) SwitchHost

func (h *Handler) SwitchHost(w http.ResponseWriter, r *http.Request)

SwitchHost handles GET /switch-host/{id} - switches the active host in the session.

func (*Handler) TOTPDisableSubmit

func (h *Handler) TOTPDisableSubmit(w http.ResponseWriter, r *http.Request)

TOTPDisableSubmit handles disabling 2FA.

func (*Handler) TOTPSetupPageTempl

func (h *Handler) TOTPSetupPageTempl(w http.ResponseWriter, r *http.Request)

TOTPSetupPageTempl renders the 2FA setup/manage page.

func (*Handler) TOTPVerifyPageTempl

func (h *Handler) TOTPVerifyPageTempl(w http.ResponseWriter, r *http.Request)

TOTPVerifyPageTempl renders the TOTP code input page during login.

func (*Handler) TOTPVerifySetupSubmit

func (h *Handler) TOTPVerifySetupSubmit(w http.ResponseWriter, r *http.Request)

TOTPVerifySetupSubmit handles verifying the first TOTP code to enable 2FA.

func (*Handler) TOTPVerifySubmit

func (h *Handler) TOTPVerifySubmit(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamAddMember

func (h *Handler) TeamAddMember(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamCreate

func (h *Handler) TeamCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamDelete

func (h *Handler) TeamDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamDetailTempl

func (h *Handler) TeamDetailTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamEditTempl

func (h *Handler) TeamEditTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamGrantPermission

func (h *Handler) TeamGrantPermission(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamNewTempl

func (h *Handler) TeamNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamRemoveMember

func (h *Handler) TeamRemoveMember(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamRevokePermission

func (h *Handler) TeamRevokePermission(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamUpdate

func (h *Handler) TeamUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) TeamsTempl

func (h *Handler) TeamsTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) TerminalHubTempl

func (h *Handler) TerminalHubTempl(w http.ResponseWriter, r *http.Request)

TerminalHubTempl renders the multi-tab terminal interface.

func (*Handler) TerminalPickerTempl

func (h *Handler) TerminalPickerTempl(w http.ResponseWriter, r *http.Request)

TerminalPickerTempl renders the container picker for the new tab modal.

func (*Handler) ToggleTheme

func (h *Handler) ToggleTheme(w http.ResponseWriter, r *http.Request)

func (*Handler) TopologyTempl

func (h *Handler) TopologyTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) UpdateApplyTempl

func (h *Handler) UpdateApplyTempl(w http.ResponseWriter, r *http.Request)

UpdateApplyTempl applies an update to a specific container.

func (*Handler) UpdateBatch

func (h *Handler) UpdateBatch(w http.ResponseWriter, r *http.Request)

func (*Handler) UpdateChangelog

func (h *Handler) UpdateChangelog(w http.ResponseWriter, r *http.Request)

func (*Handler) UpdateManual

func (h *Handler) UpdateManual(w http.ResponseWriter, r *http.Request)

UpdateManual handles manual update of a container to a specific version.

func (*Handler) UpdatePassword

func (h *Handler) UpdatePassword(w http.ResponseWriter, r *http.Request)

func (*Handler) UpdatePreferences

func (h *Handler) UpdatePreferences(w http.ResponseWriter, r *http.Request)

func (*Handler) UpdateProfile

func (h *Handler) UpdateProfile(w http.ResponseWriter, r *http.Request)

func (*Handler) UpdateRollbackTempl

func (h *Handler) UpdateRollbackTempl(w http.ResponseWriter, r *http.Request)

UpdateRollbackTempl rolls back a previous update.

func (*Handler) UpdateSidebarPrefs

func (h *Handler) UpdateSidebarPrefs(w http.ResponseWriter, r *http.Request)

UpdateSidebarPrefs handles sidebar collapse/visibility state updates. Accepts JSON body with optional "collapsed" and/or "hidden" maps. Merges incoming values into existing preferences.

func (*Handler) UpdatesCheckTempl

func (h *Handler) UpdatesCheckTempl(w http.ResponseWriter, r *http.Request)

UpdatesCheckTempl triggers a check for all available updates.

func (*Handler) UpdatesTempl

func (h *Handler) UpdatesTempl(w http.ResponseWriter, r *http.Request)

UpdatesTempl renders the updates list page with available updates and history.

func (*Handler) UserCreate

func (h *Handler) UserCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) UserDelete

func (h *Handler) UserDelete(w http.ResponseWriter, r *http.Request)

func (*Handler) UserDisable

func (h *Handler) UserDisable(w http.ResponseWriter, r *http.Request)

func (*Handler) UserEditTempl

func (h *Handler) UserEditTempl(w http.ResponseWriter, r *http.Request)

UserEditTempl shows user edit page using Templ.

func (*Handler) UserEnable

func (h *Handler) UserEnable(w http.ResponseWriter, r *http.Request)

func (*Handler) UserNewTempl

func (h *Handler) UserNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) UserUpdate

func (h *Handler) UserUpdate(w http.ResponseWriter, r *http.Request)

func (*Handler) UsersTempl

func (h *Handler) UsersTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) VolumeBrowseAPI

func (h *Handler) VolumeBrowseAPI(w http.ResponseWriter, r *http.Request)

VolumeBrowseAPI returns files inside a volume as JSON (for frontend AJAX).

func (*Handler) VolumeCreate

func (h *Handler) VolumeCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) VolumeDetailTempl

func (h *Handler) VolumeDetailTempl(w http.ResponseWriter, r *http.Request)

VolumeDetailTempl renders the volume detail page using templ

func (*Handler) VolumeNewTempl

func (h *Handler) VolumeNewTempl(w http.ResponseWriter, r *http.Request)

func (*Handler) VolumeRemove

func (h *Handler) VolumeRemove(w http.ResponseWriter, r *http.Request)

func (*Handler) VolumesPrune

func (h *Handler) VolumesPrune(w http.ResponseWriter, r *http.Request)

func (*Handler) VolumesTempl

func (h *Handler) VolumesTempl(w http.ResponseWriter, r *http.Request)

VolumesTempl lists all volumes using Templ.

func (*Handler) VulnAcceptRisk

func (h *Handler) VulnAcceptRisk(w http.ResponseWriter, r *http.Request)

VulnAcceptRisk marks a vulnerability as accepted risk.

func (*Handler) VulnAcknowledge

func (h *Handler) VulnAcknowledge(w http.ResponseWriter, r *http.Request)

VulnAcknowledge starts working on a vulnerability.

func (*Handler) VulnAssign

func (h *Handler) VulnAssign(w http.ResponseWriter, r *http.Request)

VulnAssign assigns a vulnerability to a user.

func (*Handler) VulnAssignAPI

func (h *Handler) VulnAssignAPI(w http.ResponseWriter, r *http.Request)

VulnAssignAPI handles JSON-based assignment for AJAX calls.

func (*Handler) VulnDashboardAPI

func (h *Handler) VulnDashboardAPI(w http.ResponseWriter, r *http.Request)

VulnDashboardAPI returns JSON dashboard KPIs for AJAX polling.

func (*Handler) VulnMgmtTempl

func (h *Handler) VulnMgmtTempl(w http.ResponseWriter, r *http.Request)

VulnMgmtTempl renders the vulnerability management page.

func (*Handler) VulnResolve

func (h *Handler) VulnResolve(w http.ResponseWriter, r *http.Request)

VulnResolve marks a vulnerability as resolved. Accepts optional resolution_notes.

func (*Handler) VulnResolveAPI

func (h *Handler) VulnResolveAPI(w http.ResponseWriter, r *http.Request)

VulnResolveAPI handles JSON-based resolution with evidence for AJAX calls.

func (*Handler) VulnScan

func (h *Handler) VulnScan(w http.ResponseWriter, r *http.Request)

VulnScan triggers a vulnerability scan using the existing security service.

func (*Handler) WSCapture

func (h *Handler) WSCapture(w http.ResponseWriter, r *http.Request)

func (*Handler) WSContainerExec

func (h *Handler) WSContainerExec(w http.ResponseWriter, r *http.Request)

func (*Handler) WSContainerLogs

func (h *Handler) WSContainerLogs(w http.ResponseWriter, r *http.Request)

func (*Handler) WSContainerStats

func (h *Handler) WSContainerStats(w http.ResponseWriter, r *http.Request)

func (*Handler) WSEditorNvim

func (h *Handler) WSEditorNvim(w http.ResponseWriter, r *http.Request)

WSEditorNvim handles the WebSocket connection for the nvim editor.

Flow (git mode):

  1. Fetch file from Gitea → write to temp dir
  2. Create FIFO for commit signaling
  3. Inject BufWritePost autocmd that writes to FIFO on :w
  4. Spawn nvim on a pty via creack/pty
  5. Bridge pty ↔ WebSocket
  6. FIFO goroutine: on signal → read file → commit to Gitea

Flow (scratch mode - no repo):

  1. Create empty temp file
  2. Spawn nvim without commit hook
  3. Bridge pty ↔ WebSocket

GET /ws/editor/nvim?repo={id}&file={path}&ref={branch}&cols=N&rows=N GET /ws/editor/nvim?file=scratch&cols=N&rows=N (scratch mode)

func (*Handler) WSEvents

func (h *Handler) WSEvents(w http.ResponseWriter, r *http.Request)

func (*Handler) WSHostExec

func (h *Handler) WSHostExec(w http.ResponseWriter, r *http.Request)

WSHostExec opens an interactive terminal on the Docker host via nsenter.

How it works:

  1. usulnet container must run with pid:"host" + cap_add:[SYS_PTRACE,SYS_ADMIN]
  2. We detect our own container ID
  3. We docker exec into ourselves with: nsenter --target 1 --mount --uts --ipc --net --pid -- su - <user>
  4. nsenter enters the host namespaces, su drops to the unprivileged user
  5. The user gets a standard shell on the host, no sudo, no root

func (*Handler) WSJobProgress

func (h *Handler) WSJobProgress(w http.ResponseWriter, r *http.Request)

func (*Handler) WSMetrics

func (h *Handler) WSMetrics(w http.ResponseWriter, r *http.Request)

WSMetrics streams live host + container metrics over WebSocket. Sends a JSON message every N seconds (default 5s, configurable via ?interval=).

func (*Handler) WSRDPExec

func (h *Handler) WSRDPExec(w http.ResponseWriter, r *http.Request)

WSRDPExec handles WebSocket connections for RDP via Apache Guacamole daemon. The handler establishes a TCP connection to guacd, performs the Guacamole protocol handshake, and relays traffic bidirectionally between the browser (WebSocket) and guacd (TCP).

func (*Handler) WSSSHExec

func (h *Handler) WSSSHExec(w http.ResponseWriter, r *http.Request)

WSSSHExec handles WebSocket connections for SSH terminal.

func (*Handler) WebhookCreate

func (h *Handler) WebhookCreate(w http.ResponseWriter, r *http.Request)

func (*Handler) WebhookDelete

func (h *Handler) WebhookDelete(w http.ResponseWriter, r *http.Request)

WebhookDelete handles deletion of an outgoing webhook.

func (*Handler) WebhookUpdate

func (h *Handler) WebhookUpdate(w http.ResponseWriter, r *http.Request)

WebhookUpdate handles updating an existing outgoing webhook.

func (*Handler) WebhooksTempl

func (h *Handler) WebhooksTempl(w http.ResponseWriter, r *http.Request)

WebhooksTempl renders the webhooks & auto-deploy management page.

func (*Handler) WireGuardCreateTempl

func (h *Handler) WireGuardCreateTempl(w http.ResponseWriter, r *http.Request)

WireGuardCreateTempl handles POST /wireguard — creates a new interface.

func (*Handler) WireGuardDeleteTempl

func (h *Handler) WireGuardDeleteTempl(w http.ResponseWriter, r *http.Request)

WireGuardDeleteTempl deletes an interface (and cascade-deletes peers).

func (*Handler) WireGuardDetailTempl

func (h *Handler) WireGuardDetailTempl(w http.ResponseWriter, r *http.Request)

WireGuardDetailTempl renders an interface detail page with its peers.

func (*Handler) WireGuardListTempl

func (h *Handler) WireGuardListTempl(w http.ResponseWriter, r *http.Request)

WireGuardListTempl renders the WireGuard interfaces list page.

func (*Handler) WireGuardMeshTempl

func (h *Handler) WireGuardMeshTempl(w http.ResponseWriter, r *http.Request)

WireGuardMeshTempl renders the mesh-status page (all peer×agent rows).

func (*Handler) WireGuardNewTempl

func (h *Handler) WireGuardNewTempl(w http.ResponseWriter, r *http.Request)

WireGuardNewTempl renders the new-interface form.

func (*Handler) WireGuardPeerCreateTempl

func (h *Handler) WireGuardPeerCreateTempl(w http.ResponseWriter, r *http.Request)

WireGuardPeerCreateTempl handles POST /wireguard/{id}/peers.

func (*Handler) WireGuardPeerDeleteTempl

func (h *Handler) WireGuardPeerDeleteTempl(w http.ResponseWriter, r *http.Request)

WireGuardPeerDeleteTempl deletes a peer.

func (*Handler) WireGuardPeerDetailTempl

func (h *Handler) WireGuardPeerDetailTempl(w http.ResponseWriter, r *http.Request)

WireGuardPeerDetailTempl renders a peer detail page with the one-time QR widget and (in mesh mode) the propagation status.

func (*Handler) WireGuardPeerListTempl

func (h *Handler) WireGuardPeerListTempl(w http.ResponseWriter, r *http.Request)

WireGuardPeerListTempl renders the global peer list.

func (*Handler) WireGuardPeerNewTempl

func (h *Handler) WireGuardPeerNewTempl(w http.ResponseWriter, r *http.Request)

WireGuardPeerNewTempl renders the new-peer form.

func (*Handler) WsMonitoringContainer

func (h *Handler) WsMonitoringContainer(w http.ResponseWriter, r *http.Request)

WsMonitoringContainer handles WebSocket connections for a single container's monitoring. Endpoint: /ws/monitoring/container/{id}

func (*Handler) WsMonitoringStats

func (h *Handler) WsMonitoringStats(w http.ResponseWriter, r *http.Request)

WsMonitoringStats handles WebSocket connections for the global monitoring dashboard. Endpoint: /ws/monitoring/stats

func (*Handler) YARAScanTempl

func (h *Handler) YARAScanTempl(w http.ResponseWriter, r *http.Request)

YARAScanTempl renders /scan/yara. GET shows the form; POST submits a scan and renders the result inline.

type HandlerDeps

type HandlerDeps struct {
	Services       Services
	Version        string
	Commit         string
	BuildTime      string
	Mode           string
	SessionStore   SessionStore
	TOTPSigningKey []byte
	BaseURL        string
	// Repositories (optional, nil-safe)
	UserRepo               UserRepository
	PrefsRepo              PreferencesRepository
	SessionRepo            SessionRepository
	SnippetRepo            SnippetRepository
	OAuthConfigRepo        OAuthConfigRepository
	LDAPConfigRepo         LDAPConfigRepository
	RoleRepo               RoleRepository
	TerminalSessionRepo    TerminalSessionRepository
	NotificationConfigRepo NotificationConfigRepository
	CustomLogUploadRepo    CustomLogUploadRepository
	RegistryRepo           RegistryRepo
	WebhookRepo            WebhookRepo
	RunbookRepo            RunbookRepo
	AutoDeployRepo         AutoDeployRepo
	ComplianceRepo         ComplianceRepo
	ManagedSecretRepo      ManagedSecretRepo
	LifecycleRepo          LifecycleRepo
	MaintenanceRepo        MaintenanceRepo
	GitOpsRepo             GitOpsRepo
	ResourceQuotaRepo      ResourceQuotaRepo
	ContainerTemplateRepo  ContainerTemplateRepo
	TrackedVulnRepo        TrackedVulnRepo
	// Services (optional, nil-safe)
	Encryptor          Encryptor
	Logger             Logger
	SSHService         SSHService
	ShortcutsService   ShortcutsService
	DatabaseService    DatabaseService
	LDAPBrowserService LDAPBrowserService
	RDPService         RDPService
	CaptureService     CaptureService
	DeployService      DeployService
	SwarmService       *swarmsvc.Service
	LicenseProvider    LicenseProviderWeb
	// Enterprise Phase 2
	ComplianceFrameworkSvc *compliancesvc.Service
	OPASvc                 *opasvc.Service
	LogAggSvc              *logaggsvc.Service
	ImageSignSvc           *imagesignsvc.Service
	RuntimeSecSvc          *runtimesvc.Service
	// Phase 3: GitOps
	GitSvcFull   *gitsvc.Service
	GitSyncSvc   *gitsyncsvc.Service
	EphemeralSvc *ephemeralsvc.Service
	ManifestSvc  *manifestsvc.Service
	// Phase 3 Enterprise: Change Management Audit Trail
	ChangesSvc *changessvc.Service
	// Phase 3 Enterprise: Drift Detection
	DriftSvc *driftsvc.Service
	// Cost/Resource Optimization
	CostOptSvc *costoptsvc.Service
	// Phase 4: Custom dashboards
	DashboardSvc *dashboardsvc.Service
	// Phase 7.2: Session recording replay
	RecordingSvc *recordingsvc.Service
	// Phase 6: Registry browsing
	RegistryBrowseSvc *registrysvc.Service
	// Notification sender for runbooks/alerts
	NotificationSvc NotificationSender
	// Host terminal config
	TerminalEnabled bool
	TerminalUser    string
	TerminalShell   string
	// Guacd config for web-based RDP
	GuacdEnabled bool
	GuacdHost    string
	GuacdPort    int
	// First-run onboarding wizard (v26.5.2 session 04b).
	OnboardingSvc OnboardingService
	// About page / system probes (nil-safe)
	DB              DatabaseProber
	RedisProber     RedisProber
	NATSProber      NATSProber
	RedisURL        string
	DBSSLMode       string
	BackupEncryptor BackupEncryptor
}

HandlerDeps holds all dependencies for Handler constructor injection. Optional fields can be left nil if the corresponding feature is disabled.

type HistoryResponse

type HistoryResponse struct {
	Type       string               `json:"type"`
	Timestamps []string             `json:"timestamps"`
	Series     map[string][]float64 `json:"series"`
}

type HostFileContent

type HostFileContent struct {
	Path      string `json:"path"`
	Content   string `json:"content"`
	Size      int64  `json:"size"`
	Truncated bool   `json:"truncated"`
	Binary    bool   `json:"binary"`
}

HostFileContent represents file content from the host.

type HostFileEntry

type HostFileEntry struct {
	Name       string `json:"name"`
	Path       string `json:"path"`
	IsDir      bool   `json:"is_dir"`
	Size       int64  `json:"size"`
	SizeHuman  string `json:"size_human"`
	Mode       string `json:"mode"`
	ModTime    string `json:"mod_time"`
	ModTimeAgo string `json:"mod_time_ago"`
	Owner      string `json:"owner"`
	Group      string `json:"group"`
	LinkTarget string `json:"link_target,omitempty"`
	IsSymlink  bool   `json:"is_symlink"`
}

HostFileEntry represents a file or directory on the host.

type HostMetricsView

type HostMetricsView struct {
	CPUPercent    float64
	MemoryUsed    int64
	MemoryPercent float64
	MemoryUsedStr string
	DiskPercent   float64
	DiskUsedStr   string
	DiskTotalStr  string
	NetworkRxStr  string
	NetworkTxStr  string
}

HostMetricsView contains host resource metrics for templates.

type HostService

type HostService interface {
	List(ctx context.Context) ([]HostView, error)
	Get(ctx context.Context, id string) (*HostView, error)
	GetDockerInfo(ctx context.Context) (*DockerInfoView, error)
	GetMetrics(ctx context.Context, id string) (*HostMetricsView, error)
	Create(ctx context.Context, h *HostView) (string, error) // returns host ID
	Update(ctx context.Context, h *HostView) error
	Remove(ctx context.Context, id string) error
	Test(ctx context.Context, id string) error
	GenerateAgentToken(ctx context.Context, id string) (string, error)
}

type HostStatsData

type HostStatsData struct {
	CPUPercent        float64 `json:"cpu_percent"`
	MemoryUsed        string  `json:"memory_used"`
	MemoryTotal       string  `json:"memory_total"`
	MemoryPercent     float64 `json:"memory_percent"`
	DiskUsed          string  `json:"disk_used"`
	DiskTotal         string  `json:"disk_total"`
	DiskPercent       float64 `json:"disk_percent"`
	NetworkRx         string  `json:"network_rx"`
	NetworkTx         string  `json:"network_tx"`
	ContainersRunning int     `json:"containers_running"`
	ContainersTotal   int     `json:"containers_total"`
	ContainersStopped int     `json:"containers_stopped"`
	ImagesTotal       int     `json:"images_total"`
	VolumesTotal      int     `json:"volumes_total"`
}

type HostTerminalConfig

type HostTerminalConfig struct {
	Enabled bool   // HOST_TERMINAL_ENABLED (default: true)
	User    string // HOST_TERMINAL_USER (default: nobody_usulnet)
	Shell   string // HOST_TERMINAL_SHELL (default: /bin/bash)
}

HostTerminalConfig holds host terminal settings from environment variables.

type HostView

type HostView struct {
	ID                string    `json:"id"`
	Name              string    `json:"name"`
	DisplayName       string    `json:"display_name,omitempty"`
	Endpoint          string    `json:"endpoint"`
	EndpointType      string    `json:"endpoint_type"`
	Status            string    `json:"status"`
	DockerVersion     string    `json:"docker_version"`
	KernelVersion     string    `json:"kernel_version"`
	OS                string    `json:"os"`
	Arch              string    `json:"arch"`
	CPUs              int       `json:"cpus"`
	Memory            int64     `json:"memory"`
	MemoryHuman       string    `json:"memory_human"`
	Containers        int       `json:"containers"`
	ContainersRunning int       `json:"containers_running"`
	Images            int       `json:"images"`
	LastSeen          time.Time `json:"last_seen"`
	LastSeenHuman     string    `json:"last_seen_human"`
	TLSEnabled        bool      `json:"tls_enabled,omitempty"`
}

HostView for hosts list.

type ImageService

type ImageService interface {
	List(ctx context.Context) ([]ImageView, error)
	Get(ctx context.Context, id string) (*ImageView, error)
	Remove(ctx context.Context, id string, force bool) error
	Prune(ctx context.Context) (int64, error)
	Pull(ctx context.Context, reference string) error
	PullWithAuth(ctx context.Context, reference string, auth *models.RegistryAuthConfig) error
}

type ImageView

type ImageView struct {
	ID           string    `json:"id"`
	ShortID      string    `json:"short_id"`
	Tags         []string  `json:"tags"`
	PrimaryTag   string    `json:"primary_tag"`
	Size         int64     `json:"size"`
	SizeHuman    string    `json:"size_human"`
	Created      time.Time `json:"created"`
	CreatedHuman string    `json:"created_human"`
	InUse        bool      `json:"in_use"`
	Containers   int       `json:"containers"`
	Architecture string    `json:"architecture,omitempty"`
	OS           string    `json:"os,omitempty"`
}

ImageView for image list templates.

type IssueView

type IssueView struct {
	ID             string  `json:"id"`
	ContainerID    string  `json:"container_id,omitempty"`
	Severity       string  `json:"severity"`
	Category       string  `json:"category"`
	Title          string  `json:"title"`
	Message        string  `json:"message"`
	FixCommand     string  `json:"fix_command"`
	Documentation  string  `json:"documentation"`
	Status         string  `json:"status"`
	CVEID          string  `json:"cve_id,omitempty"`
	CVSSScore      float64 `json:"cvss_score,omitempty"`
	Recommendation string  `json:"recommendation,omitempty"`
}

IssueView for security issue display.

type JobView

type JobView struct {
	ID          string    `json:"id"`
	Type        string    `json:"type"`
	Status      string    `json:"status"`
	Progress    int       `json:"progress"`
	Message     string    `json:"message"`
	StartedAt   time.Time `json:"started_at"`
	CompletedAt time.Time `json:"completed_at,omitempty"`
	Duration    string    `json:"duration,omitempty"`
}

JobView for background jobs.

type LDAPBrowserService

type LDAPBrowserService interface {
	CreateConnection(ctx context.Context, input models.CreateLDAPConnectionInput, userID uuid.UUID) (*models.LDAPConnection, error)
	GetConnection(ctx context.Context, id uuid.UUID) (*models.LDAPConnection, error)
	ListConnections(ctx context.Context, userID uuid.UUID) ([]*models.LDAPConnection, error)
	UpdateConnection(ctx context.Context, id uuid.UUID, input models.UpdateLDAPConnectionInput) error
	DeleteConnection(ctx context.Context, id uuid.UUID) error
	TestConnection(ctx context.Context, id uuid.UUID) (models.LDAPTestResulter, error)
	ListEntries(ctx context.Context, id uuid.UUID, baseDN string, scope int) ([]models.LDAPEntry, error)
	GetEntry(ctx context.Context, id uuid.UUID, dn string) (*models.LDAPEntry, error)
	Search(ctx context.Context, id uuid.UUID, baseDN, filter string, scope int, attributes []string) (*models.LDAPSearchResult, error)
}

LDAPBrowserService interface for managing LDAP connections.

type LDAPConfigRepository

type LDAPConfigRepository interface {
	Create(ctx context.Context, input *postgres.CreateLDAPConfigInput) (*models.LDAPConfig, error)
	GetByID(ctx context.Context, id uuid.UUID) (*models.LDAPConfig, error)
	GetByName(ctx context.Context, name string) (*models.LDAPConfig, error)
	List(ctx context.Context) ([]*models.LDAPConfig, error)
	ListEnabled(ctx context.Context) ([]*models.LDAPConfig, error)
	Update(ctx context.Context, id uuid.UUID, input *postgres.UpdateLDAPConfigInput) (*models.LDAPConfig, error)
	Delete(ctx context.Context, id uuid.UUID) error
	Count(ctx context.Context) (int64, error)
	CountEnabled(ctx context.Context) (int64, error)
}

LDAPConfigRepository defines the interface for LDAP config operations.

type LicenseProviderWeb

type LicenseProviderWeb interface {
	GetInfo() *license.Info
	Activate(licenseKey string) error
	Deactivate() error
	InstanceID() string
	Edition() license.Edition
}

LicenseProviderWeb provides license state to web handlers.

type LifecycleHistoryRecord

type LifecycleHistoryRecord = models.LifecycleHistoryRecord

type LifecyclePolicyRecord

type LifecyclePolicyRecord = models.LifecyclePolicyRecord

type LifecycleRepo

type LifecycleRepo interface {
	CreatePolicy(ctx context.Context, p *LifecyclePolicyRecord) error
	GetPolicy(ctx context.Context, id uuid.UUID) (*LifecyclePolicyRecord, error)
	ListPolicies(ctx context.Context) ([]*LifecyclePolicyRecord, error)
	DeletePolicy(ctx context.Context, id uuid.UUID) error
	TogglePolicy(ctx context.Context, id uuid.UUID) (bool, error)
	UpdateLastExecution(ctx context.Context, id uuid.UUID, executedAt time.Time, result string) error
	CreateHistoryEntry(ctx context.Context, h *LifecycleHistoryRecord) error
	ListHistory(ctx context.Context, limit int) ([]*LifecycleHistoryRecord, error)
	TotalSpaceReclaimed(ctx context.Context) (int64, error)
}

LifecycleRepo defines the interface for lifecycle policy persistence.

type LogLineCount

type LogLineCount int

LogLineCount represents how many log lines to show by default.

const (
	LogLines100  LogLineCount = 100
	LogLines250  LogLineCount = 250
	LogLines500  LogLineCount = 500
	LogLines1000 LogLineCount = 1000
	LogLines5000 LogLineCount = 5000
)

type Logger

type Logger interface {
	Error(msg string, args ...interface{})
	Info(msg string, args ...interface{})
	Debug(msg string, args ...interface{})
	Warn(msg string, args ...interface{})
}

Logger defines the interface for logging operations.

type MaintenanceRepo

type MaintenanceRepo interface {
	Create(ctx context.Context, mw *MaintenanceWindowRecord) error
	GetByID(ctx context.Context, id uuid.UUID) (*MaintenanceWindowRecord, error)
	List(ctx context.Context) ([]*MaintenanceWindowRecord, error)
	Delete(ctx context.Context, id uuid.UUID) error
	Toggle(ctx context.Context, id uuid.UUID) (bool, error)
	SetActive(ctx context.Context, id uuid.UUID, active bool) error
	UpdateLastRun(ctx context.Context, id uuid.UUID, runAt time.Time, status string) error
}

MaintenanceRepo defines the interface for maintenance window persistence.

type MaintenanceWindowRecord

type MaintenanceWindowRecord = models.MaintenanceWindowRecord

type ManagedSecretRecord

type ManagedSecretRecord = models.ManagedSecretRecord

type ManagedSecretRepo

type ManagedSecretRepo interface {
	Create(ctx context.Context, s *ManagedSecretRecord) error
	GetByID(ctx context.Context, id uuid.UUID) (*ManagedSecretRecord, error)
	List(ctx context.Context) ([]*ManagedSecretRecord, error)
	Update(ctx context.Context, s *ManagedSecretRecord) error
	Delete(ctx context.Context, id uuid.UUID) error
}

ManagedSecretRepo defines the interface for managed secret persistence.

type MetadataArtifactView

type MetadataArtifactView struct {
	ID                string
	JobID             string
	Filename          string
	MIME              string
	SizeBytes         int64
	SizeHuman         string
	SHA256Hex         string
	StrippedSHA256Hex string
	StrippedAvailable bool
	DownloadURL       string
	Extracted         []MetadataField
	ExtractedJSON     string
	CreatedAt         string
}

MetadataArtifactView is one processed file.

type MetadataCreateJobInput

type MetadataCreateJobInput struct {
	Source    string
	SourceRef string
	Mode      string
	CreatedBy *uuid.UUID
	Files     []MetadataUploadedFile
}

MetadataCreateJobInput is the web-layer input passed by the upload handler. Files are streamed by the caller to keep this struct lean.

type MetadataField

type MetadataField struct {
	Key   string
	Value string
}

MetadataField is one key/value pair extracted from a file.

type MetadataJobDetailView

type MetadataJobDetailView struct {
	Job       MetadataJobView
	Artifacts []MetadataArtifactView
}

MetadataJobDetailView wraps a job with its per-file artifact results.

type MetadataJobView

type MetadataJobView struct {
	ID            string
	Source        string
	SourceRef     string
	Mode          string
	Status        string
	ArtifactCount int
	Error         string
	StartedAt     string
	FinishedAt    string
	Duration      string
	CreatedAt     string
	CreatedBy     string
}

MetadataJobView is one row in the jobs list / upload-result partial.

type MetadataService

type MetadataService interface {
	IsEnabled() bool

	CreateJob(ctx context.Context, in MetadataCreateJobInput) (*MetadataJobView, error)
	GetJob(ctx context.Context, id uuid.UUID) (*MetadataJobDetailView, error)
	ListJobs(ctx context.Context, limit int) ([]MetadataJobView, error)
	OpenStripped(ctx context.Context, artifactID uuid.UUID) (io.ReadCloser, string, error)
}

MetadataService is the web-layer abstraction over the metadata hygiene backend. Handlers depend on this interface so they remain decoupled from internal/services/metadata for testability.

type MetadataUploadedFile

type MetadataUploadedFile struct {
	Filename string
	MIME     string
	Content  io.Reader
	Size     int64
}

MetadataUploadedFile is one element of an upload-mode job.

type MetricsServiceFull

type MetricsServiceFull interface {
	// Live collection (from scheduler worker interface)
	CollectHostMetrics(ctx context.Context, hostID uuid.UUID) (*workers.HostMetrics, error)
	CollectContainerMetrics(ctx context.Context, hostID uuid.UUID) ([]*workers.ContainerMetrics, error)
	StoreMetrics(ctx context.Context, metrics *workers.MetricsSnapshot) error

	// Current (with cache)
	GetCurrentHostMetrics(ctx context.Context, hostID uuid.UUID) (*workers.HostMetrics, error)
	GetCurrentContainerMetrics(ctx context.Context, hostID uuid.UUID) ([]*workers.ContainerMetrics, error)

	// History
	GetHostHistory(ctx context.Context, hostID uuid.UUID, from, to time.Time, interval string) ([]*models.MetricsSnapshot, error)
	GetContainerHistory(ctx context.Context, containerID string, from, to time.Time, interval string) ([]*models.MetricsSnapshot, error)

	// Retention
	CleanupOldMetrics(ctx context.Context, retentionDays int) (int64, error)

	// Prometheus
	GetPrometheusMetrics(ctx context.Context) (string, error)
}

MetricsServiceFull defines the interface for metrics collection, storage, and querying.

type Middleware

type Middleware struct {
	// contains filtered or unexported fields
}

Middleware contains middleware dependencies.

func NewMiddleware

func NewMiddleware(
	sessionStore SessionStore,
	authService AuthService,
	statsService StatsService,
	config MiddlewareConfig,
) *Middleware

NewMiddleware creates a new Middleware instance.

func (*Middleware) AdminRequired

func (m *Middleware) AdminRequired(next http.Handler) http.Handler

AdminRequired middleware ensures user is admin.

func (*Middleware) AuthRequired

func (m *Middleware) AuthRequired(next http.Handler) http.Handler

AuthRequired middleware ensures the user is authenticated. Redirects to login page if not authenticated.

func (*Middleware) CSRFMiddleware

func (m *Middleware) CSRFMiddleware(next http.Handler) http.Handler

CSRFMiddleware validates CSRF token on POST/PUT/DELETE requests.

func (*Middleware) FlashMiddleware

func (m *Middleware) FlashMiddleware(next http.Handler) http.Handler

FlashMiddleware handles flash messages from session. Reuses session cached by AuthRequired to avoid a second Redis roundtrip.

func (*Middleware) InjectCommonData

func (m *Middleware) InjectCommonData(next http.Handler) http.Handler

InjectCommonData middleware injects common data needed by all pages.

func (*Middleware) OperatorRequired

func (m *Middleware) OperatorRequired(next http.Handler) http.Handler

OperatorRequired middleware ensures user is admin or operator.

func (*Middleware) RequireAnyPermission

func (m *Middleware) RequireAnyPermission(permissions ...string) func(http.Handler) http.Handler

RequireAnyPermission creates a middleware that checks for any of the specified permissions.

func (*Middleware) RequirePermission

func (m *Middleware) RequirePermission(permission string) func(http.Handler) http.Handler

RequirePermission creates a middleware that checks for a specific permission. If the user doesn't have the permission, returns 403 Forbidden.

func (*Middleware) ResourceScopeMiddleware

func (m *Middleware) ResourceScopeMiddleware(next http.Handler) http.Handler

ResourceScopeMiddleware computes and injects the ResourceScope into context. Must run AFTER AuthRequired (needs UserContext in context).

func (*Middleware) RoleRequired

func (m *Middleware) RoleRequired(allowedRoles ...string) func(http.Handler) http.Handler

RoleRequired middleware ensures user has required role.

func (*Middleware) SetRoleProvider

func (m *Middleware) SetRoleProvider(rp RoleProvider)

SetRoleProvider sets the role provider on the middleware. Thread-safe: may be called while middleware goroutines read roleProvider.

func (*Middleware) SetScopeProvider

func (m *Middleware) SetScopeProvider(sp ScopeProvider)

SetScopeProvider sets the scope provider on the middleware. Thread-safe: may be called while middleware goroutines read scopeProvider.

func (*Middleware) ThemeMiddleware

func (m *Middleware) ThemeMiddleware(next http.Handler) http.Handler

ThemeMiddleware extracts and applies theme preference.

type MiddlewareConfig

type MiddlewareConfig struct {
	SessionName  string
	LoginPath    string
	ExcludePaths []string
}

MiddlewareConfig contains middleware configuration.

type MonitoringPageResponse

type MonitoringPageResponse struct {
	Host       HostStatsData        `json:"host"`
	Containers []ContainerStatsData `json:"containers"`
	Timestamp  string               `json:"timestamp"`
}

type MountView

type MountView struct {
	Type        string `json:"type"`
	Source      string `json:"source"`
	Destination string `json:"destination"`
	Mode        string `json:"mode"`
	RW          bool   `json:"rw"`
}

MountView for mount display.

type NATSProber

type NATSProber interface {
	IsConnected() bool
	IsTLS() bool
	ServerInfo() string
}

NATSProber provides NATS connection status.

type NetworkAttachmentView

type NetworkAttachmentView struct {
	NetworkID   string   `json:"network_id"`
	NetworkName string   `json:"network_name"`
	IPAddress   string   `json:"ip_address"`
	Gateway     string   `json:"gateway"`
	MacAddress  string   `json:"mac_address"`
	Aliases     []string `json:"aliases"`
}

NetworkAttachmentView for container network detail display.

type NetworkService

type NetworkService interface {
	List(ctx context.Context) ([]NetworkView, error)
	Get(ctx context.Context, id string) (*NetworkView, error)
	GetModel(ctx context.Context, id string) (*models.Network, error)
	Create(ctx context.Context, name, driver string, opts map[string]string) error
	Remove(ctx context.Context, id string) error
	Connect(ctx context.Context, networkID, containerID string) error
	Disconnect(ctx context.Context, networkID, containerID string) error
	Prune(ctx context.Context) (int64, error)
	GetTopology(ctx context.Context) (*TopologyData, error)
}

type NetworkView

type NetworkView struct {
	ID             string    `json:"id"`
	ShortID        string    `json:"short_id"`
	Name           string    `json:"name"`
	Driver         string    `json:"driver"`
	Scope          string    `json:"scope"`
	Internal       bool      `json:"internal"`
	Attachable     bool      `json:"attachable"`
	Subnet         string    `json:"subnet"`
	Gateway        string    `json:"gateway"`
	Created        time.Time `json:"created"`
	CreatedHuman   string    `json:"created_human"`
	ContainerCount int       `json:"container_count"`
	Containers     []string  `json:"containers"`
}

NetworkView for network list templates.

type NotificationConfigRepository

type NotificationConfigRepository interface {
	SaveChannelConfig(ctx context.Context, config *channels.ChannelConfig) error
	GetChannelConfigs(ctx context.Context) ([]*channels.ChannelConfig, error)
	GetChannelConfig(ctx context.Context, name string) (*channels.ChannelConfig, error)
	DeleteChannelConfig(ctx context.Context, name string) error
}

NotificationConfigRepository defines the interface for notification config storage.

type NotificationSender

type NotificationSender interface {
	SendRunbookNotification(ctx context.Context, runbookName, stepName, channel, message string) error
}

NotificationSender abstracts the notification service for sending messages from web handlers (runbooks, alerts, etc.) without importing the full service.

type NullSessionStore

type NullSessionStore struct{}

NullSessionStore is a no-op session store for when Redis is not available.

func NewNullSessionStore

func NewNullSessionStore() *NullSessionStore

NewNullSessionStore creates a new null session store.

func (*NullSessionStore) Delete

func (s *NullSessionStore) Delete(r *http.Request, w http.ResponseWriter, name string) error

Delete does nothing.

func (*NullSessionStore) Get

func (s *NullSessionStore) Get(r *http.Request, name string) (*Session, error)

Get always returns nil (no session).

func (*NullSessionStore) Save

func (s *NullSessionStore) Save(r *http.Request, w http.ResponseWriter, session *Session) error

Save does nothing.

type OAuthConfigRepository

type OAuthConfigRepository interface {
	Create(ctx context.Context, input *postgres.CreateOAuthConfigInput) (*models.OAuthConfig, error)
	GetByID(ctx context.Context, id uuid.UUID) (*models.OAuthConfig, error)
	GetByName(ctx context.Context, name string) (*models.OAuthConfig, error)
	List(ctx context.Context) ([]*models.OAuthConfig, error)
	ListEnabled(ctx context.Context) ([]*models.OAuthConfig, error)
	Update(ctx context.Context, id uuid.UUID, input *postgres.UpdateOAuthConfigInput) (*models.OAuthConfig, error)
	Delete(ctx context.Context, id uuid.UUID) error
	Count(ctx context.Context) (int64, error)
	CountEnabled(ctx context.Context) (int64, error)
}

OAuthConfigRepository defines the interface for OAuth config operations.

type OnboardingService

type OnboardingService interface {
	IsCompleted() bool
	MarkComplete(ctx context.Context) error
}

OnboardingService is the narrow contract the wizard handler needs. Implemented by *services/onboarding.Service.

type PageData

type PageData struct {
	// Page metadata
	Title       string `json:"title"`
	Description string `json:"description,omitempty"`
	Active      string `json:"active"` // Active nav item

	// Breadcrumb navigation
	Breadcrumb []BreadcrumbItem `json:"breadcrumb,omitempty"`

	// User context (injected by middleware)
	User *UserContext `json:"user,omitempty"`

	// Global stats (for sidebar badges)
	Stats *GlobalStats `json:"stats,omitempty"`

	// Notifications count
	NotificationsCount int `json:"notifications_count,omitempty"`

	// Flash messages
	Flash *FlashMessage `json:"flash,omitempty"`

	// CSRF token
	CSRFToken string `json:"csrf_token,omitempty"`

	// Theme preference
	Theme string `json:"theme,omitempty"`

	// Version info
	Version string `json:"version,omitempty"`

	// Page-specific data
	Data             interface{} `json:"data,omitempty"`
	Containers       interface{} `json:"containers,omitempty"`
	Container        interface{} `json:"container,omitempty"`
	Images           interface{} `json:"images,omitempty"`
	Volumes          interface{} `json:"volumes,omitempty"`
	Volume           interface{} `json:"volume,omitempty"`
	Networks         interface{} `json:"networks,omitempty"`
	Network          interface{} `json:"network,omitempty"`
	Stacks           interface{} `json:"stacks,omitempty"`
	Backups          interface{} `json:"backups,omitempty"`
	Variables        interface{} `json:"variables,omitempty"`
	ConfigTemplates  interface{} `json:"config_templates,omitempty"`
	AuditLogs        interface{} `json:"audit_logs,omitempty"`
	SecurityScans    interface{} `json:"security_scans,omitempty"`
	SecurityIssues   interface{} `json:"security_issues,omitempty"`
	SecurityOverview interface{} `json:"security_overview,omitempty"`
	Updates          interface{} `json:"updates,omitempty"`
	UpdateHistory    interface{} `json:"update_history,omitempty"`
	Hosts            interface{} `json:"hosts,omitempty"`
	Host             interface{} `json:"host,omitempty"`
	Events           interface{} `json:"events,omitempty"`
	Ports            interface{} `json:"ports,omitempty"`
	Jobs             interface{} `json:"jobs,omitempty"`
	UsersData        interface{} `json:"users_data,omitempty"`
	Notifications    interface{} `json:"notifications,omitempty"`
	Settings         interface{} `json:"settings,omitempty"`
	License          interface{} `json:"license,omitempty"`
	Topology         interface{} `json:"topology,omitempty"`
	Trends           interface{} `json:"trends,omitempty"`
	Recommendations  interface{} `json:"recommendations,omitempty"`
	ProxyHosts       interface{} `json:"proxy_hosts,omitempty"`
	Logs             interface{} `json:"logs,omitempty"`
	LogContainers    interface{} `json:"log_containers,omitempty"`

	// Templ layout fields (populated by preparePageData, used by ToTemplPageData)
	TemplHosts          []types.HostSelectorItem  `json:"-"`
	TemplActiveHostID   string                    `json:"-"`
	TemplActiveHostName string                    `json:"-"`
	TemplEdition        string                    `json:"-"`
	TemplEditionName    string                    `json:"-"`
	TemplSidebarPrefs   *types.SidebarPreferences `json:"-"`

	// Pagination
	Pagination *PaginationData `json:"pagination,omitempty"`

	// Filters
	Filters map[string]string `json:"filters,omitempty"`

	// Sort
	SortBy    string `json:"sort_by,omitempty"`
	SortOrder string `json:"sort_order,omitempty"`

	// Error
	Error     string `json:"error,omitempty"`
	ErrorCode int    `json:"error_code,omitempty"`

	// Available options for dropdowns
	AvailableNetworks []string `json:"available_networks,omitempty"`
	AvailableStacks   []string `json:"available_stacks,omitempty"`
	AvailableHosts    []string `json:"available_hosts,omitempty"`
}

PageData contains all data passed to page templates.

type PaginationData

type PaginationData struct {
	CurrentPage  int   `json:"current_page"`
	TotalPages   int   `json:"total_pages"`
	TotalItems   int64 `json:"total_items"`
	ItemsPerPage int   `json:"items_per_page"`
	HasPrev      bool  `json:"has_prev"`
	HasNext      bool  `json:"has_next"`
}

PaginationData contains pagination info.

func NewPagination

func NewPagination(totalItems int64, currentPage, perPage int) *PaginationData

NewPagination creates pagination data.

type PortAnalysisView

type PortAnalysisView struct {
	ContainerID   string `json:"container_id"`
	ContainerName string `json:"container_name"`
	InternalPort  int    `json:"internal_port"`
	ExternalPort  int    `json:"external_port"`
	HostIP        string `json:"host_ip"`
	Protocol      string `json:"protocol"`
	ExposureLevel string `json:"exposure_level"`
	IsRisky       bool   `json:"is_risky"`
	RiskReason    string `json:"risk_reason,omitempty"`
}

PortAnalysisView for ports page.

type PortView

type PortView struct {
	ContainerPort int    `json:"container_port"`
	HostPort      int    `json:"host_port"`
	HostIP        string `json:"host_ip"`
	Protocol      string `json:"protocol"`
	Display       string `json:"display"`
}

PortView for port display.

type PreferencesLoader

type PreferencesLoader interface {
	GetUserPreferences(ctx context.Context, userID string) (string, error) // returns JSON string
}

PreferencesLoader is the interface for loading user preferences from storage. Implement this with your repository layer (e.g., PostgreSQL, SQLite).

type PreferencesRepository

type PreferencesRepository interface {
	PreferencesLoader // embeds GetUserPreferences
	SaveUserPreferences(userID string, prefsJSON string) error
	DeleteUserPreferences(userID string) error
	GetSidebarPrefs(ctx context.Context, userID string) (string, error)
	SaveSidebarPrefs(ctx context.Context, userID string, prefsJSON string) error
}

PreferencesRepository defines operations for user preferences.

type ProxyBackendSupport

type ProxyBackendSupport struct {
	Mode         string
	AccessLists  bool
	DeadHosts    bool
	Locations    bool
	Redirections bool
	Streams      bool
}

ProxyBackendSupport mirrors proxysvc.FeatureSupport at the web layer so the adapter interface does not import the service package.

type ProxyHostView

type ProxyHostView struct {
	ID                    int      `json:"id"`
	DomainNames           []string `json:"domain_names,omitempty"`
	Domain                string   `json:"domain"`
	ForwardScheme         string   `json:"forward_scheme"`
	ForwardHost           string   `json:"forward_host"`
	ForwardPort           int      `json:"forward_port"`
	CertificateID         int      `json:"certificate_id,omitempty"`
	SSLEnabled            bool     `json:"ssl_enabled"`
	SSLForced             bool     `json:"ssl_forced"`
	HSTSEnabled           bool     `json:"hsts_enabled"`
	HSTSSubdomains        bool     `json:"hsts_subdomains"`
	HTTP2Support          bool     `json:"http2_support"`
	BlockExploits         bool     `json:"block_exploits"`
	CachingEnabled        bool     `json:"caching_enabled"`
	AllowWebsocketUpgrade bool     `json:"allow_websocket_upgrade"`
	AccessListID          int      `json:"access_list_id,omitempty"`
	AdvancedConfig        string   `json:"advanced_config,omitempty"`
	Enabled               bool     `json:"enabled"`
	ContainerID           string   `json:"container_id,omitempty"`
	Container             string   `json:"container,omitempty"`
	CreatedOn             string   `json:"created_on,omitempty"`
	ModifiedOn            string   `json:"modified_on,omitempty"`
}

ProxyHostView for NPM proxy hosts.

type ProxyService

type ProxyService interface {
	// Proxy Hosts
	ListHosts(ctx context.Context) ([]ProxyHostView, error)
	GetHost(ctx context.Context, id int) (*ProxyHostView, error)
	CreateHost(ctx context.Context, h *ProxyHostView) error
	UpdateHost(ctx context.Context, h *ProxyHostView) error
	RemoveHost(ctx context.Context, id int) error
	EnableHost(ctx context.Context, id int) error
	DisableHost(ctx context.Context, id int) error
	Sync(ctx context.Context) error
	// Redirection Hosts
	ListRedirections(ctx context.Context) ([]RedirectionHostView, error)
	CreateRedirection(ctx context.Context, r *RedirectionHostView) error
	UpdateRedirection(ctx context.Context, r *RedirectionHostView) error
	DeleteRedirection(ctx context.Context, id int) error
	GetRedirection(ctx context.Context, id int) (*RedirectionHostView, error)
	// Streams
	ListStreams(ctx context.Context) ([]StreamView, error)
	CreateStream(ctx context.Context, s *StreamView) error
	UpdateStream(ctx context.Context, s *StreamView) error
	DeleteStream(ctx context.Context, id int) error
	GetStream(ctx context.Context, id int) (*StreamView, error)
	// Dead Hosts
	ListDeadHosts(ctx context.Context) ([]DeadHostView, error)
	CreateDeadHost(ctx context.Context, d *DeadHostView) error
	DeleteDeadHost(ctx context.Context, id int) error
	// Certificates
	ListCertificates(ctx context.Context) ([]CertificateView, error)
	GetCertificate(ctx context.Context, id int) (*CertificateView, error)
	RequestLECertificate(ctx context.Context, domains []string, email string, agree bool, dnsChallenge bool, dnsProvider, dnsCredentials string, propagation int) error
	UploadCustomCertificate(ctx context.Context, niceName string, cert, key, intermediate []byte) error
	RenewCertificate(ctx context.Context, id int) error
	DeleteCertificate(ctx context.Context, id int) error
	// Access Lists
	ListAccessLists(ctx context.Context) ([]AccessListView, error)
	GetAccessList(ctx context.Context, id int) (*AccessListDetailView, error)
	CreateAccessList(ctx context.Context, a *AccessListDetailView) error
	UpdateAccessList(ctx context.Context, a *AccessListDetailView) error
	DeleteAccessList(ctx context.Context, id int) error
	// Audit
	ListAuditLogs(ctx context.Context, limit, offset int) ([]AuditLogView, int, error)
	// Connection management
	GetConnection(ctx context.Context) (*models.NPMConnection, error)
	SetupConnection(ctx context.Context, baseURL, email, password, userID string) error
	UpdateConnectionConfig(ctx context.Context, connID string, baseURL, email, password *string, enabled *bool, userID string) error
	DeleteConnection(ctx context.Context, connID string) error
	// IsConnected
	IsConnected(ctx context.Context) bool
	// Mode returns the proxy backend type: "caddy" or "npm"
	Mode() string
	// BackendSupport returns the active backend's extended-feature
	// support matrix. The UI renders this so the operator can see
	// which features the active backend can actually apply.
	BackendSupport() ProxyBackendSupport
}

type RDPService

type RDPService interface {
	CreateConnection(ctx context.Context, input models.CreateRDPConnectionInput, userID uuid.UUID) (*models.RDPConnection, error)
	GetConnection(ctx context.Context, id uuid.UUID) (*models.RDPConnection, error)
	ListConnections(ctx context.Context, userID uuid.UUID) ([]*models.RDPConnection, error)
	UpdateConnection(ctx context.Context, id uuid.UUID, input models.UpdateRDPConnectionInput) error
	DeleteConnection(ctx context.Context, id uuid.UUID) error
	TestConnection(ctx context.Context, id uuid.UUID) (bool, string, time.Duration, error)
}

RDPService interface for managing RDP connections.

type ReconConnectorView

type ReconConnectorView struct {
	Kind        string
	Name        string
	Enabled     bool
	Configured  bool
	Description string
	DocsURL     string
}

ReconConnectorView lists one optional API connector (HIBP, Shodan…).

type ReconDashboardData

type ReconDashboardData struct {
	TotalTargets   int
	TotalScans     int
	RunningScans   int
	CompletedScans int
	FailedScans    int
	FindingsBySev  map[string]int
	RecentScans    []ReconScanView
	TopFindings    []ReconFindingView
}

ReconDashboardData is the bundle rendered on /recon/dashboard.

type ReconFindingFilter

type ReconFindingFilter struct {
	Severity string
	Module   string
	Limit    int
}

ReconFindingFilter narrows a findings query.

type ReconFindingView

type ReconFindingView struct {
	ID         string
	ScanID     string
	TargetID   string
	Module     string
	Category   string
	Severity   string
	Value      string
	Source     string
	Confidence int
	FirstSeen  string
	LastSeen   string
}

ReconFindingView is one normalized finding row.

type ReconOwnershipProofView

type ReconOwnershipProofView struct {
	ID         string
	Method     string
	Status     string
	Challenge  string
	VerifiedAt string
	CreatedAt  string
}

ReconOwnershipProofView renders one ownership verification record.

type ReconProfileView

type ReconProfileView struct {
	ID          string
	Name        string
	Description string
	Kind        string
	TargetTypes []string
	Modules     []string
}

ReconProfileView lists a built-in or user-defined profile.

type ReconReportView

type ReconReportView struct {
	ID          string
	ScanID      string
	TargetValue string
	Format      string
	SizeBytes   int64
	CreatedAt   string
	DownloadURL string
}

ReconReportView is one generated report.

type ReconSandboxToolGroup

type ReconSandboxToolGroup struct {
	Category string
	Tools    []string
}

ReconSandboxToolGroup is one labelled section of the sandbox tool panel rendered at /recon/connectors.

type ReconScanDetailView

type ReconScanDetailView struct {
	Scan     ReconScanView
	Summary  *ReconScanSummaryView
	Findings []ReconFindingView
	Modules  []string
}

ReconScanDetailView wraps a scan with its findings and summary.

type ReconScanFilter

type ReconScanFilter struct {
	TargetID *uuid.UUID
	Status   string
	Limit    int
}

ReconScanFilter narrows the scans list.

type ReconScanSummaryView

type ReconScanSummaryView struct {
	Grade       string
	Counts      map[string]int
	GeneratedAt string
}

ReconScanSummaryView shows aggregate counts and grade.

type ReconScanView

type ReconScanView struct {
	ID          string
	TargetID    string
	TargetValue string
	TargetType  string
	ProfileID   string
	ProfileName string
	Status      string
	Engine      string
	Error       string
	StartedAt   string
	FinishedAt  string
	Duration    string
	Progress    int
	CreatedAt   string
}

ReconScanView is one row in the scans list.

type ReconService

type ReconService interface {
	IsEnabled() bool
	IsAcknowledged(ctx context.Context) (bool, error)
	Acknowledge(ctx context.Context, actorID *uuid.UUID, ip string) error

	GetDashboard(ctx context.Context) (*ReconDashboardData, error)
	ListTargets(ctx context.Context) ([]ReconTargetView, error)
	GetTarget(ctx context.Context, id uuid.UUID) (*ReconTargetDetailView, error)
	DeleteTarget(ctx context.Context, id uuid.UUID) error

	ListProfiles(ctx context.Context) ([]ReconProfileView, error)
	ListScans(ctx context.Context, filter ReconScanFilter) ([]ReconScanView, error)
	GetScan(ctx context.Context, id uuid.UUID) (*ReconScanDetailView, error)
	ListFindings(ctx context.Context, scanID uuid.UUID, filter ReconFindingFilter) ([]ReconFindingView, error)
	CancelScan(ctx context.Context, id uuid.UUID) error

	ListConnectors(ctx context.Context) ([]ReconConnectorView, error)
	ListReports(ctx context.Context) ([]ReconReportView, error)

	// ListSandboxTools surfaces the toolset shipped inside the
	// recon-toolkit container, grouped by category. The data is static
	// per binary build (the canonical manifest lives at
	// images/recon-toolkit/tools.list and is mirrored into the
	// sandboxtools package at build time) so this method never errs
	// and never blocks on Docker.
	ListSandboxTools(ctx context.Context) []ReconSandboxToolGroup
}

ReconService is the web-layer abstraction over the recon backend. The concrete implementation lives in reconAdapter; handlers stay decoupled from internal/services/recon so tests can substitute fakes.

type ReconTargetDetailView

type ReconTargetDetailView struct {
	Target          ReconTargetView
	OwnershipProofs []ReconOwnershipProofView
	Scans           []ReconScanView
	Findings        []ReconFindingView
}

ReconTargetDetailView is the per-target dossier view.

type ReconTargetView

type ReconTargetView struct {
	ID                string
	Type              string
	Value             string
	ValueHashPrefix   string
	Label             string
	OwnershipStatus   string
	OwnershipMethod   string
	OwnershipVerified bool
	LastScanAt        string
	ScanCount         int
	CreatedAt         string
	CreatedBy         string
}

ReconTargetView is one row in the targets list.

type RedirectionHostView

type RedirectionHostView struct {
	ID              int      `json:"id"`
	DomainNames     []string `json:"domain_names"`
	Domain          string   `json:"domain"`
	ForwardScheme   string   `json:"forward_scheme"`
	ForwardDomain   string   `json:"forward_domain"`
	ForwardHTTPCode int      `json:"forward_http_code"`
	PreservePath    bool     `json:"preserve_path"`
	SSLForced       bool     `json:"ssl_forced"`
	CertificateID   int      `json:"certificate_id"`
	Enabled         bool     `json:"enabled"`
}

RedirectionHostView for NPM redirections.

type RedisProber

type RedisProber interface {
	Ping(ctx context.Context) error
	GetVersion(ctx context.Context) (string, error)
}

RedisProber provides Redis connectivity checks.

type RefreshInterval

type RefreshInterval int

RefreshInterval represents the dashboard auto-refresh interval in seconds.

const (
	RefreshOff RefreshInterval = 0
	Refresh5s  RefreshInterval = 5
	Refresh10s RefreshInterval = 10
	Refresh30s RefreshInterval = 30
	Refresh60s RefreshInterval = 60
)

type RegistryRepo

type RegistryRepo interface {
	Create(ctx context.Context, input models.CreateRegistryInput) (*models.Registry, error)
	GetByID(ctx context.Context, id uuid.UUID) (*models.Registry, error)
	List(ctx context.Context) ([]*models.Registry, error)
	Update(ctx context.Context, id uuid.UUID, input models.CreateRegistryInput) (*models.Registry, error)
	Delete(ctx context.Context, id uuid.UUID) error
}

RegistryRepo defines the interface for registry persistence.

type ResourceQuotaRecord

type ResourceQuotaRecord = models.ResourceQuotaRecord

type ResourceQuotaRepo

type ResourceQuotaRepo interface {
	Create(ctx context.Context, q *ResourceQuotaRecord) error
	List(ctx context.Context) ([]*ResourceQuotaRecord, error)
	Delete(ctx context.Context, id uuid.UUID) error
	Toggle(ctx context.Context, id uuid.UUID) (bool, error)
}

ResourceQuotaRepo defines the interface for resource quota persistence.

type RoleProvider

type RoleProvider interface {
	GetByID(ctx context.Context, id string) (*models.Role, error)
}

RoleProvider fetches a role by ID.

type RoleRepository

type RoleRepository interface {
	Create(ctx context.Context, role *models.Role) error
	GetByID(ctx context.Context, id uuid.UUID) (*models.Role, error)
	GetByName(ctx context.Context, name string) (*models.Role, error)
	Update(ctx context.Context, role *models.Role) error
	Delete(ctx context.Context, id uuid.UUID) error
	List(ctx context.Context, opts postgres.RoleListOptions) ([]*models.Role, int, error)
	GetAll(ctx context.Context) ([]*models.Role, error)
	GetSystemRoles(ctx context.Context) ([]*models.Role, error)
	CountUsersWithRole(ctx context.Context, roleID uuid.UUID) (int, error)
	CountCustomRoles(ctx context.Context) (int, error)
}

RoleRepository defines the interface for role operations.

type RunbookRepo

type RunbookRepo interface {
	Create(ctx context.Context, rb *models.Runbook) error
	GetByID(ctx context.Context, id uuid.UUID) (*models.Runbook, error)
	List(ctx context.Context, opts models.RunbookListOptions) ([]*models.Runbook, int64, error)
	Update(ctx context.Context, rb *models.Runbook) error
	Delete(ctx context.Context, id uuid.UUID) error
	CreateExecution(ctx context.Context, exec *models.RunbookExecution) error
	UpdateExecution(ctx context.Context, exec *models.RunbookExecution) error
	GetExecution(ctx context.Context, id uuid.UUID) (*models.RunbookExecution, error)
	ListExecutions(ctx context.Context, runbookID uuid.UUID, limit int) ([]*models.RunbookExecution, error)
	ListRecentExecutions(ctx context.Context, limit int) ([]*models.RunbookExecution, error)
	GetCategories(ctx context.Context) ([]string, error)
}

RunbookRepo defines the interface for runbook persistence.

type SSHService

type SSHService interface {
	Connect(ctx context.Context, connID uuid.UUID, userID uuid.UUID, clientIP string) (*ssh.Client, *models.SSHSession, error)
	EndSession(ctx context.Context, sessionID uuid.UUID) error
	GetConnection(ctx context.Context, id uuid.UUID) (*models.SSHConnection, error)
	SaveConnectionOptions(ctx context.Context, conn *models.SSHConnection) error
	CreateSession(ctx context.Context, session *models.SSHSession) error
}

SSHService interface for handler

type SSHTerminalMessage

type SSHTerminalMessage struct {
	Type     string `json:"type"` // "input", "output", "resize", "error", "connected", "disconnected", "credential_request", "credential_response"
	Data     string `json:"data,omitempty"`
	Cols     int    `json:"cols,omitempty"`
	Rows     int    `json:"rows,omitempty"`
	Field    string `json:"field,omitempty"`    // "username" or "password" for credential prompts
	Username string `json:"username,omitempty"` // for credential_response
	Password string `json:"password,omitempty"` // for credential_response
}

SSHTerminalMessage represents a WebSocket message for SSH terminal.

type ScopeProvider

type ScopeProvider interface {
	GetUserScope(ctx context.Context, userID string, userRole string) (*models.ResourceScope, error)
}

ScopeProvider computes user resource scope. Implemented by the team service.

type SecurityOverviewData

type SecurityOverviewData struct {
	TotalScanned   int     `json:"total_scanned"`
	AverageScore   float64 `json:"average_score"`
	GradeA         int     `json:"grade_a"`
	GradeB         int     `json:"grade_b"`
	GradeC         int     `json:"grade_c"`
	GradeD         int     `json:"grade_d"`
	GradeF         int     `json:"grade_f"`
	CriticalCount  int     `json:"critical_count"`
	HighCount      int     `json:"high_count"`
	MediumCount    int     `json:"medium_count"`
	LowCount       int     `json:"low_count"`
	TrivyAvailable bool    `json:"trivy_available"`
}

SecurityOverviewData for security dashboard.

type SecurityScanView

type SecurityScanView struct {
	ContainerID   string      `json:"container_id"`
	ContainerName string      `json:"container_name"`
	Image         string      `json:"image"`
	Score         int         `json:"score"`
	Grade         string      `json:"grade"`
	Issues        []IssueView `json:"issues"`
	IssueCount    int         `json:"issue_count"`
	CriticalCount int         `json:"critical_count"`
	HighCount     int         `json:"high_count"`
	MediumCount   int         `json:"medium_count"`
	LowCount      int         `json:"low_count"`
	ScannedAt     time.Time   `json:"scanned_at"`
	ScannedHuman  string      `json:"scanned_human"`
	CVECount      int         `json:"cve_count"`
	IncludedCVE   bool        `json:"included_cve"`
}

SecurityScanView for security scan results.

type SecurityService

type SecurityService interface {
	GetOverview(ctx context.Context) (*SecurityOverviewData, error)
	ListScans(ctx context.Context) ([]SecurityScanView, error)
	ListContainersWithSecurity(ctx context.Context) ([]ContainerSecurityView, error)
	GetScan(ctx context.Context, containerID string) (*SecurityScanView, error)
	Scan(ctx context.Context, containerID string) (*SecurityScanView, error)
	ScanAll(ctx context.Context) error
	ListIssues(ctx context.Context) ([]IssueView, error)
	IgnoreIssue(ctx context.Context, id string) error
	ResolveIssue(ctx context.Context, id string) error
	GetTrends(ctx context.Context, days int) (*SecurityTrendsViewData, error)
	GenerateReport(ctx context.Context, format string) ([]byte, string, error) // data, contentType, error
	IsTrivyAvailable() bool
}

type SecurityTrendsViewData

type SecurityTrendsViewData struct {
	Overview        SecurityOverviewData     `json:"overview"`
	ScoreHistory    []TrendPointView         `json:"score_history"`
	ContainerTrends []ContainerTrendViewData `json:"container_trends"`
	Days            int                      `json:"days"`
}

SecurityTrendsViewData for the trends page.

type SelectOption

type SelectOption struct {
	Value string
	Label string
}

func AvailableLanguages

func AvailableLanguages() []SelectOption

AvailableLanguages returns supported UI languages.

func AvailableTimezones

func AvailableTimezones() []SelectOption

AvailableTimezones returns common IANA timezones for the preferences UI.

type ServiceRegistry

type ServiceRegistry struct {
	// contains filtered or unexported fields
}

ServiceRegistry holds all backend services and provides adapted interfaces for the web layer.

func NewServiceRegistry

func NewServiceRegistry(deps ServiceRegistryDeps) *ServiceRegistry

NewServiceRegistry creates a new service registry with all dependencies injected.

func (*ServiceRegistry) Alerts

func (r *ServiceRegistry) Alerts() AlertsService

Alerts returns the alert monitoring service, or nil if not configured.

func (*ServiceRegistry) Auth

func (r *ServiceRegistry) Auth() AuthService

func (*ServiceRegistry) BackupVerify

func (r *ServiceRegistry) BackupVerify() *backupverifysvc.Service

BackupVerify returns the backup verification service, or nil if not configured. Web handlers must check for nil before use; the standalone-mode app wires this in every install (no edition gate).

func (*ServiceRegistry) Backups

func (r *ServiceRegistry) Backups() BackupService

func (*ServiceRegistry) Calendar

func (r *ServiceRegistry) Calendar() *calendarsvc.Service

Calendar returns the operations calendar service, or nil if not configured. v26.5.1 wires this in every install — no biz gate.

func (*ServiceRegistry) Config

func (r *ServiceRegistry) Config() ConfigService

func (*ServiceRegistry) Containers

func (r *ServiceRegistry) Containers() ContainerService

func (*ServiceRegistry) Crontab

func (r *ServiceRegistry) Crontab() *crontabsvc.Service

Crontab returns the crontab service, or nil if not configured. Web handlers must check for nil before use; the standalone-mode app wires this in every install (no edition gate).

func (*ServiceRegistry) DockerEngine

func (r *ServiceRegistry) DockerEngine() *dockerconfigsvc.Service

DockerEngine returns the docker engine config service, or nil if not configured. The web handler renders an "unavailable" page when nil — typically because the operator did not mount /etc/docker into the container.

func (*ServiceRegistry) Egress

func (r *ServiceRegistry) Egress() *egresssvc.Service

Egress returns the L7 egress filter service, or nil if not configured (typically because cfg.EgressProxy.Enabled is false). v26.5.2 wires this in every install — no biz gate.

func (*ServiceRegistry) Events

func (r *ServiceRegistry) Events() EventService

func (*ServiceRegistry) Firewall

func (r *ServiceRegistry) Firewall() *firewallsvc.Service

Firewall returns the firewall service, or nil if not configured. Web handlers must check for nil before use; the standalone-mode app wires this in every install (no edition gate), but installs that disable migration 050_firewall would observe a nil here.

func (*ServiceRegistry) Git

func (r *ServiceRegistry) Git() GitService

Git returns the unified Git service, or nil if not configured.

func (*ServiceRegistry) Gitea

func (r *ServiceRegistry) Gitea() GiteaService

Gitea returns the Gitea integration service, or nil if not configured.

func (*ServiceRegistry) Hosts

func (r *ServiceRegistry) Hosts() HostService

func (*ServiceRegistry) ImageBuilder

func (r *ServiceRegistry) ImageBuilder() *imagebuildersvc.Service

ImageBuilder returns the image builder service, or nil if not configured. v26.5.1 wires this in every install — no biz gate.

func (*ServiceRegistry) Images

func (r *ServiceRegistry) Images() ImageService

func (*ServiceRegistry) Marketplace

func (r *ServiceRegistry) Marketplace() *marketplacesvc.Service

Marketplace returns the curated app marketplace service, or nil if not configured. v26.5.1 wires this in every install — no biz gate.

func (*ServiceRegistry) Metadata

func (r *ServiceRegistry) Metadata() MetadataService

Metadata returns the metadata hygiene adapter. Always non-nil for the same reason as Recon().

func (*ServiceRegistry) Metrics

func (r *ServiceRegistry) Metrics() MetricsServiceFull

Metrics returns the metrics service, or nil if not configured.

func (*ServiceRegistry) Networks

func (r *ServiceRegistry) Networks() NetworkService

func (*ServiceRegistry) Proxy

func (r *ServiceRegistry) Proxy() ProxyService

func (*ServiceRegistry) Recon

func (r *ServiceRegistry) Recon() ReconService

Recon returns the recon module adapter. It always returns a non-nil pointer so handlers can call methods without nil-checks; IsEnabled() reflects whether the underlying service is wired.

func (*ServiceRegistry) Rollback

func (r *ServiceRegistry) Rollback() *rollbacksvc.Service

Rollback returns the automated rollback service, or nil if not configured. v26.5.1 wires this in every install — no biz gate.

func (*ServiceRegistry) SSH

func (r *ServiceRegistry) SSH() *sshsvc.Service

SSH returns the SSH service, or nil if not configured.

func (*ServiceRegistry) SSLObservatory

func (r *ServiceRegistry) SSLObservatory() *sslobssvc.Service

SSLObservatory returns the SSL observatory service, or nil if not configured. v26.5.1 wires this in every install — no biz gate.

func (*ServiceRegistry) Scheduler

func (r *ServiceRegistry) Scheduler() *scheduler.Scheduler

Scheduler returns the scheduler service, or nil if not configured.

func (*ServiceRegistry) Security

func (r *ServiceRegistry) Security() SecurityService

func (*ServiceRegistry) Stacks

func (r *ServiceRegistry) Stacks() StackService

func (*ServiceRegistry) Stats

func (r *ServiceRegistry) Stats() StatsService

func (*ServiceRegistry) Storage

func (r *ServiceRegistry) Storage() StorageService

func (*ServiceRegistry) Teams

func (r *ServiceRegistry) Teams() TeamService

func (*ServiceRegistry) Updates

func (r *ServiceRegistry) Updates() UpdateService

func (*ServiceRegistry) Users

func (r *ServiceRegistry) Users() UserService

func (*ServiceRegistry) Volumes

func (r *ServiceRegistry) Volumes() VolumeService

func (*ServiceRegistry) WireGuard

func (r *ServiceRegistry) WireGuard() *wireguardsvc.Service

WireGuard returns the wireguard service, or nil if not configured (typically because the data encryption key is unset). v26.5.1 wires this in every install — no biz gate.

func (*ServiceRegistry) YARA

func (r *ServiceRegistry) YARA() *yarasvc.Service

YARA returns the YARA scanner service, or nil if not configured (typically because recon is disabled and the toolkit image isn't available). v26.5.2 wires this in every install — no biz gate.

type ServiceRegistryDeps

type ServiceRegistryDeps struct {
	DefaultHostID         uuid.UUID
	ContainerService      *containersvc.Service
	ImageService          *imagesvc.Service
	VolumeService         *volumesvc.Service
	NetworkService        *networksvc.Service
	StackService          *stacksvc.Service
	BackupService         *backupsvc.Service
	ConfigService         *configsvc.Service
	SecurityService       *securitysvc.Service
	UpdateService         *updatesvc.Service
	HostService           *hostsvc.Service
	AuthService           *authsvc.Service
	NPMService            *npm.Service        // Optional: requires npm.enabled
	ProxyService          *proxysvc.Service   // Optional: requires nginx.enabled or caddy.enabled
	StorageService        *storagesvc.Service // Optional: requires minio.enabled
	TeamService           *teamsvc.Service
	GiteaService          *giteapkg.Service // Optional: requires Gitea integration
	GitService            *gitsvc.Service   // Optional: requires Git integration
	SSHService            *sshsvc.Service   // Optional: requires SSH service
	MetricsService        MetricsServiceFull
	AlertService          *monitoring.AlertService
	SchedulerService      *scheduler.Scheduler     // Optional: set after scheduler init
	FirewallService       *firewallsvc.Service     // Optional: firewall rule management (v26.5.1)
	CrontabService        *crontabsvc.Service      // Optional: managed cron jobs (v26.5.1)
	BackupVerifyService   *backupverifysvc.Service // Optional: backup verification (v26.5.1)
	RollbackService       *rollbacksvc.Service     // Optional: automated rollback (v26.5.1)
	SSLObservatoryService *sslobssvc.Service       // Optional: SSL observatory (v26.5.1)
	DockerEngineService   *dockerconfigsvc.Service // Optional: docker engine config (v26.5.1)
	WireGuardService      *wireguardsvc.Service    // Optional: WireGuard mesh (v26.5.1)
	WireGuardProbe        wireguardsvc.ProbeResult // Optional: local wg/wg-quick availability
	ImageBuilderService   *imagebuildersvc.Service // Optional: image builder (v26.5.1)
	DNSService            *dnssvc.Service          // Optional: DNS provider plugins (v26.5.1)
	CalendarService       *calendarsvc.Service     // Optional: operations calendar (v26.5.1)
	MarketplaceService    *marketplacesvc.Service  // Optional: curated app marketplace (v26.5.1)
	EgressService         *egresssvc.Service       // Optional: L7 egress forward proxy (v26.5.2)
	EgressListenAddr      string                   // Optional: proxy listener address for the UI info panel
	YARAService           *yarasvc.Service         // Optional: one-shot YARA scanner (v26.5.2)
	YARAToolkitImage      string                   // Optional: toolkit image name for the UI info panel
	UserRepository        *postgres.UserRepository
	AuditLogRepo          *postgres.AuditLogRepository // Optional: for recent events feed
	Encryptor             *crypto.AESEncryptor         // Optional: requires encryption key
	SessionStore          *WebSessionStore             // Optional: requires Redis
	DockerClient          docker.ClientAPI             // Optional: set after Docker init

	// Recon module (v26.5.0). Pass the service implementations and the
	// in-memory or Postgres-backed acknowledgement recorder. Leave nil
	// when cfg.Recon.Enabled is false.
	ReconService    reconsvc.Service
	MetadataService metadatasvc.Service
	ReconAck        AckRecorder
	ReconEnabled    bool
}

ServiceRegistryDeps holds all dependencies for ServiceRegistry constructor injection. Optional fields (nil-safe) can be left nil if the corresponding feature is disabled.

type Services

type Services interface {
	Containers() ContainerService
	Images() ImageService
	Volumes() VolumeService
	Networks() NetworkService
	Stacks() StackService
	Backups() BackupService
	Config() ConfigService
	Security() SecurityService
	Updates() UpdateService
	Hosts() HostService
	Events() EventService
	Proxy() ProxyService
	Storage() StorageService
	Auth() AuthService
	Stats() StatsService
	Users() UserService
	Teams() TeamService
	Gitea() GiteaService
	Git() GitService
	Metrics() MetricsServiceFull
	Alerts() AlertsService
	Scheduler() *scheduler.Scheduler
}

Services interface aggregates all service interfaces needed by handlers.

type Session

type Session struct {
	ID        string
	UserID    string
	Username  string
	Role      string
	Theme     string
	CSRFToken string
	CreatedAt time.Time
	ExpiresAt time.Time
	Values    map[string]interface{}
}

Session represents a user session.

type SessionRepository

type SessionRepository interface {
	GetUserSessions(userID string) ([]profile.SessionInfo, error)
	DeleteSession(sessionID string) error
	DeleteAllSessionsExcept(userID string, currentSessionID string) error
	GetCurrentSessionID(r *http.Request) string
}

SessionRepository defines operations for user sessions.

type SessionStore

type SessionStore interface {
	Get(r *http.Request, name string) (*Session, error)
	Save(r *http.Request, w http.ResponseWriter, session *Session) error
	Delete(r *http.Request, w http.ResponseWriter, name string) error
}

SessionStore interface for session management.

type ShortcutsService

type ShortcutsService interface {
	Create(ctx context.Context, input models.CreateWebShortcutInput, userID uuid.UUID) (*models.WebShortcut, error)
	Get(ctx context.Context, id uuid.UUID) (*models.WebShortcut, error)
	List(ctx context.Context, userID uuid.UUID) ([]*models.WebShortcut, error)
	ListByCategory(ctx context.Context, userID uuid.UUID, category string) ([]*models.WebShortcut, error)
	Update(ctx context.Context, id uuid.UUID, input models.UpdateWebShortcutInput) (*models.WebShortcut, error)
	Delete(ctx context.Context, id uuid.UUID) error
	GetCategories(ctx context.Context, userID uuid.UUID) ([]string, error)
	FetchAndSetFavicon(ctx context.Context, shortcutID uuid.UUID) error
}

ShortcutsService interface for managing web shortcuts.

type SnippetRepository

type SnippetRepository interface {
	Create(ctx context.Context, userID uuid.UUID, input *models.CreateSnippetInput) (*models.UserSnippet, error)
	Get(ctx context.Context, userID, snippetID uuid.UUID) (*models.UserSnippet, error)
	Update(ctx context.Context, userID, snippetID uuid.UUID, input *models.UpdateSnippetInput) (*models.UserSnippet, error)
	Delete(ctx context.Context, userID, snippetID uuid.UUID) error
	List(ctx context.Context, userID uuid.UUID, opts *models.SnippetListOptions) ([]*models.UserSnippetListItem, error)
	ListPaths(ctx context.Context, userID uuid.UUID) ([]string, error)
	Count(ctx context.Context, userID uuid.UUID) (int, error)
}

SnippetRepository defines the interface for snippet storage.

type StackService

type StackService interface {
	List(ctx context.Context) ([]StackView, error)
	Get(ctx context.Context, name string) (*StackView, error)
	GetServices(ctx context.Context, name string) ([]StackServiceView, error)
	GetComposeConfig(ctx context.Context, name string) (string, error)
	Deploy(ctx context.Context, name, composeFile string) error
	Start(ctx context.Context, name string) error
	Stop(ctx context.Context, name string) error
	Restart(ctx context.Context, name string) error
	Remove(ctx context.Context, name string) error
	ListVersions(ctx context.Context, name string) ([]StackVersionView, error)
}

type StackServiceView

type StackServiceView struct {
	Name          string   `json:"name"`
	Image         string   `json:"image"`
	ContainerID   string   `json:"container_id"`
	ContainerName string   `json:"container_name"`
	Status        string   `json:"status"`
	State         string   `json:"state"`
	Replicas      string   `json:"replicas"`
	Ports         []string `json:"ports"`
}

StackServiceView represents a service within a stack for templates.

type StackVersionView

type StackVersionView struct {
	Version    int
	Comment    string
	CreatedAt  string
	CreatedBy  string
	IsDeployed bool
}

StackVersionView represents a stack version for the web UI.

type StackView

type StackView struct {
	ID             string    `json:"id"`
	Name           string    `json:"name"`
	Type           string    `json:"type"` // compose or swarm
	HostID         string    `json:"host_id"`
	Status         string    `json:"status"`
	ServiceCount   int       `json:"service_count"`
	RunningCount   int       `json:"running_count"`
	Created        time.Time `json:"created"`
	CreatedHuman   string    `json:"created_human"`
	UpdatedHuman   string    `json:"updated_human"`
	Path           string    `json:"path"`
	ComposeFile    string    `json:"compose_file"`
	ContainerNames []string  `json:"container_names"`
	IsExternal     bool      `json:"is_external"` // true if discovered from Docker, not managed by usulnet
	GitRepo        string    `json:"git_repo,omitempty"`
	GitBranch      string    `json:"git_branch,omitempty"`
	GitCommit      string    `json:"git_commit,omitempty"`
}

StackView for stack/compose list templates.

type StatsService

type StatsService interface {
	GetGlobalStats(ctx context.Context) (*GlobalStats, error)
}

StatsService interface for fetching global stats.

type StorageAuditView

type StorageAuditView struct {
	Action       string `json:"action"`
	ResourceType string `json:"resource_type"`
	ResourceName string `json:"resource_name"`
	UserID       string `json:"user_id"`
	CreatedAt    string `json:"created_at"`
}

StorageAuditView represents an audit entry for the UI.

type StorageBucketView

type StorageBucketView struct {
	Name        string `json:"name"`
	Region      string `json:"region"`
	SizeBytes   int64  `json:"size_bytes"`
	SizeHuman   string `json:"size_human"`
	ObjectCount int64  `json:"object_count"`
	IsPublic    bool   `json:"is_public"`
	Versioning  bool   `json:"versioning"`
	CreatedAt   string `json:"created_at"`
	LastSynced  string `json:"last_synced,omitempty"`
}

StorageBucketView represents a bucket for the UI.

type StorageConnectionView

type StorageConnectionView struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	Endpoint     string `json:"endpoint"`
	Region       string `json:"region"`
	UsePathStyle bool   `json:"use_path_style"`
	UseSSL       bool   `json:"use_ssl"`
	IsDefault    bool   `json:"is_default"`
	Status       string `json:"status"`
	StatusMsg    string `json:"status_message,omitempty"`
	CreatedAt    string `json:"created_at"`
	LastChecked  string `json:"last_checked,omitempty"`
	BucketCount  int64  `json:"bucket_count"`
	TotalSize    int64  `json:"total_size"`
	TotalObjects int64  `json:"total_objects"`
}

StorageConnectionView represents a storage connection for the UI.

type StorageObjectView

type StorageObjectView struct {
	Key          string `json:"key"`
	Name         string `json:"name"`
	Size         int64  `json:"size"`
	SizeHuman    string `json:"size_human"`
	LastModified string `json:"last_modified,omitempty"`
	ETag         string `json:"etag,omitempty"`
	ContentType  string `json:"content_type,omitempty"`
	StorageClass string `json:"storage_class,omitempty"`
	IsDir        bool   `json:"is_dir"`
}

StorageObjectView represents an object or folder for the UI.

type StorageService

type StorageService interface {
	// Connections
	ListConnections(ctx context.Context) ([]StorageConnectionView, error)
	GetConnection(connID string) (*StorageConnectionView, error)
	CreateConnection(ctx context.Context, name, endpoint, region, accessKey, secretKey string, usePathStyle, useSSL, isDefault bool, userID string) (*StorageConnectionView, error)
	UpdateConnection(ctx context.Context, connID string, name, endpoint, region, accessKey, secretKey *string, usePathStyle, useSSL, isDefault *bool, userID string) error
	DeleteConnection(ctx context.Context, connID, userID string) error
	TestConnection(ctx context.Context, connID string) error
	// Buckets
	ListBuckets(ctx context.Context, connID string) ([]StorageBucketView, error)
	CreateBucket(ctx context.Context, connID, name, region string, isPublic, versioning bool, userID string) error
	DeleteBucket(ctx context.Context, connID, name, userID string) error
	// Objects
	ListObjects(ctx context.Context, connID, bucket, prefix string) ([]StorageObjectView, error)
	UploadObject(ctx context.Context, connID, bucket, key string, reader io.Reader, size int64, contentType, userID string) error
	DeleteObject(ctx context.Context, connID, bucket, key, userID string) error
	CreateFolder(ctx context.Context, connID, bucket, prefix, userID string) error
	PresignDownload(ctx context.Context, connID, bucket, key string) (string, error)
	PresignUpload(ctx context.Context, connID, bucket, key string) (string, error)
	// Audit
	ListAuditLogs(ctx context.Context, connID string, limit, offset int) ([]StorageAuditView, int64, error)
}

StorageService provides S3-compatible storage operations for the web layer.

type StreamView

type StreamView struct {
	ID             int    `json:"id"`
	IncomingPort   int    `json:"incoming_port"`
	ForwardingHost string `json:"forwarding_host"`
	ForwardingPort int    `json:"forwarding_port"`
	TCPForwarding  bool   `json:"tcp_forwarding"`
	UDPForwarding  bool   `json:"udp_forwarding"`
	Enabled        bool   `json:"enabled"`
}

StreamView for NPM TCP/UDP streams.

type SystemInfoView

type SystemInfoView struct {
	DockerVersion string
	APIVersion    string
	OS            string
	Arch          string
	CPUs          int
	Memory        int64
	MemoryHuman   string
	Hostname      string
}

SystemInfoView contains Docker system information

type TeamService

type TeamService interface {
	CreateTeam(ctx context.Context, name, description string, createdBy uuid.UUID) (*models.Team, error)
	GetTeam(ctx context.Context, id uuid.UUID) (*models.Team, error)
	ListTeams(ctx context.Context) ([]*models.Team, error)
	UpdateTeam(ctx context.Context, id uuid.UUID, name, description string) (*models.Team, error)
	DeleteTeam(ctx context.Context, id uuid.UUID) error
	AddMember(ctx context.Context, teamID, userID uuid.UUID, role models.TeamRole, addedBy uuid.UUID) error
	RemoveMember(ctx context.Context, teamID, userID uuid.UUID) error
	ListMembers(ctx context.Context, teamID uuid.UUID) ([]*models.TeamMember, error)
	ListTeamsForUser(ctx context.Context, userID uuid.UUID) ([]*models.Team, error)
	GrantAccess(ctx context.Context, teamID uuid.UUID, resourceType models.ResourceType, resourceID string, level models.AccessLevel, grantedBy uuid.UUID) error
	RevokeAccess(ctx context.Context, teamID uuid.UUID, resourceType models.ResourceType, resourceID string) error
	RevokeAccessByID(ctx context.Context, permID uuid.UUID) error
	ListPermissions(ctx context.Context, teamID uuid.UUID) ([]*models.ResourcePermission, error)
	TeamsExist(ctx context.Context) (bool, error)
	TeamCount(ctx context.Context) (int, error)
}

TeamService provides team management operations.

type TemplateHelpers

type TemplateHelpers struct{}

TemplateHelpers provides helper functions for use in templates.

func NewTemplateHelpers

func NewTemplateHelpers() *TemplateHelpers

NewTemplateHelpers creates a new TemplateHelpers instance.

func (*TemplateHelpers) Add

func (h *TemplateHelpers) Add(a, b int) int

Add adds two integers.

func (*TemplateHelpers) BuildURL

func (h *TemplateHelpers) BuildURL(base string, params map[string]string) string

BuildURL builds a URL with query parameters.

func (*TemplateHelpers) Contains

func (h *TemplateHelpers) Contains(slice []string, item string) bool

Contains checks if slice contains string.

func (*TemplateHelpers) Div

func (h *TemplateHelpers) Div(a, b int) int

Div divides a by b.

func (*TemplateHelpers) First

func (h *TemplateHelpers) First(items []string) string

First returns first element of slice or empty string.

func (*TemplateHelpers) FormatBytes

func (h *TemplateHelpers) FormatBytes(bytes int64) string

FormatBytes formats bytes as human-readable string.

func (*TemplateHelpers) FormatDuration

func (h *TemplateHelpers) FormatDuration(seconds int) string

FormatDuration formats seconds as human-readable duration.

func (*TemplateHelpers) GradeColor

func (h *TemplateHelpers) GradeColor(grade string) string

GradeColor returns CSS classes for security grade.

func (*TemplateHelpers) HealthColor

func (h *TemplateHelpers) HealthColor(health string) string

HealthColor returns CSS class for health status.

func (*TemplateHelpers) Join

func (h *TemplateHelpers) Join(items []string, sep string) string

Join joins strings with separator.

func (*TemplateHelpers) MaskSecret

func (h *TemplateHelpers) MaskSecret(value string) string

MaskSecret masks a secret value showing first/last 4 chars.

func (*TemplateHelpers) Mul

func (h *TemplateHelpers) Mul(a, b int) int

Mul multiplies two integers.

func (*TemplateHelpers) Percentage

func (h *TemplateHelpers) Percentage(value float64, decimals int) string

Percentage formats a float as percentage.

func (*TemplateHelpers) Pluralize

func (h *TemplateHelpers) Pluralize(count int, singular, plural string) string

Pluralize returns plural suffix if count != 1.

func (*TemplateHelpers) PortDisplay

func (h *TemplateHelpers) PortDisplay(hostIP string, hostPort, containerPort int, protocol string) string

PortDisplay formats a port mapping for display.

func (*TemplateHelpers) QueryEscape

func (h *TemplateHelpers) QueryEscape(s string) string

QueryEscape URL-encodes a string.

func (*TemplateHelpers) SafeHTML

func (h *TemplateHelpers) SafeHTML(s string) template.HTML

SafeHTML marks string as safe HTML (use with caution).

func (*TemplateHelpers) SafeURL

func (h *TemplateHelpers) SafeURL(s string) template.URL

SafeURL marks string as safe URL.

func (*TemplateHelpers) Seq

func (h *TemplateHelpers) Seq(start, end int) []int

Seq generates a sequence of integers from start to end.

func (*TemplateHelpers) SeverityBadge

func (h *TemplateHelpers) SeverityBadge(severity string) string

SeverityBadge returns badge CSS for severity.

func (*TemplateHelpers) SeverityColor

func (h *TemplateHelpers) SeverityColor(severity string) string

SeverityColor returns CSS classes for severity level.

func (*TemplateHelpers) ShortID

func (h *TemplateHelpers) ShortID(id string) string

ShortID returns first 12 characters of a Docker ID.

func (*TemplateHelpers) ShortImage

func (h *TemplateHelpers) ShortImage(image string) string

ShortImage returns shortened image name (without registry prefix).

func (*TemplateHelpers) Split

func (h *TemplateHelpers) Split(s, sep string) []string

Split splits string by separator.

func (*TemplateHelpers) StatusBadge

func (h *TemplateHelpers) StatusBadge(status string) string

StatusBadge returns badge CSS classes for container status.

func (*TemplateHelpers) StatusColor

func (h *TemplateHelpers) StatusColor(status string) string

StatusColor returns CSS class for container status.

func (*TemplateHelpers) Sub

func (h *TemplateHelpers) Sub(a, b int) int

Sub subtracts b from a.

func (*TemplateHelpers) TimeAgo

func (h *TemplateHelpers) TimeAgo(t time.Time) string

TimeAgo returns human-readable relative time.

func (*TemplateHelpers) TruncateString

func (h *TemplateHelpers) TruncateString(s string, maxLen int) string

TruncateString truncates a string to max length with ellipsis.

func (*TemplateHelpers) YesNo

func (h *TemplateHelpers) YesNo(b bool) string

YesNo returns "Yes" or "No" based on boolean.

type TerminalSession

type TerminalSession struct {
	ID            uuid.UUID  `json:"id"`
	UserID        uuid.UUID  `json:"user_id"`
	Username      string     `json:"username"`
	TargetType    string     `json:"target_type"`
	TargetID      string     `json:"target_id"`
	TargetName    string     `json:"target_name"`
	HostID        *uuid.UUID `json:"host_id,omitempty"`
	Shell         string     `json:"shell"`
	TermCols      int        `json:"term_cols"`
	TermRows      int        `json:"term_rows"`
	ClientIP      string     `json:"client_ip"`
	StartedAt     time.Time  `json:"started_at"`
	EndedAt       *time.Time `json:"ended_at,omitempty"`
	DurationMs    *int64     `json:"duration_ms,omitempty"`
	DurationHuman string     `json:"duration_human,omitempty"`
	Status        string     `json:"status"`
	ErrorMessage  string     `json:"error_message,omitempty"`
}

TerminalSession represents a terminal session for the web layer.

type TerminalSessionListOptions

type TerminalSessionListOptions struct {
	UserID     *uuid.UUID
	TargetType *string
	TargetID   *string
	HostID     *uuid.UUID
	Status     *string
	Since      *time.Time
	Until      *time.Time
	Limit      int
	Offset     int
}

TerminalSessionListOptions contains options for listing terminal sessions.

type TerminalSessionRepository

type TerminalSessionRepository interface {
	Create(ctx context.Context, input *CreateTerminalSessionInput) (uuid.UUID, error)
	End(ctx context.Context, sessionID uuid.UUID, status, errorMsg string) error
	UpdateResize(ctx context.Context, sessionID uuid.UUID, cols, rows int) error
	Get(ctx context.Context, sessionID uuid.UUID) (*TerminalSession, error)
	List(ctx context.Context, opts TerminalSessionListOptions) ([]*TerminalSession, int, error)
	GetByTarget(ctx context.Context, targetType, targetID string, limit int) ([]*TerminalSession, error)
	GetByUser(ctx context.Context, userID uuid.UUID, limit int) ([]*TerminalSession, error)
	GetActiveSessions(ctx context.Context) ([]*TerminalSession, error)
}

TerminalSessionRepository defines the interface for terminal session storage.

type Theme

type Theme string

Theme represents the UI theme preference.

const (
	ThemeDark   Theme = "dark"
	ThemeLight  Theme = "light"
	ThemeSystem Theme = "system"
)

type TimeFormat

type TimeFormat string

TimeFormat represents 12h vs 24h clock.

const (
	TimeFormat24h TimeFormat = "15:04"    // 24h
	TimeFormat12h TimeFormat = "03:04 PM" // 12h
)

type TopologyData

type TopologyData struct {
	Nodes []TopologyNode `json:"nodes"`
	Edges []TopologyEdge `json:"edges"`
}

TopologyData for network visualization.

type TopologyEdge

type TopologyEdge struct {
	From  string `json:"from"`
	To    string `json:"to"`
	Label string `json:"label,omitempty"`
}

TopologyEdge represents a connection.

type TopologyNode

type TopologyNode struct {
	ID    string                 `json:"id"`
	Label string                 `json:"label"`
	Type  string                 `json:"type"`
	State string                 `json:"state,omitempty"`
	Data  map[string]interface{} `json:"data,omitempty"`
}

TopologyNode represents a node.

type TrackedVulnRecord

type TrackedVulnRecord = models.TrackedVulnRecord

type TrackedVulnRepo

type TrackedVulnRepo interface {
	Create(ctx context.Context, v *TrackedVulnRecord) error
	Upsert(ctx context.Context, v *TrackedVulnRecord) error
	GetByID(ctx context.Context, id uuid.UUID) (*TrackedVulnRecord, error)
	List(ctx context.Context) ([]*TrackedVulnRecord, error)
	UpdateStatus(ctx context.Context, id uuid.UUID, status string) error
	Resolve(ctx context.Context, id uuid.UUID, notes string, scanID *uuid.UUID) error
	Assign(ctx context.Context, id uuid.UUID, assigneeID *uuid.UUID, assigneeName string) error
	ListSLABreached(ctx context.Context) ([]*TrackedVulnRecord, error)
	WeeklyTrend(ctx context.Context) ([]models.VulnWeeklyTrend, error)
	TopAffectedImages(ctx context.Context, limit int) ([]models.ImageVulnCount, error)
	MTTRBySeverity(ctx context.Context) (map[string]float64, error)
	SLACompliancePercent(ctx context.Context) (float64, error)
	ExistsByCVE(ctx context.Context, cveID string) (bool, error)
	CountSLABreached(ctx context.Context) (int, error)
	CountResolvedSince(ctx context.Context, since time.Time) (int, error)
	CountBySeverity(ctx context.Context) (map[string]int, error)
	CountByStatus(ctx context.Context) (map[string]int, error)
}

TrackedVulnRepo defines the interface for tracked vulnerability persistence.

type TrendPointView

type TrendPointView struct {
	Date  string  `json:"date"`
	Score float64 `json:"score"`
}

TrendPointView represents a single point in a trends chart.

type UpdateHistoryView

type UpdateHistoryView struct {
	ID            string `json:"id"`
	ContainerName string `json:"container_name"`
	FromVersion   string `json:"from_version"`
	ToVersion     string `json:"to_version"`
	Status        string `json:"status"`
	Duration      string `json:"duration"`
	UpdatedAt     string `json:"updated_at"`
	CanRollback   bool   `json:"can_rollback"`
}

UpdateHistoryView for update history list.

type UpdatePolicyView

type UpdatePolicyView struct {
	ID                string `json:"id"`
	TargetType        string `json:"target_type"`
	TargetID          string `json:"target_id"`
	TargetName        string `json:"target_name"`
	IsEnabled         bool   `json:"is_enabled"`
	AutoUpdate        bool   `json:"auto_update"`
	AutoBackup        bool   `json:"auto_backup"`
	IncludePrerelease bool   `json:"include_prerelease"`
	Schedule          string `json:"schedule"`
	NotifyOnUpdate    bool   `json:"notify_on_update"`
	NotifyOnFailure   bool   `json:"notify_on_failure"`
	MaxRetries        int    `json:"max_retries"`
	HealthCheckWait   int    `json:"health_check_wait"`
}

UpdatePolicyView for auto-update policy management.

type UpdateService

type UpdateService interface {
	ListAvailable(ctx context.Context) ([]UpdateView, error)
	CheckAll(ctx context.Context) error
	GetChangelog(ctx context.Context, containerID string) (string, error)
	Apply(ctx context.Context, containerID string, backup bool, targetVersion string) error
	Rollback(ctx context.Context, updateID string) error
	GetHistory(ctx context.Context) ([]UpdateHistoryView, error)
	// Policy management for auto-updates
	ListPolicies(ctx context.Context) ([]UpdatePolicyView, error)
	SetPolicy(ctx context.Context, policy UpdatePolicyView) error
	DeletePolicy(ctx context.Context, id string) error
}

type UpdateView

type UpdateView struct {
	ContainerID    string `json:"container_id"`
	ContainerName  string `json:"container_name"`
	Image          string `json:"image"`
	CurrentVersion string `json:"current_version"`
	LatestVersion  string `json:"latest_version"`
	Changelog      string `json:"changelog"`
	ChangelogURL   string `json:"changelog_url"`
	SecurityImpact string `json:"security_impact"`
	CheckedAt      string `json:"checked_at"`
}

UpdateView for available updates.

type UserContext

type UserContext struct {
	ID       string `json:"id"`
	Username string `json:"username"`
	Email    string `json:"email,omitempty"`
	Role     string `json:"role"`
	RoleID   string `json:"role_id,omitempty"` // UUID of custom role for permission checking
}

UserContext contains user information.

func GetUserFromContext

func GetUserFromContext(ctx context.Context) *UserContext

GetUserFromContext extracts user from request context.

type UserInfo

type UserInfo struct {
	ID        string
	Username  string
	Email     string
	Role      string // admin, operator, viewer
	IsActive  bool
	CreatedAt time.Time
}

UserInfo represents the authenticated user data available in request context.

func GetUserInfo

func GetUserInfo(ctx context.Context) *UserInfo

GetUserInfo retrieves UserInfo from the request context. Returns nil if no authenticated user.

type UserPreferences

type UserPreferences struct {
	// Appearance
	Theme    Theme  `json:"theme"`
	Language string `json:"language"` // ISO 639-1 (en, es, de, fr, pt, ja, zh)

	// Regional
	Timezone   string     `json:"timezone"`    // IANA timezone (Europe/Madrid, America/New_York, etc.)
	DateFormat DateFormat `json:"date_format"` // Date display format
	TimeFormat TimeFormat `json:"time_format"` // 12h/24h

	// Dashboard & UI
	ContainerView         ViewMode        `json:"container_view"` // table or grid
	DefaultLogLines       LogLineCount    `json:"default_log_lines"`
	RefreshInterval       RefreshInterval `json:"refresh_interval"` // seconds, 0=off
	ShowStoppedContainers bool            `json:"show_stopped_containers"`

	// Notifications (in-app)
	NotifyUpdates   bool `json:"notify_updates"`   // Update available alerts
	NotifySecurity  bool `json:"notify_security"`  // Security score changes
	NotifyBackups   bool `json:"notify_backups"`   // Backup completion/failure
	NotifyContainer bool `json:"notify_container"` // Container state changes

	// Editor
	EditorMode     string `json:"editor_mode"`      // monaco or nvim
	EditorFontSize int    `json:"editor_font_size"` // px
	EditorTabSize  int    `json:"editor_tab_size"`
}

UserPreferences holds all configurable preferences for a user.

func DefaultPreferences

func DefaultPreferences() UserPreferences

DefaultPreferences returns sensible defaults for new users.

func GetPreferences

func GetPreferences(ctx context.Context) UserPreferences

GetPreferences retrieves UserPreferences from the request context. Returns defaults if not present.

func PreferencesFromJSON

func PreferencesFromJSON(data string) UserPreferences

PreferencesFromJSON deserializes preferences from database storage. Returns defaults if data is empty or invalid.

func (UserPreferences) FormatDate

func (p UserPreferences) FormatDate(t time.Time) string

FormatDate formats a time.Time using only the date portion.

func (UserPreferences) FormatTime

func (p UserPreferences) FormatTime(t time.Time) string

FormatTime formats a time.Time using the user's timezone and format preferences.

func (*UserPreferences) Merge

func (p *UserPreferences) Merge(partial UserPreferences)

Merge applies non-zero values from partial onto the receiver. Used when updating preferences from a form (only submitted fields change).

func (UserPreferences) ToJSON

func (p UserPreferences) ToJSON() (string, error)

ToJSON serializes preferences for database storage.

type UserRepository

type UserRepository interface {
	GetUserByID(id string) (*UserInfo, error)
	UpdateUser(id string, username string, email string) error
	UpdatePassword(id string, currentHash string, newHash string) error
	GetPasswordHash(id string) (string, error)
	DeleteUser(id string) error
}

UserRepository defines operations for user data.

type UserService

type UserService interface {
	List(ctx context.Context, search string, role string) ([]UserView, int64, error)
	Get(ctx context.Context, id string) (*UserView, error)
	Create(ctx context.Context, username, email, password, role string) (*UserView, error)
	Update(ctx context.Context, id string, email *string, role *string, isActive *bool) error
	Delete(ctx context.Context, id string) error
	Enable(ctx context.Context, id string) error
	Disable(ctx context.Context, id string) error
	Unlock(ctx context.Context, id string) error
	ResetPassword(ctx context.Context, id string, newPassword string) error
	GetStats(ctx context.Context) (*UserStatsView, error)
	// TOTP 2FA
	SetupTOTP(ctx context.Context, userID string) (secret string, qrURI string, err error)
	VerifyAndEnableTOTP(ctx context.Context, userID string, code string) error
	ValidateTOTPCode(ctx context.Context, userID string, code string) (bool, error)
	DisableTOTP(ctx context.Context, userID string, code string) error
	HasTOTP(ctx context.Context, userID string) (bool, error)
}

type UserStatsView

type UserStatsView struct {
	Total    int64 `json:"total"`
	Active   int64 `json:"active"`
	Inactive int64 `json:"inactive"`
	LDAP     int64 `json:"ldap"`
	Local    int64 `json:"local"`
	Locked   int64 `json:"locked"`
	Admins   int64 `json:"admins"`
}

UserStatsView for user stats summary.

type UserView

type UserView struct {
	ID        string     `json:"id"`
	Username  string     `json:"username"`
	Email     string     `json:"email,omitempty"`
	Role      string     `json:"role"`
	IsActive  bool       `json:"is_active"`
	IsLDAP    bool       `json:"is_ldap"`
	LDAPDN    string     `json:"ldap_dn,omitempty"`
	IsLocked  bool       `json:"is_locked"`
	HasTOTP   bool       `json:"has_totp"`
	LastLogin *time.Time `json:"last_login_at,omitempty"`
	CreatedAt time.Time  `json:"created_at"`
}

UserView for user management pages.

type ViewMode

type ViewMode string

ViewMode represents the default container list view mode.

const (
	ViewModeTable ViewMode = "table"
	ViewModeGrid  ViewMode = "grid"
)

type VolumeFileEntry

type VolumeFileEntry struct {
	Name       string `json:"name"`
	Path       string `json:"path"`
	IsDir      bool   `json:"is_dir"`
	Size       int64  `json:"size"`
	SizeHuman  string `json:"size_human"`
	Mode       string `json:"mode"`
	ModTime    string `json:"mod_time"`
	ModTimeAgo string `json:"mod_time_ago"`
}

VolumeFileEntry represents a file/directory inside a volume for browsing.

type VolumeService

type VolumeService interface {
	List(ctx context.Context) ([]VolumeView, error)
	Get(ctx context.Context, name string) (*VolumeView, error)
	Create(ctx context.Context, name, driver string, labels map[string]string) error
	Remove(ctx context.Context, name string, force bool) error
	Prune(ctx context.Context) (int64, error)
	Browse(ctx context.Context, volumeName, path string) ([]VolumeFileEntry, error)
}

type VolumeView

type VolumeView struct {
	Name         string            `json:"name"`
	Driver       string            `json:"driver"`
	Mountpoint   string            `json:"mountpoint"`
	Scope        string            `json:"scope"`
	Created      time.Time         `json:"created"`
	CreatedHuman string            `json:"created_human"`
	InUse        bool              `json:"in_use"`
	Size         int64             `json:"size"`
	SizeHuman    string            `json:"size_human"`
	Labels       map[string]string `json:"labels"`
	UsedBy       []string          `json:"used_by"`
}

VolumeView for volume list templates.

type WSEventMessage

type WSEventMessage struct {
	Type      string            `json:"type"`
	Action    string            `json:"action"`
	Actor     string            `json:"actor"`
	ActorID   string            `json:"actor_id"`
	ActorType string            `json:"actor_type"`
	Attrs     map[string]string `json:"attrs,omitempty"`
	Timestamp string            `json:"timestamp"`
}

type WSExecMessage

type WSExecMessage struct {
	Type string `json:"type"`
	Data string `json:"data,omitempty"`
	Cols int    `json:"cols,omitempty"`
	Rows int    `json:"rows,omitempty"`
}

type WSJobMessage

type WSJobMessage struct {
	Type     string `json:"type"`
	JobID    string `json:"job_id"`
	Status   string `json:"status"`
	Progress int    `json:"progress"`
	Message  string `json:"message,omitempty"`
	Error    string `json:"error,omitempty"`
}

type WSLogMessage

type WSLogMessage struct {
	Type      string `json:"type"`
	Data      string `json:"data"`
	Stream    string `json:"stream,omitempty"`
	Timestamp string `json:"timestamp,omitempty"`
}

type WSMessage

type WSMessage struct {
	Type string          `json:"type"`
	Data json.RawMessage `json:"data,omitempty"`
}

type WSMetricsMessage

type WSMetricsMessage struct {
	Type string      `json:"type"`
	Data interface{} `json:"data"`
}

type WSStatsMessage

type WSStatsMessage struct {
	Type        string  `json:"type"`
	CPUPercent  float64 `json:"cpu_percent"`
	MemoryUsage int64   `json:"memory_usage"`
	MemoryLimit int64   `json:"memory_limit"`
	MemoryPct   float64 `json:"memory_percent"`
	NetRx       int64   `json:"net_rx"`
	NetTx       int64   `json:"net_tx"`
	BlockRead   int64   `json:"block_read"`
	BlockWrite  int64   `json:"block_write"`
	PIDs        int64   `json:"pids"`
	Timestamp   string  `json:"timestamp"`
}

type WebSessionStore

type WebSessionStore struct {
	// contains filtered or unexported fields
}

WebSessionStore adapts redis.SessionStore to the web.SessionStore interface.

func NewWebSessionStore

func NewWebSessionStore(redisStore *redisrepo.SessionStore, ttl time.Duration, cookie CookieConfig) *WebSessionStore

NewWebSessionStore creates a new web session store backed by Redis.

func (*WebSessionStore) CreateSession

func (s *WebSessionStore) CreateSession(ctx context.Context, userID, username, role, userAgent, ipAddress string) (*Session, error)

CreateSession creates a new session for a user (convenience method).

func (*WebSessionStore) Delete

func (s *WebSessionStore) Delete(r *http.Request, w http.ResponseWriter, name string) error

Delete removes a session and clears the cookie.

func (*WebSessionStore) Get

func (s *WebSessionStore) Get(r *http.Request, name string) (*Session, error)

Get retrieves a session from the request cookie.

func (*WebSessionStore) Save

func (s *WebSessionStore) Save(r *http.Request, w http.ResponseWriter, session *Session) error

Save stores a session and sets the cookie.

type WebhookRepo

type WebhookRepo interface {
	Create(ctx context.Context, wh *models.OutgoingWebhook) error
	GetByID(ctx context.Context, id uuid.UUID) (*models.OutgoingWebhook, error)
	List(ctx context.Context) ([]*models.OutgoingWebhook, error)
	ListEnabled(ctx context.Context, event string) ([]*models.OutgoingWebhook, error)
	Update(ctx context.Context, wh *models.OutgoingWebhook) error
	Delete(ctx context.Context, id uuid.UUID) error
	CreateDelivery(ctx context.Context, d *models.WebhookDelivery) error
	UpdateDelivery(ctx context.Context, d *models.WebhookDelivery) error
	GetDelivery(ctx context.Context, id uuid.UUID) (*models.WebhookDelivery, error)
	ListDeliveries(ctx context.Context, opts models.WebhookDeliveryListOptions) ([]*models.WebhookDelivery, int64, error)
	ListPendingDeliveries(ctx context.Context, limit int) ([]*models.WebhookDelivery, error)
}

WebhookRepo defines the interface for outgoing webhook persistence.

Source Files

Directories

Path Synopsis
templates
components
templ: version: v0.3.977
templ: version: v0.3.977
components/recon
templ: version: v0.3.977
templ: version: v0.3.977
layouts
templ: version: v0.3.977
templ: version: v0.3.977
pages
templ: version: v0.3.977
templ: version: v0.3.977
pages/accessaudit
templ: version: v0.3.977
templ: version: v0.3.977
pages/admin
templ: version: v0.3.977
templ: version: v0.3.977
pages/alerts
templ: version: v0.3.977
templ: version: v0.3.977
pages/backups
templ: version: v0.3.977
templ: version: v0.3.977
pages/bulkops
templ: version: v0.3.977
templ: version: v0.3.977
pages/compliance
templ: version: v0.3.977
templ: version: v0.3.977
pages/config
templ: version: v0.3.977
templ: version: v0.3.977
pages/connections
templ: version: v0.3.977
templ: version: v0.3.977
pages/containers
templ: version: v0.3.977
templ: version: v0.3.977
pages/dependencies
templ: version: v0.3.977
templ: version: v0.3.977
pages/dns
templ: version: v0.3.977
templ: version: v0.3.977
pages/dockerconfig
Package dockerconfig contains the templ pages for the Docker engine configuration editor (v26.5.1 — ported from v26.2.7 as AGPL feature).
Package dockerconfig contains the templ pages for the Docker engine configuration editor (v26.5.1 — ported from v26.2.7 as AGPL feature).
pages/editor
templ: version: v0.3.977
templ: version: v0.3.977
pages/gitea
templ: version: v0.3.977
templ: version: v0.3.977
pages/gitops
templ: version: v0.3.977
templ: version: v0.3.977
pages/healthdash
templ: version: v0.3.977
templ: version: v0.3.977
pages/hosts
templ: version: v0.3.977
templ: version: v0.3.977
pages/images
templ: version: v0.3.977
templ: version: v0.3.977
pages/jobs
templ: version: v0.3.977
templ: version: v0.3.977
pages/license
templ: version: v0.3.977
templ: version: v0.3.977
pages/lifecycle
templ: version: v0.3.977
templ: version: v0.3.977
pages/logs
templ: version: v0.3.977
templ: version: v0.3.977
pages/maintenance
templ: version: v0.3.977
templ: version: v0.3.977
pages/metadata
templ: version: v0.3.977
templ: version: v0.3.977
pages/monitoring
templ: version: v0.3.977
templ: version: v0.3.977
pages/networks
templ: version: v0.3.977
templ: version: v0.3.977
pages/overview
templ: version: v0.3.977
templ: version: v0.3.977
pages/profile
templ: version: v0.3.977
templ: version: v0.3.977
pages/proxy
templ: version: v0.3.977
templ: version: v0.3.977
pages/quotas
templ: version: v0.3.977
templ: version: v0.3.977
pages/recon
templ: version: v0.3.977
templ: version: v0.3.977
pages/registries
templ: version: v0.3.977
templ: version: v0.3.977
pages/runbooks
templ: version: v0.3.977
templ: version: v0.3.977
pages/secrets
templ: version: v0.3.977
templ: version: v0.3.977
pages/security
templ: version: v0.3.977
templ: version: v0.3.977
pages/sslobservatory
templ: version: v0.3.977
templ: version: v0.3.977
pages/stacks
templ: version: v0.3.977
templ: version: v0.3.977
pages/storage
templ: version: v0.3.977
templ: version: v0.3.977
pages/swarm
templ: version: v0.3.977
templ: version: v0.3.977
pages/teams
templ: version: v0.3.977
templ: version: v0.3.977
pages/templates
templ: version: v0.3.977
templ: version: v0.3.977
pages/tools
templ: version: v0.3.977
templ: version: v0.3.977
pages/updates
templ: version: v0.3.977
templ: version: v0.3.977
pages/users
templ: version: v0.3.977
templ: version: v0.3.977
pages/volumes
templ: version: v0.3.977
templ: version: v0.3.977
pages/vulnmgmt
templ: version: v0.3.977
templ: version: v0.3.977
pages/webhooks
templ: version: v0.3.977
templ: version: v0.3.977
partials
templ: version: v0.3.977
templ: version: v0.3.977
partials/recon
templ: version: v0.3.977
templ: version: v0.3.977
types
Package types contains shared types for templates
Package types contains shared types for templates
Package testhelpers exposes small utilities used across the web package's tests.
Package testhelpers exposes small utilities used across the web package's tests.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL