Files
helix-proxy/internal/models/models.go
T
s1d3sw1ped 1cc94f2c99
Format / gofmt (push) Failing after 27s
CI / Build (push) Successful in 51s
CI / Go Tests (push) Failing after 21s
initial commit
2026-06-06 07:54:44 -05:00

156 lines
6.7 KiB
Go

package models
// These types are the core domain models for Helix Proxy.
// They are used by the Store interface (any backend), the API, the proxy engine,
// and the certificate manager.
type Root struct {
Version int
Users []User
ProxyHosts []ProxyHost
AccessLists []AccessList
Streams []Stream
Certificates []Certificate
RedirectionHosts []RedirectionHost
DeadHosts []DeadHost
Settings map[string]any
AuditLogs []AuditLog
// meta for internal use by store impls
Meta map[string]any
}
type User struct {
ID int `json:"id"`
Email string `json:"email"`
Name string `json:"name"`
Password string `json:"password,omitempty"` // bcrypt hash; empty for demo seeded admin. (API responses manually omit the value)
Roles []string `json:"roles"`
TotpSecret string `json:"totpSecret,omitempty"` // include for bbolt persistence (API never returns the secret value)
TotpEnabled bool `json:"totpEnabled"`
}
// HeaderRule is a name/value pair for request or response header overrides.
type HeaderRule struct {
Name string `json:"name"`
Value string `json:"value,omitempty"`
}
type ProxyHost struct {
ID int `json:"id"`
DomainNames []string `json:"domainNames"`
ForwardScheme string `json:"forwardScheme"`
ForwardHost string `json:"forwardHost"`
ForwardPort int `json:"forwardPort"`
AccessListID int `json:"accessListId,omitempty"`
CertificateID int `json:"certificateId,omitempty"`
SslForced bool `json:"sslForced"`
CachingEnabled bool `json:"cachingEnabled"`
BlockExploits bool `json:"blockExploits"`
AllowWebsocketUpgrade bool `json:"allowWebsocketUpgrade"`
Http2Support bool `json:"http2Support"`
HstsEnabled bool `json:"hstsEnabled"`
HstsSubdomains bool `json:"hstsSubdomains"`
TrustForwardedProto bool `json:"trustForwardedProto"`
RequestHeaders []HeaderRule `json:"requestHeaders,omitempty"`
ResponseHeaders []HeaderRule `json:"responseHeaders,omitempty"`
HideHeaders []string `json:"hideHeaders,omitempty"`
AdvancedConfig string `json:"advancedConfig,omitempty"` // legacy; engine falls back when structured headers are empty
Enabled bool `json:"enabled"`
Locations []Location `json:"locations,omitempty"`
Meta map[string]any `json:"meta,omitempty"`
OwnerUserID int `json:"ownerUserId,omitempty"`
CreatedOn string `json:"createdOn,omitempty"` // server-set UTC on create (via store); preserved on update; empty for legacy DB records
}
type Location struct {
ID int `json:"id,omitempty"`
Path string `json:"path"`
ForwardScheme string `json:"forwardScheme"`
ForwardHost string `json:"forwardHost"`
ForwardPort int `json:"forwardPort"`
ForwardPath string `json:"forwardPath,omitempty"`
AdvancedConfig string `json:"advancedConfig,omitempty"`
}
type AccessList struct {
ID int `json:"id"`
Name string `json:"name"`
SatisfyAny bool `json:"satisfyAny"`
Clients []AccessClient `json:"clients"`
Items []AccessItem `json:"items"`
PassAuth bool `json:"passAuth"`
OwnerUserID int `json:"ownerUserId,omitempty"`
CreatedOn string `json:"createdOn,omitempty"` // server-set UTC on create (via store); preserved on update; empty for legacy DB records
}
type AccessClient struct {
Address string `json:"address"`
Directive string `json:"directive"` // "allow" or "deny"
}
type AccessItem struct {
Username string `json:"username"`
Password string `json:"password"` // plain for demo access lists (separate from User bcrypt)
}
type Stream struct {
ID int `json:"id"`
IncomingPort int `json:"incomingPort"`
ForwardingHost string `json:"forwardingHost"`
ForwardingPort int `json:"forwardingPort"`
TCPForwarding bool `json:"tcpForwarding"`
UDPForwarding bool `json:"udpForwarding"`
Enabled bool `json:"enabled"`
CertificateID int `json:"certificateId"`
Meta map[string]any `json:"meta,omitempty"`
OwnerUserID int `json:"ownerUserId,omitempty"`
CreatedOn string `json:"createdOn,omitempty"` // server-set UTC on create (via store); preserved on update; empty for legacy DB records
}
type Certificate struct {
ID int `json:"id"`
Provider string `json:"provider"` // "letsencrypt" or "other"
NiceName string `json:"niceName"`
DomainNames []string `json:"domainNames"`
ExpiresOn string `json:"expiresOn"`
Meta map[string]any `json:"meta"`
OwnerUserID int `json:"ownerUserId,omitempty"`
CreatedOn string `json:"createdOn,omitempty"` // server-set UTC on create (via store); preserved on update; empty for legacy DB records
}
type RedirectionHost struct {
ID int `json:"id"`
DomainNames []string `json:"domainNames"`
ForwardHTTPCode int `json:"forwardHttpCode"`
ForwardScheme string `json:"forwardScheme"`
ForwardDomainName string `json:"forwardDomainName"`
PreservePath bool `json:"preservePath"`
Enabled bool `json:"enabled"`
AdvancedConfig string `json:"advancedConfig,omitempty"`
Meta map[string]any `json:"meta,omitempty"`
OwnerUserID int `json:"ownerUserId,omitempty"`
CreatedOn string `json:"createdOn,omitempty"` // server-set UTC on create (via store); preserved on update; empty for legacy DB records
}
type DeadHost struct {
ID int `json:"id"`
DomainNames []string `json:"domainNames"`
Enabled bool `json:"enabled"`
AdvancedConfig string `json:"advancedConfig,omitempty"`
Meta map[string]any `json:"meta,omitempty"`
OwnerUserID int `json:"ownerUserId,omitempty"`
CreatedOn string `json:"createdOn,omitempty"` // server-set UTC on create (via store); preserved on update; empty for legacy DB records
}
type AuditLog struct {
ID int `json:"id"`
UserID int `json:"userId"`
ObjectType string `json:"objectType"`
ObjectID int `json:"objectId"`
Action string `json:"action"`
Meta map[string]any `json:"meta"`
CreatedOn string `json:"createdOn"`
}