zitadel-oidc/pkg/op/default_handler.go
2019-11-19 13:10:40 +01:00

101 lines
2.1 KiB
Go

package server
import (
"net/http"
"github.com/caos/oidc/pkg/utils"
"github.com/caos/oidc/pkg/oidc"
)
type DefaultHandler struct {
config *Config
discoveryConfig *oidc.DiscoveryConfiguration
storage Storage
http *http.Server
}
type Config struct {
Issuer string
AuthorizationEndpoint string
TokenEndpoint string
UserinfoEndpoint string
Port string
}
func (c *Config) OIDC() *oidc.DiscoveryConfiguration {
return &oidc.DiscoveryConfiguration{}
}
func NewDefaultHandler(config *Config, storage Storage) Handler {
h := &DefaultHandler{
config: config,
discoveryConfig: config.OIDC(),
storage: storage,
}
router := CreateRouter(h)
h.http = &http.Server{
Addr: config.Port,
Handler: router,
}
return h
}
func (h *DefaultHandler) Issuer() string {
return h.config.Issuer
}
func (h *DefaultHandler) AuthorizationEndpoint() string {
return h.config.AuthorizationEndpoint
}
func (h *DefaultHandler) TokenEndpoint() string {
return h.config.TokenEndpoint
}
func (h *DefaultHandler) UserinfoEndpoint() string {
return h.config.UserinfoEndpoint
}
func (h *DefaultHandler) Port() string {
return h.config.Port
}
func (h *DefaultHandler) HttpHandler() *http.Server {
return h.http
}
func (h *DefaultHandler) HandleDiscovery(w http.ResponseWriter, r *http.Request) {
utils.MarshalJSON(w, h.discoveryConfig)
}
func (h *DefaultHandler) HandleAuthorize(w http.ResponseWriter, r *http.Request) {
authRequest, err := ParseAuthRequest(w, r)
if err != nil {
//TODO: return err
}
err = ValidateAuthRequest(authRequest)
if err != nil {
//TODO: return err
}
if NeedsExistingSession(authRequest) {
// session, err := h.storage.CheckSession(authRequest)
// if err != nil {
// //TODO: return err
// }
}
err = h.storage.CreateAuthRequest(authRequest)
if err != nil {
//TODO: return err
}
//TODO: redirect?
}
func (h *DefaultHandler) HandleExchange(w http.ResponseWriter, r *http.Request) {
}
func (h *DefaultHandler) HandleUserinfo(w http.ResponseWriter, r *http.Request) {
}