view auth/token.go @ 143:abfac07bd82a vue-gettext

closing branch vue-gettext
author Thomas Junk <thomas.junk@intevation.de>
date Mon, 02 Jul 2018 09:37:53 +0200
parents bb9120d28950
children 0c56c56a1c44
line wrap: on
line source

package auth

import (
	"time"

	"gemma.intevation.de/gemma/config"

	jwt "github.com/dgrijalva/jwt-go"
)

type Claims struct {
	jwt.StandardClaims

	User  string   `json:"user"`
	Roles []string `json:"roles"`
}

const maxTokenValid = time.Hour * 3

func NewToken(user string, roles []string) (string, error) {

	// Create the Claims
	claims := &Claims{
		StandardClaims: jwt.StandardClaims{
			ExpiresAt: jwt.TimeFunc().Add(maxTokenValid).Unix(),
		},
		User:  user,
		Roles: roles,
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString(config.Config.JWTSignKey)
}

func TokenToClaims(token string) (*Claims, error) {
	claims := &Claims{}
	_, err := jwt.ParseWithClaims(token, claims,
		func(*jwt.Token) (interface{}, error) { return config.Config.JWTSignKey, nil })
	return claims, err
}

func GenerateToken(user, password string) (string, error) {
	roles, err := AllOtherRoles(user, password)
	if err != nil {
		return "", err
	}
	token, err := NewToken(user, roles)
	if err != nil {
		return "", err
	}
	ConnPool.Add(token, user, password)
	return token, nil
}