feat(legal): préremplir les mentions légales de la société exploitante

Renseigne l'identité de FROUARD DISTRIBUTION (enseigne LA FOIR'FOUILLE)
comme valeur par défaut des pages /terms et /privacy : forme juridique,
capital, siège et numéro RCS. Les relecteurs TikTok ouvrent ces pages
pendant l'audit et refusent les mentions incomplètes.

Chaque champ reste surchargeable par variable d'environnement si l'outil
venait à être exploité par une autre société du groupe.

L'adresse de contact reste à fournir via LEGAL_CONTACT_EMAIL : elle ne
figure pas au registre, et le RGPD impose un point de contact pour
l'exercice des droits.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018uUPZ1GNpEkYB1dpXHYPek
This commit is contained in:
Claude committed 2026-08-11 16:19:16 +00:00
1 parent d0f63c68e4
commit 3e00a3ca67
2 files changed
+35 -12

No files matched your search

+11 -2
View File
@@ -61,10 +61,19 @@ MINIO_PUBLIC_URL=https://media.example.com
# ========================================== # ==========================================
# Affichées sur les pages publiques /terms et /privacy, dont TikTok exige # Affichées sur les pages publiques /terms et /privacy, dont TikTok exige
# les URLs pour l'audit de l'application développeur. # les URLs pour l'audit de l'application développeur.
LEGAL_COMPANY_NAME= #
LEGAL_COMPANY_ADDRESS= # L'identité de la société exploitante est déjà la valeur par défaut : seule
# l'adresse de contact doit obligatoirement être renseignée ici, le RGPD
# imposant un point de contact pour l'exercice des droits.
LEGAL_CONTACT_EMAIL= LEGAL_CONTACT_EMAIL=
# Surcharges facultatives (utiles si l'outil est exploité par une autre société)
# LEGAL_COMPANY_NAME=
# LEGAL_TRADE_NAME=
# LEGAL_COMPANY_LEGAL_FORM=
# LEGAL_COMPANY_RCS=
# LEGAL_COMPANY_ADDRESS=
# ========================================== # ==========================================
# API EXTERNE # API EXTERNE
# ========================================== # ==========================================
+24 -10
View File
@@ -6,8 +6,10 @@
* servies en HTML depuis le serveur, sans authentification, pour rester lisibles * servies en HTML depuis le serveur, sans authentification, pour rester lisibles
* même par un robot qui n'exécute pas le JavaScript du client. * même par un robot qui n'exécute pas le JavaScript du client.
* *
* Les mentions de l'exploitant se configurent par variables d'environnement : * Les mentions de l'exploitant sont préremplies avec l'identité de la société
* LEGAL_COMPANY_NAME, LEGAL_COMPANY_ADDRESS, LEGAL_CONTACT_EMAIL * exploitante et restent surchargeables par variables d'environnement :
* LEGAL_COMPANY_NAME, LEGAL_TRADE_NAME, LEGAL_COMPANY_LEGAL_FORM,
* LEGAL_COMPANY_RCS, LEGAL_COMPANY_ADDRESS, LEGAL_CONTACT_EMAIL
*/ */
import { Router, Request, Response } from 'express'; import { Router, Request, Response } from 'express';
@@ -16,9 +18,15 @@ export const legalRouter = Router();
function getCompanyInfo() { function getCompanyInfo() {
return { return {
name: process.env.LEGAL_COMPANY_NAME || "[Raison sociale à renseigner]", name: process.env.LEGAL_COMPANY_NAME || 'FROUARD DISTRIBUTION',
address: process.env.LEGAL_COMPANY_ADDRESS || "[Adresse à renseigner]", tradeName: process.env.LEGAL_TRADE_NAME || "LA FOIR'FOUILLE",
email: process.env.LEGAL_CONTACT_EMAIL || "[Adresse e-mail de contact à renseigner]", legalForm: process.env.LEGAL_COMPANY_LEGAL_FORM
|| 'Société par actions simplifiée au capital de 50 000 €',
rcs: process.env.LEGAL_COMPANY_RCS || '478 693 518 R.C.S. Nancy',
address: process.env.LEGAL_COMPANY_ADDRESS || '13 rue du Saule Gaillard, 54390 Frouard',
// Aucune adresse de contact ne figure au registre : elle doit être fournie,
// le RGPD imposant un point de contact pour l'exercice des droits.
email: process.env.LEGAL_CONTACT_EMAIL || '[Adresse e-mail de contact à renseigner]',
}; };
} }
@@ -73,8 +81,10 @@ function renderFooter(): string {
const company = getCompanyInfo(); const company = getCompanyInfo();
return `<footer> return `<footer>
<p> <p>
${escapeHtml(company.name)}<br> ${escapeHtml(company.name)} &ndash; enseigne ${escapeHtml(company.tradeName)}<br>
${escapeHtml(company.legalForm)}<br>
${escapeHtml(company.address)}<br> ${escapeHtml(company.address)}<br>
${escapeHtml(company.rcs)}<br>
Contact : ${escapeHtml(company.email)} Contact : ${escapeHtml(company.email)}
</p> </p>
<p><a href="/terms">Conditions d'utilisation</a> &middot; <a href="/privacy">Politique de confidentialité</a></p> <p><a href="/terms">Conditions d'utilisation</a> &middot; <a href="/privacy">Politique de confidentialité</a></p>
@@ -90,9 +100,11 @@ legalRouter.get('/terms', (_req: Request, res: Response) => {
<p> <p>
Cette application est un outil interne de gestion des réseaux sociaux exploité par Cette application est un outil interne de gestion des réseaux sociaux exploité par
${escapeHtml(company.name)} (« nous »). Elle permet à nos équipes de créer des vidéos et des ${escapeHtml(company.name)}, ${escapeHtml(company.legalForm)}, dont le siège est situé
publications promotionnelles, puis de les diffuser sur les comptes et pages officiels de nos ${escapeHtml(company.address)}, immatriculée au ${escapeHtml(company.rcs)}, qui exploite le
magasins. magasin sous l'enseigne ${escapeHtml(company.tradeName)} (« nous »). Elle permet à nos équipes
de créer des vidéos et des publications promotionnelles, puis de les diffuser sur les comptes
et pages officiels de nos magasins.
</p> </p>
<h2>1. Accès au service</h2> <h2>1. Accès au service</h2>
@@ -158,7 +170,9 @@ legalRouter.get('/privacy', (_req: Request, res: Response) => {
<p> <p>
Cette politique décrit les données traitées par notre outil interne de gestion des réseaux Cette politique décrit les données traitées par notre outil interne de gestion des réseaux
sociaux. Le responsable de traitement est ${escapeHtml(company.name)}, sociaux. Le responsable de traitement est ${escapeHtml(company.name)},
${escapeHtml(company.address)}. ${escapeHtml(company.legalForm)}, dont le siège est situé ${escapeHtml(company.address)},
immatriculée au ${escapeHtml(company.rcs)}, exploitant le magasin sous l'enseigne
${escapeHtml(company.tradeName)}.
</p> </p>
<h2>1. Données de nos utilisateurs internes</h2> <h2>1. Données de nos utilisateurs internes</h2>