From cb1ec05398964abb81167216b3d40ee4a4133b45 Mon Sep 17 00:00:00 2001
From: Robin Sander <robin.sander@sinc.de>
Date: Thu, 2 Jan 2025 12:03:22 +0100
Subject: [PATCH] feat: add senderAccessRestricted to destination schema
 (planning#2534)

---
 CHANGELOG.md                                  |  4 ++++
 spec/schemas/client-id.yaml                   |  5 +++++
 spec/schemas/destination-private.yaml         |  2 ++
 spec/schemas/destination-public.yaml          |  4 +++-
 .../destination-sender-access-restricted.yaml | 20 +++++++++++++++++++
 5 files changed, 34 insertions(+), 1 deletion(-)
 create mode 100644 spec/schemas/client-id.yaml
 create mode 100644 spec/schemas/destination-sender-access-restricted.yaml

diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf842007..facf6c61 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,10 @@ Don’t forget to tag @ https://git.fitko.de/fit-connect/submission-api/-/tags
 
 ## Unreleased
 
+### Changed
+
+* Erweiterung des destination Schemas um `senderAccessRestricted`, d.h. um die Möglichkeit, das Senden an diesen Zustellpunkt nur bestimmten Sendern zu erlauben ([planning#2534](https://git.fitko.de/fit-connect/planning/-/issues/2534)).
+
 ## [1.12.0]
 
 ### Added
diff --git a/spec/schemas/client-id.yaml b/spec/schemas/client-id.yaml
new file mode 100644
index 00000000..5e260f46
--- /dev/null
+++ b/spec/schemas/client-id.yaml
@@ -0,0 +1,5 @@
+type: string
+format: uuid
+minLength: 32
+maxLength: 36
+description: Die UUID eines Clients
diff --git a/spec/schemas/destination-private.yaml b/spec/schemas/destination-private.yaml
index 16d2ed67..6e15ea1d 100644
--- a/spec/schemas/destination-private.yaml
+++ b/spec/schemas/destination-private.yaml
@@ -49,3 +49,5 @@ properties:
     $ref: './contact-information.yaml'
   callback:
     $ref: './callback-url.yaml'
+  senderAccessRestricted:
+    $ref: './destination-sender-access-restricted.yaml'
diff --git a/spec/schemas/destination-public.yaml b/spec/schemas/destination-public.yaml
index 62ab79c1..15ae3a15 100644
--- a/spec/schemas/destination-public.yaml
+++ b/spec/schemas/destination-public.yaml
@@ -1,5 +1,5 @@
 title: Zustellpunkt
-description: Repräsentation eines Zustellpunktes
+description: Öffentliche Daten eines Zustellpunktes
 type: object
 required:
   - destinationId
@@ -43,3 +43,5 @@ properties:
     description: >
       Status des Zustellpunktes.
       Eine Beschreibung der Status finden Sie in den Detailinformationen unter [Zustellpunktverwaltung](https://docs.fitko.de/fit-connect/docs/details/destination-management).
+  senderAccessRestricted:
+    $ref: './destination-sender-access-restricted.yaml'
diff --git a/spec/schemas/destination-sender-access-restricted.yaml b/spec/schemas/destination-sender-access-restricted.yaml
new file mode 100644
index 00000000..05f63fd2
--- /dev/null
+++ b/spec/schemas/destination-sender-access-restricted.yaml
@@ -0,0 +1,20 @@
+type: object
+required:
+  - enabled
+  - allowedSenders
+properties:
+  enabled:
+    type: boolean
+    description: |
+      Gibt an, ob das Senden an diesen Zustellpunkt beschränkt ist oder nicht.
+      Falls `true` dürfen ausschließlich Clients, deren ID in `allowedSenders` enthalten ist,
+      an diesen Zustellpunkt senden.
+  allowedSenders:
+    type: array
+    uniqueItems: true
+    items:
+      $ref: './client-id.yaml'
+    description: |
+      Auflistung der Client-IDs, die an diesen Zustellpunkt senden dürfen.
+      Die Clients müssen existieren und vom Typ `SENDER` sein.
+    minItems: 0
-- 
GitLab