aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crute <mike@crute.us>2023-10-08 12:33:48 -0700
committerMike Crute <mike@crute.us>2023-10-08 12:33:51 -0700
commit2d903b840e18144f29a4f4a9a0305f8ba16f19a3 (patch)
tree5e749d85e18e78f586c2dac3fd5ea30f14b18fc4
parentb151147e2106d74c599efccb99b1b718b7f0c1f2 (diff)
downloadgolib-2d903b840e18144f29a4f4a9a0305f8ba16f19a3.tar.bz2
golib-2d903b840e18144f29a4f4a9a0305f8ba16f19a3.tar.xz
golib-2d903b840e18144f29a4f4a9a0305f8ba16f19a3.zip
echo: expose address/port config to apps
-rw-r--r--echo/echo_default.go31
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
73type EchoWrapper struct { 73type 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
141func (w *EchoWrapper) Configure(c EchoConfig) error { 142func (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
264func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { 265func (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
310func (w *EchoWrapper) configureRedirects(c *EchoConfig, bindings *AddressPortConfig) { 311func (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 {