...
1 package handlers
2
3 import (
4 "errors"
5 "net/http"
6 "time"
7
8 "github.com/gin-gonic/gin"
9
10 "edge-infra.dev/pkg/edge/api/middleware"
11 "edge-infra.dev/pkg/edge/auth-proxy/utils"
12 )
13
14
15 func (h ProxyHandler) TokenExchange(req *http.Request, body []byte) (*http.Request, []byte, error) {
16 respBody, err := utils.GetGraphqlResponse(body)
17 if err != nil {
18 h.log.Error(err, "failed to unmarshal client response")
19 h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"})
20 return req, body, err
21 }
22 var resp struct{ TokenExchange string }
23 if err := utils.Unpack(respBody.Data, &resp); err != nil {
24 h.log.Error(err, "failed to unpack response")
25 h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"})
26 return req, body, err
27 }
28 if resp.TokenExchange == "" {
29 return req, body, errors.New("no response received or bsl token empty")
30 }
31 usr, err := middleware.ValidateAndGetUser(resp.TokenExchange, h.tokenSecret)
32 if err != nil {
33 h.log.Error(err, "failed to validate user token")
34 h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"})
35 return req, body, err
36 }
37 h.session.Set("token", usr.Token)
38 h.session.Set("expires_on", time.Now().UTC().Add(15*time.Minute))
39 return req, body, h.session.Save()
40 }
41
View as plain text