66 lines
2.1 KiB
Go
66 lines
2.1 KiB
Go
package user
|
|
|
|
import (
|
|
"context"
|
|
"gorm.io/gorm"
|
|
"net/http"
|
|
"schisandra-album-cloud-microservices/common/captcha/verify"
|
|
"schisandra-album-cloud-microservices/common/constant"
|
|
"schisandra-album-cloud-microservices/common/errors"
|
|
"schisandra-album-cloud-microservices/common/i18n"
|
|
"schisandra-album-cloud-microservices/common/utils"
|
|
|
|
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
|
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type AdminLoginLogic struct {
|
|
logx.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewAdminLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminLoginLogic {
|
|
return &AdminLoginLogic{
|
|
Logger: logx.WithContext(ctx),
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
|
|
func (l *AdminLoginLogic) AdminLogin(r *http.Request, req *types.AdminLoginRequest) (resp *types.LoginResponse, err error) {
|
|
captcha := verify.VerifyBasicTextCaptcha(req.Dots, req.Key, l.svcCtx.RedisClient, l.ctx)
|
|
if !captcha {
|
|
return nil, errors.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "captcha.verificationFailure"))
|
|
}
|
|
authUser := l.svcCtx.DB.ScaAuthUser
|
|
permissionRule := l.svcCtx.DB.ScaAuthPermissionRule
|
|
adminUser, err := authUser.
|
|
Where(authUser.Username.Eq(req.Account)).
|
|
Group(authUser.UID).First()
|
|
if err != nil && err != gorm.ErrRecordNotFound {
|
|
return nil, err
|
|
}
|
|
if adminUser == nil {
|
|
return nil, errors.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "login.notPermission"))
|
|
}
|
|
if !utils.Verify(adminUser.Password, req.Password) {
|
|
return nil, errors.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "login.invalidPassword"))
|
|
}
|
|
first, err := permissionRule.Where(permissionRule.Ptype.Eq("g"), permissionRule.V0.Eq(adminUser.UID), permissionRule.V1.Eq(constant.Admin)).First()
|
|
if err != nil && err != gorm.ErrRecordNotFound {
|
|
return nil, err
|
|
}
|
|
if first == nil {
|
|
return nil, errors.New(http.StatusInternalServerError, i18n.FormatText(l.ctx, "login.notPermission"))
|
|
}
|
|
data, err := HandleLoginJWT(adminUser, l.svcCtx, true, r, l.ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return data, nil
|
|
}
|