Files
wonderwall/pkg/router/handler.go
2021-10-06 14:49:04 +02:00

62 lines
1.3 KiB
Go

package router
import (
"github.com/rs/zerolog"
"sync"
"github.com/lestrrat-go/jwx/jwk"
"golang.org/x/oauth2"
"github.com/nais/wonderwall/pkg/config"
"github.com/nais/wonderwall/pkg/cryptutil"
"github.com/nais/wonderwall/pkg/session"
)
type Handler struct {
Config config.Config
Crypter cryptutil.Crypter
OauthConfig oauth2.Config
SecureCookies bool
Sessions session.Store
UpstreamHost string
jwkSet jwk.Set
lock sync.Mutex
httplogger zerolog.Logger
}
func NewHandler(
cfg config.Config,
crypter cryptutil.Crypter,
httplogger zerolog.Logger,
jwkSet jwk.Set,
sessionStore session.Store,
upstreamHost string,
) (*Handler, error) {
oauthConfig := oauth2.Config{
ClientID: cfg.IDPorten.ClientID,
Endpoint: oauth2.Endpoint{
AuthURL: cfg.IDPorten.WellKnown.AuthorizationEndpoint,
TokenURL: cfg.IDPorten.WellKnown.TokenEndpoint,
},
RedirectURL: cfg.IDPorten.RedirectURI,
Scopes: cfg.IDPorten.Scopes,
}
return &Handler{
Config: cfg,
Crypter: crypter,
httplogger: httplogger,
jwkSet: jwkSet,
lock: sync.Mutex{},
OauthConfig: oauthConfig,
Sessions: sessionStore,
SecureCookies: true,
UpstreamHost: upstreamHost,
}, nil
}
func (h *Handler) WithSecureCookie(enabled bool) *Handler {
h.SecureCookies = enabled
return h
}