From 671083cc973225767244501efde6ff4bbe54bd45 Mon Sep 17 00:00:00 2001
From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Date: Thu, 28 Jul 2022 16:27:55 +0100
Subject: [PATCH 1/3] Invision Community OAuth Support
---
.../Models/OAuthProvider.cs | 5 ++
.../OAuth/InvisionCommunityOAuthValidator.cs | 55 +++++++++++++++++++
.../Security/OAuth/OAuthProviders.cs | 8 +++
3 files changed, 68 insertions(+)
create mode 100644 src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
diff --git a/src/Tgstation.Server.Api/Models/OAuthProvider.cs b/src/Tgstation.Server.Api/Models/OAuthProvider.cs
index 716686ed16..a6dfbe07bb 100644
--- a/src/Tgstation.Server.Api/Models/OAuthProvider.cs
+++ b/src/Tgstation.Server.Api/Models/OAuthProvider.cs
@@ -28,5 +28,10 @@ namespace Tgstation.Server.Api.Models
/// https://www.keycloak.org
///
Keycloak,
+
+ ///
+ /// https://invisioncommunity.com/
+ ///
+ InvisionCommunity,
}
}
diff --git a/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs b/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
new file mode 100644
index 0000000000..ec437e0a89
--- /dev/null
+++ b/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Net.Http;
+
+using Microsoft.Extensions.Logging;
+
+using Tgstation.Server.Api.Models;
+using Tgstation.Server.Host.Configuration;
+using Tgstation.Server.Host.System;
+
+namespace Tgstation.Server.Host.Security.OAuth
+{
+ ///
+ /// OAuth validator for Discord.
+ ///
+ sealed class InvisionCommunityOAuthValidator : GenericOAuthValidator
+ {
+ ///
+ public override OAuthProvider Provider => OAuthProvider.InvisionCommunity;
+
+ ///
+ protected override Uri TokenUrl => new Uri($"{BaseProtocolPath}/oauth/token/");
+
+ ///
+ protected override Uri UserInformationUrl => new Uri($"{BaseProtocolPath}/api/core/me");
+
+ ///
+ /// Base path to the server's OAuth endpoint.
+ ///
+ string BaseProtocolPath => $"{OAuthConfiguration.ServerUrl}";
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The for the .
+ /// The for the .
+ /// The for the .
+ /// The for the .
+ public InvisionCommunityOAuthValidator(
+ IHttpClientFactory httpClientFactory,
+ IAssemblyInformationProvider assemblyInformationProvider,
+ ILogger logger,
+ OAuthConfiguration oAuthConfiguration)
+ : base(httpClientFactory, assemblyInformationProvider, logger, oAuthConfiguration) {
+ }
+
+ ///
+ protected override OAuthTokenRequest CreateTokenRequest(string code) => new OAuthTokenRequest(OAuthConfiguration, code, "profile");
+
+ ///
+ protected override string DecodeTokenPayload(dynamic responseJson) => responseJson.access_token;
+
+ ///
+ protected override string DecodeUserInformationPayload(dynamic responseJson) => responseJson.id;
+ }
+}
diff --git a/src/Tgstation.Server.Host/Security/OAuth/OAuthProviders.cs b/src/Tgstation.Server.Host/Security/OAuth/OAuthProviders.cs
index b51f21a61c..5337ee051f 100644
--- a/src/Tgstation.Server.Host/Security/OAuth/OAuthProviders.cs
+++ b/src/Tgstation.Server.Host/Security/OAuth/OAuthProviders.cs
@@ -79,6 +79,14 @@ namespace Tgstation.Server.Host.Security.OAuth
assemblyInformationProvider,
loggerFactory.CreateLogger(),
keyCloakConfig));
+
+ if (securityConfiguration.OAuth.TryGetValue(OAuthProvider.InvisionCommunity, out var invisionConfig))
+ validatorsBuilder.Add(
+ new InvisionCommunityOAuthValidator(
+ httpClientFactory,
+ assemblyInformationProvider,
+ loggerFactory.CreateLogger(),
+ invisionConfig));
}
///
From 00eab2d91731b97e1f457d7b80badfc682a1fa48 Mon Sep 17 00:00:00 2001
From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Date: Thu, 28 Jul 2022 16:34:22 +0100
Subject: [PATCH 2/3] Style stuff
---
.../Security/OAuth/InvisionCommunityOAuthValidator.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs b/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
index ec437e0a89..cd37c98b01 100644
--- a/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
+++ b/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
@@ -40,7 +40,8 @@ namespace Tgstation.Server.Host.Security.OAuth
IAssemblyInformationProvider assemblyInformationProvider,
ILogger logger,
OAuthConfiguration oAuthConfiguration)
- : base(httpClientFactory, assemblyInformationProvider, logger, oAuthConfiguration) {
+ : base(httpClientFactory, assemblyInformationProvider, logger, oAuthConfiguration)
+ {
}
///
From d1a38126641ad2db43671e33744a3d6d833c07f2 Mon Sep 17 00:00:00 2001
From: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Date: Thu, 28 Jul 2022 17:36:22 +0100
Subject: [PATCH 3/3] Cyber tweaks
---
build/Version.props | 4 ++--
.../Security/OAuth/InvisionCommunityOAuthValidator.cs | 11 +++--------
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/build/Version.props b/build/Version.props
index 6592d09c26..39031953f1 100644
--- a/build/Version.props
+++ b/build/Version.props
@@ -4,8 +4,8 @@
4.17.0
- 4.1.0
- 9.4.0
+ 4.2.0
+ 9.5.0
9.4.0
10.5.0
6.0.5
diff --git a/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs b/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
index cd37c98b01..e0021d0143 100644
--- a/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
+++ b/src/Tgstation.Server.Host/Security/OAuth/InvisionCommunityOAuthValidator.cs
@@ -10,7 +10,7 @@ using Tgstation.Server.Host.System;
namespace Tgstation.Server.Host.Security.OAuth
{
///
- /// OAuth validator for Discord.
+ /// OAuth validator for Invision Community (selfhosted).
///
sealed class InvisionCommunityOAuthValidator : GenericOAuthValidator
{
@@ -18,15 +18,10 @@ namespace Tgstation.Server.Host.Security.OAuth
public override OAuthProvider Provider => OAuthProvider.InvisionCommunity;
///
- protected override Uri TokenUrl => new Uri($"{BaseProtocolPath}/oauth/token/");
+ protected override Uri TokenUrl => new Uri($"{OAuthConfiguration.ServerUrl}/oauth/token/"); // This needs the trailing slash or it doesnt get the token. Do not remove.
///
- protected override Uri UserInformationUrl => new Uri($"{BaseProtocolPath}/api/core/me");
-
- ///
- /// Base path to the server's OAuth endpoint.
- ///
- string BaseProtocolPath => $"{OAuthConfiguration.ServerUrl}";
+ protected override Uri UserInformationUrl => new Uri($"{OAuthConfiguration.ServerUrl}/api/core/me");
///
/// Initializes a new instance of the class.