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

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
})
}