Documentation
¶
Index ¶
- func DecryptAPIKey(ciphertext string) (string, error)
- func EncryptAPIKey(plaintext string) (string, error)
- type AIListener
- type AIProvider
- type AIResponseVersion
- type Auth0Config
- type Connection
- type Database
- type DatabaseConfig
- type Listener
- type MulticastTunnel
- type PortReservation
- type SCIMConfig
- type SQLDatabase
- func (d *SQLDatabase) AddListenerBytes(listenerID string, sent, recv int64) error
- func (d *SQLDatabase) AddListenerConnections(listenerID string, delta int) error
- func (d *SQLDatabase) AddMulticastBytes(id string, sent, recv int64) error
- func (d *SQLDatabase) AddMulticastConnections(id string, delta int) error
- func (d *SQLDatabase) AddTunnelBytes(tunnelID string, sent, recv int64) error
- func (d *SQLDatabase) AddTunnelConnections(tunnelID string, delta int) error
- func (d *SQLDatabase) CheckUserListenerLimit(username string) (bool, error)
- func (d *SQLDatabase) CheckUserTunnelLimit(username string) (bool, error)
- func (d *SQLDatabase) CleanupExpiredSessions() error
- func (d *SQLDatabase) Close() error
- func (d *SQLDatabase) CloseActiveTunnelsByUserPorts(username string, localPort, remotePort int) error
- func (d *SQLDatabase) Connect() error
- func (d *SQLDatabase) CreateAIListener(listener *AIListener) error
- func (d *SQLDatabase) CreateAIProvider(provider *AIProvider) error
- func (d *SQLDatabase) CreateAIResponseVersion(version *AIResponseVersion) error
- func (d *SQLDatabase) CreateConnection(conn *Connection) error
- func (d *SQLDatabase) CreateListener(listener *Listener) error
- func (d *SQLDatabase) CreateMulticastTunnel(mt *MulticastTunnel) error
- func (d *SQLDatabase) CreatePortReservation(reservation *PortReservation) error
- func (d *SQLDatabase) CreateSSOConfig(config *SSOConfig) error
- func (d *SQLDatabase) CreateSecurityWebhook(w *SecurityWebhook) error
- func (d *SQLDatabase) CreateSession(session *Session) error
- func (d *SQLDatabase) CreateTunnel(tunnel *Tunnel) error
- func (d *SQLDatabase) CreateUser(user *User) error
- func (d *SQLDatabase) CreateUserAuthSource(source *UserAuthSource) error
- func (d *SQLDatabase) CreateUserLimits(limits *UserLimits) error
- func (d *SQLDatabase) CreateUserToken(token *UserToken) error
- func (d *SQLDatabase) DeleteAIListener(id string) error
- func (d *SQLDatabase) DeleteAIProvider(id string) error
- func (d *SQLDatabase) DeleteAIResponseVersion(id string) error
- func (d *SQLDatabase) DeleteClosedSessionsByUser(username string) error
- func (d *SQLDatabase) DeleteClosedSessionsByUserOlderThan(username string, cutoff time.Time) error
- func (d *SQLDatabase) DeleteClosedTunnels() error
- func (d *SQLDatabase) DeleteClosedTunnelsByUser(username string) error
- func (d *SQLDatabase) DeleteClosedTunnelsByUserOlderThan(username string, cutoff time.Time) error
- func (d *SQLDatabase) DeleteClosedTunnelsOlderThan(cutoff time.Time) error
- func (d *SQLDatabase) DeleteListener(listenerID string) error
- func (d *SQLDatabase) DeleteMulticastTunnel(id string) error
- func (d *SQLDatabase) DeletePortReservation(id string) error
- func (d *SQLDatabase) DeleteSSOConfig(provider SSOProvider) error
- func (d *SQLDatabase) DeleteSecurityWebhook(id int) error
- func (d *SQLDatabase) DeleteSession(sessionID string) error
- func (d *SQLDatabase) DeleteTunnel(tunnelID string) error
- func (d *SQLDatabase) DeleteUser(username string) error
- func (d *SQLDatabase) DeleteUserAuthSource(id int) error
- func (d *SQLDatabase) DeleteUserLimits(username string) error
- func (d *SQLDatabase) DeleteUserPreference(username, key string) error
- func (d *SQLDatabase) DeleteUserToken(id string) error
- func (d *SQLDatabase) GetAIListener(id string) (*AIListener, error)
- func (d *SQLDatabase) GetAIListenerByListenerID(listenerID string) (*AIListener, error)
- func (d *SQLDatabase) GetAIProvider(id string) (*AIProvider, error)
- func (d *SQLDatabase) GetAIProviders() ([]*AIProvider, error)
- func (d *SQLDatabase) GetAIResponseVersion(id string) (*AIResponseVersion, error)
- func (d *SQLDatabase) GetActiveAIResponseVersion(aiListenerID string) (*AIResponseVersion, error)
- func (d *SQLDatabase) GetEffectiveUserLimits(username string) (maxTunnels, maxListeners int, err error)
- func (d *SQLDatabase) GetListener(listenerID string) (*Listener, error)
- func (d *SQLDatabase) GetMulticastTunnel(id string) (*MulticastTunnel, error)
- func (d *SQLDatabase) GetPortReservation(id string) (*PortReservation, error)
- func (d *SQLDatabase) GetReservedPortsThreshold() (int, error)
- func (d *SQLDatabase) GetSSOConfig(provider SSOProvider) (*SSOConfig, error)
- func (d *SQLDatabase) GetSecurityWebhook(id int) (*SecurityWebhook, error)
- func (d *SQLDatabase) GetSession(sessionID string) (*Session, error)
- func (d *SQLDatabase) GetSettingBool(key string, defaultValue bool) (bool, error)
- func (d *SQLDatabase) GetSettingInt(key string, defaultValue int) (int, error)
- func (d *SQLDatabase) GetStats() (*Stats, error)
- func (d *SQLDatabase) GetTunnel(tunnelID string) (*Tunnel, error)
- func (d *SQLDatabase) GetUser(username string) (*User, error)
- func (d *SQLDatabase) GetUserAuthSource(username string) (*UserAuthSource, error)
- func (d *SQLDatabase) GetUserLimits(username string) (*UserLimits, error)
- func (d *SQLDatabase) GetUserPreference(username, key string) (*UserPreference, error)
- func (d *SQLDatabase) GetUserStats(username string) (*Stats, error)
- func (d *SQLDatabase) GetUserToken(id string) (*UserToken, error)
- func (d *SQLDatabase) InsertSecurityEvent(ev *SecurityEventLog) error
- func (d *SQLDatabase) IsPortReserved(port int, username string) (bool, error)
- func (d *SQLDatabase) ListAIResponseVersions(aiListenerID string) ([]*AIResponseVersion, error)
- func (d *SQLDatabase) ListActiveListeners() ([]*Listener, error)
- func (d *SQLDatabase) ListActiveTunnels() ([]*Tunnel, error)
- func (d *SQLDatabase) ListConnections(tunnelID string) ([]*Connection, error)
- func (d *SQLDatabase) ListListeners() ([]*Listener, error)
- func (d *SQLDatabase) ListMulticastTunnels() ([]*MulticastTunnel, error)
- func (d *SQLDatabase) ListPortReservations() ([]*PortReservation, error)
- func (d *SQLDatabase) ListPublicMulticastTunnels() ([]*MulticastTunnel, error)
- func (d *SQLDatabase) ListSSOConfigs() ([]*SSOConfig, error)
- func (d *SQLDatabase) ListSecurityEvents(limit int) ([]SecurityEventLog, error)
- func (d *SQLDatabase) ListSecurityWebhooks(onlyEnabled bool) ([]SecurityWebhook, error)
- func (d *SQLDatabase) ListTunnels() ([]*Tunnel, error)
- func (d *SQLDatabase) ListUserAuthSources() ([]*UserAuthSource, error)
- func (d *SQLDatabase) ListUserAuthSourcesByUsername(username string) ([]*UserAuthSource, error)
- func (d *SQLDatabase) ListUserPortReservations(username string) ([]*PortReservation, error)
- func (d *SQLDatabase) ListUserPreferences(username string) ([]*UserPreference, error)
- func (d *SQLDatabase) ListUserTokens(username string) ([]*UserToken, error)
- func (d *SQLDatabase) ListUsers() ([]*User, error)
- func (d *SQLDatabase) MarkStaleListenersClosed(age time.Duration) error
- func (d *SQLDatabase) MarkStaleTunnelsClosed(age time.Duration) error
- func (d *SQLDatabase) Migrate() error
- func (d *SQLDatabase) SetActiveAIResponseVersion(aiListenerID, versionID string) error
- func (d *SQLDatabase) SetReservedPortsThreshold(threshold int) error
- func (d *SQLDatabase) SetSettingString(key string, value string) error
- func (d *SQLDatabase) SetUserPreference(username, key, value string) error
- func (d *SQLDatabase) SoftDeleteTunnel(tunnelID string) error
- func (d *SQLDatabase) UpdateAIListener(listener *AIListener) error
- func (d *SQLDatabase) UpdateAIProvider(provider *AIProvider) error
- func (d *SQLDatabase) UpdateAIResponseVersion(version *AIResponseVersion) error
- func (d *SQLDatabase) UpdateConnection(conn *Connection) error
- func (d *SQLDatabase) UpdateListener(listener *Listener) error
- func (d *SQLDatabase) UpdateMulticastTunnel(mt *MulticastTunnel) error
- func (d *SQLDatabase) UpdateSecurityWebhook(w *SecurityWebhook) error
- func (d *SQLDatabase) UpdateTunnel(tunnel *Tunnel) error
- func (d *SQLDatabase) UpdateUser(user *User) error
- func (d *SQLDatabase) UpdateUserAuthSource(source *UserAuthSource) error
- func (d *SQLDatabase) UpdateUserLimits(limits *UserLimits) error
- func (d *SQLDatabase) UpdateUserTokenLastUsed(id string, lastUsed time.Time) error
- func (d *SQLDatabase) ValidateUserToken(token string) (*UserToken, error)
- type SSOConfig
- type SSOProvider
- type SecurityEventLog
- type SecurityWebhook
- type Session
- type Stats
- type Tunnel
- type User
- type UserAuthSource
- type UserLimits
- type UserPreference
- type UserToken
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DecryptAPIKey ¶
DecryptAPIKey decrypts an API key from storage
func EncryptAPIKey ¶
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) 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 ¶
GetAddressRegexps converts addresses string to regexp slice
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