this repo has no description smallweb.run
smallweb
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

add back on demand tls flag

pomdtr 865d5dc0 0f5f76a9

+70
+28
cmd/up.go
··· 24 24 _ "embed" 25 25 26 26 "github.com/bmatcuk/doublestar/v4" 27 + "github.com/caddyserver/certmagic" 27 28 "github.com/charmbracelet/ssh" 28 29 "github.com/charmbracelet/wish" 29 30 "github.com/coreos/go-oidc/v3/oidc" ··· 32 33 "github.com/mattn/go-isatty" 33 34 "github.com/mhale/smtpd" 34 35 sloghttp "github.com/samber/slog-http" 36 + "go.uber.org/zap" 35 37 36 38 "github.com/knadh/koanf/providers/posflag" 37 39 "github.com/knadh/koanf/v2" ··· 52 54 func NewCmdUp() *cobra.Command { 53 55 var flags struct { 54 56 enableCrons bool 57 + onDemandTLS bool 55 58 addr string 56 59 apiAddr string 57 60 sshAddr string ··· 170 173 171 174 logger.Info("serving https", "domain", k.String("domain"), "dir", k.String("dir"), "addr", addr) 172 175 go http.Serve(ln, logMiddleware(handler)) 176 + } else if flags.onDemandTLS { 177 + config := zap.NewProductionConfig() 178 + config.OutputPaths = []string{"/dev/null"} 179 + 180 + caddyLogger, _ := config.Build() 181 + certmagic.Default.Logger = caddyLogger 182 + certmagic.Default.OnDemand = &certmagic.OnDemandConfig{ 183 + DecisionFunc: func(ctx context.Context, name string) error { 184 + if _, _, ok := lookupApp(name); ok { 185 + return nil 186 + } 187 + 188 + if _, err := os.Stat(filepath.Join(k.String("dir"), name)); err == nil { 189 + return nil 190 + } 191 + 192 + return fmt.Errorf("domain not found") 193 + }, 194 + } 195 + logger.Info("serving on-demand https", "domain", k.String("domain"), "dir", k.String("dir")) 196 + go certmagic.HTTPS(nil, logMiddleware(handler)) 173 197 } else { 174 198 addr := flags.addr 175 199 if addr == "" { ··· 409 433 cmd.Flags().StringVar(&flags.sshPrivateKey, "ssh-host-key", "", "ssh host key") 410 434 cmd.Flags().StringVar(&flags.tlsCert, "tls-cert", "", "tls certificate file") 411 435 cmd.Flags().StringVar(&flags.tlsKey, "tls-key", "", "tls key file") 436 + cmd.Flags().BoolVar(&flags.onDemandTLS, "on-demand-tls", false, "enable on-demand tls") 412 437 cmd.Flags().StringVar(&flags.logFormat, "log-format", "pretty", "log format (json or text)") 413 438 cmd.Flags().BoolVar(&flags.enableCrons, "enable-crons", false, "enable cron jobs") 414 439 cmd.Flags().Bool("cron", false, "enable cron jobs") 415 440 416 441 cmd.Flags().MarkDeprecated("cron", "use --enable-crons instead") 417 442 cmd.Flags().MarkDeprecated("ssh-host-key", "use --ssh-private-key instead") 443 + cmd.MarkFlagsMutuallyExclusive("on-demand-tls", "tls-cert") 444 + cmd.MarkFlagsMutuallyExclusive("on-demand-tls", "tls-key") 445 + cmd.MarkFlagsMutuallyExclusive("on-demand-tls", "addr") 418 446 419 447 cmd.MarkFlagsRequiredTogether("tls-cert", "tls-key") 420 448
+12
go.mod
··· 20 20 21 21 require ( 22 22 github.com/bmatcuk/doublestar/v4 v4.8.1 23 + github.com/caddyserver/certmagic v0.23.0 23 24 github.com/charmbracelet/ssh v0.0.0-20250213143314-8712ec3ff3ef 24 25 github.com/charmbracelet/wish v1.4.7 25 26 github.com/cli/browser v1.3.0 ··· 33 34 github.com/pkg/sftp v1.13.9 34 35 github.com/robfig/cron/v3 v3.0.1 35 36 github.com/samber/slog-http v1.6.0 37 + go.uber.org/zap v1.27.0 36 38 golang.org/x/crypto v0.37.0 37 39 golang.org/x/oauth2 v0.29.0 38 40 ) ··· 83 85 github.com/aws/smithy-go v1.22.3 // indirect 84 86 github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect 85 87 github.com/blang/semver v3.5.1+incompatible // indirect 88 + github.com/caddyserver/zerossl v0.1.3 // indirect 86 89 github.com/cenkalti/backoff/v4 v4.3.0 // indirect 87 90 github.com/cespare/xxhash/v2 v2.3.0 // indirect 88 91 github.com/charmbracelet/bubbletea v1.3.4 // indirect ··· 131 134 github.com/hashicorp/hcl v1.0.0 // indirect 132 135 github.com/hashicorp/vault/api v1.16.0 // indirect 133 136 github.com/inconshreveable/mousetrap v1.1.0 // indirect 137 + github.com/klauspost/cpuid/v2 v2.2.10 // indirect 134 138 github.com/knadh/koanf/maps v0.1.2 // indirect 135 139 github.com/kr/fs v0.1.0 // indirect 136 140 github.com/kylelemons/godebug v1.1.0 // indirect 137 141 github.com/lib/pq v1.10.9 // indirect 142 + github.com/libdns/libdns v1.0.0-beta.1 // indirect 138 143 github.com/lucasb-eyer/go-colorful v1.2.0 // indirect 139 144 github.com/mattn/go-colorable v0.1.14 // indirect 140 145 github.com/mattn/go-localereader v0.0.1 // indirect 141 146 github.com/mattn/go-runewidth v0.0.16 // indirect 147 + github.com/mholt/acmez/v3 v3.1.2 // indirect 148 + github.com/miekg/dns v1.1.63 // indirect 142 149 github.com/mitchellh/copystructure v1.2.0 // indirect 143 150 github.com/mitchellh/go-homedir v1.1.0 // indirect 144 151 github.com/mitchellh/go-wordwrap v1.0.1 // indirect ··· 159 166 github.com/spf13/pflag v1.0.6 // indirect 160 167 github.com/urfave/cli v1.22.16 // indirect 161 168 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect 169 + github.com/zeebo/blake3 v0.2.4 // indirect 162 170 go.opentelemetry.io/auto/sdk v1.1.0 // indirect 163 171 go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect 164 172 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect ··· 168 176 go.opentelemetry.io/otel/sdk v1.35.0 // indirect 169 177 go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect 170 178 go.opentelemetry.io/otel/trace v1.35.0 // indirect 179 + go.uber.org/multierr v1.11.0 // indirect 180 + go.uber.org/zap/exp v0.3.0 // indirect 171 181 golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect 182 + golang.org/x/mod v0.24.0 // indirect 172 183 golang.org/x/sync v0.13.0 // indirect 173 184 golang.org/x/sys v0.32.0 // indirect 174 185 golang.org/x/text v0.24.0 // indirect 175 186 golang.org/x/time v0.11.0 // indirect 187 + golang.org/x/tools v0.31.0 // indirect 176 188 google.golang.org/api v0.228.0 // indirect 177 189 google.golang.org/genproto v0.0.0-20250324211829-b45e905df463 // indirect 178 190 google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect
+30
go.sum
··· 117 117 github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= 118 118 github.com/bmatcuk/doublestar/v4 v4.8.1 h1:54Bopc5c2cAvhLRAzqOGCYHYyhcDHsFF4wWIR5wKP38= 119 119 github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= 120 + github.com/caddyserver/certmagic v0.23.0 h1:CfpZ/50jMfG4+1J/u2LV6piJq4HOfO6ppOnOf7DkFEU= 121 + github.com/caddyserver/certmagic v0.23.0/go.mod h1:9mEZIWqqWoI+Gf+4Trh04MOVPD0tGSxtqsxg87hAIH4= 122 + github.com/caddyserver/zerossl v0.1.3 h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+YTAyA= 123 + github.com/caddyserver/zerossl v0.1.3/go.mod h1:CxA0acn7oEGO6//4rtrRjYgEoa4MFw/XofZnrYwGqG4= 120 124 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= 121 125 github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= 122 126 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= ··· 265 269 github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= 266 270 github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= 267 271 github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= 272 + github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= 273 + github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= 268 274 github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo= 269 275 github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= 270 276 github.com/knadh/koanf/providers/env v1.1.0 h1:U2VXPY0f+CsNDkvdsG8GcsnK4ah85WwWyJgef9oQMSc= ··· 289 295 github.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw= 290 296 github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= 291 297 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= 298 + github.com/libdns/libdns v1.0.0-beta.1 h1:KIf4wLfsrEpXpZ3vmc/poM8zCATXT2klbdPe6hyOBjQ= 299 + github.com/libdns/libdns v1.0.0-beta.1/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= 292 300 github.com/lmittmann/tint v1.0.7 h1:D/0OqWZ0YOGZ6AyC+5Y2kD8PBEzBk6rFHVSfOqCkF9Y= 293 301 github.com/lmittmann/tint v1.0.7/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= 294 302 github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= ··· 306 314 github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= 307 315 github.com/mhale/smtpd v0.8.3 h1:8j8YNXajksoSLZja3HdwvYVZPuJSqAxFsib3adzRRt8= 308 316 github.com/mhale/smtpd v0.8.3/go.mod h1:MQl+y2hwIEQCXtNhe5+55n0GZOjSmeqORDIXbqUL3x4= 317 + github.com/mholt/acmez/v3 v3.1.2 h1:auob8J/0FhmdClQicvJvuDavgd5ezwLBfKuYmynhYzc= 318 + github.com/mholt/acmez/v3 v3.1.2/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ= 319 + github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY= 320 + github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs= 309 321 github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= 310 322 github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= 311 323 github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= ··· 395 407 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= 396 408 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= 397 409 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 410 + github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY= 411 + github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= 412 + github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI= 413 + github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE= 414 + github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= 415 + github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= 398 416 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= 399 417 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= 400 418 go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= ··· 415 433 go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= 416 434 go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= 417 435 go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= 436 + go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= 437 + go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 438 + go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= 439 + go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= 440 + go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= 441 + go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= 442 + go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U= 443 + go.uber.org/zap/exp v0.3.0/go.mod h1:5I384qq7XGxYyByIhHm6jg5CHkGY0nsTfbDLgDDlgJQ= 418 444 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 419 445 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 420 446 golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= ··· 430 456 golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 431 457 golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 432 458 golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 459 + golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= 460 + golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= 433 461 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 434 462 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 435 463 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= ··· 498 526 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 499 527 golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= 500 528 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= 529 + golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= 530 + golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= 501 531 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 502 532 google.golang.org/api v0.228.0 h1:X2DJ/uoWGnY5obVjewbp8icSL5U4FzuCfy9OjbLSnLs= 503 533 google.golang.org/api v0.228.0/go.mod h1:wNvRS1Pbe8r4+IfBIniV8fwCpGwTrYa+kMUDiC5z5a4=