Skip to content
Snippets Groups Projects
Select Git revision
  • 4631e15d9449defcbc28139e00d8f6b7a3d243e0
  • dev default protected
  • prod protected
  • 1.0.58
  • 1.0.57
  • 1.0.52
  • 1.0.56
  • 1.0.51
  • 1.0.50
  • 1.0.33
  • 1.0.32
  • 1.0.31
  • 1.0.30
  • 1.0.29
  • 1.0.28
  • 1.0.27
  • 1.0.26
  • 1.0.25
  • 1.0.24
  • 1.0.23
  • 1.0.22
  • 1.0.21
  • 1.0.20
23 results

config.xml

Blame
  • jwt.go 5.50 KiB
    package auth
    
    import (
    	"encoding/json"
    	"github.com/golang-jwt/jwt/v4"
    	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/date_utils"
    	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
    	"net/http"
    	"time"
    )
    
    type JsonWebToken struct {
    	UserID     string    `json:"user_id"`
    	ProviderID int64     `json:"provider_id,omitempty"`
    	ExpiryDate time.Time `json:"expiry_date"`
    }
    
    // GenerateJWTWithSessionToken first signs the session token with the secret key, then takes the payload and generates a
    // signed JWT using the resulting signed session token
    func GenerateJWTWithSessionToken(payload JsonWebToken, secretKey string, sessionToken string) (string, error) {
    	signedSessionToken := SignSessionTokenWithKey(secretKey, sessionToken)
    	return GenerateJWT(payload, signedSessionToken)
    }
    
    // GenerateJWT takes the payload and generates a signed JWT using the provided secret
    func GenerateJWT(payload JsonWebToken, secretKey string) (string, error) {
    	// Convert the JsonWebToken to a map[string]interface{}
    	tokenBytes, err := json.Marshal(payload)
    	if err != nil {
    		return "", err
    	}
    
    	tokenMap := make(map[string]interface{})
    	err = json.Unmarshal(tokenBytes, &tokenMap)
    	if err != nil {
    		return "", err
    	}
    
    	// Create the signed token
    	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims(tokenMap))
    	tokenString, err := token.SignedString([]byte(secretKey))
    	if err != nil {
    		return "", err
    	}
    
    	return tokenString, nil
    }
    
    func getJsonWebTokenFromTokenClaims(token *jwt.Token, checkValidity bool) (JsonWebToken, error) {
    	if token == nil {
    		return JsonWebToken{}, errors.Error("could not get token from token string")
    	}
    
    	claims, ok := token.Claims.(jwt.MapClaims)
    	if !ok || (checkValidity && token.Valid == false) {
    		return JsonWebToken{}, errors.Error("invalid token")
    	}
    
    	// Convert the MapClaims to a JsonWebToken
    	claimsBytes, err := json.Marshal(claims)
    	if err != nil {
    		return JsonWebToken{}, err
    	}
    
    	var jsonWebToken JsonWebToken
    	err = json.Unmarshal(claimsBytes, &jsonWebToken)
    	if err != nil {
    		return JsonWebToken{}, err
    	}