49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
|
package proxy
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
|
||
|
log "github.com/sirupsen/logrus"
|
||
|
"goauthentik.io/outpost/api"
|
||
|
)
|
||
|
|
||
|
func (s *Server) Refresh() error {
|
||
|
providers, err := s.ak.Update()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if providers == nil {
|
||
|
s.logger.Debug("Providers have not changed, not updating")
|
||
|
return nil
|
||
|
}
|
||
|
bundles := s.bundleProviders(providers)
|
||
|
s.updateHTTPServer(bundles)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (s *Server) bundleProviders(providers []api.ProxyOutpostConfig) []*providerBundle {
|
||
|
bundles := make([]*providerBundle, len(providers))
|
||
|
for idx, provider := range providers {
|
||
|
externalHost, err := url.Parse(provider.ExternalHost)
|
||
|
if err != nil {
|
||
|
log.WithError(err).Warning("Failed to parse URL, skipping provider")
|
||
|
}
|
||
|
bundles[idx] = &providerBundle{
|
||
|
s: s,
|
||
|
Host: externalHost.Host,
|
||
|
log: log.WithField("logger", "authentik.outpost.proxy-bundle").WithField("provider", provider.Name),
|
||
|
}
|
||
|
bundles[idx].Build(provider)
|
||
|
}
|
||
|
return bundles
|
||
|
}
|
||
|
|
||
|
func (s *Server) updateHTTPServer(bundles []*providerBundle) {
|
||
|
newMap := make(map[string]*providerBundle)
|
||
|
for _, bundle := range bundles {
|
||
|
newMap[bundle.Host] = bundle
|
||
|
}
|
||
|
s.logger.Debug("Swapped maps")
|
||
|
s.Handlers = newMap
|
||
|
}
|