[FA-55] User Service backend initial setup
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
using System.Net.Http.Json;
|
||||
|
||||
namespace FictionArchive.Service.UserService.Services.AuthenticationClient.Authentik;
|
||||
|
||||
public class AuthentikClient : IAuthenticationServiceClient
|
||||
{
|
||||
private readonly HttpClient _httpClient;
|
||||
private readonly ILogger<AuthentikClient> _logger;
|
||||
|
||||
public AuthentikClient(HttpClient httpClient, ILogger<AuthentikClient> logger)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<AuthentikUserResponse?> CreateUserAsync(string username, string email, string displayName)
|
||||
{
|
||||
var request = new AuthentikAddUserRequest
|
||||
{
|
||||
Username = username,
|
||||
Email = email,
|
||||
DisplayName = displayName,
|
||||
IsActive = true
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
var response = await _httpClient.PostAsJsonAsync("/api/v3/core/users/", request);
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
_logger.LogError(
|
||||
"Failed to create user in Authentik. Status: {StatusCode}, Error: {Error}",
|
||||
response.StatusCode, errorContent);
|
||||
return null;
|
||||
}
|
||||
|
||||
var userResponse = await response.Content.ReadFromJsonAsync<AuthentikUserResponse>();
|
||||
_logger.LogInformation("Successfully created user {Username} in Authentik with pk {Pk}",
|
||||
username, userResponse?.Pk);
|
||||
|
||||
return userResponse;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception while creating user {Username} in Authentik", username);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> SendRecoveryEmailAsync(int authentikUserId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var response = await _httpClient.PostAsync(
|
||||
$"/api/v3/core/users/{authentikUserId}/recovery_email/",
|
||||
null);
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
var errorContent = await response.Content.ReadAsStringAsync();
|
||||
_logger.LogError(
|
||||
"Failed to send recovery email for user {UserId}. Status: {StatusCode}, Error: {Error}",
|
||||
authentikUserId, response.StatusCode, errorContent);
|
||||
return false;
|
||||
}
|
||||
|
||||
_logger.LogInformation("Successfully sent recovery email to Authentik user {UserId}", authentikUserId);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Exception while sending recovery email to Authentik user {UserId}", authentikUserId);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user