database

package
v0.0.0-...-36fb464 Latest Latest
Warning

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

Go to latest
Published: Dec 9, 2025 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DecryptAPIKey

func DecryptAPIKey(ciphertext string) (string, error)

DecryptAPIKey decrypts an API key from storage

func EncryptAPIKey

func EncryptAPIKey(plaintext string) (string, error)

EncryptAPIKey encrypts an API key for secure storage

Types

type AIListener

type AIListener struct {
	ID                 string     `db:"id" json:"id"`
	ListenerID         string     `db:"listener_id" json:"listener_id"`
	AIProviderID       string     `db:"ai_provider_id" json:"ai_provider_id"`
	OpenAPISpec        string     `db:"openapi_spec" json:"openapi_spec"`
	SystemPrompt       string     `db:"system_prompt" json:"system_prompt"`
	ConversationThread string     `db:"conversation_thread" json:"conversation_thread"`
	GeneratedResponses string     `db:"generated_responses" json:"generated_responses"`
	LastGeneratedAt    *time.Time `db:"last_generated_at" json:"last_generated_at"`
	GenerationStatus   string     `db:"generation_status" json:"generation_status"`
	GenerationError    string     `db:"generation_error" json:"generation_error"`
	CreatedAt          time.Time  `db:"created_at" json:"created_at"`
	UpdatedAt          time.Time  `db:"updated_at" json:"updated_at"`
}

AIListener represents an AI-powered listener configuration

type AIProvider

type AIProvider struct {
	ID           string     `db:"id" json:"id"`
	Name         string     `db:"name" json:"name"`
	ProviderType string     `db:"provider_type" json:"provider_type"` // "openai", "claude"
	APIKey       string     `db:"api_key" json:"-"`                   // Encrypted, never sent to client
	APIEndpoint  string     `db:"api_endpoint" json:"api_endpoint"`
	Model        string     `db:"model" json:"model"`
	MaxTokens    int        `db:"max_tokens" json:"max_tokens"`
	Temperature  float64    `db:"temperature" json:"temperature"`
	Enabled      bool       `db:"enabled" json:"enabled"`
	CreatedAt    time.Time  `db:"created_at" json:"created_at"`
	UpdatedAt    time.Time  `db:"updated_at" json:"updated_at"`
	CreatedBy    string     `db:"created_by" json:"created_by"`
	TestStatus   string     `db:"test_status" json:"test_status"` // "untested", "success", "failed"
	TestMessage  string     `db:"test_message" json:"test_message"`
	TestAt       *time.Time `db:"test_at" json:"test_at"`
}

AIProvider represents an AI service provider configuration

type AIResponseVersion

type AIResponseVersion struct {
	ID                 string    `db:"id" json:"id"`
	AIListenerID       string    `db:"ai_listener_id" json:"ai_listener_id"`
	VersionNumber      int       `db:"version_number" json:"version_number"`
	OpenAPISpec        string    `db:"openapi_spec" json:"openapi_spec"`
	SystemPrompt       string    `db:"system_prompt" json:"system_prompt"`
	UserInstructions   string    `db:"user_instructions" json:"user_instructions"`
	GeneratedResponses string    `db:"generated_responses" json:"generated_responses"`
	GenerationStatus   string    `db:"generation_status" json:"generation_status"`
	GenerationError    string    `db:"generation_error" json:"generation_error"`
	IsActive           bool      `db:"is_active" json:"is_active"`
	CreatedAt          time.Time `db:"created_at" json:"created_at"`
}

AIResponseVersion represents a version of AI-generated responses for iterative refinement

type Auth0Config

type Auth0Config struct {
	Domain       string   `json:"domain"`
	ClientID     string   `json:"client_id"`
	ClientSecret string   `json:"client_secret"`
	RedirectURL  string   `json:"redirect_url"`
	Scopes       []string `json:"scopes"`
}

Auth0Config represents Auth0-specific configuration (moved from file-based)

type Connection

type Connection struct {
	ID        string     `db:"id" json:"id"`
	TunnelID  string     `db:"tunnel_id" json:"tunnel_id"`
	ClientIP  string     `db:"client_ip" json:"client_ip"`
	StartTime time.Time  `db:"start_time" json:"start_time"`
	EndTime   *time.Time `db:"end_time" json:"end_time,omitempty"`
	BytesSent int64      `db:"bytes_sent" json:"bytes_sent"`
	BytesRecv int64      `db:"bytes_recv" json:"bytes_recv"`
	Status    string     `db:"status" json:"status"` // "active", "closed", "error"
}

Connection represents a connection through a tunnel

type Database

type Database interface {
	Connect() error
	Close() error
	Migrate() error
	GetUser(username string) (*User, error)
	CreateUser(user *User) error
	UpdateUser(user *User) error
	DeleteUser(username string) error
	ListUsers() ([]*User, error)
	CreateSession(session *Session) error
	GetSession(sessionID string) (*Session, error)
	DeleteSession(sessionID string) error
	CreateTunnel(tunnel *Tunnel) error
	UpdateTunnel(tunnel *Tunnel) error
	DeleteTunnel(tunnelID string) error
	SoftDeleteTunnel(tunnelID string) error
	GetTunnel(tunnelID string) (*Tunnel, error)
	ListTunnels() ([]*Tunnel, error)
	ListActiveTunnels() ([]*Tunnel, error)
	CreateConnection(conn *Connection) error
	UpdateConnection(conn *Connection) error
	ListConnections(tunnelID string) ([]*Connection, error)
	GetStats() (*Stats, error)
	GetUserStats(username string) (*Stats, error)
	AddTunnelBytes(tunnelID string, sent, recv int64) error
	AddTunnelConnections(tunnelID string, delta int) error
	MarkStaleTunnelsClosed(age time.Duration) error
	DeleteClosedTunnels() error
	DeleteClosedTunnelsOlderThan(cutoff time.Time) error
	DeleteClosedTunnelsByUser(username string) error
	DeleteClosedTunnelsByUserOlderThan(username string, cutoff time.Time) error
	DeleteClosedSessionsByUser(username string) error
	DeleteClosedSessionsByUserOlderThan(username string, cutoff time.Time) error
	CloseActiveTunnelsByUserPorts(username string, localPort, remotePort int) error
	// Listener management
	CreateListener(listener *Listener) error
	UpdateListener(listener *Listener) error
	DeleteListener(listenerID string) error
	GetListener(listenerID string) (*Listener, error)
	ListListeners() ([]*Listener, error)
	ListActiveListeners() ([]*Listener, error)
	AddListenerBytes(listenerID string, sent, recv int64) error
	AddListenerConnections(listenerID string, delta int) error
	MarkStaleListenersClosed(age time.Duration) error

	// Multicast tunnels management
	CreateMulticastTunnel(mt *MulticastTunnel) error
	UpdateMulticastTunnel(mt *MulticastTunnel) error
	DeleteMulticastTunnel(id string) error
	GetMulticastTunnel(id string) (*MulticastTunnel, error)
	ListMulticastTunnels() ([]*MulticastTunnel, error)
	ListPublicMulticastTunnels() ([]*MulticastTunnel, error)
	AddMulticastBytes(id string, sent, recv int64) error
	AddMulticastConnections(id string, delta int) error

	// User token management
	CreateUserToken(token *UserToken) error
	GetUserToken(id string) (*UserToken, error)
	ListUserTokens(username string) ([]*UserToken, error)
	DeleteUserToken(id string) error
	UpdateUserTokenLastUsed(id string, lastUsed time.Time) error
	ValidateUserToken(token string) (*UserToken, error)

	// Port reservation management
	CreatePortReservation(reservation *PortReservation) error
	GetPortReservation(id string) (*PortReservation, error)
	ListPortReservations() ([]*PortReservation, error)
	ListUserPortReservations(username string) ([]*PortReservation, error)
	DeletePortReservation(id string) error
	GetReservedPortsThreshold() (int, error)
	SetReservedPortsThreshold(threshold int) error
	IsPortReserved(port int, username string) (bool, error)

	// User limits management
	CreateUserLimits(limits *UserLimits) error
	GetUserLimits(username string) (*UserLimits, error)
	UpdateUserLimits(limits *UserLimits) error
	DeleteUserLimits(username string) error
	GetEffectiveUserLimits(username string) (maxTunnels, maxListeners int, err error)
	CheckUserTunnelLimit(username string) (bool, error)
	CheckUserListenerLimit(username string) (bool, error)
	GetSettingInt(key string, defaultValue int) (int, error)
	GetSettingBool(key string, defaultValue bool) (bool, error)
	SetSettingString(key string, value string) error

	// Security webhooks
	ListSecurityWebhooks(onlyEnabled bool) ([]SecurityWebhook, error)
	GetSecurityWebhook(id int) (*SecurityWebhook, error)
	CreateSecurityWebhook(w *SecurityWebhook) error
	UpdateSecurityWebhook(w *SecurityWebhook) error
	DeleteSecurityWebhook(id int) error

	// Security events
	InsertSecurityEvent(ev *SecurityEventLog) error
	ListSecurityEvents(limit int) ([]SecurityEventLog, error)

	// SSO configuration management
	CreateSSOConfig(config *SSOConfig) error
	GetSSOConfig(provider SSOProvider) (*SSOConfig, error)
	ListSSOConfigs() ([]*SSOConfig, error)
	DeleteSSOConfig(provider SSOProvider) error

	// User authentication sources
	CreateUserAuthSource(source *UserAuthSource) error
	GetUserAuthSource(username string) (*UserAuthSource, error)
	UpdateUserAuthSource(source *UserAuthSource) error
	ListUserAuthSources() ([]*UserAuthSource, error)
	ListUserAuthSourcesByUsername(username string) ([]*UserAuthSource, error)
	DeleteUserAuthSource(id int) error

	// User preferences management
	GetUserPreference(username, key string) (*UserPreference, error)
	SetUserPreference(username, key, value string) error
	DeleteUserPreference(username, key string) error
	ListUserPreferences(username string) ([]*UserPreference, error)

	// AI provider management
	CreateAIProvider(provider *AIProvider) error
	GetAIProvider(id string) (*AIProvider, error)
	GetAIProviders() ([]*AIProvider, error)
	UpdateAIProvider(provider *AIProvider) error
	DeleteAIProvider(id string) error

	// AI listener management
	CreateAIListener(listener *AIListener) error
	GetAIListener(id string) (*AIListener, error)
	GetAIListenerByListenerID(listenerID string) (*AIListener, error)
	UpdateAIListener(listener *AIListener) error
	DeleteAIListener(id string) error

	// AI Response Version methods
	CreateAIResponseVersion(version *AIResponseVersion) error
	GetAIResponseVersion(id string) (*AIResponseVersion, error)
	GetActiveAIResponseVersion(aiListenerID string) (*AIResponseVersion, error)
	ListAIResponseVersions(aiListenerID string) ([]*AIResponseVersion, error)
	UpdateAIResponseVersion(version *AIResponseVersion) error
	SetActiveAIResponseVersion(aiListenerID, versionID string) error
	DeleteAIResponseVersion(id string) error
}

Database interface defines database operations

func NewDatabase

func NewDatabase(config *DatabaseConfig) Database

NewDatabase creates a new database instance

type DatabaseConfig

type DatabaseConfig struct {
	Type     string // "sqlite" or "postgres"
	Host     string
	Port     int
	Database string
	Username string
	Password string
	SSLMode  string
	FilePath string // for SQLite
}

DatabaseConfig holds database configuration

type Listener

type Listener struct {
	ID          string    `db:"id" json:"id"`
	Name        string    `db:"name" json:"name"` // human-friendly name
	Username    string    `db:"username" json:"username"`
	Port        int       `db:"port" json:"port"`
	Mode        string    `db:"mode" json:"mode"`                       // "sink" or "proxy"
	TargetURL   string    `db:"target_url" json:"target_url,omitempty"` // for proxy mode
	Response    string    `db:"response" json:"response,omitempty"`     // for sink mode
	UseTLS      bool      `db:"use_tls" json:"use_tls"`                 // whether to use TLS
	Status      string    `db:"status" json:"status"`                   // "open", "closed", "error"
	CreatedAt   time.Time `db:"created_at" json:"created_at"`
	UpdatedAt   time.Time `db:"updated_at" json:"updated_at"`
	BytesSent   int64     `db:"bytes_sent" json:"bytes_sent"`
	BytesRecv   int64     `db:"bytes_recv" json:"bytes_recv"`
	Connections int       `db:"connections" json:"connections"`
}

Listener represents a managed HTTP listener/proxy

type MulticastTunnel

type MulticastTunnel struct {
	ID          string    `db:"id" json:"id"`
	Name        string    `db:"name" json:"name"`
	Owner       string    `db:"owner_username" json:"owner_username"`
	Port        int       `db:"port" json:"port"`
	Mode        string    `db:"mode" json:"mode"` // "webhook" | "bidirectional" (phase 2)
	Enabled     bool      `db:"enabled" json:"enabled"`
	Visible     bool      `db:"visible" json:"visible"`
	UseTLS      bool      `db:"use_tls" json:"use_tls"`
	Status      string    `db:"status" json:"status"` // "open", "closed", "error"
	CreatedAt   time.Time `db:"created_at" json:"created_at"`
	UpdatedAt   time.Time `db:"updated_at" json:"updated_at"`
	BytesSent   int64     `db:"bytes_sent" json:"bytes_sent"`
	BytesRecv   int64     `db:"bytes_recv" json:"bytes_recv"`
	Connections int       `db:"connections" json:"connections"`
}

MulticastTunnel represents a persistent TLS webhook/broadcast endpoint

type PortReservation

type PortReservation struct {
	ID          string    `db:"id" json:"id"`
	Username    string    `db:"username" json:"username"`
	StartPort   int       `db:"start_port" json:"start_port"`
	EndPort     int       `db:"end_port" json:"end_port"`
	Description string    `db:"description" json:"description"`
	CreatedAt   time.Time `db:"created_at" json:"created_at"`
	UpdatedAt   time.Time `db:"updated_at" json:"updated_at"`
}

PortReservation represents a port range reservation for a user

type SCIMConfig

type SCIMConfig struct {
	BaseURL      string            `json:"base_url"`
	ClientID     string            `json:"client_id"`
	ClientSecret string            `json:"client_secret"`
	TenantID     string            `json:"tenant_id,omitempty"`
	AuthURL      string            `json:"auth_url"`
	TokenURL     string            `json:"token_url"`
	UserInfoURL  string            `json:"user_info_url"`
	RedirectURL  string            `json:"redirect_url"`
	Scopes       []string          `json:"scopes"`
	Attributes   map[string]string `json:"attributes"` // Maps SCIM attributes to local fields
}

SCIMConfig represents SCIM-specific configuration

type SQLDatabase

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

SQLDatabase implements the Database interface

func (*SQLDatabase) AddListenerBytes

func (d *SQLDatabase) AddListenerBytes(listenerID string, sent, recv int64) error

Increment helpers for listeners

func (*SQLDatabase) AddListenerConnections

func (d *SQLDatabase) AddListenerConnections(listenerID string, delta int) error

func (*SQLDatabase) AddMulticastBytes

func (d *SQLDatabase) AddMulticastBytes(id string, sent, recv int64) error

AddMulticastBytes increments byte counters

func (*SQLDatabase) AddMulticastConnections

func (d *SQLDatabase) AddMulticastConnections(id string, delta int) error

AddMulticastConnections increments active connection count

func (*SQLDatabase) AddTunnelBytes

func (d *SQLDatabase) AddTunnelBytes(tunnelID string, sent, recv int64) error

Increment helpers for bytes and connections

func (*SQLDatabase) AddTunnelConnections

func (d *SQLDatabase) AddTunnelConnections(tunnelID string, delta int) error

func (*SQLDatabase) CheckUserListenerLimit

func (d *SQLDatabase) CheckUserListenerLimit(username string) (bool, error)

CheckUserListenerLimit checks if user can create another listener

func (*SQLDatabase) CheckUserTunnelLimit

func (d *SQLDatabase) CheckUserTunnelLimit(username string) (bool, error)

CheckUserTunnelLimit checks if user can create another tunnel

func (*SQLDatabase) CleanupExpiredSessions

func (d *SQLDatabase) CleanupExpiredSessions() error

CleanupExpiredSessions removes expired sessions

func (*SQLDatabase) Close

func (d *SQLDatabase) Close() error

Close closes the database connection

func (*SQLDatabase) CloseActiveTunnelsByUserPorts

func (d *SQLDatabase) CloseActiveTunnelsByUserPorts(username string, localPort, remotePort int) error

CloseActiveTunnelsByUserPorts marks any active per-remote rows for the same user/local/remote ports as closed

func (*SQLDatabase) Connect

func (d *SQLDatabase) Connect() error

Connect establishes database connection

func (*SQLDatabase) CreateAIListener

func (d *SQLDatabase) CreateAIListener(listener *AIListener) error

CreateAIListener creates a new AI listener configuration

func (*SQLDatabase) CreateAIProvider

func (d *SQLDatabase) CreateAIProvider(provider *AIProvider) error

CreateAIProvider creates a new AI provider configuration

func (*SQLDatabase) CreateAIResponseVersion

func (d *SQLDatabase) CreateAIResponseVersion(version *AIResponseVersion) error

CreateAIResponseVersion creates a new AI response version

func (*SQLDatabase) CreateConnection

func (d *SQLDatabase) CreateConnection(conn *Connection) error

CreateConnection creates a new connection

func (*SQLDatabase) CreateListener

func (d *SQLDatabase) CreateListener(listener *Listener) error

CreateListener creates a new listener in the database

func (*SQLDatabase) CreateMulticastTunnel

func (d *SQLDatabase) CreateMulticastTunnel(mt *MulticastTunnel) error

CreateMulticastTunnel inserts a new multicast tunnel

func (*SQLDatabase) CreatePortReservation

func (d *SQLDatabase) CreatePortReservation(reservation *PortReservation) error

CreatePortReservation creates a new port reservation

func (*SQLDatabase) CreateSSOConfig

func (d *SQLDatabase) CreateSSOConfig(config *SSOConfig) error

CreateSSOConfig creates or updates SSO configuration

func (*SQLDatabase) CreateSecurityWebhook

func (d *SQLDatabase) CreateSecurityWebhook(w *SecurityWebhook) error

CreateSecurityWebhook inserts a new webhook

func (*SQLDatabase) CreateSession

func (d *SQLDatabase) CreateSession(session *Session) error

CreateSession creates a new user session

func (*SQLDatabase) CreateTunnel

func (d *SQLDatabase) CreateTunnel(tunnel *Tunnel) error

CreateTunnel creates a new tunnel

func (*SQLDatabase) CreateUser

func (d *SQLDatabase) CreateUser(user *User) error

CreateUser creates a new user

func (*SQLDatabase) CreateUserAuthSource

func (d *SQLDatabase) CreateUserAuthSource(source *UserAuthSource) error

CreateUserAuthSource creates a user authentication source record

func (*SQLDatabase) CreateUserLimits

func (d *SQLDatabase) CreateUserLimits(limits *UserLimits) error

CreateUserLimits creates or updates user limits

func (*SQLDatabase) CreateUserToken

func (d *SQLDatabase) CreateUserToken(token *UserToken) error

CreateUserToken creates a new user token

func (*SQLDatabase) DeleteAIListener

func (d *SQLDatabase) DeleteAIListener(id string) error

DeleteAIListener deletes an AI listener

func (*SQLDatabase) DeleteAIProvider

func (d *SQLDatabase) DeleteAIProvider(id string) error

DeleteAIProvider deletes an AI provider

func (*SQLDatabase) DeleteAIResponseVersion

func (d *SQLDatabase) DeleteAIResponseVersion(id string) error

DeleteAIResponseVersion deletes an AI response version

func (*SQLDatabase) DeleteClosedSessionsByUser

func (d *SQLDatabase) DeleteClosedSessionsByUser(username string) error

DeleteClosedSessionsByUser deletes closed/inactive base session rows for a user

func (*SQLDatabase) DeleteClosedSessionsByUserOlderThan

func (d *SQLDatabase) DeleteClosedSessionsByUserOlderThan(username string, cutoff time.Time) error

DeleteClosedSessionsByUserOlderThan deletes user's closed/inactive session rows older than cutoff

func (*SQLDatabase) DeleteClosedTunnels

func (d *SQLDatabase) DeleteClosedTunnels() error

DeleteClosedTunnels deletes all tunnels with status 'closed' or 'inactive'

func (*SQLDatabase) DeleteClosedTunnelsByUser

func (d *SQLDatabase) DeleteClosedTunnelsByUser(username string) error

DeleteClosedTunnelsByUser deletes closed/inactive tunnels for a user

func (*SQLDatabase) DeleteClosedTunnelsByUserOlderThan

func (d *SQLDatabase) DeleteClosedTunnelsByUserOlderThan(username string, cutoff time.Time) error

DeleteClosedTunnelsByUserOlderThan deletes user's closed/inactive tunnels older than cutoff

func (*SQLDatabase) DeleteClosedTunnelsOlderThan

func (d *SQLDatabase) DeleteClosedTunnelsOlderThan(cutoff time.Time) error

DeleteClosedTunnelsOlderThan deletes closed/inactive tunnels older than cutoff

func (*SQLDatabase) DeleteListener

func (d *SQLDatabase) DeleteListener(listenerID string) error

DeleteListener removes a listener from the database

func (*SQLDatabase) DeleteMulticastTunnel

func (d *SQLDatabase) DeleteMulticastTunnel(id string) error

DeleteMulticastTunnel removes a multicast tunnel by ID

func (*SQLDatabase) DeletePortReservation

func (d *SQLDatabase) DeletePortReservation(id string) error

DeletePortReservation deletes a port reservation by ID

func (*SQLDatabase) DeleteSSOConfig

func (d *SQLDatabase) DeleteSSOConfig(provider SSOProvider) error

DeleteSSOConfig deletes SSO configuration for a provider

func (*SQLDatabase) DeleteSecurityWebhook

func (d *SQLDatabase) DeleteSecurityWebhook(id int) error

DeleteSecurityWebhook deletes a webhook by id

func (*SQLDatabase) DeleteSession

func (d *SQLDatabase) DeleteSession(sessionID string) error

DeleteSession deletes a session by ID

func (*SQLDatabase) DeleteTunnel

func (d *SQLDatabase) DeleteTunnel(tunnelID string) error

DeleteTunnel deletes a tunnel by ID

func (*SQLDatabase) DeleteUser

func (d *SQLDatabase) DeleteUser(username string) error

DeleteUser deletes a user by username

func (*SQLDatabase) DeleteUserAuthSource

func (d *SQLDatabase) DeleteUserAuthSource(id int) error

DeleteUserAuthSource deletes a user authentication source by ID

func (*SQLDatabase) DeleteUserLimits

func (d *SQLDatabase) DeleteUserLimits(username string) error

DeleteUserLimits removes user limits (reverts to defaults)

func (*SQLDatabase) DeleteUserPreference

func (d *SQLDatabase) DeleteUserPreference(username, key string) error

DeleteUserPreference deletes a user preference

func (*SQLDatabase) DeleteUserToken

func (d *SQLDatabase) DeleteUserToken(id string) error

DeleteUserToken deletes a user token

func (*SQLDatabase) GetAIListener

func (d *SQLDatabase) GetAIListener(id string) (*AIListener, error)

GetAIListener retrieves an AI listener by ID

func (*SQLDatabase) GetAIListenerByListenerID

func (d *SQLDatabase) GetAIListenerByListenerID(listenerID string) (*AIListener, error)

GetAIListenerByListenerID retrieves an AI listener by listener ID

func (*SQLDatabase) GetAIProvider

func (d *SQLDatabase) GetAIProvider(id string) (*AIProvider, error)

GetAIProvider retrieves an AI provider by ID

func (*SQLDatabase) GetAIProviders

func (d *SQLDatabase) GetAIProviders() ([]*AIProvider, error)

GetAIProviders retrieves all AI providers

func (*SQLDatabase) GetAIResponseVersion

func (d *SQLDatabase) GetAIResponseVersion(id string) (*AIResponseVersion, error)

GetAIResponseVersion gets an AI response version by ID

func (*SQLDatabase) GetActiveAIResponseVersion

func (d *SQLDatabase) GetActiveAIResponseVersion(aiListenerID string) (*AIResponseVersion, error)

GetActiveAIResponseVersion gets the active AI response version for a listener

func (*SQLDatabase) GetEffectiveUserLimits

func (d *SQLDatabase) GetEffectiveUserLimits(username string) (maxTunnels, maxListeners int, err error)

GetEffectiveUserLimits gets the effective limits for a user (custom or default)

func (*SQLDatabase) GetListener

func (d *SQLDatabase) GetListener(listenerID string) (*Listener, error)

GetListener retrieves a listener by ID

func (*SQLDatabase) GetMulticastTunnel

func (d *SQLDatabase) GetMulticastTunnel(id string) (*MulticastTunnel, error)

GetMulticastTunnel retrieves a multicast tunnel by ID

func (*SQLDatabase) GetPortReservation

func (d *SQLDatabase) GetPortReservation(id string) (*PortReservation, error)

GetPortReservation retrieves a port reservation by ID

func (*SQLDatabase) GetReservedPortsThreshold

func (d *SQLDatabase) GetReservedPortsThreshold() (int, error)

GetReservedPortsThreshold gets the reserved ports threshold from settings

func (*SQLDatabase) GetSSOConfig

func (d *SQLDatabase) GetSSOConfig(provider SSOProvider) (*SSOConfig, error)

GetSSOConfig retrieves SSO configuration for a provider

func (*SQLDatabase) GetSecurityWebhook

func (d *SQLDatabase) GetSecurityWebhook(id int) (*SecurityWebhook, error)

GetSecurityWebhook returns a single webhook by id

func (*SQLDatabase) GetSession

func (d *SQLDatabase) GetSession(sessionID string) (*Session, error)

GetSession retrieves a session by ID

func (*SQLDatabase) GetSettingBool

func (d *SQLDatabase) GetSettingBool(key string, defaultValue bool) (bool, error)

GetSettingBool is a helper to get boolean settings with default

func (*SQLDatabase) GetSettingInt

func (d *SQLDatabase) GetSettingInt(key string, defaultValue int) (int, error)

GetSettingInt is a helper to get integer settings with default

func (*SQLDatabase) GetStats

func (d *SQLDatabase) GetStats() (*Stats, error)

GetStats retrieves system statistics

func (*SQLDatabase) GetTunnel

func (d *SQLDatabase) GetTunnel(tunnelID string) (*Tunnel, error)

GetTunnel retrieves a tunnel by ID

func (*SQLDatabase) GetUser

func (d *SQLDatabase) GetUser(username string) (*User, error)

GetUser retrieves a user by username

func (*SQLDatabase) GetUserAuthSource

func (d *SQLDatabase) GetUserAuthSource(username string) (*UserAuthSource, error)

GetUserAuthSource retrieves user authentication source

func (*SQLDatabase) GetUserLimits

func (d *SQLDatabase) GetUserLimits(username string) (*UserLimits, error)

GetUserLimits retrieves limits for a specific user

func (*SQLDatabase) GetUserPreference

func (d *SQLDatabase) GetUserPreference(username, key string) (*UserPreference, error)

GetUserPreference retrieves a user preference by username and key

func (*SQLDatabase) GetUserStats

func (d *SQLDatabase) GetUserStats(username string) (*Stats, error)

GetUserStats retrieves statistics for a specific user

func (*SQLDatabase) GetUserToken

func (d *SQLDatabase) GetUserToken(id string) (*UserToken, error)

GetUserToken retrieves a user token by ID

func (*SQLDatabase) InsertSecurityEvent

func (d *SQLDatabase) InsertSecurityEvent(ev *SecurityEventLog) error

InsertSecurityEvent writes a new security event to the database

func (*SQLDatabase) IsPortReserved

func (d *SQLDatabase) IsPortReserved(port int, username string) (bool, error)

IsPortReserved checks if a port is reserved and if the user can use it

func (*SQLDatabase) ListAIResponseVersions

func (d *SQLDatabase) ListAIResponseVersions(aiListenerID string) ([]*AIResponseVersion, error)

ListAIResponseVersions lists all versions for an AI listener

func (*SQLDatabase) ListActiveListeners

func (d *SQLDatabase) ListActiveListeners() ([]*Listener, error)

ListActiveListeners retrieves all active listeners

func (*SQLDatabase) ListActiveTunnels

func (d *SQLDatabase) ListActiveTunnels() ([]*Tunnel, error)

ListActiveTunnels retrieves all active tunnels

func (*SQLDatabase) ListConnections

func (d *SQLDatabase) ListConnections(tunnelID string) ([]*Connection, error)

ListConnections retrieves connections for a tunnel

func (*SQLDatabase) ListListeners

func (d *SQLDatabase) ListListeners() ([]*Listener, error)

ListListeners retrieves all listeners

func (*SQLDatabase) ListMulticastTunnels

func (d *SQLDatabase) ListMulticastTunnels() ([]*MulticastTunnel, error)

ListMulticastTunnels lists all multicast tunnels

func (*SQLDatabase) ListPortReservations

func (d *SQLDatabase) ListPortReservations() ([]*PortReservation, error)

ListPortReservations retrieves all port reservations

func (*SQLDatabase) ListPublicMulticastTunnels

func (d *SQLDatabase) ListPublicMulticastTunnels() ([]*MulticastTunnel, error)

ListPublicMulticastTunnels lists visible multicast tunnels

func (*SQLDatabase) ListSSOConfigs

func (d *SQLDatabase) ListSSOConfigs() ([]*SSOConfig, error)

ListSSOConfigs returns all SSO configurations

func (*SQLDatabase) ListSecurityEvents

func (d *SQLDatabase) ListSecurityEvents(limit int) ([]SecurityEventLog, error)

ListSecurityEvents returns the most recent events up to limit

func (*SQLDatabase) ListSecurityWebhooks

func (d *SQLDatabase) ListSecurityWebhooks(onlyEnabled bool) ([]SecurityWebhook, error)

ListSecurityWebhooks returns all webhooks (optionally only enabled)

func (*SQLDatabase) ListTunnels

func (d *SQLDatabase) ListTunnels() ([]*Tunnel, error)

ListTunnels retrieves all tunnels

func (*SQLDatabase) ListUserAuthSources

func (d *SQLDatabase) ListUserAuthSources() ([]*UserAuthSource, error)

ListUserAuthSources returns all user authentication sources

func (*SQLDatabase) ListUserAuthSourcesByUsername

func (d *SQLDatabase) ListUserAuthSourcesByUsername(username string) ([]*UserAuthSource, error)

ListUserAuthSourcesByUsername returns authentication sources for a specific user

func (*SQLDatabase) ListUserPortReservations

func (d *SQLDatabase) ListUserPortReservations(username string) ([]*PortReservation, error)

ListUserPortReservations retrieves port reservations for a specific user

func (*SQLDatabase) ListUserPreferences

func (d *SQLDatabase) ListUserPreferences(username string) ([]*UserPreference, error)

ListUserPreferences retrieves all preferences for a user

func (*SQLDatabase) ListUserTokens

func (d *SQLDatabase) ListUserTokens(username string) ([]*UserToken, error)

ListUserTokens retrieves all tokens for a user

func (*SQLDatabase) ListUsers

func (d *SQLDatabase) ListUsers() ([]*User, error)

ListUsers retrieves all users

func (*SQLDatabase) MarkStaleListenersClosed

func (d *SQLDatabase) MarkStaleListenersClosed(age time.Duration) error

MarkStaleListenersClosed marks 'open' listeners as 'closed' if UpdatedAt older than threshold

func (*SQLDatabase) MarkStaleTunnelsClosed

func (d *SQLDatabase) MarkStaleTunnelsClosed(age time.Duration) error

MarkStaleTunnelsClosed marks 'active' tunnels as 'closed' if UpdatedAt older than threshold.

func (*SQLDatabase) Migrate

func (d *SQLDatabase) Migrate() error

Migrate creates database tables

func (*SQLDatabase) SetActiveAIResponseVersion

func (d *SQLDatabase) SetActiveAIResponseVersion(aiListenerID, versionID string) error

SetActiveAIResponseVersion sets a version as active and deactivates others

func (*SQLDatabase) SetReservedPortsThreshold

func (d *SQLDatabase) SetReservedPortsThreshold(threshold int) error

SetReservedPortsThreshold sets the reserved ports threshold in settings

func (*SQLDatabase) SetSettingString

func (d *SQLDatabase) SetSettingString(key string, value string) error

SetSettingString upserts a string setting value

func (*SQLDatabase) SetUserPreference

func (d *SQLDatabase) SetUserPreference(username, key, value string) error

SetUserPreference creates or updates a user preference

func (*SQLDatabase) SoftDeleteTunnel

func (d *SQLDatabase) SoftDeleteTunnel(tunnelID string) error

SoftDeleteTunnel marks a tunnel as deleted without removing data

func (*SQLDatabase) UpdateAIListener

func (d *SQLDatabase) UpdateAIListener(listener *AIListener) error

UpdateAIListener updates an existing AI listener

func (*SQLDatabase) UpdateAIProvider

func (d *SQLDatabase) UpdateAIProvider(provider *AIProvider) error

UpdateAIProvider updates an existing AI provider

func (*SQLDatabase) UpdateAIResponseVersion

func (d *SQLDatabase) UpdateAIResponseVersion(version *AIResponseVersion) error

UpdateAIResponseVersion updates an AI response version

func (*SQLDatabase) UpdateConnection

func (d *SQLDatabase) UpdateConnection(conn *Connection) error

UpdateConnection updates an existing connection

func (*SQLDatabase) UpdateListener

func (d *SQLDatabase) UpdateListener(listener *Listener) error

UpdateListener updates an existing listener in the database

func (*SQLDatabase) UpdateMulticastTunnel

func (d *SQLDatabase) UpdateMulticastTunnel(mt *MulticastTunnel) error

UpdateMulticastTunnel updates fields on a multicast tunnel

func (*SQLDatabase) UpdateSecurityWebhook

func (d *SQLDatabase) UpdateSecurityWebhook(w *SecurityWebhook) error

UpdateSecurityWebhook updates an existing webhook

func (*SQLDatabase) UpdateTunnel

func (d *SQLDatabase) UpdateTunnel(tunnel *Tunnel) error

UpdateTunnel updates an existing tunnel

func (*SQLDatabase) UpdateUser

func (d *SQLDatabase) UpdateUser(user *User) error

UpdateUser updates an existing user

func (*SQLDatabase) UpdateUserAuthSource

func (d *SQLDatabase) UpdateUserAuthSource(source *UserAuthSource) error

UpdateUserAuthSource updates user authentication source

func (*SQLDatabase) UpdateUserLimits

func (d *SQLDatabase) UpdateUserLimits(limits *UserLimits) error

UpdateUserLimits updates existing user limits

func (*SQLDatabase) UpdateUserTokenLastUsed

func (d *SQLDatabase) UpdateUserTokenLastUsed(id string, lastUsed time.Time) error

UpdateUserTokenLastUsed updates the last used timestamp for a token

func (*SQLDatabase) ValidateUserToken

func (d *SQLDatabase) ValidateUserToken(token string) (*UserToken, error)

ValidateUserToken validates a token and returns the associated user token

type SSOConfig

type SSOConfig struct {
	ID         int         `db:"id" json:"id"`
	Provider   SSOProvider `db:"provider" json:"provider"`
	Enabled    bool        `db:"enabled" json:"enabled"`
	ConfigJSON string      `db:"config_json" json:"-"`
	Config     interface{} `json:"config"`
	CreatedAt  time.Time   `db:"created_at" json:"created_at"`
	UpdatedAt  time.Time   `db:"updated_at" json:"updated_at"`
}

SSOConfig represents SSO configuration stored in database

type SSOProvider

type SSOProvider string

SSOProvider represents different SSO providers

const (
	SSOProviderSCIM  SSOProvider = "scim"
	SSOProviderAuth0 SSOProvider = "auth0"
	SSOProviderOkta  SSOProvider = "okta"
	SSOProviderAzure SSOProvider = "azure"
)

type SecurityEventLog

type SecurityEventLog struct {
	ID        int       `db:"id" json:"id"`
	Type      string    `db:"type" json:"type"`
	Severity  string    `db:"severity" json:"severity"`
	Username  string    `db:"username" json:"username"`
	IP        string    `db:"ip" json:"ip"`
	Message   string    `db:"message" json:"message"`
	At        time.Time `db:"at" json:"at"`
	CreatedAt time.Time `db:"created_at" json:"created_at"`
}

SecurityEventLog is a persisted security event row

type SecurityWebhook

type SecurityWebhook struct {
	ID          int       `db:"id" json:"id"`
	URL         string    `db:"url" json:"url"`
	Type        string    `db:"type" json:"type"` // "slack" or "json"
	Enabled     bool      `db:"enabled" json:"enabled"`
	Description string    `db:"description" json:"description"`
	CreatedAt   time.Time `db:"created_at" json:"created_at"`
	UpdatedAt   time.Time `db:"updated_at" json:"updated_at"`
}

SecurityWebhook represents a webhook for security events

type Session

type Session struct {
	ID        string    `db:"id" json:"id"`
	Username  string    `db:"username" json:"username"`
	CreatedAt time.Time `db:"created_at" json:"created_at"`
	ExpiresAt time.Time `db:"expires_at" json:"expires_at"`
	IPAddress string    `db:"ip_address" json:"ip_address"`
}

Session represents an active user session

type Stats

type Stats struct {
	TotalTunnels     int   `json:"total_tunnels"`
	ActiveTunnels    int   `json:"active_tunnels"`
	TotalListeners   int   `json:"total_listeners"`
	ActiveListeners  int   `json:"active_listeners"`
	TotalUsers       int   `json:"total_users"`
	ActiveSessions   int   `json:"active_sessions"`
	TotalConnections int   `json:"total_connections"`
	TotalBytesSent   int64 `json:"total_bytes_sent"`
	TotalBytesRecv   int64 `json:"total_bytes_recv"`
	UptimeSeconds    int64 `json:"uptime_seconds"`
}

Stats represents system statistics

type Tunnel

type Tunnel struct {
	ID          string    `db:"id" json:"id"`
	Username    string    `db:"username" json:"username"`
	LocalPort   int       `db:"local_port" json:"local_port"`
	LocalHost   string    `db:"local_host" json:"local_host"`
	RemotePort  int       `db:"remote_port" json:"remote_port"`
	RemoteHost  string    `db:"remote_host" json:"remote_host"`
	Status      string    `db:"status" json:"status"` // "active", "inactive", "error"
	CreatedAt   time.Time `db:"created_at" json:"created_at"`
	UpdatedAt   time.Time `db:"updated_at" json:"updated_at"`
	BytesSent   int64     `db:"bytes_sent" json:"bytes_sent"`
	BytesRecv   int64     `db:"bytes_recv" json:"bytes_recv"`
	Connections int       `db:"connections" json:"connections"`
}

Tunnel represents an active tunnel

type User

type User struct {
	ID          int       `db:"id" json:"id"`
	Username    string    `db:"username" json:"username"`
	Password    string    `db:"password" json:"password,omitempty"`
	Email       string    `db:"email" json:"email,omitempty"`
	DisplayName string    `db:"display_name" json:"display_name,omitempty"`
	IsAdmin     bool      `db:"is_admin" json:"is_admin"`
	Addresses   string    `db:"addresses" json:"addresses"` // JSON array of regex patterns
	CreatedAt   time.Time `db:"created_at" json:"created_at"`
	UpdatedAt   time.Time `db:"updated_at" json:"updated_at"`
}

User represents a user in the database

func (*User) GetAddressRegexps

func (u *User) GetAddressRegexps() ([]*regexp.Regexp, error)

GetAddressRegexps converts addresses string to regexp slice

func (*User) HasAccess

func (u *User) HasAccess(addr string) bool

HasAccess checks if user has access to an address

type UserAuthSource

type UserAuthSource struct {
	ID           int       `db:"id" json:"id"`
	Username     string    `db:"username" json:"username"`
	AuthSource   string    `db:"auth_source" json:"auth_source"`
	ExternalID   *string   `db:"external_id" json:"external_id,omitempty"`
	ProviderData *string   `db:"provider_data" json:"-"`
	CreatedAt    time.Time `db:"created_at" json:"created_at"`
	UpdatedAt    time.Time `db:"updated_at" json:"updated_at"`
}

UserAuthSource represents how a user was authenticated

type UserLimits

type UserLimits struct {
	Username     string    `db:"username" json:"username"`
	MaxTunnels   *int      `db:"max_tunnels" json:"max_tunnels"`
	MaxListeners *int      `db:"max_listeners" json:"max_listeners"`
	CreatedAt    time.Time `db:"created_at" json:"created_at"`
	UpdatedAt    time.Time `db:"updated_at" json:"updated_at"`
}

UserLimits represents user-specific limits

type UserPreference

type UserPreference struct {
	ID              int       `db:"id" json:"id"`
	Username        string    `db:"username" json:"username"`
	PreferenceKey   string    `db:"preference_key" json:"preference_key"`
	PreferenceValue string    `db:"preference_value" json:"preference_value"`
	CreatedAt       time.Time `db:"created_at" json:"created_at"`
	UpdatedAt       time.Time `db:"updated_at" json:"updated_at"`
}

UserPreference represents a user preference in the database

type UserToken

type UserToken struct {
	ID        string     `db:"id" json:"id"`
	Username  string     `db:"username" json:"username"`
	Name      string     `db:"name" json:"name"`
	Token     string     `db:"token" json:"-"` // Don't expose token in JSON
	CreatedAt time.Time  `db:"created_at" json:"created_at"`
	LastUsed  *time.Time `db:"last_used" json:"last_used,omitempty"`
	ExpiresAt *time.Time `db:"expires_at" json:"expires_at,omitempty"`
}

UserToken represents an API token for a user

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL