Virenscan in enaio® coLab einbinden
In enaio® coLab kann per Webhook ein Virenscanner eingebunden werden, der Dokumente, die Benutzer in coLab-Projekträume hochladen bzw. ersetzen wollen, prüft (siehe enaio® coLab). Dieser erweitert diese Funktionen durch HTTP-Aufrufe. Das Objket des HTTP-Aufrufs besteht in diesem Fall aus der in enaio® coLab hochgeladenen Dokumentdatei und der Webhook-ID.
Je nach Art der Implementierung sind zwei Arten von Aufrufen möglich: blockierend und nicht blockierend. Entwickler können die Implementierungsart entsprechend ihren Anforderungen wählen. Beispielsweise kann für kleine Dateien und schnelle Dienste eine blockierende Implementierung besser geeignet sein als eine nicht blockierende. Dies kann auch vom Typ der Antivirensoftware und der Geschwindigkeit des Servers abhängen, auf dem die Software installiert ist.
-
Beispiel für das Blockieren von Anrufen – mehrteilige Anfrage – Antwortstatus 200
POST http://<antivirus_service_IP:8067upload/{id} HTTP/1.1
accept: application/json
accept-encoding: gzip
connection: Keep-Alive
content-length: 235
content-type: multipart/form-data; charset=UTF-8; boundary=1847a97df6a
host: localhost:8067
user-agent: okhttp/4.3.1
--1847a97df6a
Content-Disposition: form-data; name="file"; filename="9067d1f2-8b46-40fe-886a-a06740dcfd6d"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
...
Dies ist der Dateiinhalt
...
--1847a97df6a--HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/json
Date: Tue, 15 Nov 2022 09:21:30 GMT
Keep-Alive: timeout=60
Transfer-Encoding: chunked
{"status":"OK","description":null}Mögliche Ergebnisse mit entsprechender Beschreibung:
* OK – zeigt an, dass die Datei sauber ist und im CoLab-Flow verarbeitet werden kann. Beschreibung Feld ist leer
* GEFUNDEN – Datei ist infiziert, zusätzliche Vireninformationen im Beschreibungsfeld
* FEHLER – Fehler bei der Dateiverarbeitung, zusätzliche Fehlerinformationen im Beschreibungsfeld -
Beispiel für nicht blockierende Aufrufe – mehrteilige Anfrage – Antwortstatus 202
HTTP/1.1 202 Accepted
Connection: keep-alive
Date: Tue, 15 Nov 2022 09:30:23 GMT
Keep-Alive: timeout=60
Transfer-Encoding: chunkedNach Annahme der Anfrage führt der Antivirendienst hinter dem Webhook-URI-Endpunkt die Dateiprüfung durch. Nach Abschluss des Jobs muss der Dienst das Ergebnis mit der entsprechenden ID an die Callback-URL senden.
POST http://<gateway-IP>/colab/epr/av/callback/{id} HTTP/1.1
accept: application/json
authorization: ******
connection: keep-alive
content-length: 34
content-type: application/json
host: localhost:8066
user-agent: Java/17.0.4.1
{"status":"OK|FOUND|ERROR","description":null}
Einrichten des Spring Boot-Antivirus-Dienstes mit Java
Diese Beispiele sind nicht für die Produktion gedacht, sondern dienen als Demonstration.
Um die Verarbeitung eingehender Anfragen zu implementieren, müssen wir einen Endpunkt in der Controller-Klasse konfigurieren.
-
Blockierende Implementierung (Antwortstatus 200)
@RestController
public class ExampleRestController
@PostMapping(value = "/upload/{id}", consumes = "multipart/form-data")
public ResponseEntity<WebHookResult> scan(@RequestPart("file") MultipartFile file, @PathVariable("id") String id) {
WebHookResult result = doVirusScan(file, id);
return ResponseEntity.ok(result);
}
@Data
public class WebHookResult {
private String status;
private String description;
}
} -
Nicht blockierende Implementierung (Antwortstatus 202)
@RestController
public class ExampleRestController {
@PostMapping(value = "/upload/{id}", consumes = "multipart/form-data")
public ResponseEntity<?> asyncScan(@RequestPart("file") MultipartFile file, @PathVariable("id") String id) {
new Thread(() -> {
WebHookResult result = doVirusScan(file, id);
OkHttpClient client = new OkHttpClient();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
String json = new ObjectMapper().writeValueAsString(result);
RequestBody result = RequestBody.create(json, JSON);
Request request = new Request.Builder()
.url("http://<gateway-IP>/colab/epr/av/callback/{id}")
.post(result)
.build();
Response response = client.newCall(request).execute();
}).start();
return ResponseEntity.accepted().build();
}
}
Antivirus-Webhook in coLab aktivieren
Der Webhook ist in enaio® coLab aktiviert, wenn colab-prod.yml die folgenden Konfigurationseigenschaften hat:
-
Erkennungsmodus
Funktioniert innerhalb des Service Managers.
web-hooks:
registration:
antivirus:
url: <service_name>
discoverable: true -
Nicht-Erkennungsmodus
Funktioniert außerhalb des Service Managers
web-hooks:
registration:
antivirus:
url: http://<antivirus_service_ip>:8067
discoverable: false
Um den Erkennungsmodus zu aktivieren (arbeitet innerhalb des OS Service Managers), setzen Sie die Eigenschaft discoverable auf true und geben Sie den Instanznamen an.