diff options
author | Mike Crute <mike@crute.us> | 2023-10-08 12:33:48 -0700 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2023-10-08 12:33:51 -0700 |
commit | 2d903b840e18144f29a4f4a9a0305f8ba16f19a3 (patch) | |
tree | 5e749d85e18e78f586c2dac3fd5ea30f14b18fc4 | |
parent | b151147e2106d74c599efccb99b1b718b7f0c1f2 (diff) | |
download | golib-2d903b840e18144f29a4f4a9a0305f8ba16f19a3.tar.bz2 golib-2d903b840e18144f29a4f4a9a0305f8ba16f19a3.tar.xz golib-2d903b840e18144f29a4f4a9a0305f8ba16f19a3.zip |
echo: expose address/port config to apps
-rw-r--r-- | echo/echo_default.go | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/echo/echo_default.go b/echo/echo_default.go index 98a8ee6..8d5e1a9 100644 --- a/echo/echo_default.go +++ b/echo/echo_default.go | |||
@@ -72,10 +72,11 @@ type EchoConfig struct { | |||
72 | 72 | ||
73 | type EchoWrapper struct { | 73 | type EchoWrapper struct { |
74 | *echo.Echo | 74 | *echo.Echo |
75 | runner *service.AppRunner | 75 | AddressPortConfig *AddressPortConfig |
76 | autocert autocert.PrimingCertProvider | 76 | runner *service.AppRunner |
77 | templateFS fs.FS | 77 | autocert autocert.PrimingCertProvider |
78 | errorHandler ErrorHandler | 78 | templateFS fs.FS |
79 | errorHandler ErrorHandler | ||
79 | } | 80 | } |
80 | 81 | ||
81 | // NewEchoWrapper creates a new instance of Echo and wraps it in an | 82 | // NewEchoWrapper creates a new instance of Echo and wraps it in an |
@@ -138,7 +139,7 @@ func (w *EchoWrapper) AddErrorHandler(h ContentErrorHandler, mime ...string) { | |||
138 | w.errorHandler.AddHandler(h, mime...) | 139 | w.errorHandler.AddHandler(h, mime...) |
139 | } | 140 | } |
140 | 141 | ||
141 | func (w *EchoWrapper) Configure(c EchoConfig) error { | 142 | func (w *EchoWrapper) Configure(c EchoConfig) (err error) { |
142 | w.configureAutocert(&c) | 143 | w.configureAutocert(&c) |
143 | 144 | ||
144 | if err := w.configureIpExtractor(&c); err != nil { | 145 | if err := w.configureIpExtractor(&c); err != nil { |
@@ -153,14 +154,14 @@ func (w *EchoWrapper) Configure(c EchoConfig) error { | |||
153 | return err | 154 | return err |
154 | } | 155 | } |
155 | 156 | ||
156 | bindings, err := ParseAddressPortBindings(c.BindAddresses) | 157 | w.AddressPortConfig, err = ParseAddressPortBindings(c.BindAddresses) |
157 | if err != nil { | 158 | if err != nil { |
158 | return fmt.Errorf("Error parsing address/port bindings") | 159 | return fmt.Errorf("Error parsing address/port bindings") |
159 | } | 160 | } |
160 | 161 | ||
161 | w.buildServers(&c, bindings) | 162 | w.buildServers(&c) |
162 | w.configureBodyLimit(&c) | 163 | w.configureBodyLimit(&c) |
163 | w.configureRedirects(&c, bindings) | 164 | w.configureRedirects(&c) |
164 | w.configureCompression(&c) | 165 | w.configureCompression(&c) |
165 | 166 | ||
166 | w.Use(glmw.StrictSecure()) | 167 | w.Use(glmw.StrictSecure()) |
@@ -261,8 +262,8 @@ func (w *EchoWrapper) makeServerJob(s webServer) service.RunnerFunc { | |||
261 | } | 262 | } |
262 | } | 263 | } |
263 | 264 | ||
264 | func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { | 265 | func (w *EchoWrapper) buildServers(c *EchoConfig) { |
265 | for _, a := range bindings.HttpBindings() { | 266 | for _, a := range w.AddressPortConfig.HttpBindings() { |
266 | s := &http.Server{ | 267 | s := &http.Server{ |
267 | Addr: a, | 268 | Addr: a, |
268 | Handler: w, | 269 | Handler: w, |
@@ -271,7 +272,7 @@ func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { | |||
271 | w.runner.AddJob(w.makeServerJob(&netHttpWrapper{s})) | 272 | w.runner.AddJob(w.makeServerJob(&netHttpWrapper{s})) |
272 | } | 273 | } |
273 | 274 | ||
274 | for _, a := range bindings.TlsBindings() { | 275 | for _, a := range w.AddressPortConfig.TlsBindings() { |
275 | s := &http.Server{ | 276 | s := &http.Server{ |
276 | Addr: a, | 277 | Addr: a, |
277 | TLSConfig: &tls.Config{ | 278 | TLSConfig: &tls.Config{ |
@@ -285,7 +286,7 @@ func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { | |||
285 | w.runner.AddJob(w.makeServerJob(&netHttpWrapper{s})) | 286 | w.runner.AddJob(w.makeServerJob(&netHttpWrapper{s})) |
286 | } | 287 | } |
287 | 288 | ||
288 | for _, a := range bindings.QuicBindings() { | 289 | for _, a := range w.AddressPortConfig.QuicBindings() { |
289 | q := &http3.Server{ | 290 | q := &http3.Server{ |
290 | Addr: a, | 291 | Addr: a, |
291 | TLSConfig: http3.ConfigureTLSConfig(&tls.Config{ | 292 | TLSConfig: http3.ConfigureTLSConfig(&tls.Config{ |
@@ -295,7 +296,7 @@ func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { | |||
295 | Handler: w, | 296 | Handler: w, |
296 | } | 297 | } |
297 | w.runner.AddJob(w.makeServerJob(&http3Wrapper{q})) | 298 | w.runner.AddJob(w.makeServerJob(&http3Wrapper{q})) |
298 | w.Use(glmw.Http3AltSvcMiddleware(bindings.QuicPort)) | 299 | w.Use(glmw.Http3AltSvcMiddleware(w.AddressPortConfig.QuicPort)) |
299 | } | 300 | } |
300 | } | 301 | } |
301 | 302 | ||
@@ -307,12 +308,12 @@ func (w *EchoWrapper) configureBodyLimit(c *EchoConfig) { | |||
307 | } | 308 | } |
308 | } | 309 | } |
309 | 310 | ||
310 | func (w *EchoWrapper) configureRedirects(c *EchoConfig, bindings *AddressPortConfig) { | 311 | func (w *EchoWrapper) configureRedirects(c *EchoConfig) { |
311 | metricsSkipper := makeMiddlewareSkipper(c.PrometheusConfig) | 312 | metricsSkipper := makeMiddlewareSkipper(c.PrometheusConfig) |
312 | 313 | ||
313 | w.Use(glmw.HTTPSRedirectWithConfig(glmw.HTTPSRedirectConfig{ | 314 | w.Use(glmw.HTTPSRedirectWithConfig(glmw.HTTPSRedirectConfig{ |
314 | Skipper: metricsSkipper, | 315 | Skipper: metricsSkipper, |
315 | Port: bindings.TlsPort, | 316 | Port: w.AddressPortConfig.TlsPort, |
316 | })) | 317 | })) |
317 | 318 | ||
318 | if c.RedirectToWWW { | 319 | if c.RedirectToWWW { |