wgcl/api/auth/handlr.go
2025-11-20 11:47:00 +08:00

52 lines
1.1 KiB
Go

package auth
import (
"errors"
"git.jasinco.work/wgcl/internal/federate"
"git.jasinco.work/wgcl/internal/logger"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
var Driver federate.AUTH = nil
type login struct {
Username string `form:"username" json:"username" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
var ErrBadRequest = errors.New("Failed to parse request")
var ErrNoDriver = errors.New("No Auth Driver")
func UserLogin(c *gin.Context) (*User, error) {
var cred login
if c.ShouldBind(&cred) != nil {
return nil, ErrBadRequest
}
if Driver == nil {
return nil, ErrNoDriver
}
userdn, err := Driver.UserAuthenticate(cred.Username, cred.Password)
if err == nil {
var power uint16 = 0
if stat, err := Driver.UserAuthorizeWG(userdn); err == nil {
if stat {
power |= AuthorizeWG
}
} else {
logger.Logger.Error(err.Error())
}
logger.Logger.Info("user authorize", zap.String("user", userdn), zap.Uint16("power", power))
u := &User{
UserName: userdn,
Authorized: power,
}
u.setupClaim()
return u, nil
}
return nil, err
}