Improved nickname validation code clarity

Improved accuracy of 2 responses:

`client/game/profile/nickname/validate`
`client/game/profile/nickname/change`
This commit is contained in:
Chomp
2025-05-21 16:09:11 +01:00
parent a3be7f25db
commit c39ab9e1e7
4 changed files with 49 additions and 39 deletions
@@ -68,7 +68,7 @@ public class CodeGenerator
{
if (code.GetLabel() == null)
{
return new List<Label>();
return [];
}
return [ (Label)code.GetLabel() ];
@@ -5,6 +5,7 @@ using SPTarkov.Server.Core.Models.Eft.Common;
using SPTarkov.Server.Core.Models.Eft.Launcher;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Spt.Launcher;
using SPTarkov.Server.Core.Utils;
namespace SPTarkov.Server.Core.Callbacks;
@@ -72,20 +73,20 @@ public class ProfileCallbacks(
/// Handle client/game/profile/nickname/change event
/// Client allows player to adjust their profile name
/// </summary>
/// <returns></returns>
public string ChangeNickname(string url, ProfileChangeNicknameRequestData info, string sessionID)
/// <returns>Client response as string</returns>
public string ChangeNickname(string url, ProfileChangeNicknameRequestData info, string sessionId)
{
var output = _profileController.ChangeNickname(info, sessionID);
var output = _profileController.ChangeNickname(info, sessionId);
return output switch
{
"taken" => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotUnique, "The nickname is already in use"),
"tooshort" => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotValid, "The nickname is too short"),
NicknameValidationResult.Taken => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotUnique, $"{BackendErrorCodes.NicknameNotUnique} - "),
NicknameValidationResult.Short => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotValid, $"{BackendErrorCodes.NicknameNotValid} - "),
_ => _httpResponse.GetBody<object>(
new
{
status = 0,
nicknamechangedate = _timeUtil.GetTimeStamp()
NicknameChangeDate = _timeUtil.GetTimeStamp()
}
)
};
@@ -94,15 +95,13 @@ public class ProfileCallbacks(
/// <summary>
/// Handle client/game/profile/nickname/validate
/// </summary>
/// <returns></returns>
public string ValidateNickname(string url, ValidateNicknameRequestData info, string sessionID)
/// <returns>Client response as string</returns>
public string ValidateNickname(string url, ValidateNicknameRequestData info, string sessionId)
{
var output = _profileController.ValidateNickname(info, sessionID);
return output switch
return _profileController.ValidateNickname(info, sessionId) switch
{
"taken" => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotUnique, "The nickname is already in use"),
"tooshort" => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotValid, "The nickname is too short"),
NicknameValidationResult.Taken => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotUnique, $"{BackendErrorCodes.NicknameNotUnique} - "),
NicknameValidationResult.Short => _httpResponse.GetBody<object?>(null, BackendErrorCodes.NicknameNotValid, $"{BackendErrorCodes.NicknameNotValid} - "),
_ => _httpResponse.GetBody(
new
{
@@ -116,11 +115,12 @@ public class ProfileCallbacks(
/// Handle client/game/profile/nickname/reserved
/// </summary>
/// <returns></returns>
public string GetReservedNickname(string url, EmptyRequestData _, string sessionID)
public string GetReservedNickname(string url, EmptyRequestData _, string sessionId)
{
var fullProfile = _profileHelper.GetFullProfile(sessionID);
var fullProfile = _profileHelper.GetFullProfile(sessionId);
if (fullProfile?.ProfileInfo?.Username is not null)
{
// Send players name back to them
return _httpResponse.GetBody(fullProfile?.ProfileInfo?.Username);
}
@@ -132,9 +132,9 @@ public class ProfileCallbacks(
/// Called when creating a character when choosing a character face/voice
/// </summary>
/// <returns></returns>
public string GetProfileStatus(string url, EmptyRequestData _, string sessionID)
public string GetProfileStatus(string url, EmptyRequestData _, string sessionId)
{
return _httpResponse.GetBody(_profileController.GetProfileStatus(sessionID));
return _httpResponse.GetBody(_profileController.GetProfileStatus(sessionId));
}
/// <summary>
@@ -6,6 +6,7 @@ using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.Launcher;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Spt.Launcher;
using SPTarkov.Server.Core.Models.Utils;
using SPTarkov.Server.Core.Routers;
using SPTarkov.Server.Core.Servers;
@@ -104,54 +105,54 @@ public class ProfileController(
/// <summary>
/// Handle client/game/profile/list
/// </summary>
/// <param name="sessionID">Session/Player id</param>
/// <param name="sessionId">Session/Player id</param>
/// <returns>Return a full profile, scav and pmc profiles + meta data</returns>
public virtual List<PmcData> GetCompleteProfile(string sessionID)
public virtual List<PmcData> GetCompleteProfile(string sessionId)
{
return _profileHelper.GetCompleteProfile(sessionID);
return _profileHelper.GetCompleteProfile(sessionId);
}
/// <summary>
/// Handle client/game/profile/create
/// </summary>
/// <param name="request">Create profile request</param>
/// <param name="sessionID">Player id</param>
/// <param name="sessionId">Player id</param>
/// <returns>Player id</returns>
public virtual string CreateProfile(ProfileCreateRequestData request, string sessionID)
public virtual string CreateProfile(ProfileCreateRequestData request, string sessionId)
{
return _createProfileService.CreateProfile(sessionID, request);
return _createProfileService.CreateProfile(sessionId, request);
}
/// <summary>
/// Generate a player scav object
/// PMC profile MUST exist first before player-scav can be generated
/// </summary>
/// <param name="sessionID">Player id</param>
/// <param name="sessionId">Player id</param>
/// <returns>PmcData</returns>
public virtual PmcData GeneratePlayerScav(string sessionID)
public virtual PmcData GeneratePlayerScav(string sessionId)
{
return _playerScavGenerator.Generate(sessionID);
return _playerScavGenerator.Generate(sessionId);
}
/// <summary>
/// Handle client/game/profile/nickname/validate
/// </summary>
/// <param name="request">Validate nickname request</param>
/// <param name="sessionID">Session/Player id</param>
/// <param name="sessionId">Session/Player id</param>
/// <returns></returns>
public virtual string ValidateNickname(ValidateNicknameRequestData request, string sessionID)
public virtual NicknameValidationResult ValidateNickname(ValidateNicknameRequestData request, string sessionId)
{
if (request.Nickname.Length < 3)
if (request.Nickname?.Length < 3)
{
return "tooshort";
return NicknameValidationResult.Short;
}
if (_profileHelper.IsNicknameTaken(request, sessionID))
if (_profileHelper.IsNicknameTaken(request, sessionId))
{
return "taken";
return NicknameValidationResult.Taken;
}
return "OK";
return NicknameValidationResult.Valid;
}
/// <summary>
@@ -159,21 +160,21 @@ public class ProfileController(
/// Client allows player to adjust their profile name
/// </summary>
/// <param name="request">Change nickname request</param>
/// <param name="sessionID">Player id</param>
/// <param name="sessionId">Player id</param>
/// <returns></returns>
public virtual string ChangeNickname(ProfileChangeNicknameRequestData request, string sessionID)
public virtual NicknameValidationResult ChangeNickname(ProfileChangeNicknameRequestData request, string sessionId)
{
var output = ValidateNickname(
new ValidateNicknameRequestData
{
Nickname = request.Nickname
},
sessionID
sessionId
);
if (output == "OK")
if (output == NicknameValidationResult.Valid)
{
var pmcData = _profileHelper.GetPmcProfile(sessionID);
var pmcData = _profileHelper.GetPmcProfile(sessionId);
pmcData.Info.Nickname = request.Nickname;
pmcData.Info.LowerNickname = request.Nickname.ToLower();
@@ -0,0 +1,9 @@
namespace SPTarkov.Server.Core.Models.Spt.Launcher
{
public enum NicknameValidationResult
{
Taken,
Short,
Valid
}
}