parcoursmob/servers/web/auth/groups.go

58 lines
1.3 KiB
Go

package auth
import (
"context"
"net/http"
"github.com/rs/zerolog/log"
)
func (h *Handler) Groups(w http.ResponseWriter, r *http.Request) {
session, _ := h.idp.SessionsStore.Get(r, "parcoursmob_session")
if r.Method == "POST" {
r.ParseForm()
groupid := r.FormValue("group")
session.Values["organization"] = groupid
session.Save(r, w)
http.Redirect(w, r, "/app/", http.StatusFound)
return
}
tokenstring, ok := session.Values["idtoken"]
if !ok {
http.Redirect(w, r, "/app/", http.StatusFound)
return
}
idtoken, err := h.idp.TokenVerifier.Verify(context.Background(), tokenstring.(string))
if err != nil {
delete(session.Values, "idtoken")
http.Redirect(w, r, "/app/", http.StatusFound)
return
}
result, err := h.applicationHandler.GetUserGroups(idtoken)
if err != nil {
log.Error().Err(err).Msg("Failed to get user groups")
w.WriteHeader(http.StatusInternalServerError)
return
}
var groupsresponse = []any{}
for _, group := range result.Groups {
groupsresponse = append(groupsresponse, group)
}
h.renderer.AuthGroups(w, r, groupsresponse)
}
func (h *Handler) GroupSwitch(w http.ResponseWriter, r *http.Request) {
session, _ := h.idp.SessionsStore.Get(r, "parcoursmob_session")
delete(session.Values, "organization")
session.Save(r, w)
http.Redirect(w, r, "/app/", http.StatusFound)
}