All checks were successful
gitea-deepak/gogmagog/pipeline/head This commit looks good
48 lines
1.2 KiB
Go
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)
|
|
}
|