# 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.

```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 FIT-Connect Self-Service-Portal erzeugt werden.

[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 sowohl eine ClientID und das ClientSecret, aber auch die Schlüsselpaare zur
Verschlüsselung wie auch zum Signieren der Daten.
Zu Testzwecken 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 zu Einsatz kommen](https://docs.fitko.de/fit-connect/docs/receiving/certificate).

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

# Beispiele

## Sender

```csharp
var submission = Client
    .GetSender(FitConnectEnvironment.Development, clientId, clientSecret, logger)
    .WithDestination(destinationId)
    .WithServiceType("FIT Connect Demo", leikaKey)
    .WithAttachments(new Attachment("Test.pdf", "Test Attachment"))
    .WithData("{\"message\":\"Hello World\"}")
    .Submit();
```

## Subscriber

### Erstellen des Subscribers

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

### Abrufen der Submissions

```csharp
var submissions = subscriber.GetAvailableSubmissions();
```

### Abrufen der Submissions mit den Anhängen

```csharp
foreach (var submission in submissions) {
    var subscriberWithSubmission = subscriber.RequestSubmission(submission.SubmissionId);
    var data = subscriber.GetDataJson();
    var attachments = subscriberWithSubmission
        .GetAttachments();
    // Submission accept
    subscriberWithSubmission
        .AcceptSubmission();
    // or submission reject
   subscriberWithSubmission
        .RejectSubmission();

}
```