tgstation-server 6.19.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;
4using System.Net.Http;
5
6using Microsoft.Extensions.Logging;
7using Microsoft.Extensions.Options;
8
12
14{
17 {
21 readonly IReadOnlyCollection<IOAuthValidator> validators;
22
31 IGitHubServiceFactory gitHubServiceFactory,
32 IHttpClientFactory httpClientFactory,
33 ILoggerFactory loggerFactory,
34 IOptionsSnapshot<SecurityConfiguration> securityConfigurationOptions)
35 {
36 ArgumentNullException.ThrowIfNull(loggerFactory);
37 ArgumentNullException.ThrowIfNull(securityConfigurationOptions);
38
39 var securityConfiguration = securityConfigurationOptions.Value;
40
41 var validatorsBuilder = new List<IOAuthValidator>();
42 validators = validatorsBuilder;
43
44 if (securityConfiguration.OAuth == null)
45 return;
46
47 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.GitHub, out var gitHubConfig))
48 validatorsBuilder.Add(
50 gitHubServiceFactory,
51 loggerFactory.CreateLogger<GitHubOAuthValidator>(),
52 gitHubConfig));
53
54 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.Discord, out var discordConfig))
55 validatorsBuilder.Add(
57 httpClientFactory,
58 loggerFactory.CreateLogger<DiscordOAuthValidator>(),
59 discordConfig));
60
61#pragma warning disable CS0618 // Type or member is obsolete
62 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.Keycloak, out var keyCloakConfig))
63#pragma warning restore CS0618 // Type or member is obsolete
64 validatorsBuilder.Add(
66 httpClientFactory,
67 loggerFactory.CreateLogger<KeycloakOAuthValidator>(),
68 keyCloakConfig));
69
70 if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.InvisionCommunity, out var invisionConfig))
71 validatorsBuilder.Add(
73 httpClientFactory,
74 loggerFactory.CreateLogger<InvisionCommunityOAuthValidator>(),
75 invisionConfig));
76 }
77
79 public IOAuthValidator? GetValidator(OAuthProvider oAuthProvider, bool forLogin)
80 => validators.FirstOrDefault(
81 x => x.Provider == oAuthProvider
82 && ((forLogin && x.GatewayStatus != OAuthGatewayStatus.Only) || (!forLogin && x.GatewayStatus != OAuthGatewayStatus.Disabled)));
83
85 public Dictionary<OAuthProvider, OAuthProviderInfo> ProviderInfos()
86 {
87 var providersAndTasks = validators.ToDictionary(
88 x => x.Provider,
89 x => x.GetProviderInfo());
90
91 return providersAndTasks
92 .Where(x => x.Value != null)
93 .ToDictionary(
94 x => x.Key,
95 x => x.Value);
96 }
97 }
98}
IOAuthValidator? GetValidator(OAuthProvider oAuthProvider, bool forLogin)
Gets the IOAuthValidator for a given oAuthProvider .The IOAuthValidator for oAuthProvider .
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...
OAuthProviders(IGitHubServiceFactory gitHubServiceFactory, IHttpClientFactory httpClientFactory, ILoggerFactory loggerFactory, IOptionsSnapshot< SecurityConfiguration > securityConfigurationOptions)
Initializes a new instance of the OAuthProviders class.
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.