feat: Implement Authentik group synchronization and add confirmation dialogs for service management
This commit is contained in:
@@ -321,6 +321,60 @@ public class XiboApiService
|
||||
// User groups
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// <summary>
|
||||
/// Lists all user groups in the Xibo instance and returns their names and IDs.
|
||||
/// </summary>
|
||||
public async Task<List<XiboGroupInfo>> ListUserGroupsAsync(
|
||||
string instanceUrl,
|
||||
string accessToken)
|
||||
{
|
||||
var client = _httpClientFactory.CreateClient("XiboApi");
|
||||
var baseUrl = instanceUrl.TrimEnd('/');
|
||||
|
||||
SetBearer(client, accessToken);
|
||||
|
||||
var response = await client.GetAsync($"{baseUrl}/api/group");
|
||||
await EnsureSuccessAsync(response, "list Xibo user groups");
|
||||
|
||||
using var doc = await JsonDocument.ParseAsync(await response.Content.ReadAsStreamAsync());
|
||||
var groups = new List<XiboGroupInfo>();
|
||||
|
||||
foreach (var el in doc.RootElement.EnumerateArray())
|
||||
{
|
||||
groups.Add(new XiboGroupInfo
|
||||
{
|
||||
GroupId = el.GetProperty("groupId").GetInt32(),
|
||||
Group = el.GetProperty("group").GetString() ?? "",
|
||||
});
|
||||
}
|
||||
|
||||
return groups;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Finds an existing Xibo group by name or creates it if it doesn't exist.
|
||||
/// Returns the group ID.
|
||||
/// </summary>
|
||||
public async Task<int> GetOrCreateUserGroupAsync(
|
||||
string instanceUrl,
|
||||
string accessToken,
|
||||
string groupName)
|
||||
{
|
||||
// Try to find existing group first
|
||||
var existing = await ListUserGroupsAsync(instanceUrl, accessToken);
|
||||
var match = existing.FirstOrDefault(g =>
|
||||
string.Equals(g.Group, groupName, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (match != null)
|
||||
{
|
||||
_logger.LogDebug("Xibo group '{Name}' already exists (id={Id})", groupName, match.GroupId);
|
||||
return match.GroupId;
|
||||
}
|
||||
|
||||
// Create new group
|
||||
return await CreateUserGroupAsync(instanceUrl, accessToken, groupName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new user group and returns its numeric group ID.
|
||||
/// </summary>
|
||||
@@ -529,6 +583,12 @@ public class XiboTestResult
|
||||
public int HttpStatus { get; set; }
|
||||
}
|
||||
|
||||
public class XiboGroupInfo
|
||||
{
|
||||
public int GroupId { get; set; }
|
||||
public string Group { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class XiboAuthException : Exception
|
||||
{
|
||||
public int HttpStatus { get; }
|
||||
|
||||
Reference in New Issue
Block a user