package handlers import ( "fmt" "net/http" "time" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" "edge-infra.dev/pkg/edge/api/middleware" ) func (h ProxyHandler) Default(req *http.Request, body []byte) (*http.Request, []byte, error) { expiresAt := h.session.Get("expires_on") if expiresAt != nil { expirationTime := expiresAt.(time.Time) if expirationTime.Before(time.Now().UTC()) { h.log.Info("session has expired, deleting session", "sessionID", h.session.ID(), "expirationTime", expirationTime.String()) h.session.Clear() h.session.Options(sessions.Options{MaxAge: -1}) if err := h.session.Save(); err != nil { return req, body, err } h.c.JSON(http.StatusNotFound, gin.H{"error": "unauthorized"}) h.c.Abort() } } return req, body, nil } func (h ProxyHandler) SessionDefault(req *http.Request, body []byte) (*http.Request, []byte, error) { if h.session.Get("id") == nil { return req, body, nil } username := "" email := "" roles := make([]string, 0) token := "" organization := "" refreshToken := "" usernameSessionVal := h.session.Get("username") if usernameSessionVal != nil { username = usernameSessionVal.(string) } emailSessionVal := h.session.Get("email") if emailSessionVal != nil { email = emailSessionVal.(string) } rolesSessionVal := h.session.Get("roles") if rolesSessionVal != nil { roles = rolesSessionVal.([]string) } tokenSessionVal := h.session.Get("token") if tokenSessionVal != nil { token = tokenSessionVal.(string) } refreshTokenSessionVal := h.session.Get("refresh_token") if refreshTokenSessionVal != nil { refreshToken = refreshTokenSessionVal.(string) } organizationSessionVal := h.session.Get("organization") if organizationSessionVal != nil { organization = organizationSessionVal.(string) } authProvider := h.session.Get("auth_type").(string) edgeToken, err := middleware.CreateToken(username, email, organization, h.tokenSecret, roles, token, authProvider, refreshToken) if err != nil { h.log.Error(err, "unable to create edge token") return req, body, err } req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", edgeToken)) return req, body, nil }