# Automatisation de la veille RSS

## Objectif
Mettre à jour automatiquement la page de veille du portfolio avec les dernières actualités liées aux fuites de données personnelles.

## Script utilisé
- Script : `scripts/fetch_veille_rss.py`
- Sortie générée : `data/veille-breaches.json`
- Historique seedé : `data/veille-breaches-seed.json`
- Refresh HTTP optionnel : `scripts/veille_refresh_server.py`

## Historique consolidé
Le RSS seul ne garantit pas un historique long, car chaque source n'expose qu'une fenêtre glissante d'articles récents.

Pour présenter une veille cohérente sur plusieurs semaines :
- j'ai consolidé un historique initial dans `data/veille-breaches-seed.json` ;
- cet historique fixe la date de départ visible dans le portfolio ;
- ensuite, les nouveaux articles sont ajoutés automatiquement via les flux RSS.

Formulation défendable à l'oral :
- l'historique a été consolidé rétrospectivement à partir de sources fiables ;
- la collecte est désormais automatisée et se met à jour côté serveur.

## Exécution manuelle
```bash
python3 scripts/fetch_veille_rss.py
```

## Exemple Linux (cron toutes les 6 heures)
```bash
0 */6 * * * cd /var/www/portfolio && /usr/bin/python3 scripts/fetch_veille_rss.py >/dev/null 2>&1
```

## Mise à jour à la visite (recommandé pour ton hébergement maison)
La page `veille.html` peut appeler un endpoint local `/api/veille-refresh`.

Le principe:
- un visiteur ouvre `veille.html`;
- le front appelle `/api/veille-refresh`;
- le serveur Python vérifie l'âge du fichier JSON;
- si le fichier est trop ancien, il relance la collecte;
- sinon il renvoie simplement `fresh`.

Le portfolio charge aussi un ping léger depuis les autres pages :
- si un visiteur ouvre le site sans aller dans `veille.html`, un check serveur discret peut quand même être lancé ;
- la page `veille.html` reste la seule à recharger visuellement les cartes et les compteurs.

Le serveur Python fourni écoute localement sur `127.0.0.1:8787`.
Si ton reverse proxy est sur une autre machine ou un autre conteneur, configure le service avec :
- `VEILLE_REFRESH_HOST=0.0.0.0`
- `VEILLE_REFRESH_PORT=8787`

### Lancer le microservice
```bash
cd /var/www/portfolio
python3 scripts/veille_refresh_server.py
```

Tant que cette commande tourne, c'est normal que le terminal reste bloqué :
- le script agit comme un petit serveur HTTP local ;
- il écoute sur `127.0.0.1:8787` ;
- on l'arrête avec `Ctrl + C` en phase de test ;
- en production, on le lance via `systemd`.

### Exemple systemd
```ini
[Unit]
Description=Veille RSS refresh service
After=network.target

[Service]
Type=simple
WorkingDirectory=/var/www/portfolio
Environment=VEILLE_REFRESH_HOST=0.0.0.0
Environment=VEILLE_REFRESH_PORT=8787
ExecStart=/usr/bin/python3 /var/www/portfolio/scripts/veille_refresh_server.py
Restart=always
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target
```

### Exemple Nginx reverse proxy
```nginx
location = /api/veille-refresh {
    proxy_pass http://127.0.0.1:8787/api/veille-refresh;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

location = /api/veille-status {
    proxy_pass http://127.0.0.1:8787/api/veille-status;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
```

### Comportement
- si le JSON a moins de 6 heures: pas de recalcul inutile;
- si le JSON est plus ancien: mise à jour automatique au premier passage;
- si plusieurs visiteurs arrivent en même temps: un verrou évite les doublons.

### Fréquence réglable
La fenêtre de fraîcheur est pilotée par `VEILLE_REFRESH_MAX_AGE_SECONDS`.

Exemples :
- `3600` = 1 heure
- `21600` = 6 heures
- `86400` = 24 heures

## Exemple Windows (tâche planifiée)
```powershell
python "C:\chemin\vers\Portfolio Jâsir_V2_FINAL\scripts\fetch_veille_rss.py"
```

## Sources surveillées
- BleepingComputer : `https://www.bleepingcomputer.com/feed/`
- The Record : `https://therecord.media/feed`
- Security Affairs : `https://securityaffairs.com/feed`
- ZATAZ : `https://www.zataz.com/feed/`

## Sources de cadre conservées hors flux principal
- ANSSI : `https://cyber.gouv.fr/actualites/rss`
- CERT-FR Avis : `https://cert.ssi.gouv.fr/avis/feed/`
- CERT-FR Alertes : `https://cert.ssi.gouv.fr/alerte/feed/`
- CNIL : `https://www.cnil.fr/rss.xml`

## Logique de filtrage
Le script ne retient pas tout le flux cyber. Il filtre uniquement les contenus contenant des mots-clés liés aux fuites de données, à la compromission, à l'exfiltration ou aux données personnelles.

Exemple concret :
- le flux principal repose sur des médias cyber qui publient régulièrement des cas concrets de fuite de données ;
- les sources officielles françaises sont conservées comme cadre de référence et appui oral, mais ne pilotent pas le flux dynamique principal ;
- le filtrage écarte les articles trop généraux afin de privilégier les incidents, exfiltrations, expositions de bases et compromissions déclarées.

## Résultat attendu
La page `veille.html` affiche ensuite :
- les dernières actualités,
- les actualités précédentes,
- la date de dernière mise à jour,
- les sources surveillées,
- le thème et la méthode de veille.
