...

Source file src/edge-infra.dev/pkg/edge/auth-proxy/handlers/token_exchange.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  // TokenExchange handler that updates the session with new bsl token.
    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