added option for jwt token ttl

This commit is contained in:
yusing 2024-11-02 03:21:47 +08:00
parent a86d316d07
commit 91e012987e
2 changed files with 15 additions and 3 deletions

View file

@ -30,8 +30,6 @@ var (
ErrInvalidPassword = E.New("invalid password") ErrInvalidPassword = E.New("invalid password")
) )
const tokenExpiration = 24 * time.Hour
func validatePassword(cred *Credentials) error { func validatePassword(cred *Credentials) error {
if cred.Username != common.APIUser { if cred.Username != common.APIUser {
return ErrInvalidUsername.Subject(cred.Username) return ErrInvalidUsername.Subject(cred.Username)
@ -54,7 +52,7 @@ func LoginHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
expiresAt := time.Now().Add(tokenExpiration) expiresAt := time.Now().Add(common.APIJWTTokenTTL)
claim := &Claims{ claim := &Claims{
Username: creds.Username, Username: creds.Username,
RegisteredClaims: jwt.RegisteredClaims{ RegisteredClaims: jwt.RegisteredClaims{

View file

@ -6,6 +6,7 @@ import (
"os" "os"
"strconv" "strconv"
"strings" "strings"
"time"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@ -33,6 +34,7 @@ var (
APIHTTPURL = GetAddrEnv("GOPROXY_API_ADDR", "127.0.0.1:8888", "http") APIHTTPURL = GetAddrEnv("GOPROXY_API_ADDR", "127.0.0.1:8888", "http")
APIJWTSecret = decodeJWTKey(GetEnv("GOPROXY_API_JWT_SECRET", generateJWTKey(32))) APIJWTSecret = decodeJWTKey(GetEnv("GOPROXY_API_JWT_SECRET", generateJWTKey(32)))
APIJWTTokenTTL = GetDurationEnv("GOPROXY_API_JWT_TOKEN_TTL", time.Hour)
APIUser = GetEnv("GOPROXY_API_USER", "admin") APIUser = GetEnv("GOPROXY_API_USER", "admin")
APIPasswordHash = HashPassword(GetEnv("GOPROXY_API_PASSWORD", "password")) APIPasswordHash = HashPassword(GetEnv("GOPROXY_API_PASSWORD", "password"))
) )
@ -69,3 +71,15 @@ func GetAddrEnv(key, defaultValue, scheme string) (addr, host, port, fullURL str
fullURL = fmt.Sprintf("%s://%s:%s", scheme, host, port) fullURL = fmt.Sprintf("%s://%s:%s", scheme, host, port)
return return
} }
func GetDurationEnv(key string, defaultValue time.Duration) time.Duration {
value, ok := os.LookupEnv(key)
if !ok || value == "" {
return defaultValue
}
d, err := time.ParseDuration(value)
if err != nil {
log.Fatal().Msgf("env %s: invalid duration value: %s", key, value)
}
return d
}