101 lines
2.1 KiB
Go
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) {
|
|
|
|
}
|