package handlers import ( "net/http" "slices" "github.com/gin-gonic/gin" "edge-infra.dev/pkg/edge/auth-proxy/utils" ) // SessionUSerEdgeRole handler that updates the session roles with most recent fetched BSL one func (h ProxyHandler) SessionUserEdgeRole(req *http.Request, body []byte) (*http.Request, []byte, error) { respBody, err := utils.GetGraphqlResponse(body) if err != nil { h.log.Error(err, "failed to unmarshal client response") h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"}) return req, body, err } var resp struct{ SessionUserEdgeRole []string } if err := utils.Unpack(respBody.Data, &resp); err != nil { h.log.Error(err, "failed to unpack response") h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"}) return req, body, err } sessionRoles := h.session.Get("roles").([]string) if !slices.Equal(resp.SessionUserEdgeRole, sessionRoles) && len(resp.SessionUserEdgeRole) > 0 { h.session.Set("roles", resp.SessionUserEdgeRole) } return req, body, h.session.Save() }