Add Long-Running Scan Infrastructure for Async External Scanners#1565
Merged
netomi merged 3 commits intoeclipse:security-improvementsfrom Jan 27, 2026
Merged
Conversation
netomi
approved these changes
Jan 27, 2026
netomi
pushed a commit
that referenced
this pull request
Jan 29, 2026
* fix broken extension icons on scan cards * Fix line endings * Add long running scans. Refactored publish checks --------- Co-authored-by: Alejandro Rivera <alejandro.rivera1996@gmail.com>
netomi
pushed a commit
that referenced
this pull request
Feb 5, 2026
* fix broken extension icons on scan cards * Fix line endings * Add long running scans. Refactored publish checks --------- Co-authored-by: Alejandro Rivera <alejandro.rivera1996@gmail.com>
janbro
added a commit
to yeeth-security/openvsx
that referenced
this pull request
Feb 11, 2026
…ipse#1565) * fix broken extension icons on scan cards * Fix line endings * Add long running scans. Refactored publish checks --------- Co-authored-by: Alejandro Rivera <alejandro.rivera1996@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add Long-Running Scan Infrastructure for Async External Scanners
#1396
This PR extends the scan administration capability with infrastructure for asynchronous, long-running external scanners, enabling parallel scanning without blocking the publish API.
Architecture Overview
Backend / Scanning Infrastructure
Scanner Framework
Scanner/RemoteScanner: Abstraction for HTTP-based external scanners with configurable request/response templates.ScannerRegistry: Holds all registered scanner instances at runtime.RemoteScannerRegistrar: Registers scanners from YAML configuration at startup.RemoteScannerProperties: Configuration binding for scanner definitions.HTTP Infrastructure
HttpTemplateEngine: Builds HTTP requests from templates with variable substitution.HttpResponseExtractor: Extracts job IDs, status, and threats from JSON responses via JSONPath.HttpAuthHandler: Supports API key, Bearer, Basic, and OAuth2 client credentials authentication.HttpClientExecutor: Configurable Apache HttpClient with per-scanner connection pools.Job Execution (JobRunr)
ScannerInvocationHandler: Executes scanner invocations, handles sync/async responses.ScannerPollHandler: Polls async scanners with configurable backoff until completion.ScannerInvocationRequest/ScannerPollRequest: JobRunr job request DTOs.Completion & Recovery
ExtensionScanCompletionService: Monitors job completion, activates or quarantines extensions based on threat analysis.ExtensionScanJobRecoveryService: Recovers stuck scans from server crashes, network failures, or race conditions.ScannerFileService: Manages temporary file downloads with automatic cleanup.Publish Checks (Synchronous)
PublishCheck/PublishCheckRunner: Interface and orchestrator for pre-scan validation.SecretCheckService: Detects hardcoded secrets using Aho-Corasick + regex. (Renamed secret scanning -> secret detection to distinguish publish checks from long running scans)BlocklistCheckService: Checks file hashes against admin-managed blocklist.SimilarityCheckService: Detects name squatting via Levenshtein distance.Domain Model
New Entities
ScannerJob: Tracks individual scanner job state (PENDING → PROCESSING → COMPLETE/FAILED).ScanCheckResult: Records results from synchronous publish checks.Entity Updates
ExtensionScan: AddedstartedAt,completedAttimestamps for lifecycle tracking.ExtensionThreat: AddedjobIdforeign key,enforcedflag for threat classification.Database Migration
New schema for scanner job tracking:
scanner_job: Job state, scanner type, external job ID, file hashes, retry count.scan_check_result: Results from synchronous validation checks.Migration:
V1_60__Scanning_Infrastructure.sqlConfiguration
Scanners are defined declaratively in
application.yml. Supports:Note
Specific scanner definitions will be provided through agreed channels and are not included in this PR.
Web UI Updates
Review Status Display
Scan Card Updates
Key Features
Scope Discipline
server/src/main/java/org/eclipse/openvsx/scanning/**.PublishExtensionVersionHandler).webui/src/**.