112 lines
2.9 KiB
Go
112 lines
2.9 KiB
Go
package service
|
|
|
|
import (
|
|
"admin/apps/game/api"
|
|
apiUser "admin/apps/user/api"
|
|
"admin/apps/user/domain/entity"
|
|
"admin/apps/user/model"
|
|
"admin/apps/user/model/dto"
|
|
"admin/internal/errcode"
|
|
"admin/lib/tokenlib"
|
|
"admin/lib/xlog"
|
|
"context"
|
|
)
|
|
|
|
func (svc *Service) CheckToken(token string, userId int) error {
|
|
if err := tokenlib.ValidToken(token, userId); err != nil {
|
|
return err
|
|
}
|
|
|
|
dbToken := new(model.Token)
|
|
err := dbToken.GetByUserId(userId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if token != dbToken.Token {
|
|
xlog.Infof("user:%v token invalid:(%v)(%v)",
|
|
dbToken.UserId, token, dbToken.Token)
|
|
return errcode.New(errcode.TokenInvalid, "token not equal:%v,%v", token, dbToken.Token)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (svc *Service) Auth(ctx context.Context, req *apiUser.AuthReq) (*apiUser.AuthRsp, error) {
|
|
rsp := &apiUser.AuthRsp{}
|
|
err := svc.CheckToken(req.Token, req.UserId)
|
|
if err != nil {
|
|
return rsp, err
|
|
}
|
|
|
|
info, err := svc.GetUserInfo(req.UserId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rsp.User = &apiUser.UserInfo{
|
|
UserId: info.User.UserId,
|
|
UserName: info.User.NickName,
|
|
NickName: info.User.NickName,
|
|
Icon: info.User.Icon,
|
|
Character: info.User.Character,
|
|
Permissions: info.User.Permissions,
|
|
}
|
|
rsp.Token = &apiUser.TokenInfo{
|
|
Token: info.Token.Token,
|
|
ExpireAt: info.Token.ExpireAt,
|
|
}
|
|
return rsp, nil
|
|
}
|
|
|
|
func (svc *Service) Login(user, pwd string) (info *dto.LoginRsp, err error) {
|
|
userInfo, err := svc.resourceSvc.Login(user, pwd)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tokenInfo, err := svc.resourceSvc.GetOrCreateToken(userInfo.GetUserId())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
projectRoutesRsp, err := api.GetGameApiInstance().GetRoutes(&api.GetRoutesReq{IsAdmin: userInfo.IsAdmin(), Permissions: userInfo.GetPermissions()})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
info = &dto.LoginRsp{}
|
|
info.User = userInfo.ToDtoInfo()
|
|
info.Token = &dto.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()}
|
|
info.ProjectsRoutes = projectRoutesRsp.Projects
|
|
return info, nil
|
|
}
|
|
|
|
func (svc *Service) GetUserInfo(userId int) (*dto.GetUserInfoRsp, error) {
|
|
user, find, err := svc.GetUserById(userId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !find {
|
|
return nil, errcode.New(errcode.NotLogin, "not found user by id:%v", userId)
|
|
}
|
|
|
|
tokenInfo, err := svc.resourceSvc.GetToken(user.GetUserId())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
projectRoutesRsp, err := api.GetGameApiInstance().GetRoutes(&api.GetRoutesReq{IsAdmin: user.IsAdmin(), Permissions: user.GetPermissions()})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
rsp := &dto.GetUserInfoRsp{
|
|
User: user.ToDtoInfo(),
|
|
Token: &dto.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()},
|
|
ProjectsRoutes: projectRoutesRsp.Projects,
|
|
}
|
|
return rsp, nil
|
|
}
|
|
|
|
func (svc *Service) GetUserById(userId int) (*entity.User, bool, error) {
|
|
return svc.resourceSvc.GetUserById(userId)
|
|
}
|