mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 08:28:02 -05:00
Co-authored-by: georgehao <haohongfan@gmail.com> Co-authored-by: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com>
51 lines
1.2 KiB
Go
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
|
|
}
|