diff --git a/.idea/.idea.FitConnect/.idea/.name b/.idea/.idea.FitConnect/.idea/.name new file mode 100644 index 0000000000000000000000000000000000000000..04b5af4f764eb04374cbc16e0e0def5774fddae9 --- /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 abf25d6cc3de397a75e425ef9c80cc7133810a1f..f3dce0445321daef26026aaee570003ec7550012 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 64e910c68bd8d71cc776bd706864d0599f77cf6e..fd377f512e52e9f507a0deb46d3355522337d847 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 f371798a80955f02079e42893c1e3a323fd44ff2..a140a1e438302b4f29b79917226a5ab7835e0c19 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 38f3268242d80cdb50eca1b5148416092e0f4997..8b0c1fad2e933fc7d115e9be59f9cfd22eb3a055 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))