mirror of
https://github.com/yusing/godoxy.git
synced 2025-06-09 04:52:35 +02:00
support middleware cross referencing
This commit is contained in:
parent
642e6ebdc8
commit
adb41a80c5
3 changed files with 33 additions and 7 deletions
|
@ -94,9 +94,9 @@ func (m *Middleware) finalize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Middleware) New(optsRaw OptionsRaw) (*Middleware, E.Error) {
|
func (m *Middleware) New(optsRaw OptionsRaw) (*Middleware, E.Error) {
|
||||||
if m.construct == nil {
|
if m.construct == nil { // likely a middleware from compose
|
||||||
if optsRaw != nil {
|
if len(optsRaw) != 0 {
|
||||||
panic("bug: middleware already constructed")
|
return nil, E.New("additional options not allowed for middleware ").Subject(m.name)
|
||||||
}
|
}
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,17 +61,38 @@ func LoadComposeFiles() {
|
||||||
logger.Err(err).Msg("failed to list middleware definitions")
|
logger.Err(err).Msg("failed to list middleware definitions")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
for _, defFile := range middlewareDefs {
|
||||||
|
voidErrs := E.NewBuilder("") // ignore these errors, will be added in next step
|
||||||
|
mws := BuildMiddlewaresFromComposeFile(defFile, voidErrs)
|
||||||
|
if len(mws) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for name, m := range mws {
|
||||||
|
name = strutils.ToLowerNoSnake(name)
|
||||||
|
if _, ok := allMiddlewares[name]; ok {
|
||||||
|
errs.Add(ErrDuplicatedMiddleware.Subject(name))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
allMiddlewares[name] = m
|
||||||
|
logger.Info().
|
||||||
|
Str("src", path.Base(defFile)).
|
||||||
|
Str("name", name).
|
||||||
|
Msg("middleware loaded")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// build again to resolve cross references
|
||||||
for _, defFile := range middlewareDefs {
|
for _, defFile := range middlewareDefs {
|
||||||
mws := BuildMiddlewaresFromComposeFile(defFile, errs)
|
mws := BuildMiddlewaresFromComposeFile(defFile, errs)
|
||||||
if len(mws) == 0 {
|
if len(mws) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for name, m := range mws {
|
for name, m := range mws {
|
||||||
|
name = strutils.ToLowerNoSnake(name)
|
||||||
if _, ok := allMiddlewares[name]; ok {
|
if _, ok := allMiddlewares[name]; ok {
|
||||||
errs.Add(ErrDuplicatedMiddleware.Subject(name))
|
// already loaded above
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
allMiddlewares[strutils.ToLowerNoSnake(name)] = m
|
allMiddlewares[name] = m
|
||||||
logger.Info().
|
logger.Info().
|
||||||
Str("src", path.Base(defFile)).
|
Str("src", path.Base(defFile)).
|
||||||
Str("name", name).
|
Str("name", name).
|
||||||
|
|
|
@ -98,15 +98,20 @@ GoDoxy v0.8.2 expected changes
|
||||||
````
|
````
|
||||||
|
|
||||||
- config reload will now cause all servers to fully restart (i.e. proxy, api, prometheus, etc)
|
- config reload will now cause all servers to fully restart (i.e. proxy, api, prometheus, etc)
|
||||||
|
|
||||||
- multiline-string as list now treated as YAML list, which requires hyphen prefix `-`, i.e.
|
- multiline-string as list now treated as YAML list, which requires hyphen prefix `-`, i.e.
|
||||||
```yaml
|
```yaml
|
||||||
proxy.app.middlewares.request.hide_headers:
|
proxy.app.middlewares.request.hide_headers:
|
||||||
- X-Header1
|
- X-Header1
|
||||||
- X-Header2
|
- X-Header2
|
||||||
````
|
````
|
||||||
|
|
||||||
- autocert now supports hot-reload
|
- autocert now supports hot-reload
|
||||||
|
- middleware compose now supports cross-referencing, e.g.
|
||||||
|
```yaml
|
||||||
|
foo:
|
||||||
|
- use: RedirectHTTP
|
||||||
|
bar: # in the same file or different file
|
||||||
|
- use: foo@file
|
||||||
|
```
|
||||||
|
|
||||||
- Fixes
|
- Fixes
|
||||||
- bug: cert renewal failure no longer causes renew schdueler to stuck forever
|
- bug: cert renewal failure no longer causes renew schdueler to stuck forever
|
||||||
|
|
Loading…
Add table
Reference in a new issue