tgstation-server 6.16.0
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;
4
5using Microsoft.Extensions.Logging;
6using Microsoft.Extensions.Options;
7
12
14{
17 {
21 readonly IReadOnlyCollection<IOAuthValidator> validators;
22
31 IGitHubServiceFactory gitHubServiceFactory,
32 IAbstractHttpClientFactory httpClientFactory,
33 ILoggerFactory loggerFactory,
34 IOptions<SecurityConfiguration> securityConfigurationOptions)
35 {
36 ArgumentNullException.ThrowIfNull(loggerFactory);
37
38 var securityConfiguration = securityConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(securityConfigurationOptions));
39
40 var validatorsBuilder = new List<IOAuthValidator>();
41 validators = validatorsBuilder;
42
43 if (securityConfiguration.OAuth == null)
44 return;
45
46 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.GitHub, out var gitHubConfig))
47 validatorsBuilder.Add(
49 gitHubServiceFactory,
50 loggerFactory.CreateLogger<GitHubOAuthValidator>(),
51 gitHubConfig));
52
53 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.Discord, out var discordConfig))
54 validatorsBuilder.Add(
56 httpClientFactory,
57 loggerFactory.CreateLogger<DiscordOAuthValidator>(),
58 discordConfig));
59
60#pragma warning disable CS0618 // Type or member is obsolete
61 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.Keycloak, out var keyCloakConfig))
62#pragma warning restore CS0618 // Type or member is obsolete
63 validatorsBuilder.Add(
65 httpClientFactory,
66 loggerFactory.CreateLogger<KeycloakOAuthValidator>(),
67 keyCloakConfig));
68
69#pragma warning disable CS0618 // Type or member is obsolete
70 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.InvisionCommunity, out var invisionConfig))
71#pragma warning restore CS0618 // Type or member is obsolete
72 validatorsBuilder.Add(
74 httpClientFactory,
75 loggerFactory.CreateLogger<InvisionCommunityOAuthValidator>(),
76 invisionConfig));
77 }
78
80 public IOAuthValidator? GetValidator(OAuthProvider oAuthProvider, bool forLogin)
81 => validators.FirstOrDefault(
82 x => x.Provider == oAuthProvider
83 && ((forLogin && x.GatewayStatus != OAuthGatewayStatus.Only) || (!forLogin && x.GatewayStatus != OAuthGatewayStatus.Disabled)));
84
86 public Dictionary<OAuthProvider, OAuthProviderInfo> ProviderInfos()
87 {
88 var providersAndTasks = validators.ToDictionary(
89 x => x.Provider,
90 x => x.GetProviderInfo());
91
92 return providersAndTasks
93 .Where(x => x.Value != null)
94 .ToDictionary(
95 x => x.Key,
96 x => x.Value);
97 }
98 }
99}
IOAuthValidator? GetValidator(OAuthProvider oAuthProvider, bool forLogin)
Gets the IOAuthValidator for a given oAuthProvider .The IOAuthValidator for oAuthProvider .
OAuthProviders(IGitHubServiceFactory gitHubServiceFactory, IAbstractHttpClientFactory httpClientFactory, ILoggerFactory loggerFactory, IOptions< SecurityConfiguration > securityConfigurationOptions)
Initializes a new instance of the OAuthProviders class.
readonly IReadOnlyCollection< IOAuthValidator > validators
The IReadOnlyCollection<T> of IOAuthValidators.
Dictionary< OAuthProvider, OAuthProviderInfo > ProviderInfos()
Gets a Dictionary<TKey, TValue> of the provider client IDs.A new Dictionary<TKey, TValue> of the acti...
Validates OAuth responses for a given Provider.
OAuthProvider
List of OAuth2.0 providers supported by TGS that do not support OIDC.
OAuthGatewayStatus
Status of the OAuth gateway for a provider.