diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs
index 048d0d1a..99739a08 100644
--- a/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs
+++ b/Libraries/SPTarkov.Server.Core/Callbacks/GameCallbacks.cs
@@ -54,15 +54,15 @@ public class GameCallbacks(
/// Save profiles on game close
///
///
- public ValueTask GameLogout(string url, EmptyRequestData _, string sessionID)
+ public async ValueTask GameLogout(string url, EmptyRequestData _, string sessionID)
{
- _saveServer.SaveProfile(sessionID);
- return new ValueTask(_httpResponseUtil.GetBody(
+ await _saveServer.SaveProfileAsync(sessionID);
+ return _httpResponseUtil.GetBody(
new GameLogoutResponseData
{
Status = "ok"
}
- ));
+ );
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs
index 595c8594..7bef8fcd 100644
--- a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs
+++ b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherCallbacks.cs
@@ -26,10 +26,10 @@ public class LauncherCallbacks(
return new ValueTask(output ?? "FAILED");
}
- public ValueTask Register(string url, RegisterData info, string sessionID)
+ public async ValueTask Register(string url, RegisterData info, string sessionID)
{
- var output = _launcherController.Register(info);
- return new ValueTask(string.IsNullOrEmpty(output) ? "FAILED" : "OK");
+ var output = await _launcherController.Register(info);
+ return string.IsNullOrEmpty(output) ? "FAILED" : "OK";
}
public ValueTask Get(string url, LoginRequestData info, string sessionID)
diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs
index bda1b574..a66b36a4 100644
--- a/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs
+++ b/Libraries/SPTarkov.Server.Core/Callbacks/LauncherV2Callbacks.cs
@@ -43,26 +43,26 @@ public class LauncherV2Callbacks(
));
}
- public ValueTask Register(RegisterData info)
+ public async ValueTask Register(RegisterData info)
{
- return new ValueTask(_httpResponseUtil.NoBody(
+ return _httpResponseUtil.NoBody(
new LauncherV2RegisterResponse
{
- Response = _launcherV2Controller.Register(info),
+ Response = await _launcherV2Controller.Register(info),
Profiles = _profileController.GetMiniProfiles()
}
- ));
+ );
}
- public ValueTask PasswordChange(ChangeRequestData info)
+ public async ValueTask PasswordChange(ChangeRequestData info)
{
- return new ValueTask(_httpResponseUtil.NoBody(
+ return _httpResponseUtil.NoBody(
new LauncherV2PasswordChangeResponse
{
- Response = _launcherV2Controller.PasswordChange(info),
+ Response = await _launcherV2Controller.PasswordChange(info),
Profiles = _profileController.GetMiniProfiles()
}
- ));
+ );
}
public ValueTask Remove(LoginRequestData info)
diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs
index 3967fb8e..78e8d4be 100644
--- a/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs
+++ b/Libraries/SPTarkov.Server.Core/Callbacks/PrestigeCallbacks.cs
@@ -31,10 +31,10 @@ public class PrestigeCallbacks(
///
/// Session/player id
///
- public ValueTask ObtainPrestige(string url, ObtainPrestigeRequestList info, string sessionID)
+ public async ValueTask ObtainPrestige(string url, ObtainPrestigeRequestList info, string sessionID)
{
- _prestigeController.ObtainPrestige(sessionID, info);
+ await _prestigeController.ObtainPrestige(sessionID, info);
- return new ValueTask(_httpResponseUtil.NullResponse());
+ return _httpResponseUtil.NullResponse();
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs
index 48f93d61..17c5bd88 100644
--- a/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs
+++ b/Libraries/SPTarkov.Server.Core/Callbacks/ProfileCallbacks.cs
@@ -22,15 +22,15 @@ public class ProfileCallbacks(
/// Handle client/game/profile/create
///
///
- public ValueTask CreateProfile(string url, ProfileCreateRequestData info, string sessionID)
+ public async ValueTask CreateProfile(string url, ProfileCreateRequestData info, string sessionID)
{
- var id = _profileController.CreateProfile(info, sessionID);
- return new ValueTask(_httpResponse.GetBody(
+ var id = await _profileController.CreateProfile(info, sessionID);
+ return _httpResponse.GetBody(
new CreateProfileResponse
{
UserId = id
}
- ));
+ );
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs
index 7214d8ab..b8297068 100644
--- a/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs
+++ b/Libraries/SPTarkov.Server.Core/Callbacks/SaveCallbacks.cs
@@ -20,19 +20,19 @@ public class SaveCallbacks(
public async Task OnLoad()
{
_backupService.StartBackupSystem();
- _saveServer.Load();
+ await _saveServer.LoadAsync();
}
- public Task OnUpdate(long secondsSinceLastRun)
+ public async Task OnUpdate(long secondsSinceLastRun)
{
if (secondsSinceLastRun < _coreConfig.ProfileSaveIntervalInSeconds)
{
// Not enough time has passed since last run, exit early
- return Task.FromResult(false);
+ return false;
}
- _saveServer.Save();
+ await _saveServer.SaveAsync();
- return Task.FromResult(true);
+ return true;
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs b/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs
index 1b6ffb44..62a4a59d 100644
--- a/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs
+++ b/Libraries/SPTarkov.Server.Core/Controllers/LauncherController.cs
@@ -97,7 +97,7 @@ public class LauncherController(
///
///
///
- public string Register(RegisterData info)
+ public async Task Register(RegisterData info)
{
foreach (var kvp in _saveServer.GetProfiles())
{
@@ -107,14 +107,14 @@ public class LauncherController(
}
}
- return CreateAccount(info);
+ return await CreateAccount(info);
}
///
///
///
///
- protected string CreateAccount(RegisterData info)
+ protected async Task CreateAccount(RegisterData info)
{
var profileId = GenerateProfileId();
var scavId = GenerateProfileId();
@@ -130,8 +130,8 @@ public class LauncherController(
};
_saveServer.CreateProfile(newProfileDetails);
- _saveServer.LoadProfile(profileId);
- _saveServer.SaveProfile(profileId);
+ await _saveServer.LoadProfileAsync(profileId);
+ await _saveServer.SaveProfileAsync(profileId);
return profileId;
}
diff --git a/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs b/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs
index 9d5ea553..74e007cb 100644
--- a/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs
+++ b/Libraries/SPTarkov.Server.Core/Controllers/LauncherV2Controller.cs
@@ -71,7 +71,7 @@ public class LauncherV2Controller(
///
///
///
- public bool Register(RegisterData info)
+ public async Task Register(RegisterData info)
{
foreach (var session in _saveServer.GetProfiles())
{
@@ -81,7 +81,7 @@ public class LauncherV2Controller(
}
}
- CreateAccount(info);
+ await CreateAccount(info);
return true;
}
@@ -90,7 +90,7 @@ public class LauncherV2Controller(
///
///
///
- public bool PasswordChange(ChangeRequestData info)
+ public async Task PasswordChange(ChangeRequestData info)
{
var sessionId = GetSessionId(info);
@@ -105,7 +105,7 @@ public class LauncherV2Controller(
}
_saveServer.GetProfile(sessionId).ProfileInfo!.Password = info.Change;
- _saveServer.SaveProfile(sessionId);
+ await _saveServer.SaveProfileAsync(sessionId);
return true;
}
@@ -162,7 +162,7 @@ public class LauncherV2Controller(
///
///
///
- protected string CreateAccount(RegisterData info)
+ protected async Task CreateAccount(RegisterData info)
{
var profileId = GenerateProfileId();
var scavId = GenerateProfileId();
@@ -179,8 +179,8 @@ public class LauncherV2Controller(
_saveServer.CreateProfile(newProfileDetails);
- _saveServer.LoadProfile(profileId);
- _saveServer.SaveProfile(profileId);
+ await _saveServer.LoadProfileAsync(profileId);
+ await _saveServer.SaveProfileAsync(profileId);
return profileId;
}
diff --git a/Libraries/SPTarkov.Server.Core/Controllers/PrestigeController.cs b/Libraries/SPTarkov.Server.Core/Controllers/PrestigeController.cs
index 2690ae3f..57b06ae0 100644
--- a/Libraries/SPTarkov.Server.Core/Controllers/PrestigeController.cs
+++ b/Libraries/SPTarkov.Server.Core/Controllers/PrestigeController.cs
@@ -59,7 +59,7 @@ public class PrestigeController(
///
///
///
- public void ObtainPrestige(
+ public async Task ObtainPrestige(
string sessionId,
ObtainPrestigeRequestList request)
{
@@ -75,7 +75,7 @@ public class PrestigeController(
profile.SptData.PendingPrestige = pendingPrestige;
profile.ProfileInfo.IsWiped = true;
- _saveServer.SaveProfile(sessionId);
+ await _saveServer.SaveProfileAsync(sessionId);
}
}
}
diff --git a/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs b/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs
index bd186684..e11277a3 100644
--- a/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs
+++ b/Libraries/SPTarkov.Server.Core/Controllers/ProfileController.cs
@@ -118,9 +118,9 @@ public class ProfileController(
/// Create profile request
/// Player id
/// Player id
- public virtual string CreateProfile(ProfileCreateRequestData request, string sessionId)
+ public virtual async ValueTask CreateProfile(ProfileCreateRequestData request, string sessionId)
{
- return _createProfileService.CreateProfile(sessionId, request);
+ return await _createProfileService.CreateProfile(sessionId, request);
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs b/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs
index 82720d33..930f6c50 100644
--- a/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs
+++ b/Libraries/SPTarkov.Server.Core/Servers/SaveServer.cs
@@ -56,7 +56,7 @@ public class SaveServer(
///
/// Load all profiles in /user/profiles folder into memory (this.profiles)
///
- public void Load()
+ public async Task LoadAsync()
{
// get files to load
if (!_fileUtil.DirectoryExists(profileFilepath))
@@ -70,7 +70,7 @@ public class SaveServer(
var stopwatch = Stopwatch.StartNew();
foreach (var file in files)
{
- LoadProfile(_fileUtil.StripExtension(file));
+ await LoadProfileAsync(_fileUtil.StripExtension(file));
}
stopwatch.Stop();
@@ -83,13 +83,13 @@ public class SaveServer(
///
/// Save changes for each profile from memory into user/profiles json
///
- public void Save()
+ public async Task SaveAsync()
{
// Save every profile
var totalTime = 0L;
foreach (var sessionID in profiles)
{
- totalTime += SaveProfile(sessionID.Key);
+ totalTime += await SaveProfileAsync(sessionID.Key);
}
if (_logger.IsLogEnabled(LogLevel.Debug))
@@ -196,14 +196,14 @@ public class SaveServer(
/// Execute saveLoadRouters callbacks after being loaded into memory.
///
/// ID of profile to store in memory
- public void LoadProfile(string sessionID)
+ public async Task LoadProfileAsync(string sessionID)
{
var filename = $"{sessionID}.json";
var filePath = $"{profileFilepath}{filename}";
if (_fileUtil.FileExists(filePath))
// File found, store in profiles[]
{
- profiles[sessionID] = _jsonUtil.DeserializeFromFile(filePath);
+ profiles[sessionID] = await _jsonUtil.DeserializeFromFileAsync(filePath);
}
// Run callbacks
@@ -220,7 +220,7 @@ public class SaveServer(
///
/// Profile id (user/profiles/id.json)
/// Time taken to save the profile in seconds
- public long SaveProfile(string sessionID)
+ public async Task SaveProfileAsync(string sessionID)
{
var filePath = $"{profileFilepath}{sessionID}.json";
@@ -250,12 +250,12 @@ public class SaveServer(
var start = Stopwatch.StartNew();
var jsonProfile = _jsonUtil.Serialize(profiles[sessionID], !_configServer.GetConfig().Features.CompressProfile);
- var fmd5 = _hashUtil.GenerateMd5ForData(jsonProfile);
+ var fmd5 = await _hashUtil.GenerateHashForDataAsync(HashingAlgorithm.MD5, jsonProfile);
if (!saveMd5.TryGetValue(sessionID, out var currentMd5) || currentMd5 != fmd5)
{
saveMd5[sessionID] = fmd5;
// save profile to disk
- _fileUtil.WriteFile(filePath, jsonProfile);
+ await _fileUtil.WriteFileAsync(filePath, jsonProfile);
}
start.Stop();
diff --git a/Libraries/SPTarkov.Server.Core/Services/BackupService.cs b/Libraries/SPTarkov.Server.Core/Services/BackupService.cs
index aea47c39..c4feb7d1 100644
--- a/Libraries/SPTarkov.Server.Core/Services/BackupService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/BackupService.cs
@@ -46,22 +46,22 @@ public class BackupService
///
/// Start the backup interval if enabled in config.
///
- public void StartBackupSystem()
+ public async Task StartBackupSystem()
{
if (!_backupConfig.BackupInterval.Enabled)
{
// Not backing up at regular intervals, run once and exit
- Init();
+ await Init();
return;
}
- _backupIntervalTimer = new Timer(
+ _backupIntervalTimer = new Timer(async
_ =>
{
try
{
- Init();
+ await Init();
}
catch (Exception ex)
{
@@ -79,7 +79,7 @@ public class BackupService
/// This method orchestrates the profile backup service. Handles copying profiles to a backup directory and cleaning
/// up old backups if the number exceeds the configured maximum.
///
- public void Init()
+ public async Task Init()
{
if (!IsEnabled())
{
@@ -129,7 +129,7 @@ public class BackupService
}
// Write a copy of active mods.
- _fileUtil.WriteFile(Path.Combine(targetDir, "activeMods.json"), _jsonUtil.Serialize(_activeServerMods));
+ await _fileUtil.WriteFileAsync(Path.Combine(targetDir, "activeMods.json"), _jsonUtil.Serialize(_activeServerMods));
if (_logger.IsLogEnabled(LogLevel.Debug))
{
diff --git a/Libraries/SPTarkov.Server.Core/Services/Cache/BundleHashCacheService.cs b/Libraries/SPTarkov.Server.Core/Services/Cache/BundleHashCacheService.cs
index 61b78871..6a5ca0af 100644
--- a/Libraries/SPTarkov.Server.Core/Services/Cache/BundleHashCacheService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/Cache/BundleHashCacheService.cs
@@ -43,7 +43,7 @@ public class BundleHashCacheService(
public bool CalculateAndMatchHash(string bundlePath)
{
var fileContents = _fileUtil.ReadFile(bundlePath);
- var generatedHash = _hashUtil.GenerateMd5ForData(fileContents);
+ var generatedHash = _hashUtil.GenerateHashForData(HashingAlgorithm.MD5, fileContents);
return MatchWithStoredHash(bundlePath, generatedHash);
}
@@ -51,7 +51,7 @@ public class BundleHashCacheService(
public void CalculateAndStoreHash(string bundlePath)
{
var fileContents = _fileUtil.ReadFile(bundlePath);
- var generatedHash = _hashUtil.GenerateMd5ForData(fileContents);
+ var generatedHash = _hashUtil.GenerateHashForData(HashingAlgorithm.MD5, fileContents);
StoreValue(bundlePath, generatedHash);
}
diff --git a/Libraries/SPTarkov.Server.Core/Services/Cache/ModHashCacheService.cs b/Libraries/SPTarkov.Server.Core/Services/Cache/ModHashCacheService.cs
index de66683b..a42083e5 100644
--- a/Libraries/SPTarkov.Server.Core/Services/Cache/ModHashCacheService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/Cache/ModHashCacheService.cs
@@ -42,14 +42,14 @@ public class ModHashCacheService(
public bool CalculateAndCompareHash(string modName, string modContent)
{
- var generatedHash = _hashUtil.GenerateSha1ForData(modContent);
+ var generatedHash = _hashUtil.GenerateHashForData(HashingAlgorithm.SHA1, modContent);
return MatchWithStoredHash(modName, generatedHash);
}
public void CalculateAndStoreHash(string modName, string modContent)
{
- var generatedHash = _hashUtil.GenerateSha1ForData(modContent);
+ var generatedHash = _hashUtil.GenerateHashForData(HashingAlgorithm.SHA1, modContent);
StoreValue(modName, generatedHash);
}
diff --git a/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs b/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs
index b634698f..01d222d0 100644
--- a/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/CircleOfCultistService.cs
@@ -549,7 +549,7 @@ public class CircleOfCultistService(
// Key is sacrificed items separated by commas, a dash, then the rewards separated by commas
var key = $"{{{required}-{reward}}}";
- return _hashUtil.GenerateMd5ForData(key);
+ return _hashUtil.GenerateHashForData(HashingAlgorithm.MD5, key);
}
///
@@ -887,7 +887,7 @@ public class CircleOfCultistService(
protected string CreateSacrificeCacheKey(IEnumerable requiredItems)
{
var concat = string.Join(",", requiredItems.OrderBy(item => item));
- return _hashUtil.GenerateMd5ForData(concat);
+ return _hashUtil.GenerateHashForData(HashingAlgorithm.MD5, concat);
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs b/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs
index 7f68271f..69fbe20f 100644
--- a/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/CreateProfileService.cs
@@ -40,7 +40,7 @@ public class CreateProfileService(
MailSendService _mailSendService
)
{
- public string CreateProfile(string sessionId, ProfileCreateRequestData request)
+ public async ValueTask CreateProfile(string sessionId, ProfileCreateRequestData request)
{
var account = _cloner.Clone(_saveServer.GetProfile(sessionId));
var profileTemplateClone = _cloner.Clone(_profileHelper.GetProfileTemplateForSide(account.ProfileInfo.Edition, request.Side));
@@ -207,12 +207,12 @@ public class CreateProfileService(
_saveServer.GetProfile(sessionId).CharacterData.ScavData = _playerScavGenerator.Generate(sessionId);
// Store minimal profile and reload it
- _saveServer.SaveProfile(sessionId);
- _saveServer.LoadProfile(sessionId);
+ await _saveServer.SaveProfileAsync(sessionId);
+ await _saveServer.LoadProfileAsync(sessionId);
// Completed account creation
_saveServer.GetProfile(sessionId).ProfileInfo.IsWiped = false;
- _saveServer.SaveProfile(sessionId);
+ await _saveServer.SaveProfileAsync(sessionId);
return pmcData.Id;
}
diff --git a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs
index 72191c99..eece18bd 100644
--- a/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs
+++ b/Libraries/SPTarkov.Server.Core/Services/LocationLifecycleService.cs
@@ -722,7 +722,7 @@ public class LocationLifecycleService
pmcProfile.Info.LastTimePlayedAsSavage = _timeUtil.GetTimeStamp();
// Force a profile save
- _saveServer.SaveProfile(sessionId);
+ _saveServer.SaveProfileAsync(sessionId);
}
///
diff --git a/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs
index dcf337b1..37dd403d 100644
--- a/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs
+++ b/Libraries/SPTarkov.Server.Core/Utils/FileUtil.cs
@@ -90,6 +90,31 @@ public class FileUtil()
File.WriteAllBytes(filePath, fileContent);
}
+ public async Task WriteFileAsync(string filePath, string fileContent)
+ {
+ if (!DirectoryExists(Path.GetDirectoryName(filePath)))
+ {
+ CreateDirectory(Path.GetDirectoryName(filePath));
+ }
+
+ if (!FileExists(filePath))
+ {
+ CreateFile(filePath);
+ }
+
+ await File.WriteAllTextAsync(filePath, fileContent);
+ }
+
+ public async Task WriteFileAsync(string filePath, byte[] fileContent)
+ {
+ if (!FileExists(filePath))
+ {
+ CreateFile(filePath);
+ }
+
+ await File.WriteAllBytesAsync(filePath, fileContent);
+ }
+
private void CreateFile(string filePath)
{
var stream = File.Create(filePath);
diff --git a/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs b/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs
index 7bc89fe8..38e4a507 100644
--- a/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs
+++ b/Libraries/SPTarkov.Server.Core/Utils/HashUtil.cs
@@ -50,16 +50,6 @@ public partial class HashUtil(RandomUtil _randomUtil)
return MongoIdRegex().IsMatch(stringToCheck);
}
- public string GenerateMd5ForData(string data)
- {
- return GenerateHashForData(HashingAlgorithm.MD5, data);
- }
-
- public string GenerateSha1ForData(string data)
- {
- return GenerateHashForData(HashingAlgorithm.SHA1, data);
- }
-
public uint GenerateCrc32ForData(string data)
{
return Crc32.HashToUInt32(new ArraySegment(Encoding.UTF8.GetBytes(data)));
@@ -89,6 +79,36 @@ public partial class HashUtil(RandomUtil _randomUtil)
throw new NotImplementedException($"Provided hash algorithm: {algorithm} is not supported.");
}
+ ///
+ /// Create a hash for the data parameter asynchronously
+ ///
+ /// algorithm to use to hash
+ /// data to be hashed
+ /// A task which contains the hash value
+ /// thrown if the provided algorithm is not implemented
+ /// >
+ public async Task GenerateHashForDataAsync(HashingAlgorithm algorithm, string data)
+ {
+ switch (algorithm)
+ {
+ case HashingAlgorithm.MD5:
+ {
+ await using var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
+ var md5HashData = await MD5.HashDataAsync(ms);
+ return Convert.ToHexString(md5HashData).Replace("-", string.Empty);
+ }
+
+ case HashingAlgorithm.SHA1:
+ {
+ await using var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
+ var sha1HashData = await SHA1.HashDataAsync(ms);
+ return Convert.ToHexString(sha1HashData).Replace("-", string.Empty);
+ }
+ }
+
+ throw new NotImplementedException($"Provided hash algorithm: {algorithm} is not supported.");
+ }
+
///
/// Generates an account ID for a profile
///
diff --git a/UnitTests/Tests/Utils/HashUtilTests.cs b/UnitTests/Tests/Utils/HashUtilTests.cs
index de9c21ad..95c4c2a3 100644
--- a/UnitTests/Tests/Utils/HashUtilTests.cs
+++ b/UnitTests/Tests/Utils/HashUtilTests.cs
@@ -62,7 +62,7 @@ public class HashUtilTests
[DataRow("123456789", "25F9E794323B453885F5181F1B624D0B", "Not valid output, expected '25F9E794323B453885F5181F1B624D0B'")]
public void GenerateValidMd5Test(string input, string expectedOutput, string failMessage)
{
- var result = _hashUtil.GenerateMd5ForData(input);
+ var result = _hashUtil.GenerateHashForData(HashingAlgorithm.MD5,input);
Assert.AreEqual(
expectedOutput,
result,