2using System.Collections.Generic;
5using System.Threading.Tasks;
7using Microsoft.Extensions.Logging;
8using Microsoft.Extensions.Options;
23 readonly IReadOnlyCollection<IOAuthValidator>
validators;
35 ILoggerFactory loggerFactory,
36 IOptions<SecurityConfiguration> securityConfigurationOptions)
38 ArgumentNullException.ThrowIfNull(loggerFactory);
40 var securityConfiguration = securityConfigurationOptions?.Value ??
throw new ArgumentNullException(nameof(securityConfigurationOptions));
42 var validatorsBuilder =
new List<IOAuthValidator>();
45 if (securityConfiguration.OAuth ==
null)
48 if (securityConfiguration.OAuth.TryGetValue(
OAuthProvider.GitHub, out var gitHubConfig))
49 validatorsBuilder.Add(
55 if (securityConfiguration.OAuth.TryGetValue(
OAuthProvider.Discord, out var discordConfig))
56 validatorsBuilder.Add(
62 if (securityConfiguration.OAuth.TryGetValue(
OAuthProvider.TGForums, out var tgConfig))
63 validatorsBuilder.Add(
69 if (securityConfiguration.OAuth.TryGetValue(
OAuthProvider.Keycloak, out var keyCloakConfig))
70 validatorsBuilder.Add(
76 if (securityConfiguration.OAuth.TryGetValue(
OAuthProvider.InvisionCommunity, out var invisionConfig))
77 validatorsBuilder.Add(
88 public async Task<Dictionary<OAuthProvider, OAuthProviderInfo>>
ProviderInfos(CancellationToken cancellationToken)
90 var providersAndTasks =
validators.ToDictionary(
92 x => x.GetProviderInfo(cancellationToken));
94 await Task.WhenAll(providersAndTasks.Values);
96 return providersAndTasks
97 .Where(x => x.Value.Result !=
null)
100 x => x.Value.Result);
OAuth validator for Discord.
IOAuthValidator for GitHub.
OAuth validator for Keycloak.
OAuthProviders(IGitHubServiceFactory gitHubServiceFactory, IAbstractHttpClientFactory httpClientFactory, ILoggerFactory loggerFactory, IOptions< SecurityConfiguration > securityConfigurationOptions)
Initializes a new instance of the OAuthProviders class.
IOAuthValidator GetValidator(OAuthProvider oAuthProvider)
Gets the IOAuthValidator for a given oAuthProvider . The IOAuthValidator for oAuthProvider .
readonly IReadOnlyCollection< IOAuthValidator > validators
The IReadOnlyCollection<T> of IOAuthValidators.
async Task< Dictionary< OAuthProvider, OAuthProviderInfo > > ProviderInfos(CancellationToken cancellationToken)
Gets a Dictionary<TKey, TValue> of the provider client IDs. A Task<TResult> resulting in a anew Dicti...
IOAuthValidator for /tg/ forums.
Contains IOAuthValidators.
Validates OAuth responses for a given Provider.
Factory for IGitHubServices.
OAuthProvider
List of OAuth providers supported by TGS.