...

Source file src/edge-infra.dev/pkg/edge/auth-proxy/handlers/session_refresh.go

Documentation: edge-infra.dev/pkg/edge/auth-proxy/handlers

     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  // Okta Token handler that updates the session with new token from bsl.
    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