Some checks failed
Go Benchmark / Performance Regression Check (push) Has been cancelled
Cerberus Integration / Cerberus Security Stack Integration (push) Has been cancelled
Upload Coverage to Codecov / Backend Codecov Upload (push) Has been cancelled
Upload Coverage to Codecov / Frontend Codecov Upload (push) Has been cancelled
CodeQL - Analyze / CodeQL analysis (go) (push) Has been cancelled
CodeQL - Analyze / CodeQL analysis (javascript-typescript) (push) Has been cancelled
CrowdSec Integration / CrowdSec Bouncer Integration (push) Has been cancelled
Docker Build, Publish & Test / build-and-push (push) Has been cancelled
Quality Checks / Auth Route Protection Contract (push) Has been cancelled
Quality Checks / Codecov Trigger/Comment Parity Guard (push) Has been cancelled
Quality Checks / Backend (Go) (push) Has been cancelled
Quality Checks / Frontend (React) (push) Has been cancelled
Rate Limit integration / Rate Limiting Integration (push) Has been cancelled
Security Scan (PR) / Trivy Binary Scan (push) Has been cancelled
Supply Chain Verification (PR) / Verify Supply Chain (push) Has been cancelled
WAF integration / Coraza WAF Integration (push) Has been cancelled
Docker Build, Publish & Test / Security Scan PR Image (push) Has been cancelled
Repo Health Check / Repo health (push) Has been cancelled
History Rewrite Dry-Run / Dry-run preview for history rewrite (push) Has been cancelled
Prune Renovate Branches / prune (push) Has been cancelled
Renovate / renovate (push) Has been cancelled
Nightly Build & Package / sync-development-to-nightly (push) Has been cancelled
Nightly Build & Package / Trigger Nightly Validation Workflows (push) Has been cancelled
Nightly Build & Package / build-and-push-nightly (push) Has been cancelled
Nightly Build & Package / test-nightly-image (push) Has been cancelled
Nightly Build & Package / verify-nightly-supply-chain (push) Has been cancelled
Update GeoLite2 Checksum / update-checksum (push) Has been cancelled
Container Registry Prune / prune-ghcr (push) Has been cancelled
Container Registry Prune / prune-dockerhub (push) Has been cancelled
Container Registry Prune / summarize (push) Has been cancelled
Supply Chain Verification / Verify SBOM (push) Has been cancelled
Supply Chain Verification / Verify Release Artifacts (push) Has been cancelled
Supply Chain Verification / Verify Docker Image Supply Chain (push) Has been cancelled
Monitor Caddy Major Release / check-caddy-major (push) Has been cancelled
Weekly Nightly to Main Promotion / Verify Nightly Branch Health (push) Has been cancelled
Weekly Nightly to Main Promotion / Create Promotion PR (push) Has been cancelled
Weekly Nightly to Main Promotion / Trigger Missing Required Checks (push) Has been cancelled
Weekly Nightly to Main Promotion / Notify on Failure (push) Has been cancelled
Weekly Nightly to Main Promotion / Workflow Summary (push) Has been cancelled
Weekly Security Rebuild / Security Rebuild & Scan (push) Has been cancelled
64 lines
3.7 KiB
Go
Executable File
64 lines
3.7 KiB
Go
Executable File
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// ProxyHost represents a reverse proxy configuration.
|
|
type ProxyHost struct {
|
|
ID uint `json:"-" gorm:"primaryKey"`
|
|
UUID string `json:"uuid" gorm:"uniqueIndex;not null"`
|
|
Name string `json:"name" gorm:"index"`
|
|
DomainNames string `json:"domain_names" gorm:"not null;index"` // Comma-separated list
|
|
ForwardScheme string `json:"forward_scheme" gorm:"default:http"`
|
|
ForwardHost string `json:"forward_host" gorm:"not null;index"`
|
|
ForwardPort int `json:"forward_port" gorm:"not null"`
|
|
SSLForced bool `json:"ssl_forced" gorm:"default:false"`
|
|
HTTP2Support bool `json:"http2_support" gorm:"default:true"`
|
|
HSTSEnabled bool `json:"hsts_enabled" gorm:"default:false"`
|
|
HSTSSubdomains bool `json:"hsts_subdomains" gorm:"default:false"`
|
|
BlockExploits bool `json:"block_exploits" gorm:"default:true"`
|
|
WebsocketSupport bool `json:"websocket_support" gorm:"default:false"`
|
|
Application string `json:"application" gorm:"default:none"` // none, plex, jellyfin, emby, homeassistant, nextcloud, vaultwarden
|
|
Enabled bool `json:"enabled" gorm:"default:true;index"`
|
|
CertificateID *uint `json:"certificate_id" gorm:"index"`
|
|
Certificate *SSLCertificate `json:"certificate" gorm:"foreignKey:CertificateID"`
|
|
AccessListID *uint `json:"access_list_id" gorm:"index"`
|
|
AccessList *AccessList `json:"access_list" gorm:"foreignKey:AccessListID"`
|
|
Locations []Location `json:"locations" gorm:"foreignKey:ProxyHostID;constraint:OnDelete:CASCADE"`
|
|
AdvancedConfig string `json:"advanced_config" gorm:"type:text"`
|
|
AdvancedConfigBackup string `json:"advanced_config_backup" gorm:"type:text"`
|
|
|
|
// Forward Auth / User Gateway settings
|
|
// When enabled, Caddy will use forward_auth to verify user access via Charon
|
|
ForwardAuthEnabled bool `json:"forward_auth_enabled" gorm:"default:false"`
|
|
|
|
// WAF override - when true, disables WAF for this specific host
|
|
WAFDisabled bool `json:"waf_disabled" gorm:"default:false"`
|
|
|
|
// Security Headers Configuration
|
|
// Either reference a profile OR use inline settings
|
|
SecurityHeaderProfileID *uint `json:"security_header_profile_id" gorm:"index"`
|
|
SecurityHeaderProfile *SecurityHeaderProfile `json:"security_header_profile" gorm:"foreignKey:SecurityHeaderProfileID"`
|
|
|
|
// Inline security header settings (used when no profile is selected)
|
|
// These override profile settings if both are set
|
|
SecurityHeadersEnabled bool `json:"security_headers_enabled" gorm:"default:true"`
|
|
SecurityHeadersCustom string `json:"security_headers_custom" gorm:"type:text"` // JSON for custom headers
|
|
|
|
// EnableStandardHeaders controls whether standard proxy headers are added
|
|
// Default: true for NEW hosts, false for EXISTING hosts (via migration/seed update)
|
|
// When true: Adds X-Real-IP, X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port
|
|
// When false: Old behavior (headers only with WebSocket or application-specific)
|
|
// X-Forwarded-For is handled natively by Caddy (not explicitly set)
|
|
EnableStandardHeaders *bool `json:"enable_standard_headers,omitempty" gorm:"default:true"`
|
|
|
|
// DNS Challenge configuration
|
|
DNSProviderID *uint `json:"dns_provider_id,omitempty" gorm:"index"`
|
|
DNSProvider *DNSProvider `json:"dns_provider,omitempty" gorm:"foreignKey:DNSProviderID"`
|
|
UseDNSChallenge bool `json:"use_dns_challenge" gorm:"default:false"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|