From b14b75ee23405b28dcf389e8a211bf7732aedcac Mon Sep 17 00:00:00 2001 From: rockisch Date: Thu, 30 Nov 2023 01:11:38 -0300 Subject: [PATCH] Make sure signv2 returns user token ID Noticed when refactoring 'mhf-iel' to support F5 that this info was not mapped correctly. --- server/signv2server/dbutils.go | 9 +++++---- server/signv2server/endpoints.go | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/server/signv2server/dbutils.go b/server/signv2server/dbutils.go index dde729ac9..f5ea57846 100644 --- a/server/signv2server/dbutils.go +++ b/server/signv2server/dbutils.go @@ -32,13 +32,14 @@ func (s *Server) createNewUser(ctx context.Context, username string, password st return id, rights, err } -func (s *Server) createLoginToken(ctx context.Context, uid uint32) (string, error) { +func (s *Server) createLoginToken(ctx context.Context, uid uint32) (uint32, string, error) { loginToken := token.Generate(16) - _, err := s.db.ExecContext(ctx, "INSERT INTO sign_sessions (user_id, token) VALUES ($1, $2)", uid, loginToken) + var tid uint32 + err := s.db.QueryRowContext(ctx, "INSERT INTO sign_sessions (user_id, token) VALUES ($1, $2) RETURNING id", uid, loginToken).Scan(&tid) if err != nil { - return "", err + return 0, "", err } - return loginToken, nil + return tid, loginToken, nil } func (s *Server) userIDFromToken(ctx context.Context, token string) (uint32, error) { diff --git a/server/signv2server/endpoints.go b/server/signv2server/endpoints.go index ae5959809..b6cc03515 100644 --- a/server/signv2server/endpoints.go +++ b/server/signv2server/endpoints.go @@ -27,8 +27,9 @@ type LauncherResponse struct { } type User struct { - Token string `json:"token"` - Rights uint32 `json:"rights"` + TokenID uint32 `json:"tokenId"` + Token string `json:"token"` + Rights uint32 `json:"rights"` } type Character struct { @@ -65,14 +66,15 @@ type ExportData struct { Character map[string]interface{} `json:"character"` } -func (s *Server) newAuthData(userID uint32, userRights uint32, userToken string, characters []Character) AuthData { +func (s *Server) newAuthData(userID uint32, userRights uint32, userTokenID uint32, userToken string, characters []Character) AuthData { resp := AuthData{ CurrentTS: uint32(channelserver.TimeAdjusted().Unix()), ExpiryTS: uint32(s.getReturnExpiry(userID).Unix()), EntranceCount: 1, User: User{ - Rights: userRights, - Token: userToken, + Rights: userRights, + TokenID: userTokenID, + Token: userToken, }, Characters: characters, PatchServer: s.erupeConfig.SignV2.PatchServer, @@ -142,7 +144,7 @@ func (s *Server) Login(w http.ResponseWriter, r *http.Request) { return } - userToken, err := s.createLoginToken(ctx, userID) + userTokenID, userToken, err := s.createLoginToken(ctx, userID) if err != nil { s.logger.Warn("Error registering login token", zap.Error(err)) w.WriteHeader(500) @@ -157,7 +159,7 @@ func (s *Server) Login(w http.ResponseWriter, r *http.Request) { if characters == nil { characters = []Character{} } - respData := s.newAuthData(userID, userRights, userToken, characters) + respData := s.newAuthData(userID, userRights, userTokenID, userToken, characters) w.Header().Add("Content-Type", "application/json") json.NewEncoder(w).Encode(respData) } @@ -191,13 +193,13 @@ func (s *Server) Register(w http.ResponseWriter, r *http.Request) { return } - userToken, err := s.createLoginToken(ctx, userID) + userTokenID, userToken, err := s.createLoginToken(ctx, userID) if err != nil { s.logger.Error("Error registering login token", zap.Error(err)) w.WriteHeader(500) return } - respData := s.newAuthData(userID, userRights, userToken, []Character{}) + respData := s.newAuthData(userID, userRights, userTokenID, userToken, []Character{}) w.Header().Add("Content-Type", "application/json") json.NewEncoder(w).Encode(respData) }