github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/common/jwt.go (about)

     1  package common
     2  
     3  import (
     4  	"errors"
     5  	"net/http"
     6  	"time"
     7  
     8  	jwt "github.com/dgrijalva/jwt-go"
     9  	"github.com/dgrijalva/jwt-go/request"
    10  )
    11  
    12  func AuthJwt(signingKey string, req *http.Request) error {
    13  	if signingKey == "" {
    14  		return nil
    15  	}
    16  
    17  	extractor := request.AuthorizationHeaderExtractor
    18  	tokenString, err := extractor.ExtractToken(req)
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	token, err := jwt.ParseWithClaims(tokenString, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) {
    24  		return []byte(signingKey), nil
    25  	})
    26  
    27  	if err != nil {
    28  		return err
    29  	}
    30  
    31  	if _, ok := token.Claims.(*jwt.StandardClaims); ok && token.Valid {
    32  		return nil
    33  	}
    34  
    35  	return errors.New("Invalid token")
    36  
    37  }
    38  
    39  func GetJwt(signingKey string, expiration int) (string, error) {
    40  	now := time.Now().Unix()
    41  	claims := &jwt.StandardClaims{
    42  		ExpiresAt: time.Unix(now, 0).Add(time.Duration(expiration) * time.Second).Unix(),
    43  		IssuedAt:  now,
    44  		NotBefore: time.Unix(now, 0).Add(time.Duration(-1) * time.Minute).Unix(),
    45  	}
    46  	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    47  	ss, err := token.SignedString([]byte(signingKey))
    48  	return ss, err
    49  }