tgstation-server 5.12.7
The /tg/station 13 server suite
Loading...
Searching...
No Matches
OAuthProviders.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Threading;
5using System.Threading.Tasks;
6
7using Microsoft.Extensions.Logging;
8using Microsoft.Extensions.Options;
9
14
16{
19 {
23 readonly IReadOnlyCollection<IOAuthValidator> validators;
24
33 IGitHubServiceFactory gitHubServiceFactory,
34 IAbstractHttpClientFactory httpClientFactory,
35 ILoggerFactory loggerFactory,
36 IOptions<SecurityConfiguration> securityConfigurationOptions)
37 {
38 ArgumentNullException.ThrowIfNull(loggerFactory);
39
40 var securityConfiguration = securityConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(securityConfigurationOptions));
41
42 var validatorsBuilder = new List<IOAuthValidator>();
43 validators = validatorsBuilder;
44
45 if (securityConfiguration.OAuth == null)
46 return;
47
48 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.GitHub, out var gitHubConfig))
49 validatorsBuilder.Add(
51 gitHubServiceFactory,
52 loggerFactory.CreateLogger<GitHubOAuthValidator>(),
53 gitHubConfig));
54
55 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.Discord, out var discordConfig))
56 validatorsBuilder.Add(
58 httpClientFactory,
59 loggerFactory.CreateLogger<DiscordOAuthValidator>(),
60 discordConfig));
61
62 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.TGForums, out var tgConfig))
63 validatorsBuilder.Add(
65 httpClientFactory,
66 loggerFactory.CreateLogger<TGForumsOAuthValidator>(),
67 tgConfig));
68
69 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.Keycloak, out var keyCloakConfig))
70 validatorsBuilder.Add(
72 httpClientFactory,
73 loggerFactory.CreateLogger<KeycloakOAuthValidator>(),
74 keyCloakConfig));
75
76 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.InvisionCommunity, out var invisionConfig))
77 validatorsBuilder.Add(
79 httpClientFactory,
80 loggerFactory.CreateLogger<InvisionCommunityOAuthValidator>(),
81 invisionConfig));
82 }
83
85 public IOAuthValidator GetValidator(OAuthProvider oAuthProvider) => validators.FirstOrDefault(x => x.Provider == oAuthProvider);
86
88 public async Task<Dictionary<OAuthProvider, OAuthProviderInfo>> ProviderInfos(CancellationToken cancellationToken)
89 {
90 var providersAndTasks = validators.ToDictionary(
91 x => x.Provider,
92 x => x.GetProviderInfo(cancellationToken));
93
94 await Task.WhenAll(providersAndTasks.Values);
95
96 return providersAndTasks
97 .Where(x => x.Value.Result != null)
98 .ToDictionary(
99 x => x.Key,
100 x => x.Value.Result);
101 }
102 }
103}
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...
Validates OAuth responses for a given Provider.
OAuthProvider
List of OAuth providers supported by TGS.