mirror of
https://github.com/getAlby/lndhub.go.git
synced 2025-12-23 23:55:02 +01:00
Make JWT expiry configurable and require to set a JWT secret
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
// AuthController : AuthController struct
|
||||
type AuthController struct {
|
||||
JWTSecret []byte
|
||||
JWTExpiry int
|
||||
}
|
||||
|
||||
// Auth : Auth Controller
|
||||
@@ -80,12 +81,12 @@ func (ctrl AuthController) Auth(c echo.Context) error {
|
||||
})
|
||||
}
|
||||
|
||||
accessToken, err := tokens.GenerateAccessToken(ctrl.JWTSecret, &user)
|
||||
accessToken, err := tokens.GenerateAccessToken(ctrl.JWTSecret, ctrl.JWTExpiry, &user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
refreshToken, err := tokens.GenerateRefreshToken(ctrl.JWTSecret, &user)
|
||||
refreshToken, err := tokens.GenerateRefreshToken(ctrl.JWTSecret, ctrl.JWTExpiry, &user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ func Middleware(secret []byte) echo.MiddlewareFunc {
|
||||
config.Claims = &jwtCustomClaims{}
|
||||
config.ContextKey = "UserJwt"
|
||||
config.SigningKey = secret
|
||||
config.ErrorHandler = func(err error) error {
|
||||
config.ErrorHandlerWithContext = func(err error, c echo.Context) error {
|
||||
c.Logger().Error(err)
|
||||
return echo.NewHTTPError(http.StatusBadRequest, echo.Map{
|
||||
"error": true,
|
||||
"code": 1,
|
||||
@@ -63,19 +64,19 @@ func UserMiddleware(db *bun.DB) echo.MiddlewareFunc {
|
||||
|
||||
ctx.User = &user
|
||||
|
||||
return next(c)
|
||||
return next(ctx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GenerateAccessToken : Generate Access Token
|
||||
func GenerateAccessToken(secret []byte, u *models.User) (string, error) {
|
||||
func GenerateAccessToken(secret []byte, expiryInSeconds int, u *models.User) (string, error) {
|
||||
claims := &jwtCustomClaims{
|
||||
ID: u.ID,
|
||||
IsRefresh: false,
|
||||
StandardClaims: jwt.StandardClaims{
|
||||
// one week expiration
|
||||
ExpiresAt: time.Now().Add(time.Hour * 24 * 7).Unix(),
|
||||
ExpiresAt: time.Now().Add(time.Second * time.Duration(expiryInSeconds)).Unix(),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -90,13 +91,13 @@ func GenerateAccessToken(secret []byte, u *models.User) (string, error) {
|
||||
}
|
||||
|
||||
// GenerateRefreshToken : Generate Refresh Token
|
||||
func GenerateRefreshToken(secret []byte, u *models.User) (string, error) {
|
||||
func GenerateRefreshToken(secret []byte, expiryInSeconds int, u *models.User) (string, error) {
|
||||
claims := &jwtCustomClaims{
|
||||
ID: u.ID,
|
||||
IsRefresh: true,
|
||||
StandardClaims: jwt.StandardClaims{
|
||||
// one week expiration
|
||||
ExpiresAt: time.Now().Add(time.Hour * 24 * 7).Unix(),
|
||||
ExpiresAt: time.Now().Add(time.Second * time.Duration(expiryInSeconds)).Unix(),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
5
main.go
5
main.go
@@ -28,7 +28,8 @@ type Config struct {
|
||||
DatabaseUri string `envconfig:"DATABASE_URI" required:"true"`
|
||||
SentryDSN string `envconfig:"SENTRY_DSN"`
|
||||
LogFilePath string `envconfig:"LOG_FILE_PATH"`
|
||||
JWTSecret []byte `envconfig:"JWT_SECRET" default:"secret"`
|
||||
JWTSecret []byte `envconfig:"JWT_SECRET" required:"true"`
|
||||
JWTExpiry int `envconfig:"JWT_Expiry" default:"604800"` // in seconds
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -97,7 +98,7 @@ func main() {
|
||||
e.Use(middleware.BodyLimit("250K"))
|
||||
e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))
|
||||
|
||||
e.POST("/auth", controllers.AuthController{JWTSecret: c.JWTSecret}.Auth)
|
||||
e.POST("/auth", controllers.AuthController{JWTSecret: c.JWTSecret, JWTExpiry: c.JWTExpiry}.Auth)
|
||||
e.POST("/create", controllers.CreateUserController{}.CreateUser)
|
||||
|
||||
secured := e.Group("", tokens.Middleware(c.JWTSecret), tokens.UserMiddleware(dbConn))
|
||||
|
||||
Reference in New Issue
Block a user