diff --git a/API/Configurations/RecNetOptions.cs b/API/Configuration/RecNetOptions.cs similarity index 100% rename from API/Configurations/RecNetOptions.cs rename to API/Configuration/RecNetOptions.cs diff --git a/API/Contracts/Profiles/Requests/LoginRequest.cs b/API/Contracts/Profiles/Requests/LoginRequest.cs index eb07412..435564e 100644 --- a/API/Contracts/Profiles/Requests/LoginRequest.cs +++ b/API/Contracts/Profiles/Requests/LoginRequest.cs @@ -1,12 +1,22 @@ -using RecNet.Domain.Common; +using System.ComponentModel.DataAnnotations; +using RecNet.Domain.Common; namespace API.Contracts.Profiles.Requests; public class LoginRequest { + [Required] public required string AppVersion { get; set; } + + [Required, StringLength(128, MinimumLength = 1)] public required string DeviceId { get; set; } + + [Required] public required string PlatformAuthentication { get; set; } + + [Required, StringLength(50, MinimumLength = 1)] public required string PlatformId { get; set; } + + [EnumDataType(typeof(PlatformType))] public PlatformType PlatformType { get; set; } } \ No newline at end of file diff --git a/RecNet.Application/Profiles/ProfileService.cs b/RecNet.Application/Profiles/ProfileService.cs index 2b9c20a..0ab4654 100644 --- a/RecNet.Application/Profiles/ProfileService.cs +++ b/RecNet.Application/Profiles/ProfileService.cs @@ -68,10 +68,7 @@ public class ProfileService( if (profile.IsBanned) return LoginProfileResult.Fail("Profile is banned"); - if (auth.Name is not null && profile.Name != auth.Name) - profile.SetName(auth.Name); - - profile.AddDeviceId(command.DeviceId); + profile.RecordSuccessfulLogin(command.DeviceId, auth.Name); await profileRepository.SaveChangesAsync(ct); diff --git a/RecNet.Domain/Entities/Configuration/IServerConfigRepository.cs b/RecNet.Domain/Configuration/IServerConfigRepository.cs similarity index 100% rename from RecNet.Domain/Entities/Configuration/IServerConfigRepository.cs rename to RecNet.Domain/Configuration/IServerConfigRepository.cs diff --git a/RecNet.Domain/Entities/Configuration/ServerConfig.cs b/RecNet.Domain/Configuration/ServerConfig.cs similarity index 100% rename from RecNet.Domain/Entities/Configuration/ServerConfig.cs rename to RecNet.Domain/Configuration/ServerConfig.cs diff --git a/RecNet.Domain/Entities/Profiles/IProfileRepository.cs b/RecNet.Domain/Profiles/IProfileRepository.cs similarity index 100% rename from RecNet.Domain/Entities/Profiles/IProfileRepository.cs rename to RecNet.Domain/Profiles/IProfileRepository.cs diff --git a/RecNet.Domain/Entities/Profiles/Names/DefaultNameGenConfig.cs b/RecNet.Domain/Profiles/Names/DefaultNameGenConfig.cs similarity index 100% rename from RecNet.Domain/Entities/Profiles/Names/DefaultNameGenConfig.cs rename to RecNet.Domain/Profiles/Names/DefaultNameGenConfig.cs diff --git a/RecNet.Domain/Entities/Profiles/Names/NameGenConfig.cs b/RecNet.Domain/Profiles/Names/NameGenConfig.cs similarity index 100% rename from RecNet.Domain/Entities/Profiles/Names/NameGenConfig.cs rename to RecNet.Domain/Profiles/Names/NameGenConfig.cs diff --git a/RecNet.Domain/Entities/Profiles/Profile.cs b/RecNet.Domain/Profiles/Profile.cs similarity index 90% rename from RecNet.Domain/Entities/Profiles/Profile.cs rename to RecNet.Domain/Profiles/Profile.cs index 6b60705..b97f72c 100644 --- a/RecNet.Domain/Entities/Profiles/Profile.cs +++ b/RecNet.Domain/Profiles/Profile.cs @@ -61,6 +61,14 @@ public class Profile DeviceIds.Add(deviceId); } + public void RecordSuccessfulLogin(string deviceId, string? platformName) + { + if (!string.IsNullOrWhiteSpace(platformName) && Name != platformName) + SetName(platformName); + + AddDeviceId(deviceId); + } + public void Ban() => IsBanned = true; diff --git a/RecNet.Infrastructure/Services/Steam/SteamAuthValidator.cs b/RecNet.Infrastructure/Services/Steam/SteamAuthValidator.cs index 5b020da..72964d8 100644 --- a/RecNet.Infrastructure/Services/Steam/SteamAuthValidator.cs +++ b/RecNet.Infrastructure/Services/Steam/SteamAuthValidator.cs @@ -16,8 +16,18 @@ public class SteamAuthValidator(ISteamAuthService steamAuthService) : IPlatformA string platformId, CancellationToken ct = default) { - var steamParams = JsonSerializer.Deserialize(platformAuthentication); - if (steamParams == null) + SteamPlatformAuth? steamParams; + + try + { + steamParams = JsonSerializer.Deserialize(platformAuthentication); + } + catch (JsonException) + { + return PlatformAuthResult.Failure("Invalid authentication"); + } + + if (steamParams?.AppId is null || string.IsNullOrWhiteSpace(steamParams.Ticket)) return PlatformAuthResult.Failure("Invalid authentication"); var result = await steamAuthService.AuthorizeAsync(steamParams.Ticket, steamParams.AppId.AppId, ct);