... |
... |
@@ -18,8
+18,42 @@ |
18 |
18 |
|
19 |
19 |
== Plugin-Konfiguration == |
20 |
20 |
|
21 |
|
-== HTTP-Request-Aufbau == |
|
21 |
+Am Plugin selber kann konfiguriert werden, ob das Deploy-Servlet durch ein Passwort geschützt werden soll. Dieses Passwort muss dann im Klartext beim HTTP-POST-Request mit angegeben werden. |
22 |
22 |
|
|
23 |
+Zur Konfiguration des Passworts gibt es die eine Plugin-Eigenschaft //token//, diese hat das folgende Format |
|
24 |
+ |
|
25 |
+{{code language="none"}} |
|
26 |
+hash_method:hashed_value |
|
27 |
+{{/code}} |
|
28 |
+ |
|
29 |
+Folgende Hash-Methoden stehen zur Verfügung: |
|
30 |
+ |
|
31 |
+; plain |
|
32 |
+: Identitätsfunktion, das Passwort im Klartext angegeben. |
|
33 |
+; sha256 |
|
34 |
+: SHA-256-Algorithmus. |
|
35 |
+; sha384 |
|
36 |
+: SHA-384-Algorithmus. |
|
37 |
+; sha512 |
|
38 |
+: SHA-512-Algorithmus. |
|
39 |
+ |
|
40 |
+Um das Passwort im Klartext beispielsweise auf //admin// festzulegen, wird der folgende Wert für die Plugin-Eigenschaft //token// eingegeben: |
|
41 |
+ |
|
42 |
+{{code language="none"}} |
|
43 |
+plain:admin |
|
44 |
+{{/code}} |
|
45 |
+ |
|
46 |
+Um das Passwort mit SHA-256 beispielsweise auf //admin// festzulegen, wird der folgende Wert für die Plugin-Eigenschaft //token// eingegeben: |
|
47 |
+ |
|
48 |
+{{code language="none"}} |
|
49 |
+sha256:S+32GI3fWXwHHulUMtWmjpQ15EqMvgVYguuO9SKxfNw+ckAGQljP6tKlf1EITnU7 |
|
50 |
+{{/code}} |
|
51 |
+ |
|
52 |
+Der Hash ist gesalzen. Ein gültiger Hash für ein bestimmtes Passwort kann mit dem //create-token//-Servlet erzeugt werden, siehe unten. |
|
53 |
+ |
|
54 |
+ |
|
55 |
+== Deploy-Servlet == |
|
56 |
+ |
23 |
23 |
Im Folgenden wird der Aufbau des HTTP-Requests beschrieben, um ein Plugin zu installieren, zu aktualisieren oder zu löschen. |
24 |
24 |
|
25 |
25 |
Es muss immer ein HTTP-Post-Request verwendet werden und [[sich an folgende URL richten>>doc:Formcycle.PluginDevelopment.Types.IPluginServletAction]] (Namen des FORMCYCLE-Servers entsprechend anpassen): |
... |
... |
@@ -82,8
+82,8 @@ |
82 |
82 |
|
83 |
83 |
((( |
84 |
84 |
{{code language="bash"}} |
|
119 |
+# Installiert oder aktualisiert das Plugin mit dem Implementation-Title com.example:plugin |
85 |
85 |
curl -X POST \ |
86 |
|
- # These options are required |
87 |
87 |
-F deploy-action=save \ |
88 |
88 |
-F token=admin \ |
89 |
89 |
-F plugin-ident=manifest \ |
... |
... |
@@ -98,8
+98,8 @@ |
98 |
98 |
|
99 |
99 |
((( |
100 |
100 |
{{code language="bash"}} |
|
135 |
+# Löscht das Plugin mit dem Implementation-Title com.example:plugin |
101 |
101 |
curl -X POST \ |
102 |
|
- # These options are required |
103 |
103 |
-F deploy-action=delete \ |
104 |
104 |
-F token=admin \ |
105 |
105 |
-F plugin-ident=manifest \ |
... |
... |
@@ -109,12
+109,12 @@ |
109 |
109 |
))) |
110 |
110 |
|
111 |
111 |
; activate |
112 |
|
-: Aktiviert das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Beispiel: |
|
146 |
+: Aktiviert das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Ist das Plugin bereits aktiviert, wird nicht getan und ein Erfolg zurückgegeben. Beispiel: |
113 |
113 |
|
114 |
114 |
((( |
115 |
115 |
{{code language="bash"}} |
|
150 |
+# Aktiviert das Plugin mit dem Implementation-Title com.example:plugin |
116 |
116 |
curl -X POST \ |
117 |
|
- # These options are required |
118 |
118 |
-F deploy-action=activate \ |
119 |
119 |
-F token=admin \ |
120 |
120 |
-F plugin-ident=manifest \ |
... |
... |
@@ -124,12
+124,12 @@ |
124 |
124 |
))) |
125 |
125 |
|
126 |
126 |
; deactivate |
127 |
|
-: Deaktiviert das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Beispiel: |
|
161 |
+: Deaktiviert das angegebene Plugin. Es darf hierbei keine JAR-Datei übertragen werden. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Ist das Plugin bereits deaktiviert, wird nicht getan und ein Erfolg zurückgegeben. Beispiel: |
128 |
128 |
|
129 |
129 |
((( |
130 |
130 |
{{code language="bash"}} |
|
165 |
+# Deaktiviert oder aktualisiert das Plugin mit dem Implementation-Title com.example:plugin |
131 |
131 |
curl -X POST \ |
132 |
|
- # These options are required |
133 |
133 |
-F deploy-action=deactivate \ |
134 |
134 |
-F token=admin \ |
135 |
135 |
-F plugin-ident=manifest \ |
... |
... |
@@ -140,7
+140,6 @@ |
140 |
140 |
|
141 |
141 |
; update-properties |
142 |
142 |
: Aktualisiert die Eigenschaften des angegebenen Plugins. Es darf hierbei keine JAR-Datei übertragen werden. Entweder die Eigenschaft //clear-properties// oder //property// sollte gesetzt sein. Existiert das angegebene Plugin nicht, wird ein Fehler zurückgegeben. Beispiel: |
143 |
|
- |
144 |
144 |
((( |
145 |
145 |
{{code language="bash"}} |
146 |
146 |
# Löscht alle vorhandenen Plugin-Eigenschaften und setzt dann die Eigenschaft "foo" auf den Wert "bar" |
... |
... |
@@ -155,7
+155,7 @@ |
155 |
155 |
{{/code}} |
156 |
156 |
))) |
157 |
157 |
|
158 |
|
-== Response == |
|
191 |
+=== Response === |
159 |
159 |
|
160 |
160 |
Das Deploy-Plugin liefert einen Statuscode und ein JSON-Objekt mit den Details zurück. Der Status-Code ist 2xx, falls das Deploy-Plugin erfolgreich ausgeführt wurde. |
161 |
161 |
|
... |
... |
@@ -260,4
+260,85 @@ |
260 |
260 |
} |
261 |
261 |
{{/code}} |
262 |
262 |
|
|
296 |
+Beispiel für die Antwort beim Aktualisieren eines Plugins: |
|
297 |
+ |
|
298 |
+{{code language="json"}} |
|
299 |
+{ |
|
300 |
+ "success": true, |
|
301 |
+ "requestParameters": { |
|
302 |
+ "plugin-ident": ["manifest"], |
|
303 |
+ "name": ["deploy-plugin"], |
|
304 |
+ "client-id": ["1"], |
|
305 |
+ "deploy-action": ["save"], |
|
306 |
+ "plugin-identifier": ["Implementation-Title=com.example:plugin"], |
|
307 |
+ "token": ["admin"] |
|
308 |
+ }, |
|
309 |
+ "details": { |
|
310 |
+ "name": "my-plugin.jar", |
|
311 |
+ "active": true, |
|
312 |
+ "id": 203, |
|
313 |
+ "message": "Plugin saved successfully.", |
|
314 |
+ "uuid": "2fe3e1ba-cb32-434e-9f59-4422f8dabcad" |
|
315 |
+ }, |
|
316 |
+ "message": "Plugin saved successfully.", |
|
317 |
+ "statusCode": 200 |
|
318 |
+} |
|
319 |
+{{/code}} |
|
320 |
+ |
|
321 |
+Beispiel für die Antwort beim Löschen, falls das angegebene Plugin nicht gefunden wurde: |
|
322 |
+ |
|
323 |
+{{code language="json"}} |
|
324 |
+{ |
|
325 |
+ "success": false, |
|
326 |
+ "requestParameters": { |
|
327 |
+ "plugin-ident": ["manifest"], |
|
328 |
+ "name": ["deploy-plugin"], |
|
329 |
+ "client-id": ["1"], |
|
330 |
+ "deploy-action": ["delete"], |
|
331 |
+ "plugin-identifier": ["Implementation-Title=com.example:plugin"], |
|
332 |
+ "token": ["admin"] |
|
333 |
+ }, |
|
334 |
+ "details": { |
|
335 |
+ "exceptionType": "java.lang.IllegalArgumentException", |
|
336 |
+ "exceptionMessage": "Deploy action 'delete' requires an existing pluign, but none was found." |
|
337 |
+ }, |
|
338 |
+ "message": "class java.lang.IllegalArgumentException: Deploy action 'delete' requires an existing pluign, but none was found.", |
|
339 |
+ "statusCode": 404 |
|
340 |
+} |
|
341 |
+{{/code}} |
|
342 |
+ |
|
343 |
+ |
|
344 |
+== Create-Token-Servlet == |
|
345 |
+ |
|
346 |
+Mit diesem Servlet kann ein Hash für ein bestimmtes Klartextpasswort erzeugt werden, welcher dann in der Plugin-Eigenschaft //token// hinterlegt werden kann. Es muss hierbei ein HTTP-GET-Request verwendet werden (Pfad auf den FORMCYCLE-Servet und die Mandant-ID entsprechend ersetzen): |
|
347 |
+ |
|
348 |
+{{code language="none"}} |
|
349 |
+http://localhost:8080/formcycle/plugin?client-id=1&name=create-token&token=<PASSWORT>&method=<METHOD> |
|
350 |
+{{/code}} |
|
351 |
+ |
|
352 |
+; token |
|
353 |
+: Der Klartext des Passwort, zu dem ein Hash ermittelt werden soll. |
|
354 |
+; method |
|
355 |
+: Methode zum Berechnen des Hashes. Erlaubte Werte sind //plain//, //sha256//, //sha384// und //sha512//. Optional, Standardwert ist //sha256//. |
|
356 |
+ |
|
357 |
+Als Antwort wird ein JSON zurückgeliefert, welches das gleiche Format wie die Antwort des Deploy-Plugins hat. Beispiel für eine Antwort: |
|
358 |
+ |
|
359 |
+{{code language="json"}} |
|
360 |
+{ |
|
361 |
+ "success": true, |
|
362 |
+ "requestParameters": { |
|
363 |
+ "name": ["create-token"], |
|
364 |
+ "client-id": ["1"], |
|
365 |
+ "token": ["admin"] |
|
366 |
+ }, |
|
367 |
+ "details": { |
|
368 |
+ "method": "sha256", |
|
369 |
+ "token": "sha256:S+32GI3fWXwHHulUMtWmjpQ15EqMvgVYguuO9SKxfNw+ckAGQljP6tKlf1EITnU7" |
|
370 |
+ }, |
|
371 |
+ "message": "Hash token created successfully", |
|
372 |
+ "statusCode": 200 |
|
373 |
+} |
|
374 |
+{{/code}} |
|
375 |
+ |
263 |
263 |
== Beispiel für Maven == |
|
377 |
+ |