...
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 var (
15 ErrEmptyBSLTokenResponse = errors.New("no response received or bsl token empty")
16 )
17
18
19 func (h ProxyHandler) SessionRefresh(req *http.Request, body []byte) (*http.Request, []byte, error) {
20 respBody, err := utils.GetGraphqlResponse(body)
21 if err != nil {
22 h.log.Error(err, "failed to unmarshal client response")
23 h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"})
24 return req, body, err
25 }
26 var resp struct{ SessionRefresh string }
27 if err := utils.Unpack(respBody.Data, &resp); err != nil {
28 h.log.Error(err, "failed to unpack response")
29 h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"})
30 return req, body, err
31 }
32 if resp.SessionRefresh == "" {
33 return req, body, ErrEmptyBSLTokenResponse
34 }
35 usr, err := middleware.ValidateAndGetUser(resp.SessionRefresh, h.tokenSecret)
36 if err != nil {
37 h.log.Error(err, "failed to validate user token")
38 h.c.JSON(http.StatusInternalServerError, gin.H{"message": "Internal Server Error"})
39 return req, body, err
40 }
41 h.session.Set("token", usr.Token)
42 h.session.Set("refresh_token", usr.RefreshToken)
43 h.session.Set("expires_on", time.Now().UTC().Add(h.sessionDuration))
44 return req, body, h.session.Save()
45 }
46
View as plain text