feat: initial commit
This commit is contained in:
53
internal/http/handler/webui/auth/handler.go
Normal file
53
internal/http/handler/webui/auth/handler.go
Normal file
@ -0,0 +1,53 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"forge.cadoles.com/wpetit/kouiz/internal/http/handler/webui/auth/component"
|
||||
"github.com/gorilla/sessions"
|
||||
)
|
||||
|
||||
type Provider = component.ProviderVModel
|
||||
|
||||
type Handler struct {
|
||||
mux *http.ServeMux
|
||||
sessionStore sessions.Store
|
||||
sessionName string
|
||||
providers []Provider
|
||||
}
|
||||
|
||||
// ServeHTTP implements http.Handler.
|
||||
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
h.mux.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
func NewHandler(sessionStore sessions.Store, funcs ...OptionFunc) *Handler {
|
||||
opts := NewOptions(funcs...)
|
||||
h := &Handler{
|
||||
mux: http.NewServeMux(),
|
||||
sessionStore: sessionStore,
|
||||
sessionName: opts.SessionName,
|
||||
providers: opts.Providers,
|
||||
}
|
||||
|
||||
h.mux.HandleFunc("GET /login", h.getLoginPage)
|
||||
h.mux.Handle("GET /providers/{provider}", withContextProvider(http.HandlerFunc(h.handleProvider)))
|
||||
h.mux.Handle("GET /providers/{provider}/callback", withContextProvider(http.HandlerFunc(h.handleProviderCallback)))
|
||||
h.mux.HandleFunc("GET /logout", h.handleLogout)
|
||||
h.mux.Handle("GET /providers/{provider}/logout", withContextProvider(http.HandlerFunc(h.handleProviderLogout)))
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
var _ http.Handler = &Handler{}
|
||||
|
||||
func withContextProvider(h http.Handler) http.Handler {
|
||||
fn := func(w http.ResponseWriter, r *http.Request) {
|
||||
provider := r.PathValue("provider")
|
||||
r = r.WithContext(context.WithValue(r.Context(), "provider", provider))
|
||||
h.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
return http.HandlerFunc(fn)
|
||||
}
|
Reference in New Issue
Block a user