gogmagog/tokens/tokens.go
Deepak 417a7cf982
All checks were successful
gitea-deepak/gogmagog/pipeline/head This commit looks good
Decouples routers and adds auth for plans and actions call
2021-01-12 16:15:28 -06:00

48 lines
1.2 KiB
Go

package tokens
import (
"gitea.deepak.science/deepak/gogmagog/models"
"github.com/go-chi/jwtauth"
"net/http"
"time"
)
// Toker represents a tokenizer, capable of encoding and verifying tokens.
type Toker interface {
EncodeUser(user *models.UserNoPassword) string
VerifyTokenString(tokenString string) error
Verifier() func(http.Handler) http.Handler
}
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
}
func (tok *jwtToker) Verifier() func(http.Handler) http.Handler {
return jwtauth.Verifier(tok.tokenAuth)
}