Skip to content
Snippets Groups Projects
Commit db893be4 authored by Lilith Wittmann's avatar Lilith Wittmann
Browse files

Merge branch 'master' of https://git.fitko.de/fit-connect/FIT-Connect-PoC into jwe-jws-encryption

parents 25a5c247 060956c1
No related branches found
No related tags found
1 merge request!26doc(encryption_keys): fix lots of missing/br0ken links, spelling and todos
Showing
with 704 additions and 734 deletions
# http://editorconfig.org
root = true
[*.{json, yaml, yml}]
end_of_line = lf
indent_size = 2
indent_style = space
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
.DS_Store .DS_Store
._* ._*
*.iml
.idea/ .idea/
ui/config.js
stages:
- lint
- build
- upload
- release
lint-job:
stage: lint
image:
name: $CI_REGISTRY/stoplight/spectral:latest
entrypoint: [ "" ]
script:
- spectral lint spec/*.yml
build:
stage: build
image: $CI_REGISTRY/node:current-alpine
before_script:
- npm install -g @apidevtools/swagger-cli
- mkdir dist
script: swagger-cli bundle -t yaml -o dist/zustelldienst.yml spec/zustelldienst.yml
# find ./spec -type f -name "*.yml" -exec sh -c 'swagger-cli bundle -t yaml -o dist/$(basename {}) {}' \;
artifacts:
expose_as: 'Built API spec'
paths:
- dist/
expire_in: 30 days
upload:
stage: upload
image: $CI_REGISTRY/alpine:latest
only:
refs:
- tags
variables:
- $CI_COMMIT_TAG
before_script:
- apk add rsync openssh-client
- eval $(ssh-agent -s)
- echo "$CI_DEPLOYMENT_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$UBERSPACE_KNOWN_HOST" >> ~/.ssh/known_hosts
script:
- sed "s,REPLACEME,$CI_COMMIT_TAG/zustelldienst.yml,g" ui/config.js.template > ui/config.js
- rsync -rLvz --size-only --checksum -e "ssh -o CheckHostIP=no" --ipv4 --progress ./ui/. fitko@dorado.uberspace.de:html/
- rsync -rLvz --size-only --checksum -e "ssh -o CheckHostIP=no" --ipv4 --progress ./dist/. fitko@dorado.uberspace.de:html/$CI_COMMIT_TAG/
#release-new-api-version:
# stage: release
# image: registry.gitlab.com/gitlab-org/release-cli:latest
# needs:
# - job: build
# artifacts: true
# only:
# refs:
# - master
# - tags
# variables:
# - $CI_COMMIT_TAG
# script:
# - release-cli -v
# - echo "Releasing new API version"
# - release-cli create --name "$CI_COMMIT_TAG" --description './CHANGELOG.md'
# --tag-name $CI_COMMIT_TAG
# --assets-link '{"name":"combined-$CI_COMMIT_TAG","url":"https://fitko.uber.space/$CI_COMMIT_TAG/zustelldienst.yml"}'
extends: extends:
- spectral:oas - spectral:oas
# - https://italia.github.io/api-oas-checker/spectral.yml # - https://italia.github.io/api-oas-checker/spectral.yml
# - https://italia.github.io/api-oas-checker/spectral-generic.yml - https://italia.github.io/api-oas-checker/spectral-generic.yml
- https://italia.github.io/api-oas-checker/spectral-security.yml - https://italia.github.io/api-oas-checker/spectral-security.yml
rules:
no-default-additionalProperties: hint
string-maxlength: hint
typed-enum: error
paths-status: warn
response-with-json-object: error
paths-status-return-problem: off
paths-status-problem-schema: off
# Release Notes # Changelog
Das Format dieser Datei basiert auf [Keep a Changelog](https://keepachangelog.com/de).
## [Unveröffentlicht] - ????-??-??
> Diese Version beinhaltet **breaking changes**
### Allgemein
- Reduktion der Verarbeitung von personenbezogenen Daten
- Daten eines Antrags müssen nun Ende-zu-Ende verschlüsselt übertragen werden
- API-Endpunktstruktur hat sich verändert, um
- die Pfade einfacher und kürzer zu gestalten
- und nur Parameter zu erfassen, die auch benötigt werden
- Hinzugefügt: Endpunkt `/status` zur Prüfung ob der Zustelldienst verfügbar ist.
#### Destinations
Der Aufbau & Umfang von Destination-Objekten hat sich geändert:
- Das Attribut `publicOrganization` entfällt, weil
- nur Kontaktinformationen für den Fall von technischen Problemen erfasst und hierbei so wenig Informationen wie
möglich gespeichert werden sollen.
- Der Name der Organisation ist als Attribut für eine bessere Zuordnung zu `contactInformation` unter `legalName` gewandert.
- Das Attribut `technicalContact` wird umbenannt zu `contactInformation` und inhaltlich wie im Beispiel unten geändert
- Die Attribute `callback` und `callbackURI` wurden zusammengeführt,
- um die Struktur flacher zu gestalten,
- und weil neben `callbackURI` keine anderen Attribute angeordnet sind.
- Im Attribut `schemas` entfällt das Attribut `encoding`,
- da ab Version 1 jede Kommunikation Ende-zu-Ende verschlüsselt sein muss.
- Das Attribut `publicKey` wurde umbenannt zu `encryptionKid`. Weiterhin wurde ein Feld `keys` eingefügt.
- `encryptionKid`: Die KeyId des Schlüssels der zur Verschlüsselung der an einen Zustellpunkt gesendeten Daten
verwendet wird. Der Schlüssel ist abrufbar im Attribut `keys`.
- `keys`: Hier befinden sich die öffentlichen Schlüssel des Zustellpunktes.
- Der `signingKid` fehlt, da dieser an signierten Nachrichten mit angehängt wird und ebenso im Attribut `keys`
auffindbar ist.
- Ein Schema besteht nun aus einer `schemaURI` und optional einem Feld `mimeType`.
- Wurde im Zuge der Vereinfachung so umgesetzt. URLs und URNs können in das Feld `schemaURI` eingetragen werden.
## Version 0.7 ```json
{
"contactInformation": {
"legalName": "Max",
"address": "Mustermann",
"phone": "+49170123456789",
"email": "max@mustermann.not",
"unit": "Musterabteilung XYZ"
},
"schemas": [
{
"schemaURI": "urn:fitko:schema-x"
}
],
"callback": "http://127.0.0.1:4010/voluptas",
"keys": {
"my-key-id": {
}
},
"encryptionKid": "my-key-id"
}
```
##### Get Destination
- destinationId
- schemas
- encryptionKid
- keys
Das Attribut `contact` (vormals `technicalContact`) wird nicht mehr zurückgegeben, da dies schützenswerte Informationen
sind.
##### Update Destination
- Attribut `destinationId` ist nicht länger aktualisierbar, da die Id vom Service und nicht vom Nutzer der API verwaltet
wird
- Liefert jetzt bei erfolgreicher Aktualisierung die öffentlichen Attribute des Zustellpunktes zurück, anstatt vorher
nur `{ "result": "success" }`.
##### Create Destination
Liefert jetzt bei erfolgreichem Erstellen die öffentlichen Attribute des Zustellpunktes zurück, anstatt vorher nur
die `destinationId`.
#### Delete Destination
Eigentlich müsste dieser Endpunkt gar keinen Body mitliefern. Damit nicht-konforme Middleware den Request trotzdem
sauber routen kann, liefert er jetzt `{}` anstatt `{ "result": "success" }` zurück.
### Application Transfer
- Die Grundstruktur eines Antrags wurde angepasst, da der Großteil der Informationen nun verschlüsselt übertragen wird.
- Einige Endpunkte und HTTP-Methoden wurden angepasst, um den Ablauf kürzer, einfacher, stabiler und sicherer zu
gestalten.
- Metadaten eines Antrags: Alle Metadaten eines Antrags werden nun verschlüsselt im Attribut `encryptedMetadata` übertragen.
#### Create Application
- Beim Anlegen eines Antrags muss nun die Id der Destination (Zustellpunktes) mit angegeben werden, da sie nur bei der
Anlage des Antrags notwendig ist und nicht bei den weiteren Aufrufen.
- Struktur um eine Application anzulegen ist nun nur noch `{ destinationId: …, announcedContentStructure: … }`, da sich die
Gesamtstruktur geändert hat. In `announcedContentStructure` wird angegeben ob Fachdaten für diesen Antrag hochgeladen
werden als auch eine Liste an UUIDs die für diesen Antrag hochgeladen werden. Die Erstellung der UUIDs ist dem Client
überlassen.
#### Add Document to Application
- Der Inhalt des Dokuments wird nun verschlüsselt, daher ist der Content-Type statt application/json nun
application/jose
- Als Antwort müsste dieser Endpunkt gar keinen Body mitliefern. Damit nicht-konforme Middleware den Request trotzdem
sauber routet: liefert er jetzt `{}` statt `{"result": "success"}`
#### Send Application
- Send Application und Application Data hinzuzufügen ist nun in einem Endpunkt kombiniert, da kein Antrag ohne Fachdaten
übertragen werden können soll.
- Der Aufruf des Endpunktes und die Übertragung der verschlüsselten Fachdaten markiert den Antrag dann auch als "final"
und löst die Übertragung an den Zustellpunkt aus.
- Die Fachdaten sind nun verschlüsselt, wodurch der Content-Type nicht mehr application/json sonder application/jose ist
- Der Response Status ist nicht mehr 200, sondern 202, da die Fachdaten akzeptiert wurden und der Antrag abgeschickt
wird.
#### Status Endpunkte
- Der `upload-status` entfällt, da alle Informationen verschlüssselt sind und nun nicht bekannt ist, wie viele Dokumente
eines Antrags bereits hochgeladen wurden.
- Die Informationen zum Status eines Antrags und dessen Historie sind nun direkt im Antrag hinterlegt und werden mit zur
Verfügung gestellt, wodurch keine separaten Endpunkte mehr notwendig sind.
### Application Retrieval
Wie oben schon angesprochen hat sich die Struktur eines Antrags verändert, sodass ein Antrag bei der Abholung wie folgt
beispielhaft aufgebaut ist:
```json
{
"destinationId": "879ee109-a690-4db8-ab32-424284184d7d",
"applicationId": "ce75a6b8-d72f-4b94-b09e-af6be35bc2ae",
"attachments": [
"879ee109-a690-4db8-ab32-424284184d7d",
"2046f9f1-dc89-4440-9c24-c76a8f40d668"
],
"encryptedMetadata": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g",
"encryptedData": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.nlXGAufYH36IABDy0En0LXEhGfC20IZSSchs27ADalHpRoTZKfXhc7hcMk8Y9V8yTP0jYbmrq6NtEg-QS2O5TQFD9Hluhpb631PBgKjPXHYX1Y6iUcR1sXxSUPjePi8F8PcZUZuUJLnhz6myyc9scdAq9BXG2cDJVgkfLI8eZdrqnrY24Hh32_7d5OKLFSpSDrBlqfyQuY8Wbs2h8Wy4Z4hwT1aWDO7b-SqJA181hUbNcF_rR4Mze3Fdtu-3uOIQYgLBBRmN1ZHDLk0EKNCI4B8MyDKLGPoM0ZomV5lVwVWjAMRI4CgQkIQ9rnm-Adof-GbegQL3yJSoNIWRWgzCnZBYZ638QgPllCMVW3WvEVvsgj0Hj16PbofqXTQ5S73LINfP6FZawfC0yMrYjSV_N2L0Lkp2KI3BkJcy-PcFhBnhwu2IsJGAlyDRCnXdVqig8m5yLHuSMQTpLW69LzPEskfsjhnNDR-CEBZpicjMfc-4CL6U7E7YoGc_99DzE5U5._JfqyKH23GiKsnDW.ZtMMjZ3GgcgHss8qbFRhrjl4L0kAfbco-oXICkk.VBHJ00FyDTYjOA_OYfiz5g",
"currentStatus": "queued",
"statusHistory": [
{
"sourceState": "incomplete",
"targetState": "queued",
"timestamp": "2021-01-30T08:30:00Z"
}
]
}
```
Die Fachdaten und Metadaten sind verschlüsselt, die Struktur verändert und daher hat sich auch bei der Abholung eines
Antrags der Prozess verändert bzw. reduziert, indem die Endpunkte für die Abholung der Fachdaten und Metadaten nun
kombiniert sind.
#### Dokument abholen
Bei der Abholung werden nun als Antwort keine Binärdaten mehr zur Verfügung gestellt, sondern die verschlüsselten
Inhalte.
#### Bestätigung der Abholung
- Als Antwort müsste dieser Endpunkt gar keinen Body mitliefern. Damit nicht-konforme Middleware den Request trotzdem
sauber routet liefert er jetzt `{}` (statt vorher `{"result": "success"}`).
## [0.7.0]
### Umgesetzte Change Requests ### Umgesetzte Change Requests
#### #13 API Specification: Method of Acknowledge Application endpoint of Subscriber API should be PUT instead of POST #### #13 API Specification: Method of Acknowledge Application endpoint of Subscriber API should be PUT instead of POST
Die Operationen "Send Application" und "Acknowledge Application" wurden auf PUT umgestellt. Die Operationen "Send Application" und "Acknowledge Application" wurden auf PUT umgestellt.
Bitte beachten Sie, dass die PUT-Operationen jetzt auf die Status-Resource wirken. Bitte beachten Sie, dass die PUT-Operationen jetzt auf die Status-Resource wirken.
#### #19 contentStructure.data.size entfernen #### #19 contentStructure.data.size entfernen
Aufgrund verschiedener Codierungen kann die Größe der Fachdaten (JSON oder XML) in Bytes nicht einfach und verlässlich vorhergesagt werden. Daher wurde die Angabe der Größe der Fachdaten aus den Metadaten entfernt.
Aufgrund verschiedener Codierungen kann die Größe der Fachdaten (JSON oder XML) in Bytes nicht einfach und verlässlich
vorhergesagt werden. Daher wurde die Angabe der Größe der Fachdaten aus den Metadaten entfernt.
#### #23 Pattern nicht referenzieren #### #23 Pattern nicht referenzieren
Im Dokument (document.json) wurde bei der Property "signature" als Pattern eine Referenz auf base64url.json gesetzt:
Im Dokument (document.json) wurde bei der Property `signature` als Pattern eine Referenz auf base64url.json gesetzt:
```json ```json
"signature": { "signature": {
"pattern": { "pattern": {
"$ref": "../common/base64url.json#/pattern" "$ref": "../common/base64url.json#/pattern"
}, },
"type": "string", "type": "string",
"description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet" "description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet"
} }
``` ```
Dies führt beim Swagger-Codegen und dem OpenAPI-Generator zu Fehlern. Um die Codegenerierung zu erleichtern wurde das Pattern dorthin kopiert.
Dies führt beim Swagger-Codegen und dem OpenAPI-Generator zu Fehlern. Um die Codegenerierung zu erleichtern wurde das
Pattern dorthin kopiert.
```json ```json
"signature": { "signature": {
"type": "string", "type": "string",
"description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet", "description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet",
"pattern": "^[a-zA-Z0-9-_=]+$" "pattern": "^[a-zA-Z0-9-_=]+$"
} }
``` ```
#### #24 Keine mehrfachen Typen #### #24 Keine mehrfachen Typen
Im Modell address-national.json wurde für die Hausnummer (houseNumber) die Typen `integer` und `string` definiert. Die Hausnummer sollte eigentlich vom Typ `integer` sein und Zusätze in den Hausnummerzusatz (houseNumberSuffix) kommen. Um etwas flexibler zu sein, wurde aber alternativ auch ein `string` für die Hausnummer zugelassen. In FIM wurde die Hausnummer auch als Text-Feld definiert (F00000016).
Im Modell address-national.json wurde für die Hausnummer (houseNumber) die Typen `integer` und `string` definiert. Die
Hausnummer sollte eigentlich vom Typ `integer` sein und Zusätze in den Hausnummerzusatz (houseNumberSuffix) kommen. Um
etwas flexibler zu sein, wurde aber alternativ auch ein `string` für die Hausnummer zugelassen. In FIM wurde die
Hausnummer auch als Text-Feld definiert (F00000016).
```json ```json
"houseNumber": { "houseNumber": {
"type": [ "type": [
"string", "string",
"integer" "integer"
], ],
"description": "Hausnummer", "description": "Hausnummer",
"maxLength": 9, "maxLength": 9,
"pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$", "pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$",
"minimum": 1 "minimum": 1
} }
``` ```
Die Verwendung von mehr als einem Typen führt bei Codegeneratoren zu Problemen. Daher wird nur noch der Typ `string` verwendet.
Die Verwendung von mehr als einem Typen führt bei Codegeneratoren zu Problemen. Daher wird nur noch der Typ `string`
verwendet.
```json ```json
"houseNumber": { "houseNumber": {
"type": "string", "type": "string",
"description": "Hausnummer", "description": "Hausnummer",
"maxLength": 9, "maxLength": 9,
"pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$" "pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$"
} }
``` ```
#### #25 Rechtsgrundlage der Verwaltungsleistung #### #25 Rechtsgrundlage der Verwaltungsleistung
Das Modell "Public Service Type" (public-service-type.json) wurde in "Verwaltungsleistung" umbenannt und hat ein zusätzliches Feld "Rechtsgrundlage" (legalBasis) erhalten.
Das Modell "Public Service Type" (public-service-type.json) wurde in "Verwaltungsleistung" umbenannt und hat ein
zusätzliches Feld "Rechtsgrundlage" (legalBasis) erhalten.
#### #33 Antragsdatum #### #33 Antragsdatum
Unter `additionalReferenceInfo` wurde eine optionale Property `applicationDate` (Antragsdatum) hinzugefügt. Unter `additionalReferenceInfo` wurde eine optionale Property `applicationDate` (Antragsdatum) hinzugefügt.
#### #34 Status History und aktuellen Status verschieben #### #34 Status History und aktuellen Status verschieben
Die Pfade für den aktuellen Status und die Statushistorie sind jetzt: Die Pfade für den aktuellen Status und die Statushistorie sind jetzt:
- `/destinations/{destinationId}/applications/{applicationId}/status` - aktueller Status - `/destinations/{destinationId}/applications/{applicationId}/status` - aktueller Status
- `/destinations/{destinationId}/applications/{applicationId}/status/history` - Statushistorie - `/destinations/{destinationId}/applications/{applicationId}/status/history` - Statushistorie
#### #35 Info/Test Resource hinzufügen #### #35 Info/Test Resource hinzufügen
Es wurde in beiden APIs eine Resource `/info` hinzugefügt, die aktuell die API-Version ausgibt. Dies kann genutzt werden, um die Grundsätzliche Erreichbarkeit der API zu testen und um sicherzustellen, dass eine kompatible Version der API verwendet wird.
Es wurde in beiden APIs eine Resource `/info` hinzugefügt, die aktuell die API-Version ausgibt. Dies kann genutzt
werden, um die Grundsätzliche Erreichbarkeit der API zu testen und um sicherzustellen, dass eine kompatible Version der
API verwendet wird.
#### #43 AuthentificationInfo um Liste von verifizierten Feldern ergänzen #### #43 AuthentificationInfo um Liste von verifizierten Feldern ergänzen
Die `authentificationInfo` wurde um ein Array `authenticatedFields` ergänzt, das die Felder aus der `identityInfo`auflistet, für die die Authentifkation gilt. Zusätzlich wurde `authentificationMethod` zu einem Enum umgewandelt.
Die `authentificationInfo` wurde um ein Array `authenticatedFields` ergänzt, das die Felder aus der `identityInfo`
auflistet, für die die Authentifkation gilt. Zusätzlich wurde `authentificationMethod` zu einem Enum umgewandelt.
#### #45 Mime-Types #### #45 Mime-Types
Die Mime-Types in Application Schema wurden gemäß RFC abgebildet werden: Die Mime-Types in Application Schema wurden gemäß RFC abgebildet werden:
- `application/json` statt `json` - `application/json` statt `json`
- `application/xml` statt `xml` - `application/xml` statt `xml`
#### #49 JSON Web Key Set durch JSON Web Key ersetzt #### #49 JSON Web Key Set durch JSON Web Key ersetzt
Die Destination enthält nun einen JWK statt einem JWK Set.
Die Destination enthält nun einen JWK statt einem JWK Set.
## Version 0.6 ## [0.6.0]
### Dokumentation ### Dokumentation
- [Fehlercodes](../5_Status-_und_Fehlercodes.md) dokumentiert - [Fehlercodes](../5_Status-_und_Fehlercodes.md) dokumentiert
- [Erste Schritte](../1_Getting_Started.md) überarbeitet - [Erste Schritte](../1_Getting_Started.md) überarbeitet
### Umgesetzte Change Requests ### Umgesetzte Change Requests
#### #3 Sematic error of the OAS in editor.swagger.io #### #3 Sematic error of the OAS in editor.swagger.io
Das Security Schema darf keine Leerzeichen enthalten und wurde deswegen von "OAuth 2.0" in "OAuth20" umbenannt. Das Security Schema darf keine Leerzeichen enthalten und wurde deswegen von "OAuth 2.0" in "OAuth20" umbenannt.
#### #4 academicTitle -> doctoralDegrees #### #4 academicTitle -> doctoralDegrees
Alle Vorkommen von "academicTitle" wurden durch "doctoralDegrees" ersetzt.
Alle Vorkommen von `academicTitle` wurden durch `doctoralDegrees` ersetzt.
#### #5 telephone -> telephones #### #5 telephone -> telephones
Da Arrays mit einem Plural bezeichnet werden sollen wurde "telephone" durch "telephones" ersetzt.
Da Arrays mit einem Plural bezeichnet werden sollen wurde `telephone` durch `telephones` ersetzt.
#### #7 Regex für Hausnummernzusatz ist falsch #### #7 Regex für Hausnummernzusatz ist falsch
Das Pattern für den Hasnummernzusatz `^[\\p{L}0-9. ]*$` war inkorrekt da die Zeichenklassen `\p{L}` nicht zulässig ist. Es wurde daher zu `^[A-Za-z0-9. ]*$` korrigiert.
Das Pattern für den Hasnummernzusatz `^[\\p{L}0-9. ]*$` war inkorrekt da die Zeichenklassen `\p{L}` nicht zulässig ist.
Es wurde daher zu `^[A-Za-z0-9. ]*$` korrigiert.
#### #10 API Specification: senderId and subscriberId in URIs #### #10 API Specification: senderId and subscriberId in URIs
Die Sender- und Subscriber-ID muss nicht mehr über den Pfad mitgegeben werden sondern wird automatisch über das Token ermittelt. Damit entfallen die IDs als Pfadangabe.
Die Sender- und Subscriber-ID muss nicht mehr über den Pfad mitgegeben werden sondern wird automatisch über das Token
ermittelt. Damit entfallen die IDs als Pfadangabe.
#### #11 API Specification: Missing nouns in Sender API URIs endpoints #### #11 API Specification: Missing nouns in Sender API URIs endpoints
Die Pfade auf in der Sender API enthielten vor den IDs kein beschreibendes Nomen. Dies wurde korrigiert. Zum Beispiel: Die Pfade auf in der Sender API enthielten vor den IDs kein beschreibendes Nomen. Dies wurde korrigiert. Zum Beispiel:
- vorher: `/{destinationId}/{applicationId}/data` - vorher: `/{destinationId}/{applicationId}/data`
- nachher: `/destinations/{destinationId}/applications/{applicationId}/data` - nachher: `/destinations/{destinationId}/applications/{applicationId}/data`
#### #12 API Specification: Missing destinationId in Get Status endpoint of Sender #### #12 API Specification: Missing destinationId in Get Status endpoint of Sender
Die Operation "Get Status" wies im Gegensatz zu den anderen Operationen keine vorangestellte Destination-ID auf. Die Operation "Get Status" wies im Gegensatz zu den anderen Operationen keine vorangestellte Destination-ID auf.
- vorher: `/{applicationId}/status` - vorher: `/{applicationId}/status`
- nachher: `/destinations/{destinationId}/applications/{applicationId}/status` - nachher: `/destinations/{destinationId}/applications/{applicationId}/status`
#### #16 Fachdaten optional #### #16 Fachdaten optional
Das Element "data" in der "contentStructure" war verpflichtend. Damit mussten Fachdaten übertragen werden. Das Element ist jetzt optional.
Das Element `data` in der `contentStructure` war verpflichtend. Damit mussten Fachdaten übertragen werden. Das Element
ist jetzt optional.
## [0.5.0]
## Version 0.5
### Übergreifende Änderungen ### Übergreifende Änderungen
#### Basis-URLs #### Basis-URLs
Die Basis-URLs werden ab sofort mit jeder neuen Version geändert, damit ein paralleler Betrieb mehrerer API-Versionen möglich ist.
Die Basis-URLs für diese Version sind: Die Basis-URLs werden ab sofort mit jeder neuen Version geändert, damit ein paralleler Betrieb mehrerer API-Versionen
- https://sender.fiep-poc.de/beta5/ möglich ist. Die Basis-URLs für diese Version sind:
- https://subscriber.fiep-poc.de/beta5/
- <https://sender.fiep-poc.de/beta5/>
#### CR-1: Diversen Modellen den Discriminator "type" hinzugefügt: - <https://subscriber.fiep-poc.de/beta5/>
- models/application/applicant-contact-info.json
- models/application/applicant-contact-info.json #### CR-1: Diversen Modellen wurde der Discriminator `type` hinzugefügt
- models/application/applicant-person.json
- models/application/applicant.json - `models/application/applicant-contact-info.json`
- models/common/address-international.json - `models/application/applicant-contact-info.json`
- models/common/address-national.json - `models/application/applicant-person.json`
- models/common/address-postbox.json - `models/application/applicant.json`
- models/common/individual.json - `models/common/address-international.json`
- models/destination-no-id.json - `models/common/address-national.json`
- `models/common/address-postbox.json`
- `models/common/individual.json`
- `models/destination-no-id.json`
#### CR-3: Source in Sender ändern #### CR-3: Source in Sender ändern
In der Dokumentation werden die Begriffe "Source" und "Sender" synonym verwendet. Um die Dokumentation klarer zu machen, wurden alle Vorkommen von "Source" in "Sender" geändert.
In der Dokumentation werden die Begriffe "Source" und "Sender" synonym verwendet. Um die Dokumentation klarer zu machen,
wurden alle Vorkommen von "Source" in "Sender" geändert.
<!-- theme: warning --> <!-- theme: warning -->
> **Hinweis:** Dies wirkt sich auch auf die OAuth-Scopes aus. Der Scope `{senderId}:source:manage` wurde in `{senderId}:sender:manage` geändert. > **Hinweis:** Dies wirkt sich auch auf die OAuth-Scopes aus. Der Scope `{senderId}:source:manage` wurde in `{senderId}:sender:manage` geändert.
#### CR-5: Zusätzliche Properties verbieten #### CR-5: Zusätzliche Properties verbieten
- Wo möglich wurde `"additionalProperties": false` gesetzt um weitere Properties zu verbieten. - Wo möglich wurde `"additionalProperties": false` gesetzt um weitere Properties zu verbieten.
- Bei den Metadaten und der Destination ohne ID musste `"additionalProperties": false` wieder entfernt werden da sonst keine Ableitung mit `allOf` möglich ist. - Bei den Metadaten und der Destination ohne ID musste `"additionalProperties": false` wieder entfernt werden da sonst
keine Ableitung mit `allOf` möglich ist.
### Dokumentation ### Dokumentation
- Release Notes mit aufgenommen - Release Notes mit aufgenommen
- Dokumentation zu OAuth integriert - Dokumentation zu OAuth integriert
- Token-URL eingetragen - Token-URL eingetragen
...@@ -161,159 +377,206 @@ In der Dokumentation werden die Begriffe "Source" und "Sender" synonym verwendet ...@@ -161,159 +377,206 @@ In der Dokumentation werden die Begriffe "Source" und "Sender" synonym verwendet
### Modelle ### Modelle
#### Destination #### Destination
models/destination-no-id.json
`models/destination-no-id.json`
#### eID #### eID
- eID-org-acting-person.json aufgelöst und in eID-natural-person.json integriert. - eID-org-acting-person.json aufgelöst und in eID-natural-person.json integriert.
#### Postfachadresse #### Postfachadresse
models/common/address-national.json
models/common/address-postbox.json `models/common/address-national.json`
`models/common/address-postbox.json`
- Um ein doppeltes `oneOf` zu vermeiden wurde die Postfach Adresse aus der nationalen Adresse herausgelöst. - Um ein doppeltes `oneOf` zu vermeiden wurde die Postfach Adresse aus der nationalen Adresse herausgelöst.
#### Application Document #### Application Document
models/application/document.json
`models/application/document.json`
- Regex Pattern für SHA-256/512 Hash präzisiert: "`[0-9A-F]{64,128}`" -> "`^[A-Fa-f0-9]{64}([A-Fa-f0-9]{64})?$`" - Regex Pattern für SHA-256/512 Hash präzisiert: "`[0-9A-F]{64,128}`" -> "`^[A-Fa-f0-9]{64}([A-Fa-f0-9]{64})?$`"
### Application Sender API ### Application Sender API
#### Add Application Data #### Add Application Data
- Im Erfolgsfall enthält der Body `{"result":"success"}` - Im Erfolgsfall enthält der Body `{"result":"success"}`
#### Add Application Document #### Add Application Document
- Im Erfolgsfall enthält der Body `{"result":"success"}` - Im Erfolgsfall enthält der Body `{"result":"success"}`
### Application Subscriber API ### Application Subscriber API
#### Update Destination #### Update Destination
- Im Erfolgsfall enthält der Body `{"result":"success"}` - Im Erfolgsfall enthält der Body `{"result":"success"}`
#### Delete Destination #### Delete Destination
- Im Erfolgsfall enthält der Body `{"result":"success"}` - Im Erfolgsfall enthält der Body `{"result":"success"}`
#### Acknowledge Application #### Acknowledge Application
- Bugfix: Property `final-delivery` auf Camelcase umgestellt. - Bugfix: Property `final-delivery` auf Camelcase umgestellt.
- Bugfix: Angaben von `finalDelivery` in Acknowledge Application ist verpflichtend. - Bugfix: Angaben von `finalDelivery` in Acknowledge Application ist verpflichtend.
## [0.4.0]
## Version 0.4
### Modelle ### Modelle
- Alle Bezeichner auf CamelCase umgestellt. - Alle Bezeichner auf CamelCase umgestellt.
- Beispiele angepasst. - Beispiele angepasst.
#### Application Metadata #### Application Metadata
models/application/metadata-no-id.json
- data/mimeType entfernt, da redundant zu data/schema/mimeType `models/application/metadata-no-id.json`
- `data/mimeType` entfernt, da redundant zu `data/schema/mimeType`
### Application Sender API ### Application Sender API
- Alle Bezeichner auf CamelCase umgestellt. - Alle Bezeichner auf CamelCase umgestellt.
- Beispiele angepasst. - Beispiele angepasst.
### Application Subscriber API ### Application Subscriber API
- Alle Bezeichner auf CamelCase umgestellt. - Alle Bezeichner auf CamelCase umgestellt.
- Beispiele angepasst. - Beispiele angepasst.
## [0.3.0]
## Version 0.3
### Modelle ### Modelle
#### Application Metadata #### Application Metadata
models/application/metadata-no-id.json
- Property "data/size" ergänzt `models/application/metadata-no-id.json`
- Property `data/size` ergänzt
#### eID #### eID
models/common/eID-org-acting-person.json
- Property "artictic-name" in "artistic-name" umbenannt `models/common/eID-org-acting-person.json`
- Property `artictic-name` in `artistic-name` umbenannt
#### Internationale Adresse #### Internationale Adresse
models/common/address-international.json
- Property "lines": `models/common/address-international.json`
- Es müssen mindestens zwei Zeilen angegeben werden
- Maximallänge 35 Zeichen - Property `lines`:
- Es müssen mindestens zwei Zeilen angegeben werden
- Maximallänge 35 Zeichen
#### Nationale Adresse #### Nationale Adresse
models/common/address-national.json
- Alle Propertys mit weiteren Einschränkungen wir Maximallänge oder Pattern versehen `models/common/address-national.json`
- Alle Eigenschaften mit weiteren Einschränkungen mit Maximallänge oder Pattern versehen
#### eID #### eID
models/common/eID-org-acting-person.json
- Property "academic-title" in "doctoral-degrees" umbenannt `models/common/eID-org-acting-person.json`
- Property `academic-title` in `doctoral-degrees` umbenannt
#### Phone #### Phone
models/common/phone.json
- Property "number": Formatbeschränkung gelockert `models/common/phone.json`
- Property "type" entfernt
- Property "description" hinzugefügt - Property `number`: Formatbeschränkung gelockert
- Property `type` entfernt
- Property `description` hinzugefügt
#### Phone Number #### Phone Number
models/common/phonenr.json
- Unbenutztes Modell gelöscht
`models/common/phonenr.json`
- Unbenutztes Modell gelöscht
## Version 0.2 ## [0.2.0] - 2020-03-31
Veröffentlicht 2020-03-31
### Modelle ### Modelle
#### Antragsteller - Organisation #### Antragsteller - Organisation
models/application/applicant-organization.json
- Property "role" entfernt `models/application/applicant-organization.json`
- Property "org-validation/validated" entfernt
- Property "legal-representatives" ist jetzt eine $ref auf models/common/individual.json - Property `role` entfernt
- Property `org-validation/validated` entfernt
- Property `legal-representatives` ist jetzt eine `$ref` auf `models/common/individual.json`
#### Antragsteller - Natürliche Person #### Antragsteller - Natürliche Person
models/application/applicant-person.json
- Property "role" entfernt `models/application/applicant-person.json`
- Property `role` entfernt
#### Application Schema #### Application Schema
Das Schema wurde umgebaut und enthält jetzt drei Angaben: Das Schema wurde umgebaut und enthält jetzt drei Angaben:
- mime-type: ist entweder "json" oder "xml"
- schema-source: Quelle für das Schema. Kann "fim" oder "none" sein. Bei "none" dürfen beliebige Datenstrukturen übertragen werden. - mime-type: ist entweder `json` oder `xml`
- schema-id: ID des Schemas, ist von der Schema Quelle (schema-source) abhängig. - schema-source: Quelle für das Schema. Kann `fim` oder `none` sein. Bei `none` dürfen beliebige Datenstrukturen
übertragen werden.
- schema-id: ID des Schemas, ist von der Schemaquelle (`schema-source`) abhängig.
#### Person #### Person
Die Person (Verzeichnis models/person/) wurde weitestgehend entfernt. Es gibt nur noch das Modell models/common/individual.json für eine natürliche Person.
Die Person (Verzeichnis models/person/) wurde weitestgehend entfernt. Es gibt nur noch das Modell
models/common/individual.json für eine natürliche Person.
#### Phone #### Phone
models/common/phone.json
- Properties "number" und "type" sind jetzt verpflichtend `models/common/phone.json`
- Properties `number` und `type` sind jetzt verpflichtend
#### Destination #### Destination
Die Destination wurde in mehrere Modelle zerlegt, um dem Sender einen anderen Umfang zu zeigen als dem Subscriber. Die Destination wurde in mehrere Modelle zerlegt, um dem Sender einen anderen Umfang zu zeigen als dem Subscriber.
#### Statusübersicht #### Statusübersicht
models/status-overview.json
- Umbenannt: models/status.json → models/status-overview.json `models/status-overview.json`
- Enum Wert "sending" entfernt
- Property "since" in "timestamp" umbenannt - Umbenannt: `models/status.json``models/status-overview.json`
- Property "number" ergänzt - Enum Wert `sending` entfernt
- Property `since` in `timestamp` umbenannt
- Property `number` ergänzt
#### Error Body #### Error Body
models/error-body.json
- Umbenannt: models/error.json → models/error-body.json `models/error-body.json`
- Umbenannt: `models/error.json``models/error-body.json`
- Enthält jetzt ein Array von Fehlern, statt nur einem. - Enthält jetzt ein Array von Fehlern, statt nur einem.
#### Neue Modelle #### Neue Modelle
- base64: models/common/base64.json
- JSON Web Encryption (JWE): models/common/jwe.json - base64: `models/common/base64.json`
- JSON Web Key (JWK): models/common/jwk.json - JSON Web Encryption (JWE): `models/common/jwe.json`
- JSON Web Key (JWK): `models/common/jwk.json`
### Application Sender API ### Application Sender API
reference/sender.json
`reference/sender.json`
- Vorkommen von "Transfer" in "Application" umbenannt - Vorkommen von "Transfer" in "Application" umbenannt
- Dadurch sind auch Operation-IDs geändert worden (siehe unten) - Dadurch sind auch Operation-IDs geändert worden (siehe unten)
- OAuth2 Scopes ergänzt - OAuth2 Scopes ergänzt
- Operation "Get Status Entry" (get-application-status-entry) entfernt - Operation "Get Status Entry" (get-application-status-entry) entfernt
- Operation "Get Application Upload Status" - Operation "Get Application Upload Status"
- Property "docs/doc-id" ergänzt - Property `docs/doc-id` ergänzt
- Operation "Create Application": ID in create-application geändert - Operation "Create Application": ID in create-application geändert
- Operation "Send Application" (früher "Commit Application"): ID in commit-application geändert - Operation "Send Application" (früher "Commit Application"): ID in commit-application geändert
### Application Subscriber API ### Application Subscriber API
- OAuth2 Scopes ergänzt - OAuth2 Scopes ergänzt
- Operation "Acknowledge Application" (früher "Commit Application"): ID in ack-application geändert - Operation "Acknowledge Application" (früher "Commit Application"): ID in ack-application geändert
### Dokumentation ### Dokumentation
Die Dokumentation im Verzeichnis "docs" wurde erstellt.
Die Dokumentation im Verzeichnis `docs` wurde erstellt.
...@@ -3,11 +3,13 @@ ...@@ -3,11 +3,13 @@
Für die Spezifikation der FIT-Connect-Schnittstellen gelten die folgenden Architekturregeln. Für die Spezifikation der FIT-Connect-Schnittstellen gelten die folgenden Architekturregeln.
## OpenAPI ## OpenAPI
- Wir verwenden OpenAPI 3.0 - Wir verwenden OpenAPI 3.0
- Die Spezifikation wird bis zur `beta7` als JSON und ab `beta8` als YAML geschreiben - Die Spezifikation wird bis zur `beta7` als JSON und ab `beta8` als YAML geschreiben
- Wir verwenden keine Versionsnummern in Dateinamen, da das Repo als Ganzes versioniert wird - Wir verwenden keine Versionsnummern in Dateinamen, da das Repo als Ganzes versioniert wird
## Verzeichnisse ## Verzeichnisse
Das Projektverzeichnis ist wie folgt aufgebaut: Das Projektverzeichnis ist wie folgt aufgebaut:
- 📁`assets` - 📁`assets`
...@@ -19,10 +21,16 @@ Das Projektverzeichnis ist wie folgt aufgebaut: ...@@ -19,10 +21,16 @@ Das Projektverzeichnis ist wie folgt aufgebaut:
- 📄`LICENSE` - 📄`LICENSE`
## Bezeichner ## Bezeichner
- Die Bezeichner werden camelCase geschreiben und beginnen mit einem Kleinbuchstaben - Die Bezeichner werden camelCase geschreiben und beginnen mit einem Kleinbuchstaben
- Eine ID (Identifikator) wird als `Id` (nicht `ID`) geschrieben - Eine ID (Identifikator) wird als `Id` nicht `ID` geschrieben
## Pfade ## Pfade
Multiple Resoucen werden im Pfad durch eine Collection-Resource und einer nachfolgenden ID aufgenommen Multiple Resoucen werden im Pfad durch eine Collection-Resource und einer nachfolgenden ID aufgenommen
Beispiel: `/destinations/{destinationId}/applications/{applicationId}` Beispiel: `/applications/{applicationId}`
## API-Version taggen
git tag -a v1.0.4 -m "API Version 1.0.4"
#!/usr/bin/env sh
YML_IN="spec/zustelldienst.yml"
YML_OUT="spec/zustelldienst-bundled.yml"
docker run --rm -v "$(pwd):/work" jeanberu/swagger-cli \
swagger-cli bundle -t yaml -o "/work/$YML_OUT" "/work/$YML_IN"
# Fix: files in docker are created as root:root
sudo chown "$USER:$USER" $YML_OUT
# Glossar # Glossar
... <dl>
<dt>Application</dt>
**Noch in Arbeit** <dd>Ein Antrag, der von einem Bürgerserviceportal o. ä. Onlinedienst an den Zustelldienst zur Zustellung übergeben wird</dd>
<dd>Der Antrag besteht hierbei aus Fachdaten bzw. Antragsdaten, optionalen Anhängen und allgemeinen Metadaten.</dd>
<dd>Ein Antrag und alle mit ihm verknüpften Informatioen werden verschlüsselt übertragen.</dd>
... <dt>Destination</dt>
\ No newline at end of file <dd>Eine Destination (Zustellpunkt) ist ein adressierbares Ziel einer Antragsübermittlung, d.h. Zustellpunkte sind spezifische Endpunkte für die Zustellung eines Antrags in der zuständigen Fachanwendung oder virtuellen Poststelle.</dd>
<dd>Zustellpunkte bilden damit indirekt die fachliche Zuständigkeit in der zuständigen Stelle ab.</dd>
<dt>Document</dt>
<dd>Jegliche Art von Dokument, die als Anhang zu einem Antrag angehängt werden kann.</dd>
</dl>
{
"type": "object",
"title": "Applicant Contact Info",
"description": "Kontaktdaten des Antragstellers",
"additionalProperties": false,
"x-examples": {
"example-1": {
"electronicAdresses": [
{
"channelType": "Service-Account-Mailbox",
"address": "3b0c9c8c-0801-45f0-a331-2abfc9db78d0"
}
],
"physicalAdress": {
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
},
"telephones": [
{
"number": "+49 89 32168-42",
"mobile": true,
"description": "work"
}
]
}
},
"properties": {
"physicalAddress": {
"oneOf": [
{
"$ref": "../common/address-national.json"
},
{
"$ref": "../common/address-postbox.json"
},
{
"$ref": "../common/address-international.json"
}
],
"description": "Physikalische (Post-)Adresse",
"discriminator": {
"propertyName": "type",
"mapping": {
"national": "../common/address-national.json",
"postbox": "../common/address-postbox.json",
"international": "../common/address-international.json"
}
}
},
"telephones": {
"type": "array",
"description": "Liste der Telefonnummern, außer Fax",
"items": {
"$ref": "../common/phone.json"
}
},
"electronicAddresses": {
"type": "array",
"description": "Elektronische Kontaktmöglkichkeiten, z.B. E-Mail",
"items": {
"type": "object",
"description": "",
"additionalProperties": false,
"properties": {
"channelType": {
"type": "string",
"enum": [
"Service-Account-Mailbox",
"De-Mail",
"E-Mail",
"Fax"
],
"description": "Art der Kommunikationsmöglichkeit"
},
"address": {
"type": "string",
"description": "Kommunikationsadresse"
}
}
}
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Applicant Organisation",
"description": "Antragsteller in Form von einer Organisation, z.B. einem Unternehmen",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "array",
"description": "IDs für diese Organisation",
"items": {
"$ref": "../common/identifier.json"
}
},
"contactInfo": {
"$ref": "./applicant-contact-info.json"
},
"actingPerson": {
"type": "array",
"description": "Im Namen der Organisation auftretende natürliche Personen, wie z.B. Geschäftsführer, Vorstände oder Prokuristen",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"identityInfo": {
"$ref": "../common/natural-person.json"
},
"authentificationInfo": {
"$ref": "../common/authentification-info.json"
}
}
}
},
"organizationInfo": {
"type": "object",
"description": "Informationen über die Organisation",
"additionalProperties": false,
"properties": {
"legalName": {
"type": "string",
"description": "Name oder Bezeichnung - Der rechtliche Name einer Organisation. Der Name ist nicht zwingend eindeutig, um die Organisation zu identifizieren."
},
"organizationType": {
"type": "string",
"description": "Rechtsform der Organisation"
},
"registryCourt": {
"type": "string",
"description": "Registergericht"
},
"registryType": {
"type": "string",
"description": "Registerart - Die Registerart macht die Registernummer zur Identifizierung der Organisation innerhalb des Registergerichts eindeutig (z. B. HRA und HRB als Registerarten für das Handelsregister)."
},
"registryNumber": {
"type": "string",
"description": "Registernummer, z.B. vom Handelsregister"
},
"legalAddress": {
"oneOf": [
{
"$ref": "../common/address-national.json"
},
{
"$ref": "../common/address-postbox.json"
},
{
"$ref": "../common/address-international.json"
}
],
"description": "Offizielle Adresse",
"discriminator": {
"propertyName": "type",
"mapping": {
"national": "../common/address-national.json",
"postbox": "../common/address-postbox.json",
"international": "../common/address-international.json"
}
}
},
"legalRepresentatives": {
"type": "array",
"description": "Namen der Mitglieder des Vertretungsorgans oder der gesetzlichen Vertreter",
"items": {
"$ref": "../common/individual.json"
}
}
}
},
"orgValidation": {
"type": "object",
"description": "Informationen, ob diese Organisation vom sendenden System identifiziert wurde",
"additionalProperties": false,
"properties": {
"method": {
"type": "string",
"description": "Identifizierungsmethode"
}
},
"required": [
"method"
]
},
"type": {
"type": "string",
"enum": [
"organization"
]
}
},
"required": [
"type"
]
}
{
"type": "object",
"title": "Applicant Person",
"description": "Antragstellerdaten für eine natürliche Person",
"additionalProperties": false,
"properties": {
"identifier": {
"type": "array",
"description": "IDs der natürlichen Person",
"items": {
"$ref": "../common/identifier.json"
}
},
"authentificationInfo": {
"$ref": "../common/authentification-info.json"
},
"identityInfo": {
"$ref": "../common/natural-person.json"
},
"contactInfo": {
"$ref": "./applicant-contact-info.json"
},
"type": {
"type": "string",
"enum": [
"person"
]
}
},
"required": [
"type"
],
"x-examples": {
"example-1": {
"type": "person",
"authentificationInfo": {
"assuranceLevel": "high",
"authentificationMethod": "eID",
"timestamp": "2020-03-03T12:38:23Z"
},
"identityInfo": {
"dateOfBirth": "1970-09-13",
"gender": "m",
"givenName": "WERNER",
"familyName": "MUSTERMANN",
"placeOfResidence": {
"type": "national",
"street": "KURZER WEG 7",
"postalCode": "12345",
"city": "ANKH-MORPORK"
}
},
"contactInfo": {
"electronicAddresses": [
{
"channelType": "Service-Account-Mailbox",
"address": "3b0c9c8c-0801-45f0-a331-2abfc9db78d0"
}
],
"physicalAddress": {
"type": "national",
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
},
"telephones": [
{
"number": "+49 89 32168-42",
"mobile": true,
"description": "work"
}
]
}
}
}
}
{
"title": "Applicant",
"description": "Ein Antragsteller, entweder eine Organisation oder eine natürliche Person",
"oneOf": [
{
"$ref": "./applicant-person.json"
},
{
"$ref": "./applicant-organization.json"
}
],
"discriminator": {
"propertyName": "type",
"mapping": {
"person": "./applicant-person.json",
"organization": "./applicant-organization.json"
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Application Document",
"description": "Ein im Antrag (Application) enthaltenes Dokument (z.B. Antragsformular oder hochgeladene Anlage)",
"additionalProperties": false,
"x-examples": {
"example-1": {
"docId": "1",
"purpose": "form",
"size": 13046,
"mimeType": "application/pdf",
"filename": "test.pdf",
"description": "Das Antragsformular",
"lang": {
"lang": "de",
"region": "DE"
},
"hash": {
"algorithm": "SHA-256",
"digest": "bf37d894fdf9aeade63975ed648d49c3e8a7a773923597d2418915f54cd7c3b9"
}
}
},
"properties": {
"purpose": {
"type": "string",
"enum": [
"form",
"attachment",
"report"
],
"description": "Zweck/Art des Dokuments\n- form: Antragsformular\n- attachment: Anlage (Upload)\n- report: Vom System erzeugte Unterlage"
},
"size": {
"type": "integer",
"description": "Größe des Dokuments in Bytes"
},
"filename": {
"type": "string",
"description": "Ursprünglicher Dateiname bei Erzeugung oder Upload"
},
"description": {
"type": "string",
"description": "Optionale Beschreibung des Dokuments"
},
"lang": {
"$ref": "../common/language.json"
},
"hash": {
"type": "object",
"description": "Prüfsumme über den Inhalt des Dokuments zur Absicherung auf dem Transportweg",
"additionalProperties": false,
"properties": {
"algorithm": {
"type": "string",
"description": "Verwendeter Algorithmus",
"enum": [
"SHA-256",
"SHA-512"
]
},
"digest": {
"type": "string",
"description": "Prüfsumme, hexadezimal codiert",
"pattern": "^[A-Fa-f0-9]{64}([A-Fa-f0-9]{64})?$"
}
},
"required": [
"algorithm",
"digest"
]
},
"signature": {
"type": "string",
"pattern": "^[a-zA-Z0-9-_=]+$",
"description": "Sofern der Antragstellers dieses Dokument signiert hat, wird die Signatur hier base64url-encoded eingebettet"
},
"mimeType": {
"$ref": "../common/mime-type.json"
},
"docId": {
"type": "string",
"pattern": "^[-_.A-Za-z0-9]+$",
"description": "ID des Dokuments. Diese muss nur innerhalb des Antrags (Application) eindeutig sein. Es wird daher empfohlen, die IDs fortlaufend (1, 2 etc.) zu vergeben."
}
},
"required": [
"purpose",
"size",
"mimeType"
]
}
\ No newline at end of file
{
"type": "object",
"title": "Payment Info",
"description": "Informationen über eine im Antragsprozess erfolgte Bezahlung.",
"additionalProperties": false,
"properties": {
"reference": {
"type": "string",
"description": "Bezahlreferenz, z.B. ein Kassenzeichen"
},
"usage": {
"type": "string",
"description": "Verwendungszweck",
"maxLength": 27
},
"amount": {
"type": "number",
"minimum": 0.01,
"multipleOf": 0.01,
"description": "Geldbetrag"
},
"timestamp": {
"type": "string",
"description": "Zeitpunkt der Bezahlung",
"format": "date-time"
},
"status": {
"type": "string",
"description": "Status der Bezahlung",
"enum": [
"success",
"failed",
"open"
]
},
"transaction": {
"type": "string",
"description": "Informationen zur Bezahltransaktion, z.B. eine Transaktions-ID"
}
},
"required": [
"usage",
"amount",
"status"
],
"x-examples": {
"example-1": {
"reference": "TP/93/GDP",
"usage": "Gewerbeanmeldung",
"amount": 17.3,
"timestamp": "2020-03-03T12:38:23Z",
"status": "success",
"transaction": "1f77c5f9b759db9cdce59988b24974d465c7be5e462a6185485559ff6e2dea82"
}
}
}
\ No newline at end of file
{
"type": "object",
"title": "Verwaltungsleistung",
"description": "Beschreibung der Art der Verwaltungsleistung. Eine Verwaltungleistung sollte immer mit einer LeiKa-ID beschrieben werden. Ist für die gegebene Verwaltungsleistung keine LeiKa-ID vorhanden, kann die Verwaltungsleistung übergangsweise über die Angabe eines Schemas (`otherIdentifiers`) beschrieben werden.",
"additionalProperties": false,
"x-examples": {
"example-1": {
"name": "Gewerbeanmeldung",
"description": "Eine Gewerbeanmeldung ist immer dann notwendig, wenn Sie einen stehenden Gewerbebetrieb beginnen.",
"leikaId": "99050012104000",
"otherIdentifiers": [
{
"id": "8664844",
"schemeID": "service.niedersachsen.de",
"schemeName": "Serviceportal Niedersachsen"
},
{
"id": "354824",
"schemeID": "buerger.thueringen.de",
"schemeName": "Zuständigkeitsfinder Thüringen"
}
]
},
"example-2": {
"name": "Gewerbeanmeldung",
"leikaId": "99050012104000"
}
},
"properties": {
"name": {
"type": "string",
"description": "Name/Bezeichnung der behördlichen Leistung"
},
"description": {
"type": "string",
"description": "(Kurz-)Beschreibung der behördlichen Leistung"
},
"otherIdentifiers": {
"type": "array",
"description": "Weitere Identifikatioren. Die ID wird in `content` abgelegt, zusätzlich sollten die Schema-Attribute zur Spezifikation des Gültigkeitsraumes verwendet werden.",
"items": {
"$ref": "../common/identifier.json"
}
},
"leikaId": {
"type": "string",
"pattern": "^[0-9]{2}([0-9]{3}){1,4}$",
"description": "ID aus dem Leistungskatalog (Leika)"
},
"legalBasis": {
"type": "string",
"description": "Rechtsgrundlage der Verwaltungsleistung. Dieses Feld dient zur Information für Verwaltungsmitarbeiter:innen und stellt insbesondere keine rechtsverbindliche Aussage dar."
}
},
"required": [
"name"
]
}
\ No newline at end of file
{
"type": "object",
"title": "International Address",
"description": "Eine internationale Adresse, bestehend aus ein bis fünf Adresszeilen.",
"additionalProperties": false,
"x-examples": {
"example-1": {
"type": "international",
"lines": [
"760 United Nations Plaza",
"Manhattan, New York City, New York 10017"
],
"country": "368"
},
"example-2": {
"type": "international",
"lines": [
"Threadneedle Street",
"London EC2R 8AH"
],
"country": "168"
}
},
"properties": {
"lines": {
"type": "array",
"maxItems": 5,
"minItems": 2,
"description": "Anschriftzeile",
"items": {
"type": "string",
"maxLength": 35
}
},
"country": {
"type": "string",
"description": "Staat gemäß Codeliste [https://www.xrepository.de/details/urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:staat](Codeliste Staat aus der Staats- und Gebietssystematik des Statistischen Bundesamtes)",
"minLength": 3,
"maxLength": 3,
"pattern": "^[0-9]{3}$"
},
"type": {
"type": "string",
"enum": [
"international"
]
}
},
"required": [
"lines",
"country",
"type"
]
}
\ No newline at end of file
{
"title": "National Address",
"description": "Eine nationale (deutsche) Adresse, bestehend aus Straße, Hausnummer, PLZ und Ort.",
"x-examples": {
"example-1": {
"type": "national",
"street": "Kurzer Weg",
"houseNumber": "7",
"postalCode": "12345",
"city": "Ankh-Morpork"
}
},
"type": "object",
"additionalProperties": false,
"properties": {
"street": {
"type": "string",
"description": "Straße",
"maxLength": 55
},
"houseNumber": {
"type": "string",
"description": "Hausnummer",
"maxLength": 9,
"pattern": "^[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?$"
},
"houseNumberSuffix": {
"type": "string",
"description": "Hausnummerzusatz",
"maxLength": 2,
"pattern": "^[A-Za-z0-9. ]*$"
},
"postalCode": {
"type": "string",
"description": "Postleitzahl",
"minLength": 5,
"maxLength": 5,
"pattern": "^([0]{1}[1-9]{1}|[1-9]{1}[0-9]{1})[0-9]{3}$"
},
"city": {
"type": "string",
"description": "Ort",
"maxLength": 50
},
"addressSupplement": {
"type": "string",
"description": "Adresszusatz"
},
"type": {
"type": "string",
"enum": [
"national"
]
}
},
"required": [
"street",
"postalCode",
"city",
"type"
]
}
\ No newline at end of file
{
"title": "Postfach Address",
"description": "Eine Adresse eines Postfachs.",
"x-examples": {
"example-1": {
"type": "postbox",
"postOfficeBox": "987",
"postalCode": "12345",
"city": "Ankh-Morpork"
}
},
"type": "object",
"additionalProperties": false,
"properties": {
"postOfficeBox": {
"type": "string",
"description": "Postfach"
},
"postalCode": {
"type": "string",
"description": "Postleitzahl",
"minLength": 5,
"maxLength": 5,
"pattern": "^([0]{1}[1-9]{1}|[1-9]{1}[0-9]{1})[0-9]{3}$"
},
"city": {
"type": "string",
"description": "Ort",
"maxLength": 50
},
"type": {
"type": "string",
"enum": [
"postbox"
]
}
},
"required": [
"postalCode",
"city",
"type"
]
}
\ No newline at end of file
{
"type": "object",
"title": "Authentifikation",
"additionalProperties": false,
"description": "Informationen über die Authentifikation der Person.",
"x-examples": {
"example-1": {
"assuranceLevel": "high",
"authentificationMethod": "eID",
"timestamp": "2020-03-03T12:38:23Z"
}
},
"properties": {
"assuranceLevel": {
"type": "string",
"enum": [
"low",
"substantial",
"high"
],
"description": "Vertrauensniveau"
},
"authentificationMethod": {
"type": "string",
"description": "Methode der Authentifikation",
"enum": [
"Authega",
"De-Mail",
"eID",
"E-Mail"
]
},
"authentificationToken": {
"type": "object"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "Zeitstempel der Authentifikation"
},
"authenticatedFields": {
"type": "array",
"minItems": 0,
"uniqueItems": true,
"description": "Liste der authentifizierten Felder in `identityInfo`",
"items": {
"type": "string",
"enum": [
"placeOfBirth",
"dateOfBirth",
"gender",
"nationality",
"artisticName",
"doctoralDegrees",
"birthName",
"givenName",
"familyName",
"placeOfResidence"
]
}
}
},
"required": [
"assuranceLevel",
"authentificationMethod",
"authenticatedFields"
]
}
\ No newline at end of file
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