Pipeline automatisé de veille cybersécurité : collecte quotidienne d'articles et CVE, enrichissement IA, publication sur un tableau de bord statique GitHub Pages.
┌──────────────┐
│ RSS (100+) │
│ Google CSE │──▶ Collecte
│ NVD / NIST │
│ CISA KEV │
│ EPSS │
└──────┬───────┘
│
┌────────────▼────────────┐
│ Déduplication (hash + │
│ sémantique IA) │
├─────────────────────────┤
│ Filtre marketing │
├─────────────────────────┤
│ Curation IA (GPT-4o- │
│ mini : résumé, score, │
│ catégorie) │
├─────────────────────────┤
│ Enrichissement CVE │
│ (CVSS, EPSS, KEV, │
│ produits impactés) │
└────────────┬────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
Site statique Google Sheets Email quotidien
(GitHub Pages) (historique) (optionnel)
git clone https://github.com/<votre-user>/Veille_Auto.git
cd Veille_Auto
cp .env.example .env # remplir les clés API (voir SETUP.md)
npm install
TEST_RUN=true npm run run # test rapide (~2 min)Le site est généré dans public/. Ouvrir public/index.html pour voir le résultat.
- Collecte multi-sources : flux RSS (
config/sources.yaml), Google Custom Search, API NVD/NIST, CISA KEV, EPSS - Déduplication : par hash d'URL + déduplication sémantique IA
- Filtre marketing : suppression automatique des webinars, démos, recrutements
- Curation IA : résumés en français, catégorisation, scoring 1-10 via GPT-4o-mini
- Enrichissement CVE : produits impactés, scores CVSS/EPSS, statut KEV, priorisation
- Tableau de bord : site statique avec calendrier, recherche, filtres, détails articles/CVE
- Google Sheets : historique consultable (articles, CVE, dédup, santé RSS)
- Email quotidien : résumé avec CVE critiques (optionnel)
- Santé RSS : retrait automatique des flux en échec après 5 jours consécutifs
| Document | Description |
|---|---|
| SETUP.md | Guide d'installation complet : APIs, GitHub Secrets, GitHub Pages, dépannage |
| CONTRIBUTING.md | Comment contribuer : conventions, tests, workflow |
| SECURITY_NOTES.md | Architecture de sécurité et mesures de protection |
| ROADMAP.md | Pistes d'amélioration pour la communauté |
| CHANGELOG.md | Historique des versions |
| .env.example | Toutes les variables d'environnement documentées |
| AGENTS.md | Instructions pour les agents IA travaillant sur le projet |
| Variable | Description |
|---|---|
GOOGLE_CSE_CX |
Identifiant moteur Custom Search |
GOOGLE_CSE_ID |
ID du moteur CSE |
GOOGLE_CSE_KEY |
Clé API Google |
GOOGLE_SHEETS_ID |
ID du spreadsheet |
GOOGLE_SERVICE_ACCOUNT_B64 |
Service account JSON encodé base64 |
OPENAI_API_KEY |
Clé API OpenAI |
| Variable | Défaut | Description |
|---|---|---|
NIST_API |
(vide) | Clé API NVD pour lever le rate-limit |
TEST_RUN |
false |
Mode test rapide (6h, 3 feeds, 10 articles) |
MAX_WEB_ENRICH |
30 |
Max CVE enrichies via web+LLM par run |
SEND_EMAIL |
auto |
Politique d'envoi email (auto/true/false) |
Voir .env.example pour la liste complète et SETUP.md pour les instructions pas-à-pas.
| Mode | Activation | Comportement |
|---|---|---|
| Production | (défaut) | Fenêtre 24h, collecte complète, enrichissement total |
| Test rapide | TEST_RUN=true |
Fenêtre 6h, 3 flux RSS, 2 requêtes CSE, 10 articles max |
| Archive | ARCHIVE_REPORT=true |
Recharge un rapport existant, pas de collecte |
src/
main.mjs # Orchestrateur principal
config.mjs # Parsing environnement et configuration
collectors/ # Collecte : RSS, Google CSE, NVD, CISA KEV, EPSS
pipeline/ # Traitement : dedup, filtre, curation, enrichissement
cve/ # Logique CVE : résolution produits, advisory, maturity
outputs/ # Sorties : Sheets, JSON, site statique, index, RSS health
notifications/ # Email quotidien
scoring/ # Priorisation CVE
utils/ # HTTP, validation, logging, git, hash, texte
config/
sources.yaml # Flux RSS (100+)
google_queries.json # Requêtes Google CSE
filter_keywords.json # Mots-clés marketing à filtrer
public/ # Site statique (UI)
test/ # Tests unitaires et d'intégration
npm run run # Run complet du pipeline
npm test # Tests unitaires
npm run test:regressions # Tests de régression
npm run check # Vérifications YAML + CVE + smoke
npm run lint # Vérification syntaxe
npm run check:yaml # Validation sources.yaml
npm run check:cve-products # Santé des labels CVE
npm run check:enrichment # Couverture enrichissementLe workflow .github/workflows/daily.yml s'exécute :
- Automatiquement : 05h05 et 17h05 heure de Paris (cron UTC 04:05 / 16:05)
- Manuellement : via
workflow_dispatchavec options (mode, channel, force, email)
Étapes : tests → collecte → traitement → publication GitHub Pages → upload artefacts.
Voir SETUP.md pour la configuration des GitHub Secrets.
- Les secrets sont exclusivement dans
.env(local) ou GitHub Secrets (CI) - Le helper HTTP bloque les protocoles non-HTTP et les adresses privées/réservées (SSRF)
- Le helper Git valide les refs et les noms de repo avant push
- Les rapports sont nettoyés (échappement HTML) avant affichage
- Le service account Google est limité à Sheets (pas d'accès Drive complet)
- Le
.gitignoreprotège.env, clés, certificats et données locales
Voir SECURITY_NOTES.md pour les détails.
Ce projet est orienté veille cybersécurité française par défaut. Les flux RSS, les requêtes Google et les prompts IA sont configurés pour le contexte français (ANSSI, CNIL, médias FR, catégorie "france"). Pour l'adapter à votre pays, consultez la section dédiée dans CONTRIBUTING.md et SETUP.md.
This project is configured for French cybersecurity monitoring by default. RSS feeds, Google queries, and AI prompts are tuned for the French context. To adapt it for your country, see CONTRIBUTING.md and SETUP.md.
Voir CONTRIBUTING.md pour les conventions et le workflow de contribution.
Automated cybersecurity watch pipeline: daily collection of articles and CVEs, AI enrichment, publication to a static GitHub Pages dashboard.
┌──────────────┐
│ RSS (100+) │
│ Google CSE │──▶ Collection
│ NVD / NIST │
│ CISA KEV │
│ EPSS │
└──────┬───────┘
│
┌────────────▼────────────┐
│ Deduplication (hash + │
│ AI semantic) │
├─────────────────────────┤
│ Marketing filter │
├─────────────────────────┤
│ AI curation (GPT-4o- │
│ mini: summary, score, │
│ category) │
├─────────────────────────┤
│ CVE enrichment │
│ (CVSS, EPSS, KEV, │
│ affected products) │
└────────────┬────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
Static site Google Sheets Daily email
(GitHub Pages) (history) (optional)
git clone https://github.com/<your-user>/Veille_Auto.git
cd Veille_Auto
cp .env.example .env # fill in API keys (see SETUP.md)
npm install
TEST_RUN=true npm run run # quick test run (~2 min)The site is generated in public/. Open public/index.html to view the result.
- Multi-source collection: RSS feeds (
config/sources.yaml), Google Custom Search, NVD/NIST API, CISA KEV, EPSS - Deduplication: URL hash + AI-powered semantic dedup
- Marketing filter: automatic removal of webinars, demos, recruiting
- AI curation: French summaries, categorization, 1-10 scoring via GPT-4o-mini
- CVE enrichment: affected products, CVSS/EPSS scores, KEV status, prioritization
- Dashboard: static site with calendar, search, filters, article/CVE details
- Google Sheets: queryable history (articles, CVEs, dedup, RSS health)
- Daily email: summary with critical CVEs (optional)
- RSS health: automatic removal of failing feeds after 5 consecutive days
| Document | Description |
|---|---|
| SETUP.md | Full installation guide: APIs, GitHub Secrets, GitHub Pages, troubleshooting |
| CONTRIBUTING.md | How to contribute: conventions, tests, workflow |
| SECURITY_NOTES.md | Security architecture and protection measures |
| ROADMAP.md | Improvement ideas for the community |
| CHANGELOG.md | Version history |
| .env.example | All environment variables documented |
| AGENTS.md | Instructions for AI agents working on the project |
| Variable | Description |
|---|---|
GOOGLE_CSE_CX |
Custom Search engine ID |
GOOGLE_CSE_ID |
CSE engine ID |
GOOGLE_CSE_KEY |
Google API key |
GOOGLE_SHEETS_ID |
Spreadsheet ID |
GOOGLE_SERVICE_ACCOUNT_B64 |
Base64-encoded service account JSON |
OPENAI_API_KEY |
OpenAI API key |
| Variable | Default | Description |
|---|---|---|
NIST_API |
(empty) | NVD API key to raise rate-limit |
TEST_RUN |
false |
Quick test mode (6h window, 3 feeds, 10 articles) |
MAX_WEB_ENRICH |
30 |
Max CVEs enriched via web+LLM per run |
SEND_EMAIL |
auto |
Email sending policy (auto/true/false) |
See .env.example for the complete list and SETUP.md for step-by-step instructions.
| Mode | Activation | Behavior |
|---|---|---|
| Production | (default) | 24h window, full collection, full enrichment |
| Quick test | TEST_RUN=true |
6h window, 3 RSS feeds, 2 CSE queries, 10 articles max |
| Archive | ARCHIVE_REPORT=true |
Reloads an existing report, no collection |
src/
main.mjs # Main orchestrator
config.mjs # Environment parsing and configuration
collectors/ # Collection: RSS, Google CSE, NVD, CISA KEV, EPSS
pipeline/ # Processing: dedup, filter, curation, enrichment
cve/ # CVE logic: product resolution, advisory, maturity
outputs/ # Outputs: Sheets, JSON, static site, indexes, RSS health
notifications/ # Daily email
scoring/ # CVE prioritization
utils/ # HTTP, validation, logging, git, hash, text
config/
sources.yaml # RSS feeds (100+)
google_queries.json # Google CSE queries
filter_keywords.json # Marketing keywords to filter
public/ # Static site (UI)
test/ # Unit and integration tests
npm run run # Full pipeline run
npm test # Unit tests
npm run test:regressions # Regression tests
npm run check # YAML + CVE + smoke checks
npm run lint # Syntax check
npm run check:yaml # sources.yaml validation
npm run check:cve-products # CVE labels health
npm run check:enrichment # Enrichment coverageThe .github/workflows/daily.yml workflow runs:
- Automatically: 05:05 and 17:05 Paris time (cron UTC 04:05 / 16:05)
- Manually: via
workflow_dispatchwith options (mode, channel, force, email)
Steps: tests → collection → processing → GitHub Pages deployment → artifact upload.
See SETUP.md for GitHub Secrets configuration.
- Secrets are exclusively in
.env(local) or GitHub Secrets (CI) - The HTTP helper blocks non-HTTP protocols and private/reserved addresses (SSRF)
- The Git helper validates refs and repo names before push
- Reports are sanitized (HTML escaping) before display
- The Google service account is restricted to Sheets (no full Drive access)
.gitignoreprotects.env, keys, certificates, and local data
See SECURITY_NOTES.md for details.
See CONTRIBUTING.md for conventions and contribution workflow.