package tokens import ( "gitea.deepak.science/deepak/gogmagog/models" "github.com/go-chi/jwtauth" "time" ) // Toker represents a tokenizer, capable of encoding and verifying tokens. type Toker interface { EncodeUser(user *models.UserNoPassword) string VerifyTokenString(tokenString string) error } type jwtToker struct { tokenAuth *jwtauth.JWTAuth } // New returns a default Toker for a given secret key. func New(key string) Toker { return &jwtToker{tokenAuth: jwtauth.New("HS256", []byte(key), nil)} } func (tok *jwtToker) EncodeUser(user *models.UserNoPassword) string { claims := map[string]interface{}{ "user_id": user.UserID, "username": user.Username, "display_name": user.DisplayName, "iss": "gogmagog.deepak.science", "aud": "gogmagog.deepak.science", } jwtauth.SetIssuedNow(claims) jwtauth.SetExpiryIn(claims, 2*time.Hour) _, tokenString, _ := tok.tokenAuth.Encode(claims) return tokenString } func (tok *jwtToker) VerifyTokenString(tokenString string) error { _, err := jwtauth.VerifyToken(tok.tokenAuth, tokenString) return err }