Skip to main content

Architecture and Data Flow

This page exists so a security reviewer can see the whole system at once. The interesting part is not what the diagram contains - it is what it does not.

The whole system in one diagram​

The scanner ships as a single container. The Angular UI is built into the application JAR and served by the same Spring Boot process that serves the API, so there is no separate web server to deploy or secure.

What each arrow is​

ArrowProtocolWhy it exists
Browser to reverse proxyHTTPSYour proxy terminates TLS. The container itself serves plain HTTP - see Production Deployment.
Reverse proxy to applicationHTTP, port 8080The only port the container exposes.
Browser to identity providerOIDC authorization code + PKCEUsers authenticate directly against your provider. See Identity Provider.
Application to PostgreSQLJDBCThe only place the scanner persists anything.
Application to JiraJira REST API, read-onlyThe scan itself. No writes of any kind. See Security and Data Handling.
Application to identity providerOIDC discovery and JWKSThe backend validates JWTs as an OAuth2 resource server. It fetches the provider's signing keys; it never sends user content.
Application to SMTPSMTPOnly when reporting is configured. Report e-mails carry counts and links, never matched values.

There are no other outbound connections​

That absence is the point of the diagram:

  • No phone-home. Licensing is offline. Signature validation happens locally against a public key compiled into the application.
  • No cloud AI and no external analysis. Pattern discovery runs locally.
  • No telemetry and no usage analytics.
  • No connection to arcsoft. No Jira content, no findings, and no metadata reach the vendor at any point.

Every endpoint in the diagram is one you configure. The scanner has no hard-coded external host. If you point it at a cloud identity provider or a hosted SMTP relay, that is your configuration decision, not something the product does on its own - and if you point it at nothing else, it runs in a network with no route to the internet at all.

Where each kind of data lives​

DataWhere it livesHow it is protectedHow long it is kept
Raw matched value (the secret itself)NowhereNever written to the database, a log, an export, or the UINever stored
Matched text and its surrounding contextNowhereNo excerpt of any kind is stored; a finding holds only a keyed fingerprint and a source locatorNever stored
Finding fingerprintPostgreSQLHMAC-SHA256 keyed with FINDING_FINGERPRINT_HMAC_SECRET, so a stolen database offers no dictionary attackRetention window, ten years by default
Source locator (project, issue key, field, offsets)PostgreSQLOrdinary application data; points into Jira rather than copying from itRetention window, ten years by default
Extracted attachment textProcess memory onlyHeld only while that one attachment is scanned, then discardedNever persisted
Image bytes during OCRPrivate temporary directoryOwner-only permissions; read by a separate, resource-limited OCR process without secrets; deleted after each imageNever stored
Manual reviewsPostgreSQLAttachment file name, issue key, reason and reviewer decision; never image bytes or OCR textRetention window, ten years by default
Jira service account credentialPostgreSQLAES-256-GCM with JIRA_CREDENTIAL_ENCRYPTION_KEY; never returned by the API or shown in the UI after savingUntil you replace it - not subject to retention
SMTP passwordPostgreSQLSame encryption, same keyUntil you replace it - not subject to retention
OIDC credentialsNowhereThe backend only validates JWTs; it stores no user credentialNever stored
Audit eventsPostgreSQLSanitized metadata, never raw values; not editable through the UINot purged by default

Details behind each row are in Security and Data Handling, Attachment Scanning, and Data Retention.

What the deployment does not do for you​

The scanner is self-hosted, which means several controls a reviewer will ask about are yours to operate, not the product's:

  • TLS termination happens at your reverse proxy. The container serves plain HTTP on port 8080 and terminates no TLS itself.
  • Encryption at rest for the database is a property of your PostgreSQL deployment. The scanner encrypts the stored Jira and SMTP credentials at the application layer regardless, but the rest of the schema is protected only by whatever your database and storage provide.
  • Backups and restore are yours. The scanner has no backup function and no restore path of its own.
  • Patching means pulling a new container image; the scanner does not update itself and has no auto-update channel.
  • Secret management for JIRA_CREDENTIAL_ENCRYPTION_KEY and FINDING_FINGERPRINT_HMAC_SECRET is yours. Both are permanent for the life of the installation - see Production Deployment.

These are stated plainly because a self-hosted product that leaves them unmentioned invites a reviewer to assume the vendor handles them.