# Changelog All notable changes to GDPR Scanner are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Version numbers follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- ## [1.6.25] β€” 2026-04-25 ### Added - **SFTP as a 4th file connector** β€” SFTP servers can now be added as file sources alongside local folders, SMB shares, and cloud sources. A new `SFTPScanner` class in `sftp_connector.py` implements the same `iter_files()` interface as `FileScanner`, so `run_file_scan()`, SSE broadcasting, DB persistence, card building, scheduled scans, and exports work without changes. Supports password auth and SSH private key auth (RSA, Ed25519, ECDSA, DSS); passphrases stored in the OS keychain. Key files uploaded via `POST /api/file_sources/upload_key` and stored in `~/.gdprscanner/sftp_keys/` with `chmod 600`. SFTP sources appear with a πŸ”’ icon in the sources panel. Requires `paramiko>=3.4` (optional β€” scanner falls back gracefully if not installed). New source-type selector (Local / Network (SMB) / SFTP) replaces the SMB path-prefix auto-detection in the add-source form. - **`POST /api/file_sources/upload_key`** β€” new endpoint that validates and stores an SSH private key file, returning a `key_path` for use in the source definition. - **SFTP entry in export SOURCE_MAP** β€” Excel and Article 30 exports render SFTP sources as "πŸ”’ SFTP" with a purple tint (`EDE9F7`), consistent with the existing per-source tab and summary table logic. ### Fixed - **File source form placeholders untranslated** β€” all nine placeholder texts in the Add source and Edit source forms (source name, path, SMB host/user, SFTP host/user/path, passphrase) were hardcoded English strings. Nine new `data-i18n-placeholder` keys added to `en.json`, `da.json`, and `de.json`; all 12 affected `` elements now carry `data-i18n-placeholder` attributes. - **"Name" and "Auth" labels untranslated in SFTP form** β€” the source-name label and the Auth toggle label in the add-source panel had no `data-i18n` attributes. Added keys `m365_fsrc_name` (DA: "Navn") and `m365_fsrc_sftp_auth` (same across languages). The name label used an inner `` to preserve the required-field `*` indicator, which would have been clobbered by a `data-i18n` on the outer `