discovery-media-player 0.1.32 → 0.1.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server/handler.js +21 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discovery-media-player",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.33",
|
|
4
4
|
"description": "Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the application hosting it — everything it borrows arrives through an injected context.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pdf-viewer",
|
package/server/handler.js
CHANGED
|
@@ -2996,15 +2996,30 @@ async function handler(req, res) {
|
|
|
2996
2996
|
// légitime dont le bouton pointe vers SON domaine. L'email part de l'hôte, avec sa
|
|
2997
2997
|
// marque et sa réputation, vers le destinataire choisi par l'attaquant.
|
|
2998
2998
|
//
|
|
2999
|
-
//
|
|
3000
|
-
//
|
|
3001
|
-
//
|
|
3002
|
-
// le
|
|
2999
|
+
// ⚠️ UNE ALERTE N'EST PAS UNE INTERDICTION.
|
|
3000
|
+
//
|
|
3001
|
+
// 0.1.21 posait `PLAYER_PUBLIC_URL`, retombait sur `Host` quand elle manquait, et
|
|
3002
|
+
// SIGNALAIT le repli. C'était le bon réflexe de compatibilité et la mauvaise
|
|
3003
|
+
// conclusion : le journal ne bloque pas un email d'hameçonnage. Une instance mal
|
|
3004
|
+
// configurée continuait d'envoyer, signée de sa marque, avec un bouton pointant où le
|
|
3005
|
+
// lecteur voulait — et l'exploitant l'apprenait dans un rapport d'abus.
|
|
3006
|
+
//
|
|
3007
|
+
// ⚠️ CE QU'ON REFUSE, C'EST L'ENVOI — PAS LE LIEN. Le lien enfant est créé, tracé, et
|
|
3008
|
+
// rendu à l'appelant : il peut le transmettre lui-même. Ce qui est retenu est la seule
|
|
3009
|
+
// chose qu'on ne peut pas rattraper — un courrier parti de nos serveurs, avec notre
|
|
3010
|
+
// domaine dans l'en-tête et notre réputation d'expéditeur derrière.
|
|
3011
|
+
//
|
|
3012
|
+
// La compatibilité invoquée en 0.1.21 ne tenait donc pas : refuser l'envoi ne casse
|
|
3013
|
+
// pas la création du lien, qui est la fonction principale de cette route.
|
|
3014
|
+
//
|
|
3015
|
+
// Signalé par la seconde passe d'audit (P1-1).
|
|
3003
3016
|
const publique = String(PLAYER.legal.publicUrl || "").trim();
|
|
3004
3017
|
if (!publique) {
|
|
3005
|
-
try { PLAYER.errors.capture(new Error("PLAYER_PUBLIC_URL non configurée : le lien de l'email
|
|
3018
|
+
try { PLAYER.errors.capture(new Error("PLAYER_PUBLIC_URL non configurée : envoi refusé (le lien de l'email serait construit depuis l'en-tête Host, que le client choisit)"), { route: "reshare" }); } catch { /* jamais bloquant */ }
|
|
3019
|
+
refusEnvoi = "public-url-unconfigured";
|
|
3020
|
+
throw new Error("URL publique non configurée");
|
|
3006
3021
|
}
|
|
3007
|
-
const origin = publique
|
|
3022
|
+
const origin = publique;
|
|
3008
3023
|
const r = await sendReshareEmail({ parent, childSlug: out.slug, origin, toEmail: mail, toName: body.name });
|
|
3009
3024
|
sent = !!(r && r.sent);
|
|
3010
3025
|
} catch { /* best-effort : le lien existe quand même */ }
|