Skip to main content

Scan-Upload in Chunks

Die Start Scan API lädt große Codebasen über mehrere Requests hoch. BLAST-Scanning muss für Ihr Unternehmen aktiviert sein, und Sie laden ein einzelnes Quellarchiv hoch. Diese Anleitung beschreibt die Upload-Reihenfolge. Request-Felder und Statuscodes finden Sie auf den OpenAPI-Seiten zu POST /start-scan, PATCH /start-scan/{transfer_id}/ und HEAD /start-scan/{transfer_id}/.

Ablauf

  1. Transfer starten mit POST /start-scan. Senden Sie scan_type=blast als Formularfeld und einen files-Teil mit dem Archivnamen und einem leeren Body. Der Archivname muss eine dieser Endungen haben: .zip, .tar, .json, .fpr, .sarif oder .xml. Die Response enthält eine transfer_id.
  2. Aktuellen Offset lesen mit HEAD /start-scan/{transfer_id}/. Der Response-Header Upload-Offset ist das nächste zu sendende Byte. Ein unbekannter oder leerer Transfer liefert 0.
  3. Jeden Chunk hochladen mit PATCH /start-scan/{transfer_id}/. Senden Sie die nächsten Bytes als chunk_data und setzen Sie diese Request-Header:
    • Upload-Offset: aktueller Byte-Offset
    • Upload-Length: Gesamtgröße der Datei in Bytes
    • Upload-Name: Dateiname des Archivs
  4. Abschließen, wenn der letzte PATCH eine scan_id zurückgibt. Zwischenresponses enthalten Upload-Offset (nächstes Byte) und keine scan_id. Wenn der letzte Chunk das Archiv vervollständigt, enthält der JSON-Body scan_id und project_id. Diese abschließende Response setzt Upload-Offset nicht. Mit der scan_id rufen Sie Scan- und Issue-APIs auf. HEAD gibt keine scan_id zurück.
Sie können project_name, branch, repo_url, sha, files_to_scan, dirty, scan_configs und target_policies bei jedem PATCH-Request mitsenden. Lassen Sie partial_scan bei einem vollständigen Scan weg. Senden Sie partial_scan=true nur bei einem partiellen Scan.

Authentifizierung

Senden Sie Ihren API-Token mit jedem Request:

Scan-Metadaten

metadata ist ein optionaler JSON-Objekt-String, beispielsweise {"pipeline_url": "https://ci.example/run/123"}. Corgea validiert den Wert bei jedem Chunk-Request und hängt ihn nach Abschluss des Uploads an den Scan an. Senden Sie deshalb für jeden Chunk denselben Wert. Das Objekt darf höchstens 16.384 Byte groß sein.

Python-Beispiel

Dieses Skript startet einen BLAST-Upload oder setzt einen bestehenden Transfer mit --transfer_id fort. Es folgt Upload-Offset bei Zwischenchunks. Der letzte PATCH gibt scan_id zurück, nicht Upload-Offset.
Beispiel:
Um einen unterbrochenen Upload fortzusetzen, übergeben Sie die vorhandene Transfer-ID:
Für einen partiellen Scan ergänzen Sie --partial_scan und --files_to_scan "vuln.py,test.py". Um Scan-Metadaten mitzusenden, ergänzen Sie --metadata '{"pipeline_url":"https://ci.example/run/123"}'. Derselbe Wert wird mit jedem Chunk gesendet.