150 lines
4.1 KiB
Go
150 lines
4.1 KiB
Go
package service
|
|
|
|
import (
|
|
"admin/apps/game/api"
|
|
apiUser "admin/apps/user/api"
|
|
"admin/apps/user/domain/entity"
|
|
"admin/apps/user/model"
|
|
"admin/internal/errcode"
|
|
dto2 "admin/internal/model/dto"
|
|
"admin/lib/tokenlib"
|
|
"admin/lib/xlog"
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
func (svc *Service) CheckToken(token string, userId int) error {
|
|
if err := tokenlib.ValidToken(token, userId); err != nil {
|
|
xlog.Warnf("valid token:%v user:%v error:%v", token, userId, err)
|
|
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 *dto2.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 = &dto2.LoginRsp{}
|
|
info.User = userInfo.ToDtoInfo()
|
|
info.Token = &dto2.TokenInfo{Token: tokenInfo.Token, ExpireAt: tokenInfo.ExpireAt.Unix()}
|
|
info.ProjectsRoutes = projectRoutesRsp.Projects
|
|
return info, nil
|
|
}
|
|
|
|
func (svc *Service) GetUserInfo(userId int) (*dto2.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 := &dto2.GetUserInfoRsp{
|
|
User: user.ToDtoInfo(),
|
|
Token: &dto2.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)
|
|
}
|
|
|
|
func (svc *Service) ListUserExecHistory(params *dto2.ListUserOpHistoryReq) (*dto2.ListUserOpHistoryRsp, error) {
|
|
list, totalCount, err := new(model.History).List(params.PageNo, params.PageLen,
|
|
params.UserId, params.OpResourceType, params.OpResourceGroup, params.OpResourceKey, params.Method)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
rsp := new(dto2.ListUserOpHistoryRsp)
|
|
rsp.List = make([]*dto2.UserOpHistoryInfo, 0)
|
|
userMap := make(map[int]*entity.User, 0)
|
|
for _, v := range list {
|
|
var userName = v.UserName
|
|
userInfo, find := userMap[v.UserId]
|
|
if !find {
|
|
userInfo, find, err := svc.resourceSvc.GetUserById(v.UserId)
|
|
if err == nil && find {
|
|
userName = userInfo.Po.UserName
|
|
userMap[v.UserId] = userInfo
|
|
}
|
|
} else {
|
|
userName = userInfo.Po.UserName
|
|
}
|
|
rsp.List = append(rsp.List, &dto2.UserOpHistoryInfo{
|
|
UserId: v.UserId,
|
|
UserName: userName,
|
|
OpResourceType: v.OpResourceType,
|
|
OpResourceGroup: v.OpResourceGroup,
|
|
OpResourceKey: v.OpResourceKey,
|
|
Method: v.Method,
|
|
CreatedAt: v.CreatedAt.Format(time.DateTime),
|
|
DetailInfo: v.DetailInfo,
|
|
})
|
|
}
|
|
rsp.TotalCount = totalCount
|
|
return rsp, nil
|
|
}
|