namespace HyperBooru.Services; public interface IPrincipalProvider { public IPrincipal? GetPrincipal(string name); public IUser? GetUser(string name); public IGroup? GetGroup(string name); public SecurityIdentifier? TranslateName(string name); public string? TranslateName(SecurityIdentifier sid); /// /// Perform a search for any principals whose account name /// matches the search term specified by name. /// /// /// A list of matching principals or null if the /// provider does not support search functionality. /// public IPrincipal[]? SearchPrincipals(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 abstract SecurityIdentifier? TranslateName(string name); public abstract string? TranslateName(SecurityIdentifier sid); public abstract IPrincipal[]? SearchPrincipals(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); public void Test() { var ret = SearchPrincipals("lol"); Console.WriteLine(ret); } }