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 }