2022-04-03 12:30:50 +08:00
|
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql"
|
2022-04-09 11:48:44 +08:00
|
|
|
|
"drive-linked/pkg/common"
|
2022-04-03 12:30:50 +08:00
|
|
|
|
"drive-linked/pkg/dto"
|
2022-04-09 11:48:44 +08:00
|
|
|
|
"drive-linked/pkg/model"
|
2022-04-03 12:30:50 +08:00
|
|
|
|
"drive-linked/pkg/serializer"
|
2022-04-09 11:48:44 +08:00
|
|
|
|
"drive-linked/pkg/utils"
|
2022-04-03 12:30:50 +08:00
|
|
|
|
"github.com/kataras/iris/v12"
|
|
|
|
|
"net/http"
|
2022-04-09 11:48:44 +08:00
|
|
|
|
"regexp"
|
2022-04-03 12:30:50 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type UsersService struct {
|
|
|
|
|
Ctx iris.Context
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-06 13:54:48 +08:00
|
|
|
|
var (
|
|
|
|
|
UserConditions = [...]string{"id", "name", "email", "nickname"}
|
2022-04-03 12:30:50 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func NewUsersService(ctx iris.Context) *UsersService {
|
|
|
|
|
return &UsersService{Ctx: ctx}
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-06 13:54:48 +08:00
|
|
|
|
func (serv *UsersService) GetOneUser(conditions *map[string]interface{}) {
|
2022-04-03 12:30:50 +08:00
|
|
|
|
var err error
|
|
|
|
|
resp := dto.NewResponse(serv.Ctx)
|
|
|
|
|
user := &model.User{}
|
|
|
|
|
|
2022-04-09 11:48:44 +08:00
|
|
|
|
err = user.GetProfileWithConditions(conditions)
|
2022-04-03 12:30:50 +08:00
|
|
|
|
|
|
|
|
|
switch err {
|
|
|
|
|
case nil:
|
|
|
|
|
// 复制到dto对象
|
|
|
|
|
var userResult dto.UserProfile
|
|
|
|
|
err = userResult.CopyOf(user)
|
|
|
|
|
if err != nil {
|
|
|
|
|
resp.Error(http.StatusInternalServerError, "service.users Error")
|
|
|
|
|
}
|
|
|
|
|
resp.Success(userResult)
|
|
|
|
|
case sql.ErrNoRows:
|
2022-04-09 11:48:44 +08:00
|
|
|
|
resp.Error(serializer.ErrNoUser, "用户不存在")
|
|
|
|
|
default:
|
|
|
|
|
resp.Error(http.StatusInternalServerError, "获取用户信息失败,数据库异常")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (serv *UsersService) Login(loginParams dto.LoginParams) {
|
|
|
|
|
var err error
|
|
|
|
|
resp := dto.NewResponse(serv.Ctx)
|
|
|
|
|
|
|
|
|
|
// 登录逻辑
|
|
|
|
|
// 判断账号类型 邮箱/用户名
|
|
|
|
|
var method string
|
|
|
|
|
emailExp := regexp.MustCompile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
|
|
|
|
|
if emailExp.Match([]byte(loginParams.Account)) {
|
|
|
|
|
method = model.LoginMethodEmail
|
|
|
|
|
} else {
|
|
|
|
|
method = model.LoginMethodName
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 从数据库取出原密码
|
|
|
|
|
userLogin := model.Login{}
|
|
|
|
|
err = userLogin.GetLoginInfo(loginParams.Account, method)
|
|
|
|
|
switch err {
|
|
|
|
|
case nil:
|
|
|
|
|
// 检查密码
|
|
|
|
|
match, _ := utils.CheckPasswd(loginParams.Password, userLogin.Password)
|
|
|
|
|
if match {
|
|
|
|
|
// 登录成功,签发token
|
|
|
|
|
sToken, _ := common.NewShortToken(userLogin.Name)
|
|
|
|
|
rToken, _ := common.NewRefreshToken(userLogin.Name)
|
|
|
|
|
resp.Success(serializer.LoginResponse{
|
|
|
|
|
Token: sToken,
|
|
|
|
|
RefreshToken: rToken,
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
resp.ErrBadAccPasswd()
|
|
|
|
|
}
|
|
|
|
|
case sql.ErrNoRows:
|
|
|
|
|
resp.Error(serializer.ErrNoUser, "用户不存在")
|
2022-04-03 12:30:50 +08:00
|
|
|
|
default:
|
|
|
|
|
resp.Error(http.StatusInternalServerError, "获取用户信息失败,数据库异常")
|
|
|
|
|
}
|
|
|
|
|
}
|