-
Nummerierung der Command-Datei wird nun wieder von 1 aufwärts zählend ergänzt und gibt nicht nur den Wert 1 zurück
-
Fehlgeschlagene Aufrufe wegen internen Errors werden nun geloggt
-
ReadSync mapped nun auf den korrekten Typ
-
Leere Listen werden nicht mehr als Suchparameter weitergegeben
-
Ein
userCertificate
kann nun auch mit Zeilenumbrüchen in dieCommandDatei
geschrieben werden -
Im Logverzeichnis wird zusätzlich zum Log eine csv-Datei über alle Kommandos und Erfolg/Misserfolg angelegt. Diese sammelt alle abgesendeten Requests → LogCsv
-
Chunking von großen Abfragen ist möglich → Chunking
-
Chunking von/bis ist möglich
-
Mit dem Einlesen einer .txt kann nun nicht nur eine Liste von uids verwerten sondern auch eine Liste an TelematikIds → ListSuche
Entspricht der Spezifikation nach Version 1.6.3
-
DeleteCert → wieder aktiv
-
changeDateTime → Dateistruktur Anpassung
Entspricht der Spezifikation nach Version 1.6.2
-
SaveModifiy → Holder, MaxKOMLEadr und ProfessionOID werden aus dem eingegebenen Command übernommen
-
Read Parameter angepasst und vollständig
-
UnixTimestamps werden in OffsetDateTime umgewandelt und werfen keine Exception mehr. Damit werden alle Einträge geloggt. Es wird eine Warnung ausgegeben, falls ein solcher Eintrag gelesen wird.
- Suchen nach einer Liste von Uids → siehe UidSuche
Entspricht der Spezifikation nach Version 1.6.0
-
Neue Parameter (professionOID & entryType) → Read
-
Neue Opperation → siehe ServerInfo
-
Umgenennung → Owner zu Holder
Der VZD-Client dient als Werkzeug um einen Verzeichnisdienst mit Einträgen so wie Zertifikaten zu füllen, zu bearbeiten, zu löschen oder auszulesen.
Generated API docs are available at https://gematik.github.io/app-VZD-Client.
Licensed under the Apache License, Version 2.0.
Im Folgenden wird erklärt wie der VZD-Client
herunterzuladen und zu verwenden ist.
Der VZD-Client
kann als git repository oder von Maven Central heruntergeladen werden.
- Git
git clone https://github.com/gematik/app-VZD-Client.git
- Maven Central
https://search.maven.org/artifact/de.gematik.ti.epa/VZD-CLient
Zum Compilieren des VZD-Clients
wird das Verwenden von Java11 und gradle 7.1 empfohlen.
Nach dem Compilieren wird eine .zip-Datei in den build/distributions Ordner abgelegt. Dieser enthält eine ausführbare .bat-Datei. Die dazugehörige .jar-Datei befindet sich im Ordner build/libs.
In der erstellten oder heruntergeladenen .zip-Datei befinden sich 2 ausführbare .bat-Dateien.
-
startVzdClient.bat → Startet den
VZD-Client
mit den angegebenen Parameter. -
startVzdC_Log.bat → Diese .bat-Datei erwartet als ersten Parameter den gewünschten OutputPath für das Logfile. Danach werden die Parameter angeführt.
Beim Verwenden der .jar-Datei kann das Log-Level und der Pfad des Logs wie in Logging verwendet werden.
Zum Bedienen des VZD-Clients
müssen mindestens 2 Parameter überreicht werden.
Dies geschieht in der Kommandozeile über die Parameter:
Pflicht:
-
-c <Pfad zur Credentials-Datei> (.txt-Datei)
-
-p <Pfad zu Grundeinstellungen> (.txt-Datei)
Optional:
-
-b <Pfad zur Command-Datei> (.xml-Datei / .txt-Datei) ← überschreibt eventuelle Angaben in den Grundeinstellungen
-
-h <ProxyHost IP> ← überschreibt eventuelle Angaben in den Grundeinstellungen
-
-d <Proxy Port> ← überschreibt eventuelle Angaben in den Grundeinstellungen
-
-t <syncTimeout> ← setzt manuell ein maximalen Timeout (default 120s) in Sekunden (überschreibt eventuelle Angaben in den Grundeinstellungen)
-
-version ← gibt die verwendete Version des VZD-Clients aus. (Eventuelle Aktionen werden nicht durchgeführt)
-
Credentials-Datei: Diese Datei beinhaltet die User-ID und das Passwort. Diese müssen wie folgt in eine .txt-Datei geschrieben werden (die Reihenfolge ist hierbei nicht relevant):
-
id=<UserId>
-
secret=<Passwort>
-
-
Grundeinstellungen: Diese Datei beinhaltet einen BasePath (IP-Adresse oder URL zum anzusprechenden Server), einen RetryingOAuthPath (IP Adresse oder URL zum OAuth2 Token Server) und optional einen CommandsPath (Pfad zur lokalen .xml-Datei) in der die auszuführenden Operationen definiert, eine Angabe wie lang der maximale Timeout bei der Sync Operation sein soll (Default 120 Sekunden) sind sowie ein Proxy-Host einen dazugehörigen Proxy-Port. Außerdem können Angaben zum parallelen Ausführen gemacht werden. Eine genauere Beschreibung wie sich die Angaben auf den Programmablauf auswirken, kann unter Paralleles Ausführen nachgelesen werden. Eine weitergehende Beschreibung der Kommandodatei findet sich unter Bedienung. Die Angaben werden wie folgt in eine .txt-Datei geschrieben (die Reihenfolge ist hierbei nicht relevant):
-
base=<URL or IP zum Server>
-
retryingOAuth=<URL or IP zum Server>
-
proxyHost=<ProxyHost IP>
-
proxyPort=<Proxy Port>
-
commands=<Pfad zur .xml-Datei>
-
syncTimeout=<Maximaler Timeout in Sekunden für das Lesen von Einträgen>
-
maxOperation=<Anzahl an Operationsarten>
-
maxExecutionsPerOperation=<Anzahl an parallelen Operationen>
-
logCommands=<boolean default → false>
-
trustStorePath=<Pfad zu einem spezifischem TrustStore (Default ist hinterlegt)>
-
chunked=<boolean default → false>
-
chunkSize=<Anzahl
Commands
pro Logfile default → 100> -
chunkFrom=<Start
Command
- Nummer für chuncked default → 1> -
chunkTill=<Ende
Command
- Nummer für chuncked default → 999999999999999999> -
listType=<Art Einträge in der Liste beim Einlesen im .txt Format default → "uid" Anleitung hier!>
-
Mit dem setzen des logCommands
wird vor jeder Ausführung eines Befehls dieser vorher geloggt.
Dies erleichtert das Debuggen.
Die Definition der Kommandos geschieht durch eine .xml-Datei. Dieser Datei liegt ein generelles Schema zugrunde, welches durch die commands.xsd in der .zip-Datei eingesehen werden kann. Hierbei ist der Name der Operation verpflichtend. Eine Angabe einer "commandId" ist nicht notwendig, kann jedoch wahlweise gesetzt werden. Sollte sie nicht gesetzt werden, wird der Client eine ID vergeben, bei der er von 1 an durch iteriert. Dies dient der späteren Zuordnung welche Antwort zu welchem Kommando gehört.
Abhängig davon welche Operation durchgeführt werden soll, sind gewisse Angaben verpflichtend und manche optional.
Sollte ein Parameter angegeben werden und für das betreffende Kommando nicht verwendet werden können, so wird dieser ignoriert.
In gemSpec_VZD
wird in Kapitel 4.6.1
Operationen der Schnittstelle I_Directory_Administration beschrieben, welches Kommando welche Parameter berücksichtigt und welche verpflichtend benötigt werden.
Eine Beispiel .xml-Datei wie Command-Datei aussehen kann befindet sich im Ordner bspData (Beispiel_Command_Datei.xml
).
Diese Datei gibt einen Einblick welche Parameter für die einzelnen Operationen gesetzt werden können.
Diese Date stellt keine funktionsfähige Command-Datei dar. Die Parameter müssen angepasst werden.
Das Logging geschieht auf der Konsole, sowie in einem File. Es wird immer ein File erstellt. Sollte kein spezieller Ort für das Logging angegeben werden, wird das Log im java.io.temp Ordner abgelegt. Standardmäßig ist das Log-Level in der Konsole "INFO" und im File "DEBUG".
Um das Log-Level der Konsole zu beeinflussen kann ein weiterer Parameter beim Starten der .bat-Datei angegeben werden:
(case sensitive)
-
-info ← Level INFO
-
-trace ← Level TRACE
-
-error ← Level ERROR
-
-debug ← Level DEBUG
Beispiel Aufruf
<workspace>/startVzdC_Log.bat <log_outputdir> -c <workspace>/credentials.txt -p <workspace>/config.txt -debug
Um hier Einfluss auf die Logeigenschaften zu nehmen, muss der Java-VM die entsprechenden Systemvariablen übergeben werden.
-
l4j.lvl=<LogLevel> → für das Log-Level
-
l4j.logDir=<LogDir> → für das Log-Output-Directroy
Beispiel Aufruf
java -Dl4j.lvl=DEBUG -Dl4j.logDir=<log_outputdir> -jar <workspace>/vzd<version>.jar <outputdir> -c <workspace>/credentials.txt -p <workspace>/config.txt
Mit den Parametern unter Dateistruktur beschrieben kann das Chunking eingeschaltet werden, indem chunked
der Wert true
übergeben wird.
Im Logfile Ordner wird ein Unterordner mit der aktuellen Zeit angelegt.
Die ChunkSize legt fest wie viele Einträge pro Logfile in einer Datei landen sollen.
Mit chunkFrom
und chunkTill
kann angegeben werden von welchem Command
bis zu welchem Command
ausgeführt werden soll.
Die csv-Log Datei wird im Logverzeichnis abgelegt und beim Ausführen jedes Commands
erweitert.
Sie beinhaltet:
-
Date
-
Time
-
SystemUser (Logfile kann auch für Kooperation auf einem Shared Laufwerk abgelegt werden)
-
Credential_User
-
TelematikID
-
ExecutionCommand
-
ExecutionStatus
-
Data
Achtung, die Datei darf nicht u.a. mit Exel geöffnet sein. Andernfalls wirft der Client einen Fehler, dieser führt nicht zum Abbruch der Auftragreihe
Um den VZD-Client über einen Proxy starten, müssen wie unter Dateistruktur unter Grundeinstellungen Angaben in der Konfigurationsdatei zu Host und Port angegeben werden.
Außerdem ist es möglich den Host über den Parameter "-h" und den Port über "-d" direkt in der Kommandozeile zu übergeben. Sollte dies gemacht werden, so überschreibt dies die Einstellungen, die eventuell in der Configurationsdatei angegeben wurden.
Durch das Konfigurationsfile können Einstellungen getätigt werden, die die Ausführung der Operationen des VZD-Client
beschleunigen (Wie diese Angaben korrekt getätigt werden, dann unter Parameter nachgelesen werden).
Der VZD-Client
kann mehrere Operationsarten (AddDirectory, ModifyDirectory etc.) gleichzeitig ausführen.
Hierzu dient die Angabe maxOperations.
Der Maximalwert dieser Angabe liegt bei 8. Es kann keinen Einfluss auf die Reihenfolge genommen werden.
Die Einstellung maxExecutionsPerOperation beschreibt wie viele gleichartige Operationen gleichzeitig ausgeführt werden. Diese Zahl ist aufgrund von Ressourcenplanung auf 20 limitiert.
Der Workflow ist in der Abbildung figure_title abzulesen.
Alle Operationen müssen über ein Commandfile, wie in 2.3 Bedienung beschrieben, übergeben werden und werden vom VZD-Client
ausgelesen.
Bevor sie ausgeführt werden, wird abhängig der Operation eine Validitätsprüfung durchgeführt.
Genauere Angaben der Validitätsprüfung, können unter der jeweiligen Operation unter Abarbeiungsflows eingesehen werden.
Sollte diese bei einem Command fehlschlagen, so wird die Durchführung abgebrochen. Der Workflow unterscheidet zwischen „Modify“, „Add“, „Read“ und „Delete“. In der Abarbeitung gibt es jedoch leichte Unterschiede, die unter Abarbeiungsflows behandelt werden.Vor dem Ausführen des Requests wird überprüft, ob der OAuth2 Token noch Gültigkeit besitzt. Anschließend wird der Request ausgeführt und das Ergebnis in ein Logfile geschrieben, das ausgewertet werden kann.
Erforderliche Einträge für ein Add Directory Entry ist mindestens ein UserCertificate
.
Jedes dieser UserCertificate
muss mindesten eine telematikID
oder ein userCertificate
beinhalten.
Alle weiteren Angaben sind optional.
Beim Ausführen eines Add Directory Entry Certificate werden für jedes Zertifikat die uids
mit der im BaseDirectoryEntry
angegebenen uid
verglichen.
Sollte die uid
abweichen so gilt das Kommando als nicht valide.
Bevor ein Add Directory Entry ausgeführt wird überprüft der Client, ob bereits ein Eintrag existiert. Sollte dies der Fall sein, wird anstelle eines Add- ein Modify Directory Entry ausgeführt.
Bei einem Add Directory Entry Certificate werden die angegebenen Parameter an den VZD
gesendet.
Bei erfolgreicher Durchführung wird jeweils die Antwort distinguished name
des Servers in den Log geschrieben.
Es wird nur überprüft, ob mindestens eins der Attribute nach denen gesucht werden kann angegeben wurde.
Mögliche Parameter für das Lesen eines Entries sind die in der folgenden Funktion genannt:
GemDirectoryEntryAdministrationApi.java.
public Call readDirectoryEntryCall(String uid, String givenName, String sn, String cn,
String displayName, String streetAddress,
String postalCode, String countryCode, String localityName, String stateOrProvinceName,
String title, String organization, String otherName,
String telematikID, String telematikIDSubStr, String specialization, String domainID,
String holder, String personalEntry,
String dataFromAuthority, String professionOID, String entryType, Boolean baseEntryOnly,
final ApiCallback _callback)
Mögliche Parameter für das Lesen eines Zertifikats (hierbei wird nur das Element UserCertificate
betrachtet):
GemDirectoryEntryAdministrationApi.java.
public okhttp3.Call readDirectoryCertificatesCall(String uid, String certificateEntryID,
String entryType, String telematikID, String professionOID, String usage,
final ApiCallback _callback)
Alle in dem Kommando genannten Parameter werden zusammengefügt und als Request an den VZD
gesendet.
Bei erfolgreicher Anfrage wird eine Liste aller auf die Suchkriterien zutreffende Einträge in das Log geschrieben.
Ist equivalent mit Read Directory Entry / Certificate, mit Außnahme, dass die Begrenzung von 100 maximalen Einträgen ausgesetzt ist. Die parallele Ausführung dieser Operation wird vom Server aus Performancegründen eingeschränkt. Diese Operation soll nur genutzt werden, wenn mehr als 100 Suchergebnisse benötigt werden.
Bei einem Modify Directory Entry wird die Angabe einer uid vom VZD-Client
überprüft.
Sollte versucht werden dieses Kommando auszuführen, wird dies zu einem Fehler führen.
Bevor ein Modify Directory Entry ausgeführt überprüft der Client, ob bereits ein Eintrag zu der uid existiert.
Sollte dies nicht der Fall sein, so wird anstelle eines Modify- ein Add Directory Entry ausgeführt.
Bei erfolgreicher Durchführung wird der jeweils zurückgelieferte distinguished name
ins Log geschrieben.
ACHTUNG:
Wenn ein Modify Directory Entry durchgeführt wird, werden alle veränderbaren Attribute, die in dem Kommando nicht gesetzt wurden auf null gesetzt. Sollte nur ein Attribut überschrieben werden, kann die Funktion Save Modify Directory Entry verwendet werden.
Zertificate können nicht modifiziert werden
Bei einem Delete Directory Entry Kommando wird die Angabe einer uid vom VZD-Client
überprüft.
Anschließend wird der Löschbefehl gesendet.
Bei einem Delete Directory Entry Certificate Kommando wird die uid aus dem UserCertificate
aus allen Zertifikaten ausgelesen.
Dieses muss mit der uid im BaseDirectorEntry
und innerhalb eines Commandos überein stimmen, sofern angegeben.
Sobald an einer Stelle eine angegeben wurde wird diese verwendet.
Außerdem muss ein cn
im UserCertificate
angegeben werden.
Sollte eine dieser Voraussetzungen nicht zutreffen, bricht der VZD die Bearbeitung ab.
Sollte der Request erfolgreich sein, so wird die gelöschte uid als Bestätigung in das Log geschrieben.
Es muss nur der Name der Opperation angegeben werden.
Es wird ein Get-Request gegen den Verzeichnisdienst gestellt und die zurückkommende Antwort ausgegeben.
Dies ist eine ergänzende Funktion die nicht in der Spezifikation festgehalten ist. Sie soll den Umgang erleichtern und die Fehleranfälligkeit verringern. Sie kann dazu genutzt werden einzelne Attribute eines Eintrages zu überschreiben ohne die restlichen Attribute zu löschen.
Die Validitätsprüfung ist deckungsgleich zu der unter Modify Directory Entry
Im gegensatz zu dem Modify-Directory-Entry-Befehl wird der Eintrag bei dieser Operation nicht komplett mit den angegebenen Daten ersetzt.
Der
VZD-Client
führt vorher eine Readoperation durch und vergleicht die Daten die unterschiedlich sind und ersetzt die im Command angegebenen Daten.
Dies ist die einzige Funktion die eine .txt-Datei als Befehlsdatei entgegen nimmt. Jede Zeile repräsentiert hier eine Uid/Telematikid auf die ein Read ausgeführt wird. Es kann immer nur entweder Uid oder TelematikIds in einer Datei sein. Der Typ muss in der Configurationsdatei angegeben werden.
Es gibt keine Validitätsprüfung. Jede Zeile in der Textdatei wird als Uid/TelematikId eingelesen.
Jede Zeile in der Textdatei wird als Uid eingelesen und zu dieser ein Read ausgeführt.