# mooooon-jy/sslviewerscript architecture

> Architecture diagram of the GitHub repository mooooon-jy/sslviewerscript, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mooooon-jy/sslviewerscript
- Repository: https://github.com/mooooon-jy/sslviewerscript

## Overview

SSL Certificate Watch reads SSL targets, optionally imports Windows-generated results, checks remaining certificates with OpenSSL, and presents a fixed result snapshot in a local web UI. The main runtime is concentrated in server.py; index.html and the PowerShell exporter provide the UI and Windows-side result generation. The target inventory and imported JSON are documented but absent from the supplied tree. The UI’s exact API calls are not shown, so that interaction is marked unverified.

Main entry points: [`server.py`](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py) (HTTP server), [`export-ssl-results.ps1`](https://github.com/mooooon-jy/sslviewerscript/blob/main/export-ssl-results.ps1) (Windows exporter), [`index.html`](https://github.com/mooooon-jy/sslviewerscript/blob/main/index.html) (Results UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inventory["Target inputs"]
  node_inventory_file["Target inventory"]
  node_windows_export["Windows exporter"]
  node_snapshot["Imported results"]
  node_target_loader["Target loader<br/>[server.py]"]
  node_snapshot_loader["Snapshot loader<br/>[server.py]"]
end

subgraph group_checks["Certificate checks"]
  node_auto_check["Startup checks<br/>[server.py]"]
  node_tls_check["TLS checker<br/>[server.py]"]
  node_openssl["OpenSSL"]
  node_certificate_parser["Date parser<br/>[server.py]"]
end

subgraph group_viewer["Local viewer"]
  node_server["HTTP server<br/>[server.py]"]
  node_web_ui["Results UI<br/>[index.html]"]
  node_runtime_results[("Runtime results<br/>[server.py]")]
end

node_operator(("Operator"))
node_tls_endpoint(("TLS endpoint"))
node_browser(("Browser"))

node_operator -->|"runs export"| node_windows_export
node_inventory_file -->|"supplies targets"| node_windows_export
node_windows_export -->|"writes results"| node_snapshot
node_snapshot -->|"loads results"| node_snapshot_loader
node_operator -->|"starts server"| node_server
node_server -->|"loads targets"| node_target_loader
node_inventory_file -->|"defines targets"| node_target_loader
node_server -->|"loads snapshot"| node_snapshot_loader
node_server -->|"runs at startup"| node_auto_check
node_auto_check -->|"gets targets"| node_target_loader
node_auto_check -->|"merges results"| node_snapshot_loader
node_auto_check -->|"checks pending"| node_tls_check
node_tls_check -->|"invokes"| node_openssl
node_openssl -->|"connects to"| node_tls_endpoint
node_tls_check -->|"parses dates"| node_certificate_parser
node_auto_check -->|"stores results"| node_runtime_results
node_browser -->|"requests page"| node_server
node_server -->|"serves page"| node_web_ui
node_web_ui -.->|"requests results"| node_server
node_server -->|"returns snapshot"| node_runtime_results

click node_windows_export "https://github.com/mooooon-jy/sslviewerscript/blob/main/export-ssl-results.ps1"
click node_server "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"
click node_target_loader "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"
click node_snapshot_loader "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"
click node_auto_check "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"
click node_tls_check "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"
click node_certificate_parser "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"
click node_web_ui "https://github.com/mooooon-jy/sslviewerscript/blob/main/index.html"
click node_runtime_results "https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_inventory_file,node_windows_export,node_snapshot,node_target_loader,node_snapshot_loader,node_browser toneBlue
class node_auto_check,node_tls_check,node_openssl,node_certificate_parser toneAmber
class node_server,node_web_ui,node_runtime_results toneMint
class node_operator,node_tls_endpoint toneIndigo
```

## Components

### Target inputs

- **Target inventory**
- [Windows exporter](https://github.com/mooooon-jy/sslviewerscript/blob/main/export-ssl-results.ps1): `export-ssl-results.ps1`
- **Imported results**
- [Target loader](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`
- [Snapshot loader](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`

### Certificate checks

- [Startup checks](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`
- [TLS checker](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`
- **OpenSSL**
- [Date parser](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`

### Local viewer

- [HTTP server](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`
- [Results UI](https://github.com/mooooon-jy/sslviewerscript/blob/main/index.html): `index.html`
- [Runtime results](https://github.com/mooooon-jy/sslviewerscript/blob/main/server.py): `server.py`

### Other components

- **Operator**
- **TLS endpoint**
- **Browser**

## Connections

- Operator → Windows exporter: runs export (evidence: `README.md`)
- Target inventory → Windows exporter: supplies targets (evidence: `README.md`)
- Windows exporter → Imported results: writes results (evidence: `README.md`)
- Imported results → Snapshot loader: loads results (evidence: `README.md`)
- Operator → HTTP server: starts server (evidence: `README.md`)
- HTTP server → Target loader: loads targets (evidence: `server.py`)
- Target inventory → Target loader: defines targets (evidence: `README.md`)
- HTTP server → Snapshot loader: loads snapshot (evidence: `server.py`)
- HTTP server → Startup checks: runs at startup (evidence: `server.py`)
- Startup checks → Target loader: gets targets (evidence: `server.py`)
- Startup checks → Snapshot loader: merges results (evidence: `server.py`)
- Startup checks → TLS checker: checks pending (evidence: `server.py`)
- TLS checker → OpenSSL: invokes (evidence: `server.py`)
- OpenSSL → TLS endpoint: connects to (evidence: `README.md`)
- TLS checker → Date parser: parses dates (evidence: `server.py`)
- Startup checks → Runtime results: stores results (evidence: `server.py`)
- Browser → HTTP server: requests page (evidence: `README.md`)
- HTTP server → Results UI: serves page (evidence: `server.py`)
- Results UI → HTTP server: requests results
- HTTP server → Runtime results: returns snapshot (evidence: `server.py`)
