diff --git a/DigitalData.Core.Abstractions/Security/CryptographerExtensions.cs b/DigitalData.Core.Abstractions/Security/CryptographerExtensions.cs deleted file mode 100644 index 2301e78..0000000 --- a/DigitalData.Core.Abstractions/Security/CryptographerExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace DigitalData.Core.Abstractions.Security -{ - public static class CryptographerExtensions - { - public static IEnumerable GetByIssuer(this IEnumerable cryptographers, string issuer) where TRSACryptographer: IRSACryptographer - => cryptographers.Where(c => c.Issuer == issuer); - - public static IEnumerable GetByAudience(this IEnumerable cryptographers, string audience) where TRSACryptographer : IRSACryptographer - => cryptographers.Where(c => c.Audience == audience); - - public static TRSACryptographer Get(this IEnumerable cryptographers, string issuer, string audience) where TRSACryptographer : IRSACryptographer - => cryptographers.Where(c => c.Issuer == issuer && c.Audience == audience).SingleOrDefault() - ?? throw new InvalidOperationException($"No {typeof(TRSACryptographer).GetType().Name.TrimStart('I')} found with Issuer: {issuer} and Audience: {audience}."); - - public static bool TryGet(this IEnumerable cryptographers, string issuer, string audience, out TRSACryptographer? cryptographer) where TRSACryptographer : IRSACryptographer - { - cryptographer = cryptographers.SingleOrDefault(c => c.Issuer == issuer && c.Audience == audience); - return cryptographer is not null; - } - } -} \ No newline at end of file diff --git a/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs b/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs new file mode 100644 index 0000000..008e508 --- /dev/null +++ b/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs @@ -0,0 +1,21 @@ +namespace DigitalData.Core.Abstractions.Security +{ + public static class SecurityExtensions + { + public static IEnumerable GetByIssuer(this IEnumerable contextes, string issuer) where TUniqueSecurityContext: IUniqueSecurityContext + => contextes.Where(c => c.Issuer == issuer); + + public static IEnumerable GetByAudience(this IEnumerable contextes, string audience) where TUniqueSecurityContext : IUniqueSecurityContext + => contextes.Where(c => c.Audience == audience); + + public static TUniqueSecurityContext Get(this IEnumerable contextes, string issuer, string audience) where TUniqueSecurityContext : IUniqueSecurityContext + => contextes.Where(c => c.Issuer == issuer && c.Audience == audience).SingleOrDefault() + ?? throw new InvalidOperationException($"Exactly one {typeof(TUniqueSecurityContext).Name} must exist with Issuer: '{issuer}' and Audience: '{audience}'."); + + public static bool TryGet(this IEnumerable contextes, string issuer, string audience, out TUniqueSecurityContext? context) where TUniqueSecurityContext : IUniqueSecurityContext + { + context = contextes.SingleOrDefault(c => c.Issuer == issuer && c.Audience == audience); + return context is not null; + } + } +} \ No newline at end of file