feat: refactor relay server flags

gosunuts committed Feb 26, 2026 at 19:15 UTC 44b5d1fc52a913d5adc2276567babf222465ccfb
1 file changed +28 -30
cmd/relay-server/main.go
+28 -30
@@ -20,22 +20,21 @@ import (
20 )
21
22 var (
23 - flagPortalURL string
24 - flagBootstraps []string
25 - flagALPN string
23 + // Server
24 flagPort int
27 - flagMaxLease int
28 - flagLeaseBPS int
29 - flagNoIndex bool
25 flagAdminSecretKey string
26 + flagNoIndex bool
27 + flagLeaseBPS int
28 +
29 + // Portal
30 + flagPortalURL string
31 + flagBootstraps []string
32
32 - // ACME DNS-01 flags for TLSAuto support
33 + // TLS
34 + flagSNIPort string
35 flagACMEDNSProvider string
36 flagACMEEmail string
37 flagACMEDirectory string
36 -
37 - // SNI router
38 - flagSNIPort string
38 )
39
40 func main() {
@@ -50,25 +49,27 @@ func main() {
49 if defaultBootstraps == "" {
50 defaultBootstraps = defaultBootstrapFrom(defaultPortalURL)
51 }
52 + defaultSNIPort := os.Getenv("SNI_PORT")
53 + if defaultSNIPort == "" {
54 + defaultSNIPort = ":443"
55 + }
56
54 - var flagBootstrapsCSV string
55 - flag.StringVar(&flagPortalURL, "portal-url", defaultPortalURL, "base URL for portal frontend (env: PORTAL_URL)")
56 - flag.StringVar(&flagBootstrapsCSV, "bootstraps", defaultBootstraps, "bootstrap addresses (comma-separated)")
57 - flag.StringVar(&flagALPN, "alpn", "http/1.1", "ALPN identifier for this service")
58 - flag.IntVar(&flagPort, "port", 4017, "app UI and HTTP proxy port")
59 - flag.IntVar(&flagMaxLease, "max-lease", 0, "maximum active relayed connections per lease (0 = unlimited)")
60 - flag.IntVar(&flagLeaseBPS, "lease-bps", 0, "default bytes-per-second limit per lease (0 = unlimited)")
61 -
62 - defaultNoIndex := os.Getenv("NOINDEX") == "true"
63 - flag.BoolVar(&flagNoIndex, "noindex", defaultNoIndex, "disallow all crawlers via robots.txt (env: NOINDEX)")
64 - flag.StringVar(&flagAdminSecretKey, "admin-secret-key", os.Getenv("ADMIN_SECRET_KEY"), "secret key for admin authentication (env: ADMIN_SECRET_KEY)")
57 + // Server flags
58 + flag.IntVar(&flagPort, "port", 4017, "HTTP server port")
59 + flag.StringVar(&flagAdminSecretKey, "admin-secret-key", os.Getenv("ADMIN_SECRET_KEY"), "admin auth secret (env: ADMIN_SECRET_KEY)")
60 + flag.BoolVar(&flagNoIndex, "noindex", os.Getenv("NOINDEX") == "true", "disallow crawlers (env: NOINDEX)")
61 + flag.IntVar(&flagLeaseBPS, "lease-bps", 0, "bytes-per-second limit per lease (0=unlimited)")
62
66 - // ACME DNS-01 flags
67 - flag.StringVar(&flagACMEDNSProvider, "acme-dns-provider", os.Getenv("ACME_DNS_PROVIDER"), "DNS provider for ACME DNS-01 challenge (cloudflare, route53)")
68 - flag.StringVar(&flagACMEEmail, "acme-email", os.Getenv("ACME_EMAIL"), "email for ACME account registration")
69 - flag.StringVar(&flagACMEDirectory, "acme-directory", os.Getenv("ACME_DIRECTORY"), "ACME directory URL (default: Let's Encrypt production)")
63 + // Portal flags
64 + var flagBootstrapsCSV string
65 + flag.StringVar(&flagPortalURL, "portal-url", defaultPortalURL, "portal base URL (env: PORTAL_URL)")
66 + flag.StringVar(&flagBootstrapsCSV, "bootstraps", defaultBootstraps, "bootstrap URIs, comma-separated (env: BOOTSTRAP_URIS)")
67
71 - flag.StringVar(&flagSNIPort, "sni-port", os.Getenv("SNI_PORT"), "SNI router port for TLS passthrough (env: SNI_PORT)")
68 + // TLS flags
69 + flag.StringVar(&flagSNIPort, "sni-port", defaultSNIPort, "SNI router port (env: SNI_PORT)")
70 + flag.StringVar(&flagACMEDNSProvider, "acme-dns-provider", os.Getenv("ACME_DNS_PROVIDER"), "ACME DNS provider (env: ACME_DNS_PROVIDER)")
71 + flag.StringVar(&flagACMEEmail, "acme-email", os.Getenv("ACME_EMAIL"), "ACME account email (env: ACME_EMAIL)")
72 + flag.StringVar(&flagACMEDirectory, "acme-directory", os.Getenv("ACME_DIRECTORY"), "ACME directory URL (env: ACME_DIRECTORY)")
73
74 flag.Parse()
75
@@ -84,12 +85,9 @@ func runServer() error {
85
86 log.Info().
87 Str("portal_base_url", flagPortalURL).
87 - Str("bootstrap_uris", strings.Join(flagBootstraps, ",")).
88 + Strs("bootstrap_uris", flagBootstraps).
89 Msg("[server] frontend configuration")
90
90 - if flagSNIPort == "" {
91 - flagSNIPort = ":443"
92 - }
91 serv := portal.NewRelayServer(ctx, flagBootstraps, flagSNIPort, flagPortalURL, flagACMEDNSProvider, flagACMEEmail, flagACMEDirectory)
92
93 frontend := NewFrontend()