52 lines
1.1 KiB
Go
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
|
|
}
|