From 5e058be7b68ec26158ad7fdd9e5924e994f412dd Mon Sep 17 00:00:00 2001
From: Klaus Fischer <klaus.fischer@eloware.com>
Date: Sat, 3 Sep 2022 18:12:06 +0200
Subject: [PATCH] Loading key in Tests

---
 .idea/.idea.FitConnect/.idea/.name         |  1 +
 FitConnect/Encryption/CertificateHelper.cs |  2 +-
 FitConnect/Models/FitConnectEnvironment.cs | 25 +++++++++------
 FitConnect/Sender.cs                       |  2 +-
 IntegrationTests/CertificateValidation.cs  | 36 +++++++++++++++++++---
 5 files changed, 51 insertions(+), 15 deletions(-)
 create mode 100644 .idea/.idea.FitConnect/.idea/.name

diff --git a/.idea/.idea.FitConnect/.idea/.name b/.idea/.idea.FitConnect/.idea/.name
new file mode 100644
index 00000000..04b5af4f
--- /dev/null
+++ b/.idea/.idea.FitConnect/.idea/.name
@@ -0,0 +1 @@
+FitConnect
\ No newline at end of file
diff --git a/FitConnect/Encryption/CertificateHelper.cs b/FitConnect/Encryption/CertificateHelper.cs
index abf25d6c..f3dce044 100644
--- a/FitConnect/Encryption/CertificateHelper.cs
+++ b/FitConnect/Encryption/CertificateHelper.cs
@@ -21,7 +21,7 @@ public class CertificateHelper {
         var certificates = key.X5c.Select(s => new X509Certificate2(Convert.FromBase64String(s)))
             .ToList();
 
-        var root = new X509Certificate2("./certificates/root.pem");
+        X509Certificate2? root = null; //new X509Certificate2("./certificates/root.pem");
 
 
         _logger?.LogTrace("Found {Count} certificate(s)", certificates.Count);
diff --git a/FitConnect/Models/FitConnectEnvironment.cs b/FitConnect/Models/FitConnectEnvironment.cs
index 64e910c6..fd377f51 100644
--- a/FitConnect/Models/FitConnectEnvironment.cs
+++ b/FitConnect/Models/FitConnectEnvironment.cs
@@ -4,25 +4,32 @@ public class FitConnectEnvironment {
     // List of Domains
     // https://wiki.fit-connect.fitko.dev/de/Betrieb/Dokumentation/Domains
 
+    public static readonly FitConnectEnvironment Develop = new(
+        "https://auth-dev.fit-connect.fitko.dev/token",
+        new[] { "https://submission-api-dev.fit-connect.fitko.dev" },
+        string.Empty, // "https://routing-api-testing.fit-connect.fitko.dev", // Dev does not have a routing API
+        "https://portal.auth-dev.fit-connect.fitko.dev"
+    ) { VerifiedKeysAreMandatory = false };
+
     public static readonly FitConnectEnvironment Testing = new(
         "https://auth-testing.fit-connect.fitko.dev/token",
         new[] { "https://submission-api-testing.fit-connect.fitko.dev" },
         "https://routing-api-testing.fit-connect.fitko.dev",
         "https://portal.auth-testing.fit-connect.fitko.dev"
-    ){VerifiedKeysAreMandatory = false};
+    ) { VerifiedKeysAreMandatory = false };
 
     public static readonly FitConnectEnvironment Staging = new(
-        "https://auth-testing.fit-connect.fitko.dev/token",
-        new[] { "https://submission-api-testing.fit-connect.fitko.dev" },
-        "https://routing-api-testing.fit-connect.fitko.dev",
-        "https://portal.auth-testing.fit-connect.fitko.dev"
+        "https://auth-refz.fit-connect.fitko.net/token",
+        new[] { "submission-api-refz.fit-connect.niedersachsen.de" },
+        string.Empty, // "https://routing-api-testing.fit-connect.fitko.dev", // Stage does not have a routing API
+        "https://portal.auth-refz.fit-connect.fitko.net"
     );
 
     public static readonly FitConnectEnvironment Production = new(
-        "https://auth.fit-connect.fitko.net/token",
-        new[] { "https://submission-api.fit-connect.fitko.net" },
-        "https://routing-api.fit-connect.fitko.net",
-        "https://portal.auth.fit-connect.fitko.net"
+        "https://auth-prod.fit-connect.fitko.net/token",
+        new[] { "https://submission-api-prod.fit-connect.niedersachsen.de" },
+        "https://routing-api-prod.fit-connect.fitko.net",
+        "https://portal.auth-prod.fit-connect.fitko.net"
     );
 
     public FitConnectEnvironment(string sspUrl, string tokenUrl, string[] submissionUrl,
diff --git a/FitConnect/Sender.cs b/FitConnect/Sender.cs
index f371798a..a140a1e4 100644
--- a/FitConnect/Sender.cs
+++ b/FitConnect/Sender.cs
@@ -181,7 +181,7 @@ public class Sender : FitConnectClient, ISender, ISenderWithDestination,
         return submission;
     }
 
-    private async Task<string> GetPublicKeyFromDestination(string destinationId) {
+    internal async Task<string> GetPublicKeyFromDestination(string destinationId) {
         var publicKey = await DestinationService.GetPublicKey(destinationId);
 
         var keyIsValid = new CertificateHelper(Logger).ValidateCertificate(publicKey,
diff --git a/IntegrationTests/CertificateValidation.cs b/IntegrationTests/CertificateValidation.cs
index 38f32682..8b0c1fad 100644
--- a/IntegrationTests/CertificateValidation.cs
+++ b/IntegrationTests/CertificateValidation.cs
@@ -39,6 +39,19 @@ public class CertificateValidation {
         _certificateHelper = new CertificateHelper(_logger);
     }
 
+    [Test]
+    public void CheckCertificateInEnvironment_Dev() {
+        var environment = FitConnectEnvironment.Develop;
+        var sender = Client.GetSender(environment, _settings.SenderClientId,
+            _settings.SenderClientSecret,
+            _logger);
+
+        var certificate = (sender as FitConnect.Sender)
+            .GetPublicKeyFromDestination(_settings.DestinationId).Result;
+        new CertificateHelper(_logger).ValidateCertificate(JsonWebKey.Create(certificate),
+            LogLevel.Trace);
+    }
+
     [Test]
     public void CheckCertificateInEnvironment_Testing() {
         var environment = FitConnectEnvironment.Testing;
@@ -46,10 +59,10 @@ public class CertificateValidation {
             _settings.SenderClientSecret,
             _logger);
 
-        sender.WithDestination(_settings.DestinationId)
-            .WithServiceType("", _settings.LeikaKey)
-            .WithAttachments(new Attachment("Test.pdf", "Simple Test PDF"))
-            .Submit();
+        var certificate = (sender as FitConnect.Sender)
+            .GetPublicKeyFromDestination(_settings.DestinationId).Result;
+        new CertificateHelper(_logger).ValidateCertificate(JsonWebKey.Create(certificate),
+            LogLevel.Trace);
     }
 
     [Test]
@@ -67,6 +80,21 @@ public class CertificateValidation {
         }).InnerExceptions.Any(e => e.GetType() == typeof(SecurityException));
     }
 
+    [Test]
+    public void CheckCertificateInEnvironment_Production() {
+        var environment = FitConnectEnvironment.Production;
+        var sender = Client.GetSender(environment, _settings.SenderClientId,
+            _settings.SenderClientSecret,
+            _logger);
+
+        Assert.Throws<AggregateException>(() => {
+            sender.WithDestination(_settings.DestinationId)
+                .WithServiceType("", _settings.LeikaKey)
+                .WithAttachments(new Attachment("Test.pdf", "Simple Test PDF"))
+                .Submit();
+        }).InnerExceptions.Any(e => e.GetType() == typeof(SecurityException));
+    }
+
     [Test]
     public void CheckPublicKeyEncryption() {
         _certificateHelper.ValidateCertificate(new JsonWebKey(_settings.PublicKeyEncryption))
-- 
GitLab