summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Services')
-rw-r--r--Services/PrincipalProvider.cs22
-rw-r--r--Services/SecurityService.cs14
2 files changed, 25 insertions, 11 deletions
diff --git a/Services/PrincipalProvider.cs b/Services/PrincipalProvider.cs
index e75c6c7..6991c64 100644
--- a/Services/PrincipalProvider.cs
+++ b/Services/PrincipalProvider.cs
@@ -1,9 +1,23 @@
namespace HyperBooru.Services;
-public abstract class PrincipalProvider {
- public abstract bool ValidatePassword(HBPrincipal principal, string password);
+public interface IPrincipalProvider {
+ public Principal? GetPrincipal(string name);
+ public User? GetUser(string name);
+ public Group? GetGroup(string name);
- public abstract HBPrincipal GetPrincipal(string username);
+ public Group[] GetGroups(Principal principal);
+ public Group[] GetGroups(Principal principal, bool recurse);
- public abstract Group[] GetAllGroups(HBPrincipal principal);
+ public bool ValidatePassword(User user, string password);
+}
+
+public abstract class PrincipalProvider : IPrincipalProvider {
+ public abstract Principal? GetPrincipal(string name);
+ public abstract User? GetUser(string name);
+ public abstract Group? GetGroup(string name);
+
+ public Group[] GetGroups(Principal principal) => GetGroups(principal, false);
+ public abstract Group[] GetGroups(Principal principal, bool recurse);
+
+ public abstract bool ValidatePassword(User user, string password);
}
diff --git a/Services/SecurityService.cs b/Services/SecurityService.cs
index f1444c1..8c97c7b 100644
--- a/Services/SecurityService.cs
+++ b/Services/SecurityService.cs
@@ -7,8 +7,8 @@ namespace HyperBooru.Services;
public class SecurityService {
private IDbContextFactory<HBContext> dbFactory;
- private MemoryCache<SidStruct, HBPrincipal> principalCache;
- private MemoryCache<int, Acl> aclCache;
+ private MemoryCache<SidStruct, Principal> principalCache;
+ private MemoryCache<int, Acl> aclCache;
public SecurityService(IDbContextFactory<HBContext> dbFactory) {
this.dbFactory = dbFactory;
@@ -39,7 +39,7 @@ public class SecurityService {
public IEnumerable<HBObject> Filter(
IEnumerable<HBObject> objects,
- HBPrincipal principal,
+ Principal principal,
ulong permissions) {
foreach(var obj in objects) {
@@ -51,7 +51,7 @@ public class SecurityService {
public IEnumerable<HBObject> Filter<T>(
IEnumerable<HBObject> objects,
- HBPrincipal principal,
+ Principal principal,
T permissions) where T : Enum =>
Filter(objects, principal, permissions);
@@ -62,14 +62,14 @@ public class SecurityService {
/// <param name="acl">
/// ACL to resolve (returns a bitmask consisting of all 1's if this field is null)
/// </param>
- private ulong GetPermissions(Acl? acl, HBPrincipal principal) {
+ private ulong GetPermissions(Acl? acl, Principal principal) {
if(acl is null)
return ulong.MaxValue;
ulong permissions = 0;
var principals = GetGroupMemberShip(principal)
- .Cast<HBPrincipal>()
+ .Cast<Principal>()
.Concat(new[] { principal })
.Select(p => p.Sid)
.ToArray();
@@ -96,7 +96,7 @@ public class SecurityService {
/// Recursively get all groups of which the specified principal
/// is a member, including implicit memberships.
/// </summary>
- private List<Group> GetGroupMemberShip(HBPrincipal principal) {
+ private List<Group> GetGroupMemberShip(Principal principal) {
var groups = principal.MemberOf.ToList();
while(true) {