using EnvelopeGenerator.ReceiverUI.Client.Services.Base;
namespace EnvelopeGenerator.ReceiverUI.Client.Services;
///
/// Spricht mit dem bestehenden AuthController der API.
/// Die API erkennt den Nutzer über das Cookie "AuthToken" automatisch.
///
public class AuthService : ApiServiceBase, IAuthService
{
public AuthService(HttpClient http, ILogger logger) : base(http, logger) { }
public async Task CheckAuthAsync(string? role = null, CancellationToken ct = default)
{
var endpoint = role is not null ? $"api/auth/check?role={role}" : "api/auth/check";
try
{
var response = await Http.GetAsync(endpoint, ct);
return response.IsSuccessStatusCode
? ApiResponse.Success((int)response.StatusCode)
: ApiResponse.Failure((int)response.StatusCode);
}
catch (HttpRequestException ex)
{
Logger.LogError(ex, "HTTP error calling GET {Endpoint}", endpoint);
return ApiResponse.Failure(0, "Verbindung zum Server fehlgeschlagen.");
}
catch (TaskCanceledException)
{
return ApiResponse.Failure(0, "Anfrage abgebrochen.");
}
}
public async Task LogoutAsync(CancellationToken ct = default)
{
const string endpoint = "api/auth/logout";
try
{
var response = await Http.PostAsync(endpoint, null, ct);
return response.IsSuccessStatusCode
? ApiResponse.Success((int)response.StatusCode)
: ApiResponse.Failure((int)response.StatusCode);
}
catch (HttpRequestException ex)
{
Logger.LogError(ex, "HTTP error calling POST {Endpoint}", endpoint);
return ApiResponse.Failure(0, "Verbindung zum Server fehlgeschlagen.");
}
catch (TaskCanceledException)
{
return ApiResponse.Failure(0, "Anfrage abgebrochen.");
}
}
}