Files
scroll/coordinator/internal/middleware/challenge_jwt.go
2023-08-05 08:27:07 +02:00

51 lines
1.2 KiB
Go

package middleware
import (
"crypto/rand"
"encoding/base64"
"time"
"github.com/gin-gonic/gin"
jwt "github.com/appleboy/gin-jwt/v2"
"github.com/scroll-tech/go-ethereum/log"
"scroll-tech/coordinator/internal/config"
)
// ChallengeMiddleware jwt challenge middleware
func ChallengeMiddleware(conf *config.Config) *jwt.GinJWTMiddleware {
jwtMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{
Authenticator: func(c *gin.Context) (interface{}, error) {
return nil, nil
},
PayloadFunc: func(data interface{}) jwt.MapClaims {
b := make([]byte, 32)
_, err := rand.Read(b)
if err != nil {
return jwt.MapClaims{}
}
return jwt.MapClaims{
"random": base64.URLEncoding.EncodeToString(b),
}
},
Unauthorized: unauthorized,
Key: []byte(conf.Auth.Secret),
Timeout: time.Second * time.Duration(conf.Auth.ChallengeExpireDurationSec),
TokenLookup: "header: Authorization, query: token, cookie: jwt",
TokenHeadName: "Bearer",
TimeFunc: time.Now,
LoginResponse: loginResponse,
})
if err != nil {
log.Crit("new jwt middleware panic", "error", err)
}
if errInit := jwtMiddleware.MiddlewareInit(); errInit != nil {
log.Crit("init jwt middleware panic", "error", errInit)
}
return jwtMiddleware
}