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" "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 { 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, 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) }