namespace HyperBooru.Services; public interface IPrincipalProvider { public IPrincipal? GetPrincipal(string name); public IUser? GetUser(string name); public IGroup? GetGroup(string name); public IGroup[] GetGroups(IPrincipal principal); public IGroup[] GetGroups(IPrincipal principal, bool recurse); public IGroup[] GetGroups(SecurityIdentifier sid); public IGroup[] GetGroups(SecurityIdentifier sid, bool recurse); public bool ValidatePassword(IUser user, string password); } public abstract class PrincipalProvider : IPrincipalProvider { public abstract IPrincipal? GetPrincipal(string name); public abstract IUser? GetUser(string name); public abstract IGroup? GetGroup(string name); public IGroup[] GetGroups(IPrincipal principal) => GetGroups(principal.Sid, false); public IGroup[] GetGroups(IPrincipal principal, bool recurse) => GetGroups(principal.Sid, recurse); public IGroup[] GetGroups(SecurityIdentifier sid) => GetGroups(sid, false); public abstract IGroup[] GetGroups(SecurityIdentifier sid, bool recurse); public abstract bool ValidatePassword(IUser user, string password); }