diff --git a/API/DTOs/Stats/V3/ServerInfoV3Dto.cs b/API/DTOs/Stats/V3/ServerInfoV3Dto.cs
index 8ed3079f5..b19d173d9 100644
--- a/API/DTOs/Stats/V3/ServerInfoV3Dto.cs
+++ b/API/DTOs/Stats/V3/ServerInfoV3Dto.cs
@@ -131,6 +131,10 @@ public sealed record ServerInfoV3Dto
/// Is this server using Kavita+
///
public bool ActiveKavitaPlusSubscription { get; set; }
+ ///
+ /// Is OIDC enabled
+ ///
+ public bool OidcEnabled { get; set; }
#endregion
#region Users
diff --git a/API/DTOs/Stats/V3/UserStatV3.cs b/API/DTOs/Stats/V3/UserStatV3.cs
index 450a2e409..745fd39b6 100644
--- a/API/DTOs/Stats/V3/UserStatV3.cs
+++ b/API/DTOs/Stats/V3/UserStatV3.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using API.Data.Misc;
+using API.Entities.Enums;
using API.Entities.Enums.Device;
namespace API.DTOs.Stats.V3;
@@ -76,6 +77,10 @@ public sealed record UserStatV3
/// Roles for this user
///
public ICollection Roles { get; set; }
+ ///
+ /// Who manages the user (OIDC, Kavita)
+ ///
+ public AppUserOwner Owner { get; set; }
}
diff --git a/API/Entities/AppUser.cs b/API/Entities/AppUser.cs
index fd37126ab..3952be678 100644
--- a/API/Entities/AppUser.cs
+++ b/API/Entities/AppUser.cs
@@ -96,8 +96,9 @@ public class AppUser : IdentityUser, IHasConcurrencyToken
///
public string? ExternalId { get; set; }
///
- /// Describes how the account was created
+ /// Describes who manages the account (may further depend on other settings)
///
+ /// Always fallbacks to native
public AppUserOwner Owner { get; set; } = AppUserOwner.Native;
diff --git a/API/Services/Tasks/StatsService.cs b/API/Services/Tasks/StatsService.cs
index 5d5df6647..50e13e65d 100644
--- a/API/Services/Tasks/StatsService.cs
+++ b/API/Services/Tasks/StatsService.cs
@@ -248,7 +248,8 @@ public class StatsService : IStatsService
DotnetVersion = Environment.Version.ToString(),
OpdsEnabled = serverSettings.EnableOpds,
EncodeMediaAs = serverSettings.EncodeMediaAs,
- MatchedMetadataEnabled = mediaSettings.Enabled
+ MatchedMetadataEnabled = mediaSettings.Enabled,
+ OidcEnabled = !string.IsNullOrEmpty(serverSettings.OidcConfig.Authority),
};
dto.OsLocale = CultureInfo.CurrentCulture.EnglishName;
@@ -353,7 +354,9 @@ public class StatsService : IStatsService
userDto.DevicePlatforms = user.Devices.Select(d => d.Platform).ToList();
userDto.SeriesBookmarksCreatedCount = user.Bookmarks.Count;
userDto.SmartFilterCreatedCount = user.SmartFilters.Count;
+ userDto.IsSharingReviews = user.UserPreferences.ShareReviews;
userDto.WantToReadSeriesCount = user.WantToRead.Count;
+ userDto.Owner = user.Owner;
if (allLibraries.Count > 0 && userLibraryAccess.TryGetValue(user.Id, out var accessibleLibraries))
{