Add application services for profiles and neutrino
This commit is contained in:
5
RecNet.Application/Neutrino/AuthorizeNeutrinoCommand.cs
Normal file
5
RecNet.Application/Neutrino/AuthorizeNeutrinoCommand.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace RecNet.Application.Neutrino;
|
||||
|
||||
public sealed record AuthorizeNeutrinoCommand(
|
||||
Guid ProfileId,
|
||||
string AccessToken);
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace RecNet.Application.Neutrino;
|
||||
|
||||
public interface INeutrinoAuthorizationService
|
||||
{
|
||||
Task<NeutrinoAuthorizationResult> AuthorizeAsync(
|
||||
AuthorizeNeutrinoCommand command,
|
||||
CancellationToken ct = default);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace RecNet.Application.Neutrino;
|
||||
|
||||
public enum NeutrinoAuthorizationFailure
|
||||
{
|
||||
InvalidParameters,
|
||||
AuthenticationFailed
|
||||
}
|
||||
17
RecNet.Application/Neutrino/NeutrinoAuthorizationResult.cs
Normal file
17
RecNet.Application/Neutrino/NeutrinoAuthorizationResult.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace RecNet.Application.Neutrino;
|
||||
|
||||
public sealed record NeutrinoAuthorizationResult(
|
||||
bool Succeeded,
|
||||
NeutrinoAuthorizationFailure? Failure,
|
||||
string? UserId,
|
||||
string? Nickname)
|
||||
{
|
||||
public static NeutrinoAuthorizationResult Success(Guid userId, string nickname)
|
||||
=> new(true, null, userId.ToString(), nickname);
|
||||
|
||||
public static NeutrinoAuthorizationResult InvalidParameters()
|
||||
=> new(false, NeutrinoAuthorizationFailure.InvalidParameters, null, null);
|
||||
|
||||
public static NeutrinoAuthorizationResult AuthenticationFailed()
|
||||
=> new(false, NeutrinoAuthorizationFailure.AuthenticationFailed, null, null);
|
||||
}
|
||||
30
RecNet.Application/Neutrino/NeutrinoAuthorizationService.cs
Normal file
30
RecNet.Application/Neutrino/NeutrinoAuthorizationService.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using RecNet.Application.Common.Interfaces;
|
||||
using RecNet.Domain.Repositories;
|
||||
|
||||
namespace RecNet.Application.Neutrino;
|
||||
|
||||
public class NeutrinoAuthorizationService(
|
||||
IProfileRepository profileRepository,
|
||||
ITokenService tokenService) : INeutrinoAuthorizationService
|
||||
{
|
||||
public async Task<NeutrinoAuthorizationResult> AuthorizeAsync(
|
||||
AuthorizeNeutrinoCommand command,
|
||||
CancellationToken ct = default)
|
||||
{
|
||||
if (command.ProfileId == Guid.Empty || string.IsNullOrWhiteSpace(command.AccessToken))
|
||||
return NeutrinoAuthorizationResult.InvalidParameters();
|
||||
|
||||
var tokenVerifyResult = tokenService.VerifyToken(command.AccessToken);
|
||||
if (!tokenVerifyResult.Succeeded || tokenVerifyResult.ProfileId is null)
|
||||
return NeutrinoAuthorizationResult.AuthenticationFailed();
|
||||
|
||||
if (tokenVerifyResult.ProfileId.Value != command.ProfileId)
|
||||
return NeutrinoAuthorizationResult.AuthenticationFailed();
|
||||
|
||||
var profile = await profileRepository.GetByIdAsync(command.ProfileId, ct);
|
||||
if (profile is null)
|
||||
return NeutrinoAuthorizationResult.AuthenticationFailed();
|
||||
|
||||
return NeutrinoAuthorizationResult.Success(profile.ProfileId, profile.Name);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user