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 }