# FIT-Connect .NET SDK User Guide

## Einleitung

Das FIT-Connect .NET SDK bietet eine einfache Möglichkeit, sowohl einen Antragsteller (Sender) als auch einen Antragsempfänger (Subscriber) an FIT-Connect anzubinden.

## Voraussetzungen

### OSX

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
```

Die Environment-Variable ```DYLD_LIBRARY_PATH``` muss auf den Pfad zu OpenSSL verweisen.

_Beispiele:_

```sh
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib
export DYLD_LIBRARY_PATH=/usr/local/opt/openssl@1.1/lib
```

### Sender

Um einen Antrag mit dem SDK versenden zu können, werden eine ClientID und ein ClientSecret benötigt.
Diese können im Self-Service-Portal von FIT-Connect erzeugt werden.
[Hier](https://docs.fitko.de/fit-connect/docs/getting-started/account) ist beschrieben, wie Sie eine ClientID und ein ClientSecret erhalten.

[Offizelle Dokumentation von FIT-Connect zum Versenden von Einreichungen (Anträgen)](https://docs.fitko.de/fit-connect/docs/sending/overview)

### Subscriber

Der Subscriber benötigt eine ClientID, ein ClientSecret und zwei Schlüsselpaare (im Format JSON Web Key) zum Verschlüsseln und Signieren.

Zum Testen können selbstgenerierte Schlüsselpaare mit dem [hierzu bereitgestellten Tool](https://docs.fitko.de/fit-connect/docs/details/jwk-creation) erzeugt werden.

In der Produktivumgebung müssen hierzu [Zertifikate der Verwaltungs-PKI zum Einsatz kommen](https://docs.fitko.de/fit-connect/docs/receiving/certificate). Aus einem Zertifikat der Verwaltungs-PKI können Sie die benötigten JSON-Schlüsselpaare erzeugen. [Hier](https://docs.fitko.de/fit-connect/docs/receiving/certificate) ist beschrieben, wie Sie zur Erzeugung der Schlüsselpaare ein Tool der FITKO nutzen.

[Offizielle Dokumentation von FIT-Connect zum Abrufen von Einreichungen](https://docs.fitko.de/fit-connect/docs/receiving/overview)

# Beispiele

## Sender

### Erstellen einer Einreichung (submission)

Das folgende Beispiel zeigt, wie Sie das SDK in einem sendenden System nutzen, um eine Submission (eine Einreichung) zu erzeugen und zu senden:

```csharp
var submission = SubmissionBuilder
            .WithDestination(destinationId)
            .WithServiceType("FIT Connect Demo", leikaKey)
            .WithAttachments(new Attachment("Test.pdf", "Test Attachment"))
            .WithData("{\"message\":\"Hello World\"}")
            .Build(); 

await Client.GetSender(FitConnectEnvironment.Testing, clientId, clientSecret, logger).SendAsync(submission);
```

Im Beispiel oben stellt das Argument "FitConnectEnvironment.Testing" die FIT-Connect-Endpunkte zur Verfügung, die aufgerufen werden sollen.
Das Argument 'destinationId" enthält die eindeutige Adresse des empfangenden Systems (Fachverfahrens), das die Antragsdaten über FIT-Connect erhalten soll.
Das Argument "leikaKey" stellt die ID der beantragten Leistung bereit. "Leika" ist die Abkürzung für "Leistungskatalog".

## Subscriber

### Erstellen eines Subscribers

Das folgende Beispiel zeigt, wie Sie das SDK in einem empfangenden System nutzen, um einen Subscriber zu erzeugen, der Einreichungen von sendenden Systemen erhält.

```csharp
var subscriber = Client.GetSubscriber(FitConnectEnvironment.Testing, clientId,
    clientSecret,
    privateKeyDecryption,
    privateKeySigning,
    publicKeyEncryption,
    publicKeySignatureVerification,
    logger);
```

Im Beispiel oben stellt das Argument "privateKeyDecryption" den JSON Web Key (JWK) für den privaten Schlüssel zum Entschlüsseln bereit.
Das Argument 'privateKeySigning" enthält den JWK des privaten Schlüssels zum Signieren.
Das Argument 'publicKeyEncryption" liefert den JWK des öffentlichen Schlüssels zum Verschlüsseln.
Das Argument 'publicKeySignatureVerification" enthält den JWK des öffentlichen Schlüssels zum Überprüfen der Signatur.


### Abrufen der verfügbaren Submissions

Das folgende Beispiel zeigt, wie Sie das SDK in einem empfangenden System nutzen, um beim Server (dem Zustelldienst von FIT-Connect) nachzufragen, welche Einreichungen (Submissions) zur Abholung bereitliegen.

```csharp
var submissions = await subscriber.GetAvailableSubmissionsAsync();
```

Das folgende Beispiel zeigt, wie Sie das SDK in einem empfangenden System nutzen, um bereitliegende Einreichungen mit ihren Anhängen vom Server (Zustelldienst) abzurufen.

### Abrufen der Submissions mit den Anhängen

```csharp
foreach (var submission in submissions) {
    var requestedSubmission = await subscriber.RequestSubmissionAsync(submission.SubmissionId);
    var attachments = await requestedSubmission.GetAttachmentsAsync();
    var data = requestedSubmission.GetDataJson();
    
    if (ok){
        // Submission accept
        await requestedSubmission.AcceptSubmissionAsync();
    } else {
        // or submission reject
       await requestedSubmission.RejectSubmissionAsync();
   }
}
```