Skip to content
Snippets Groups Projects
Commit 979d630e authored by Klaus Fischer's avatar Klaus Fischer
Browse files

Merge branch 'issue/640-input-streams' into issue/773-direct-submission-status

parents b9dce671 ed709b1c
No related branches found
No related tags found
2 merge requests!28773 direct submission status,!27Draft: Issue/830 http header add version
Showing
with 181 additions and 78 deletions
......@@ -490,3 +490,4 @@ Temporary Items
.apdisk
deploy.sh
global.json
......@@ -2,7 +2,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: FitConnect/* BasicUnitTest/* E2ETest/* EncryptionTests/* IntegrationTests/*
MockContainer/* FitConnect.sln test.Dockerfile Test.pdf version.sh FitConnect.sln.DotSettings
README.md CHANGELOG.md *.md Dockerfile nuget_upload.sh ConsoleAppExample/*
README.md CHANGELOG.md *.md Dockerfile nuget_upload.sh ConsoleAppExample/* global.json
Copyright: 2022 FIT-Connect contributors
License: EUPL-1.2
......
......@@ -8,13 +8,16 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.7.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="Moq" Version="4.18.1" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
<PackageReference Include="coverlet.collector" Version="3.1.0" />
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
<PackageReference Include="coverlet.collector" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
......
......@@ -10,11 +10,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FitConnect" Version="0.0.1-beta.2"/>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0"/>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0"/>
<PackageReference Include="FitConnect" Version="0.0.1-beta.2" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
</ItemGroup>
<ItemGroup>
......@@ -42,7 +42,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FitConnect\FitConnect.csproj"/>
<ProjectReference Include="..\FitConnect\FitConnect.csproj" />
</ItemGroup>
</Project>
......@@ -13,6 +13,10 @@ public static class SenderDemo {
var destinationId = config["FitConnect:Sender:DestinationId"];
var leikaKey = config["FitConnect:Sender:LeikaKey"];
if (clientId == null || clientSecret == null || destinationId == null || leikaKey == null) {
logger.LogError("Missing configuration values");
return;
}
OutputHelper.PrintSender();
......@@ -34,6 +38,11 @@ public static class SenderDemo {
var destinationId = config["FitConnect:Sender:DestinationId"];
var leikaKey = config["FitConnect:Sender:LeikaKey"];
if (clientId == null || clientSecret == null || destinationId == null || leikaKey == null) {
logger.LogError("Missing configuration values");
return;
}
var encryption = new FitEncryption("", "", null);
Dictionary<string, string>? encryptedAttachments = null;
......
......@@ -11,6 +11,10 @@ public static class SubscriberDemo {
var privateKeyDecryption = config["FitConnect:Subscriber:PrivateKeyDecryption"];
var privateKeySigning = config["FitConnect:Subscriber:PrivateKeySigning"];
if (clientId == null || clientSecret == null || privateKeyDecryption == null || privateKeySigning == null) {
logger.LogError("Missing configuration values");
return;
}
OutputHelper.PrintSubscriber();
......
......@@ -9,17 +9,23 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.7.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0"/>
<PackageReference Include="NUnit" Version="3.13.3"/>
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1"/>
<PackageReference Include="NUnit.Analyzers" Version="3.3.0"/>
<PackageReference Include="coverlet.collector" Version="3.1.2"/>
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
<PackageReference Include="NUnit.Analyzers" Version="3.5.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FitConnect\FitConnect.csproj"/>
<ProjectReference Include="..\MockContainer\MockContainer.csproj"/>
<ProjectReference Include="..\FitConnect\FitConnect.csproj" />
<ProjectReference Include="..\MockContainer\MockContainer.csproj" />
</ItemGroup>
</Project>
......@@ -20,6 +20,10 @@ public class StraightForwardTest : EndToEndTestBase {
.WithJsonData(@"{""data"":""value""}")
.WithAttachments(new Attachment("Test.pdf", "Attachment #1"),
new Attachment("Test.pdf", "Attachment #2"))
.WithAttachments(new Attachment("Test.pdf", "Attachment #3"))
// .WithAttachments("Test.pdf", "Attachment #4 - StreamReader",
// System.Net.Mime.MediaTypeNames.Application.Pdf,
// new FileStream("Test.pdf", FileMode.Open, FileAccess.Read))
.Build();
var submission = Sender.SendAsync(outgoing).Result;
......@@ -92,10 +96,12 @@ public class StraightForwardTest : EndToEndTestBase {
data.Should().Be(@"{""data"":""value""}");
var attachments = subscriberWithSubmission.GetAttachmentsAsync().Result.ToList();
attachments.First().Filename.Should().Be("Test.pdf");
attachments.TrueForAll(a => a.Filename == "Test.pdf");
attachments.TrueForAll(a => a.Description?.StartsWith("Attachment #") ?? false).Should()
.BeTrue();
attachments.Count.Should().Be(3);
var size = File.ReadAllBytes("Test.pdf").Length;
attachments.ForEach(a => a.Content!.Length.Should().Be(size));
subscriberWithSubmission.AcceptSubmissionAsync().Wait();
}
......
......@@ -10,18 +10,21 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.7.0"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0"/>
<PackageReference Include="NUnit" Version="3.13.2"/>
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0"/>
<PackageReference Include="coverlet.collector" Version="3.1.0"/>
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
<PackageReference Include="coverlet.collector" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FitConnect\FitConnect.csproj"/>
<ProjectReference Include="..\MockContainer\MockContainer.csproj"/>
<ProjectReference Include="..\FitConnect\FitConnect.csproj" />
<ProjectReference Include="..\MockContainer\MockContainer.csproj" />
</ItemGroup>
<ItemGroup>
......
......@@ -22,18 +22,18 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="6.4.0" />
<PackageReference Include="Autofac" Version="6.5.0" />
<PackageReference Include="IdentityModel" Version="6.0.0" />
<PackageReference Include="jose-jwt" Version="4.0.0" />
<PackageReference Include="jose-jwt" Version="4.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.22.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.22.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.25.1" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.25.1" />
<PackageReference Include="MimeTypeMap.List" Version="2.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.14" />
<PackageReference Include="NJsonSchema" Version="10.7.2" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.21.0" />
<PackageReference Include="NJsonSchema" Version="10.8.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.25.1" />
</ItemGroup>
<ItemGroup>
......
......@@ -28,8 +28,9 @@ public class Attachment {
/// </summary>
/// <param name="filename">File name to load</param>
/// <param name="description">Description of the attachment</param>
public Attachment(string filename, string description, string? mimeType = null) {
Content = File.ReadAllBytes(filename);
public Attachment(string filename, string description, string? mimeType = null,
byte[]? buffer = null) {
Content = buffer ?? File.ReadAllBytes(filename);
Filename = Path.GetFileName(filename);
MimeType = mimeType ?? MimeTypeMap.List.MimeTypeMap.GetMimeType(Path.GetExtension(filename))
.First();
......
using Newtonsoft.Json;
namespace FitConnect.Models;
public class EncryptedSubmission {
public EncryptedSubmission(string destinationId, string serviceName, string leikaKey,
string data, string metadata, Dictionary<string, string> attachments) {
DestinationId = destinationId;
ServiceName = serviceName;
LeikaKey = leikaKey;
Data = data;
Metadata = metadata;
Attachments = attachments;
}
[JsonProperty("destinationId")]
public string DestinationId { get; init; }
[JsonProperty("serviceName")]
public string ServiceName { get; init; }
[JsonProperty("leikaKey")]
public string LeikaKey { get; init; }
[JsonProperty("data")]
public string Data { get; init; }
[JsonProperty("metadata")]
public string Metadata { get; init; }
[JsonProperty("attachments")]
public Dictionary<string, string> Attachments { get; init; }
public void Deconstruct(out string destinationId, out string serviceName, out string leikaKey,
out string data, out string metadata, out Dictionary<string, string> attachments) {
destinationId = DestinationId;
serviceName = ServiceName;
leikaKey = LeikaKey;
data = Data;
metadata = Metadata;
attachments = Attachments;
}
}
......@@ -19,8 +19,27 @@ public class SubmissionBuilder : ISubmissionWithDestination,
return WithAttachments(attachments.ToArray());
}
private ISubmissionWithData WithAttachments(string fileName, string description, string mimeType,
FileStream fileStream) {
byte[]? buffer;
using (fileStream) {
buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, (int)fileStream.Length);
}
var attachment = new Attachment(fileName, description, mimeType, buffer);
return WithAttachments(attachment);
}
public ISubmissionWithData WithAttachments(params Attachment[] attachments) {
_submissionToSend.Attachments = attachments;
_submissionToSend.Attachments ??= new Attachment[] { };
foreach (var attachment in attachments) {
_submissionToSend.Attachments =
_submissionToSend.Attachments.Append(attachment).ToArray();
}
return this;
}
......@@ -89,6 +108,13 @@ public interface ISubmissionWithData {
ISubmissionWithData WithAttachments(params Attachment[] attachments);
ISubmissionWithData WithAttachments(List<Attachment> attachments);
/// <summary>
/// For future use
/// </summary>
/// <returns></returns>
// ISubmissionWithData WithAttachments(string fileName, string description, string mimeType,
// FileStream content);
SendableSubmission Build();
}
......@@ -12,7 +12,7 @@ Auf OSX wird das SDK nur dann unterstützt, wenn OpenSSL auf dem System installi
Zum Installieren von OpenSSL können Sie Homebrew verwenden:
```sh
brew install openssl@1.1
brew install openssl
```
Die Environment-Variable ```DYLD_LIBRARY_PATH``` muss auf den Pfad zu OpenSSL verweisen.
......@@ -21,7 +21,7 @@ _Beispiele:_
```sh
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl@1.1/lib
export DYLD_LIBRARY_PATH=/opt/homebrew/opt/openssl@3/lib
```
### Sender
......
......@@ -8,22 +8,25 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DotNet.Testcontainers" Version="1.6.0"/>
<PackageReference Include="FluentAssertions" Version="6.7.0"/>
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2"/>
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0"/>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0"/>
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.22.0"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0"/>
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.14"/>
<PackageReference Include="NUnit" Version="3.13.2"/>
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0"/>
<PackageReference Include="coverlet.collector" Version="3.1.0"/>
<PackageReference Include="DotNet.Testcontainers" Version="1.6.0" />
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.25.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.14" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
<PackageReference Include="coverlet.collector" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FitConnect\FitConnect.csproj"/>
<ProjectReference Include="..\MockContainer\MockContainer.csproj"/>
<ProjectReference Include="..\FitConnect\FitConnect.csproj" />
<ProjectReference Include="..\MockContainer\MockContainer.csproj" />
</ItemGroup>
<ItemGroup>
......
......@@ -8,14 +8,14 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="6.4.0"/>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0"/>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0"/>
<PackageReference Include="Moq" Version="4.18.1"/>
<PackageReference Include="Autofac" Version="6.5.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
<PackageReference Include="Moq" Version="4.18.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\FitConnect\FitConnect.csproj"/>
<ProjectReference Include="..\FitConnect\FitConnect.csproj" />
</ItemGroup>
<ItemGroup>
......
......@@ -19,20 +19,18 @@ Das FIT-Connect .NET SDK bietet eine einfache Möglichkeit, sowohl einen Antrags
### OSX
__Anmerkung:__
Bei einem Mac mit einem M1 chip, muss brew in der _x86-64_-Version installiert werden.
Für die Installation von OpenSSL muss die [Homebrew](https://brew.sh/) Paketverwaltung verwendet werden.
Zur installation von HomeBrew muss der folgende Befehl ausgeführt werden:
_Die Version x86_64 kann parallel zur arm64 Version installiert werden._
```sh
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
Auf OSX wird das SDK nur dann unterstützt, wenn OpenSSL auf dem System installiert ist.
Zum Installieren von OpenSSL können Sie Homebrew verwenden:
```sh
brew install openssl@1.1
```bash
brew install openssl
```
Die Environment-Variable ```DYLD_LIBRARY_PATH``` muss auf den Pfad zu OpenSSL verweisen.
......@@ -41,7 +39,7 @@ _Beispiele:_
```sh
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl@1.1/lib
export DYLD_LIBRARY_PATH=/opt/homebrew/opt/openssl@3/lib
```
## Weitere Informationen zu FIT-Connect finden Sie hier:
......@@ -82,11 +80,12 @@ Das folgende Beispiel zeigt, wie Sie das SDK in einem sendenden System nutzen, u
### Plain Submission Builder
Wenn Antragsdaten im Backend des Senders (Onlinedienst) unverschlüsselt vorliegen, können diese mit dem `SubmissionBuilder` in ein verschlüsseltes Submission-Objekt umgewandelt werden.
Wenn Antragsdaten im Backend des Senders (Onlinedienst) unverschlüsselt vorliegen, können diese mit dem `SubmissionBuilder` in ein verschlüsseltes Submission-Objekt umgewandelt werden.
Diese Umsetzungsvariante bietet eine geringere Sicherheit als die Umsetzung der Ende-zu-Ende-Verschlüsselung ab dem Endgerät der Antragsteller:in.
Zudem erhöhen sich in dieser Umsetzungsvariante die IT-Sicherheits- und Datenschutzanforderungen an den Betrieb des Onlinedienstes, da Antragsdaten in dieser Umsetzungsvariante im Klartext durch das Backend des Onlinedienstes verarbeitet werden.
Eine Alternative stellt die Verschlüsselung von Antragsdaten im Frontend des Onlinedientes dar (siehe nächster Abschnitt *Encrypted Submission Builder*).
Eine Alternative stellt die Verschlüsselung von Antragsdaten im Frontend des Onlinedientes dar (siehe nächster Abschnitt
*Encrypted Submission Builder*).
Weitere Informationen finden sich im Artikel [Verschlüsselte Übertragung von Antragsdaten](https://docs.fitko.de/fit-connect/docs/getting-started/encryption/) der FIT-Connect-Dokumentation.
......@@ -144,8 +143,8 @@ var encryptedSubmission = EncryptedSubmissionBuilder
await Client.GetSender(FitConnectEnvironment.Testing, clientId, clientSecret, logger).SendAsync(encryptedSubmission);
```
| **Wichtig** |
| ----------- |
| **Wichtig** |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Bei der Übernahme der Destination-ID (`destinationId`) und des Leistungsschlüssels (`leikaKey`) aus dem Frontend MUSS im Backend geprüft werden, ob ein Versand von Einreichungen dieser Leistung an den angegebenen Zustellpunkt zulässig ist. |
## Details
......@@ -355,7 +354,6 @@ Akzeptiert die Submission und löscht die Submission, die auf dem Server gespeic
Weist die Submission zurück.
## Beispiel
```csharp
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment