# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2026-04.1] - 2026-04-28

### Added
- **Domain input replaces email input** — no more data-collection appearance, direct domain entry
- **Interactive subdomain selection** — discovery pauses to show a list of probed subdomains, visitor picks one to scan
- **IP fast-path** — when an IP address is entered, subdomain discovery is skipped entirely and GoTestWAF scans directly
- **DNS probe with wildcard detection** — detects wildcard DNS (`*.domain.com`) and relies on TLS validation to filter real services from catch-all noise
- **TLS certificate validation** as the definitive subdomain filter — Go's HTTPS client validates cert + hostname, distinguishing real services from wildcard defaults
- **Wordlist-based subdomain probing** — loads 5000 common names from SecLists (`/opt/aasd/subdomains.txt`), replaces hardcoded 40-name list
- **Live probe progress** — frontend shows "Checking 142/5000 subdomains…" with animated pulse during discovery
- **Report naming** — `visitor_{token}.html` for user-facing reports, `consultant_{token}.html` for GoTestWAF output
- **Admin dashboard enhanced** — consultant report link only shown when file exists on disk; shows "No WAF report (target unreachable)" when GoTestWAF didn't produce output
- **Race condition guard** — `discoverSubdomains` now uses mutex-guarded status check to prevent overwriting `scanning` status back to `awaiting_selection`

### Changed
- **Pipeline restructured** — discovery phase now pauses (status `awaiting_selection`) for user to pick a target, then scan phase runs
- **Removed domain-scan binary** (43MB) — was ineffective without API keys, always timed out at 15s; replaced by direct HTTPS/TLS wordlist probe
- **ProbeSubdomains** now accepts `projectRoot` for wordlist path and `onProgress` callback for live progress
- **GoTestWAF report naming** — changed from `report_{token}_{domain}.html` to `consultant_{token}.html`
- **QR code URL** corrected to point to `visitor_{token}.html` instead of `report_{token}.html`
- **Config** — `base_url` set to `https://aasd.sechpoint.app`, admin password set to `Git3x2o26`
- **Directory structure reorganized** — `AttackSurface/` flattened to `aasd/src/`; removed stale `dist/` and `reports/` from source
- **Frontend** — step sequencer simplified to 3 steps (Domain Discovery, WAF Scan, AI Report); added subdomain selection panel
- **Frontend status** — adds `animate-pulse` CSS class to status dot during discovery
- **Admin dashboard** — back-end now checks `HasConsultantReport` by testing file existence, template conditionally shows link or "no report" text

### Fixed
- **Crash on IP submission** — `GenerateFallbackHTML` panicked on empty subdomains slice; now sets `Subdomains` to `[IP]` for IP fast-path
- **Race condition** — `discoverSubdomains` goroutine could overwrite `scanning` status set by `SelectAndScan`; now guarded by mutex check
- **Consultant report 404** — admin dashboard no longer shows broken link when GoTestWAF didn't produce output
- **GoTestWAF report naming mismatch** — GoTestWAF output file name now matches QR code and dashboard links
- **Early selection rejected with proper error** — `SelectAndScan` returns 400 Bad Request with explanation instead of 500 Internal Error

### Removed
- **Email capture** — entire email validation, extraction, and storage removed; domain is now the primary input
- **domain-scan binary** — removed from `/opt/aasd/` (43MB) and from build pipeline
- **`discover.go`** — entire file removed (dead code after domain-scan removal)
- **`FindMostCriticalSubdomain`** — heuristic scoring function removed (all subdomains now presented to user)
- **`CriticalDomain`** field — removed from `ScanResult` struct
- **Old report naming** — `{token}.html` → `visitor_{token}.html`, `report_{token}.html` → `consultant_{token}.html`
- **AttackSurface/** directory — reorganized into `aasd/src/`

## [0.3.0] - 2026-04-22

### Added
- Comprehensive email validation with regex pattern
- Domain security validation (path traversal prevention, length limits)
- Graceful shutdown with OS signal handling (SIGINT, SIGTERM)
- Context propagation for GoTestWAF scan cancellation
- Reports static file serving endpoint (`/reports/*`)
- Go 1.25.0 compiler support
- Scan status polling endpoint (`/scan-status/:domain`) for real-time updates

### Changed
- GoTestWAF command flags updated for compatibility:
  - Removed invalid `--testCase "all"` flag
  - Added `--reportFormat html` flag for HTML report generation
  - Fixed report file naming consistency
- Improved error handling throughout application
- Enhanced code quality with Go idiomatic patterns
- Updated main.go with proper context management

### Fixed
- **Critical**: GoTestWAF integration bugs causing scan failures
- **Critical**: Missing `--reportFormat` flag preventing HTML report generation
- **Critical**: Report file mismatch between stored results and generated files
- **Security**: Weak email validation allowing malformed input
- **Security**: Path traversal vulnerability in domain handling
- **Code Quality**: Monolithic function structure violating 50-line limit
- **Concurrency**: Potential race conditions in map access
- **Resource Leaks**: Goroutines not properly cancelled on shutdown
- **Missing Feature**: Reports not served via web endpoint

### Removed
- Invalid GoTestWAF flag `--testCase "all"` (not supported in current version)

## [0.2.0] - 2026-04-21

### Added
- Gin web framework dependency installed
- POST `/start` endpoint with email domain extraction and validation
- Static file serving (`/static`, `/`, `/simulation`)
- In‑memory storage for scan results with thread‑safe mutex
- Basic HTML frontend: capture page (`index.html`) with QR placeholder
- Simulation page (`simulation.html`) with JavaScript step sequencer
- Consultant dashboard (`/admin‑dashboard`) with results table
- GoTestWAF binary integration (background execution with flags)
- Reports directory auto‑creation
- Server listens on `0.0.0.0:8080` for booth Wi‑Fi access

### Changed
- Project structure refined: `AttackSurface/{bin,src,docs}`
- Git repository initialized with `main` branch
- Go 1.24.4 installed via official binary

## [0.1.0] - 2026-04-21

### Added
- Project initialization based on PROJECT_PLAN.md
- Basic directory structure for Go web application
- GoTestWAF binary integration (planned)
