feat: Primera parte de la implementacion de autentificacion, para obtener la DOLIAPIKEY del cliente la cual cachearemos asociada a un Id que devolveremos en el JWT de nuestro servidor.
This commit is contained in:
parent
f28461ae0c
commit
a80d41feab
|
|
@ -7,15 +7,44 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
||||||
compose.yaml = compose.yaml
|
compose.yaml = compose.yaml
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DoliMiddlewareApi.Tests", "DoliMiddlewareApi.Tests\DoliMiddlewareApi.Tests.csproj", "{356EF403-AF00-493B-AC69-6DD7C2D10DF5}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|Any CPU.Build.0 = Release|Any CPU
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{9A700A1E-080F-4B0D-BD3D-3E5B31B488EC}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{356EF403-AF00-493B-AC69-6DD7C2D10DF5}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
namespace DoliMiddlewareApi.Dtos.Dolibarr;
|
||||||
|
|
||||||
|
public class TokenResponse
|
||||||
|
{
|
||||||
|
public required string AccessToken { get; set; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace DoliMiddlewareApi.Dtos.command;
|
||||||
|
|
||||||
|
public class CreateTokenDto
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
[StringLength(100)]
|
||||||
|
public string Username{get;set;}="";
|
||||||
|
[Required]
|
||||||
|
[StringLength(255)]
|
||||||
|
public string Password{get;set;}="";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
using DoliMiddlewareApi.Dtos.command;
|
||||||
|
using DoliMiddlewareApi.Dtos.Dolibarr;
|
||||||
|
using DoliMiddlewareApi.Services.Clients;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
namespace DoliMiddlewareApi.Services.Auth;
|
||||||
|
|
||||||
|
public sealed class DolibarrAuthService(IDolibarrApiClient apiClient)
|
||||||
|
{
|
||||||
|
public async Task<string> AuthenticateAsync(CreateTokenDto createTokenDto)
|
||||||
|
{
|
||||||
|
var responseString = await apiClient.PostAsync("login", new
|
||||||
|
{
|
||||||
|
login = createTokenDto.Username,
|
||||||
|
password = createTokenDto.Password
|
||||||
|
});
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(responseString))
|
||||||
|
{
|
||||||
|
throw new UnauthorizedAccessException("Credenciales inválidas");
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = JsonSerializer.Deserialize<TokenResponse>(responseString);
|
||||||
|
if (response == null || string.IsNullOrEmpty(response.AccessToken))
|
||||||
|
{
|
||||||
|
throw new UnauthorizedAccessException("Respuesta inválida de Dolibarr");
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.AccessToken;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue