Documentation
¶
Index ¶
- func InstallSystemdService() error
- func IsSystemdInstalled() bool
- func ReloadService() error
- func RestartService() error
- func UninstallSystemdService() error
- type BuildResult
- type ContainerService
- func (s *ContainerService) Reload(ctx context.Context) error
- func (s *ContainerService) Restart(ctx context.Context) error
- func (s *ContainerService) Start(ctx context.Context) error
- func (s *ContainerService) Status(ctx context.Context) (*model.ProxyStatus, error)
- func (s *ContainerService) Stop(ctx context.Context) error
- type DockerService
- type GeoblockService
- type HealthService
- type HealthStatus
- type OSType
- type ReplicationService
- func (s *ReplicationService) GenerateSSHKey(ctx context.Context) (string, error)
- func (s *ReplicationService) SyncAll(ctx context.Context) []sshutil.SyncResult
- func (s *ReplicationService) SyncSlave(ctx context.Context, host string) (*sshutil.SyncResult, error)
- func (s *ReplicationService) TestSSH(ctx context.Context, host string) (*model.SlaveTestResult, error)
- type SecretService
- func (s *SecretService) Add(ctx context.Context, label, secretKey string) (*model.Secret, error)
- func (s *SecretService) Get(ctx context.Context, label string) (*model.Secret, error)
- func (s *SecretService) GetEnabledLabels(ctx context.Context) ([]string, error)
- func (s *SecretService) GetLink(ctx context.Context, label, serverIP string, port int, maskingEnabled bool, ...) (*model.SecretWithLink, error)
- func (s *SecretService) GetQRCode(ctx context.Context, label, serverIP string, port int, maskingEnabled bool, ...) ([]byte, error)
- func (s *SecretService) List(ctx context.Context) ([]model.Secret, error)
- func (s *SecretService) Remove(ctx context.Context, label string, force bool) error
- func (s *SecretService) ResetAllTraffic(ctx context.Context) error
- func (s *SecretService) ResetTraffic(ctx context.Context, label string) error
- func (s *SecretService) Rotate(ctx context.Context, label string) (*model.Secret, error)
- func (s *SecretService) SetLimits(ctx context.Context, label string, maxConns, maxIPs int, quotaBytes int64, ...) error
- func (s *SecretService) Toggle(ctx context.Context, label string, enable bool) error
- func (s *SecretService) UpdateNotes(ctx context.Context, label, notes string) error
- type SystemdServiceStatus
- type TrafficService
- func (s *TrafficService) CheckExpirations(ctx context.Context)
- func (s *TrafficService) CheckQuotas(ctx context.Context)
- func (s *TrafficService) Flush(ctx context.Context) error
- func (s *TrafficService) GetLiveMetrics(ctx context.Context) (*model.LiveMetrics, error)
- func (s *TrafficService) GetReport(ctx context.Context) (*model.TrafficReport, error)
- func (s *TrafficService) GetUserTraffic(ctx context.Context, label string) (*model.UserTraffic, error)
- func (s *TrafficService) SetSecretStore(secrets *store.SecretStore, quota *store.QuotaAlertStore)
- type UpdateResult
- type UpdateService
- type UpdateStatus
- type UpstreamService
- func (s *UpstreamService) Add(ctx context.Context, u *model.Upstream) error
- func (s *UpstreamService) Get(ctx context.Context, name string) (*model.Upstream, error)
- func (s *UpstreamService) List(ctx context.Context) ([]model.Upstream, error)
- func (s *UpstreamService) Remove(ctx context.Context, name string) error
- func (s *UpstreamService) Test(ctx context.Context, name string) (*model.UpstreamTestResult, error)
- func (s *UpstreamService) Toggle(ctx context.Context, name string, enable bool) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func InstallSystemdService ¶
func InstallSystemdService() error
InstallSystemdService creates and enables the popugate systemd service.
func IsSystemdInstalled ¶
func IsSystemdInstalled() bool
IsSystemdInstalled checks if the popugate service is installed.
func ReloadService ¶
func ReloadService() error
ReloadService sends a reload signal to the systemd service.
func RestartService ¶
func RestartService() error
RestartService restarts the popugate systemd service.
func UninstallSystemdService ¶
func UninstallSystemdService() error
UninstallSystemdService removes the systemd service.
Types ¶
type BuildResult ¶
type BuildResult struct {
Method string `json:"method"` // "registry", "latest", "source", "cached"
Version string `json:"version"`
Message string `json:"message"`
}
BuildResult holds the outcome of a build attempt.
type ContainerService ¶
type ContainerService struct {
// contains filtered or unexported fields
}
ContainerService manages proxy container lifecycle.
func NewContainerService ¶
func NewContainerService( docker *dockerutil.DockerClient, secrets *store.SecretStore, upstreams *store.UpstreamStore, instances *store.InstanceStore, traffic *store.TrafficStore, settings *store.SettingsStore, trafficSvc *TrafficService, ) *ContainerService
NewContainerService creates a new ContainerService.
func (*ContainerService) Reload ¶
func (s *ContainerService) Reload(ctx context.Context) error
Reload regenerates config and sends SIGHUP for hot-reload.
func (*ContainerService) Restart ¶
func (s *ContainerService) Restart(ctx context.Context) error
Restart stops and starts the proxy.
func (*ContainerService) Start ¶
func (s *ContainerService) Start(ctx context.Context) error
Start starts the proxy container (and all enabled instances).
func (*ContainerService) Status ¶
func (s *ContainerService) Status(ctx context.Context) (*model.ProxyStatus, error)
Status returns the current proxy status.
type DockerService ¶
type DockerService struct {
// contains filtered or unexported fields
}
DockerService handles Docker installation and engine image management.
func NewDockerService ¶
func NewDockerService(docker *dockerutil.DockerClient) *DockerService
NewDockerService creates a new DockerService.
func (*DockerService) BuildEngine ¶
func (s *DockerService) BuildEngine(ctx context.Context, force bool) (*BuildResult, error)
BuildEngine implements the three-tier image build strategy: 1. Pull exact version from registry 2. Pull :latest from registry 3. Build from source
func (*DockerService) GetInstalledVersion ¶
func (s *DockerService) GetInstalledVersion() string
GetInstalledVersion returns the currently installed telemt version string.
type GeoblockService ¶
type GeoblockService struct {
// contains filtered or unexported fields
}
GeoblockService handles geo-blocking via iptables/ipset.
func NewGeoblockService ¶
func NewGeoblockService(settings *store.SettingsStore, instances *store.InstanceStore, cache *store.GeoblockCacheStore) *GeoblockService
NewGeoblockService creates a new GeoblockService.
type HealthService ¶
type HealthService struct {
// contains filtered or unexported fields
}
HealthService provides health diagnostics and auto-recovery.
func NewHealthService ¶
func NewHealthService(docker *dockerutil.DockerClient, settings *store.SettingsStore) *HealthService
NewHealthService creates a new HealthService.
func (*HealthService) AutoRecover ¶
func (h *HealthService) AutoRecover(ctx context.Context) error
AutoRecover attempts to start the proxy if it's unexpectedly stopped.
func (*HealthService) Check ¶
func (h *HealthService) Check(ctx context.Context) *HealthStatus
Check runs all health checks.
func (*HealthService) SetContainerSvc ¶
func (h *HealthService) SetContainerSvc(svc *ContainerService)
SetContainerSvc sets the container service for auto-recovery.
type HealthStatus ¶
type HealthStatus struct {
Docker string `json:"docker"`
Container string `json:"container"`
Port string `json:"port"`
Metrics string `json:"metrics"`
}
HealthStatus holds the result of a health check.
type OSType ¶
type OSType struct {
Family string `json:"family"`
Version string `json:"version"`
Arch string `json:"arch"`
}
OSType represents the details of the host OS.
type ReplicationService ¶
type ReplicationService struct {
// contains filtered or unexported fields
}
ReplicationService handles master/slave sync.
func NewReplicationService ¶
func NewReplicationService(settings *store.SettingsStore, slaves *store.SlaveStore) *ReplicationService
NewReplicationService creates a new ReplicationService.
func (*ReplicationService) GenerateSSHKey ¶
func (s *ReplicationService) GenerateSSHKey(ctx context.Context) (string, error)
GenerateSSHKey generates an ed25519 key pair for replication.
func (*ReplicationService) SyncAll ¶
func (s *ReplicationService) SyncAll(ctx context.Context) []sshutil.SyncResult
SyncAll syncs to all enabled slaves (with lock file to prevent concurrent runs).
func (*ReplicationService) SyncSlave ¶
func (s *ReplicationService) SyncSlave(ctx context.Context, host string) (*sshutil.SyncResult, error)
SyncSlave syncs to a specific slave.
func (*ReplicationService) TestSSH ¶
func (s *ReplicationService) TestSSH(ctx context.Context, host string) (*model.SlaveTestResult, error)
TestSSH tests connectivity to a slave.
type SecretService ¶
type SecretService struct {
// contains filtered or unexported fields
}
SecretService handles secret business logic.
func NewSecretService ¶
func NewSecretService(secrets *store.SecretStore) *SecretService
NewSecretService creates a new SecretService.
func (*SecretService) Add ¶
Add creates a new secret. If secretKey is empty, generates one automatically.
func (*SecretService) GetEnabledLabels ¶
func (s *SecretService) GetEnabledLabels(ctx context.Context) ([]string, error)
GetEnabledLabels returns labels of all enabled secrets.
func (*SecretService) GetLink ¶
func (s *SecretService) GetLink(ctx context.Context, label, serverIP string, port int, maskingEnabled bool, domain string) (*model.SecretWithLink, error)
GetLink returns the proxy link for a secret.
func (*SecretService) GetQRCode ¶
func (s *SecretService) GetQRCode(ctx context.Context, label, serverIP string, port int, maskingEnabled bool, domain string, size int) ([]byte, error)
GetQRCode generates a QR code PNG for a secret's proxy link.
func (*SecretService) ResetAllTraffic ¶
func (s *SecretService) ResetAllTraffic(ctx context.Context) error
ResetAllTraffic resets traffic for all users.
func (*SecretService) ResetTraffic ¶
func (s *SecretService) ResetTraffic(ctx context.Context, label string) error
ResetTraffic resets traffic for a specific user.
func (*SecretService) Rotate ¶
Rotate generates a new key for an existing secret, preserving the label and limits.
func (*SecretService) SetLimits ¶
func (s *SecretService) SetLimits(ctx context.Context, label string, maxConns, maxIPs int, quotaBytes int64, expiresAt string) error
SetLimits updates per-user limits for a secret.
func (*SecretService) UpdateNotes ¶
func (s *SecretService) UpdateNotes(ctx context.Context, label, notes string) error
UpdateNotes updates the notes/description for a secret.
type SystemdServiceStatus ¶
type SystemdServiceStatus struct {
Supported bool `json:"supported"`
Installed bool `json:"installed"`
Active string `json:"active"`
Enabled bool `json:"enabled"`
PID string `json:"pid,omitempty"`
Uptime string `json:"uptime,omitempty"`
}
SystemdServiceStatus represents the status of the systemd service.
func GetServiceStatus ¶
func GetServiceStatus() *SystemdServiceStatus
GetServiceStatus queries systemctl for detailed service status.
type TrafficService ¶
type TrafficService struct {
// contains filtered or unexported fields
}
TrafficService handles traffic monitoring and persistence.
func NewTrafficService ¶
func NewTrafficService(traffic *store.TrafficStore, settings *store.SettingsStore, docker *dockerutil.DockerClient) *TrafficService
NewTrafficService creates a new TrafficService.
func (*TrafficService) CheckExpirations ¶
func (s *TrafficService) CheckExpirations(ctx context.Context)
CheckExpirations checks for secrets nearing or past expiry.
func (*TrafficService) CheckQuotas ¶
func (s *TrafficService) CheckQuotas(ctx context.Context)
CheckQuotas auto-disables secrets that exceeded their quota and sends warnings at 80%.
func (*TrafficService) Flush ¶
func (s *TrafficService) Flush(ctx context.Context) error
Flush computes deltas from the latest Prometheus snapshot and persists them. Handles negative deltas (container restart resets counters) by treating the current reading as absolute and adding it to the cumulative total.
func (*TrafficService) GetLiveMetrics ¶
func (s *TrafficService) GetLiveMetrics(ctx context.Context) (*model.LiveMetrics, error)
GetLiveMetrics fetches and caches live Prometheus metrics.
func (*TrafficService) GetReport ¶
func (s *TrafficService) GetReport(ctx context.Context) (*model.TrafficReport, error)
GetReport returns cumulative global + per-user traffic.
func (*TrafficService) GetUserTraffic ¶
func (s *TrafficService) GetUserTraffic(ctx context.Context, label string) (*model.UserTraffic, error)
GetUserTraffic returns traffic for a specific user.
func (*TrafficService) SetSecretStore ¶
func (s *TrafficService) SetSecretStore(secrets *store.SecretStore, quota *store.QuotaAlertStore)
SetSecretStore sets the secret store for quota enforcement.
type UpdateResult ¶
type UpdateResult struct {
PreviousVersion string `json:"previous_version"`
NewVersion string `json:"new_version"`
BinaryPath string `json:"binary_path"`
BackupPath string `json:"backup_path"`
}
UpdateResult holds the outcome of an apply operation.
type UpdateService ¶
type UpdateService struct {
// contains filtered or unexported fields
}
UpdateService handles checking and applying self-updates.
func NewUpdateService ¶
func NewUpdateService() *UpdateService
NewUpdateService creates a new UpdateService.
func (*UpdateService) Apply ¶
func (s *UpdateService) Apply(ctx context.Context) (*UpdateResult, error)
Apply downloads the latest release binary and replaces the running binary. The caller should trigger RestartSelf after sending the HTTP response.
func (*UpdateService) Check ¶
func (s *UpdateService) Check(ctx context.Context) (*UpdateStatus, error)
Check queries the GitHub releases API for the latest version.
func (*UpdateService) RestartSelf ¶
func (s *UpdateService) RestartSelf() error
RestartSelf restarts the popugate service via systemd.
func (*UpdateService) Rollback ¶
func (s *UpdateService) Rollback(backupPath string) error
Rollback restores the backup binary.
type UpdateStatus ¶
type UpdateStatus struct {
Current string `json:"current"`
Latest string `json:"latest"`
UpdateAvailable bool `json:"update_available"`
HTMLURL string `json:"url,omitempty"`
}
UpdateStatus holds the result of an update check.
type UpstreamService ¶
type UpstreamService struct {
// contains filtered or unexported fields
}
UpstreamService handles upstream business logic.
func NewUpstreamService ¶
func NewUpstreamService(upstreams *store.UpstreamStore) *UpstreamService
NewUpstreamService creates a new UpstreamService.
func (*UpstreamService) Remove ¶
func (s *UpstreamService) Remove(ctx context.Context, name string) error
Remove deletes an upstream by name.
func (*UpstreamService) Test ¶
func (s *UpstreamService) Test(ctx context.Context, name string) (*model.UpstreamTestResult, error)
Test tests connectivity through an upstream.