You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
984 B
Go
40 lines
984 B
Go
package builtin
|
|
|
|
import (
|
|
ctxpkg "github.com/noahlann/nnet/pkg/context"
|
|
routerpkg "github.com/noahlann/nnet/pkg/router"
|
|
)
|
|
|
|
// AuthMiddleware 认证中间件工厂
|
|
func AuthMiddleware(validator func(ctx ctxpkg.Context) bool) routerpkg.Handler {
|
|
return func(ctx ctxpkg.Context) error {
|
|
if validator == nil {
|
|
return nil
|
|
}
|
|
|
|
if !validator(ctx) {
|
|
ctx.Response().WriteString("Unauthorized\n")
|
|
return nil // 或者返回错误
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// TokenAuthMiddleware Token认证中间件
|
|
func TokenAuthMiddleware(tokenKey string, expectedToken string) routerpkg.Handler {
|
|
return AuthMiddleware(func(ctx ctxpkg.Context) bool {
|
|
token := ctx.GetString(tokenKey)
|
|
return token == expectedToken
|
|
})
|
|
}
|
|
|
|
// HeaderAuthMiddleware Header认证中间件
|
|
func HeaderAuthMiddleware(headerKey string, expectedValue string) routerpkg.Handler {
|
|
return AuthMiddleware(func(ctx ctxpkg.Context) bool {
|
|
value := ctx.GetString(headerKey)
|
|
return value == expectedValue
|
|
})
|
|
}
|
|
|