Skip to content
This repository has been archived by the owner on Nov 24, 2023. It is now read-only.

Commit

Permalink
Moved store setup to separate function and renamed ServeMux variable
Browse files Browse the repository at this point in the history
  • Loading branch information
dpattmann committed Dec 16, 2021
1 parent 9a587ca commit 5fe4d21
Showing 1 changed file with 39 additions and 37 deletions.
76 changes: 39 additions & 37 deletions cmd/furby/furby.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,36 @@ import (
flag "github.com/spf13/pflag"
)

func setupStoreAndReturnHandler(s config.Store) http.Handler {
clientCredentialsConfig := store.NewClientCredentialsConfig(s.Credentials)
tokenStore := store.NewMemoryStore(clientCredentialsConfig)

if s.Interval > 0 {
go tokenStore.BackgroundUpdate(s.Interval)
}

var authorizer auth.Authorizer
switch s.Auth.Type {
case "user-agent":
authorizer = auth.NewUserAgentAuthorizer(s.Auth.UserAgents)
case "header":
authorizer = auth.NewHeaderAuthorizer(s.Auth.HeaderName, s.Auth.HeaderValues)
default:
authorizer = auth.NewNoOpAuthorizer()
}

if s.Target != "" {
target, err := url.Parse(s.Target)
if err != nil {
log.Fatalf("Can't parse url. Error: %v", err)
}
return handler.NewProxyHandler(target, tokenStore, authorizer)

}

return handler.NewStoreHandler(tokenStore, authorizer)
}

func main() {
path := flag.StringP("config", "c", "/etc/furby/config.yaml", "config file")
flag.Parse()
Expand All @@ -27,56 +57,28 @@ func main() {

// The defaultMuxRouter exposes /debug/vars as a default route. As we don't want this,
// we create a new router
m := http.NewServeMux()
serveMux := http.NewServeMux()

for _, s := range c.Stores {
clientCredentialsConfig := store.NewClientCredentialsConfig(s.Credentials)
tokenStore := store.NewMemoryStore(clientCredentialsConfig)

for _, s := range c.Stores {
if s.Interval > 0 {
go tokenStore.BackgroundUpdate(s.Interval)
}
}

var authorizer auth.Authorizer
switch s.Auth.Type {
case "user-agent":
authorizer = auth.NewUserAgentAuthorizer(s.Auth.UserAgents)
case "header":
authorizer = auth.NewHeaderAuthorizer(s.Auth.HeaderName, s.Auth.HeaderValues)
default:
authorizer = auth.NewNoOpAuthorizer()
}

if s.Target != "" {
target, err := url.Parse("https://www.google.de")
if err != nil {
log.Fatalf("Can't parse url. Error: %v", err)
}
proxyHandler := handler.NewProxyHandler(target, tokenStore, authorizer)
m.Handle(s.Path, proxyHandler)
} else {
tokenHandler := handler.NewStoreHandler(tokenStore, authorizer)
m.Handle(s.Path, tokenHandler)
}
h := setupStoreAndReturnHandler(s)
serveMux.Handle(s.Path, h)
}

m.Handle("/metrics", promhttp.HandlerFor(metrics.PrometheusRegister, promhttp.HandlerOpts{}))
m.Handle("/health", handler.HealthHandler())
serveMux.Handle("/metrics", promhttp.HandlerFor(metrics.PrometheusRegister, promhttp.HandlerOpts{}))
serveMux.Handle("/health", handler.HealthHandler())

s := http.Server{
server := http.Server{
Addr: ":8443",
Handler: m,
Handler: serveMux,
}

if c.Server.Tls {
if err := s.ListenAndServeTLS(c.Server.Cert, c.Server.Key); err != nil {
if err := server.ListenAndServeTLS(c.Server.Cert, c.Server.Key); err != nil {
log.Fatal("Error running server")
}
}

if err := s.ListenAndServe(); err != nil {
if err := server.ListenAndServe(); err != nil {
log.Fatal("Error running server")
}
}

0 comments on commit 5fe4d21

Please sign in to comment.