- Rename all references from E-Cosplay/Ecosplay to SITECONSEIL - Update entity from Association to SARL SITECONSEIL (Siret: 418664058) - Update address to 27 rue Le Serurier, 02100 Saint-Quentin - Update emails: contact@siteconseil.fr, rgpd@siteconseil.fr - Update hosting from GCP to OVHcloud (Roubaix, Gravelines, Strasbourg, Paris) - Update legal pages: mentions legales, CGV, RGPD, conformite, hebergement, cookies, CGU - Add tarifs page with tabs: Site Internet, E-Commerce, Nom de domaine, Esy-Mail, Esy-Mailer, Esy-Tchat, Esy-Meet, Esy-Defender - Add Discord webhook notification workflow - Disable deploy and sonarqube workflows - Update OAuth Keycloak realm to master - Update logo references to logo_facture.png - Remove forced image sizing in Liip Imagine filters - Update SonarQube project key and badge token - Update tribunal competent to Saint-Quentin - Move tarif tabs JS to app.js (CSP compliance) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
104 lines
7.1 KiB
Twig
104 lines
7.1 KiB
Twig
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Attestation RGPD - Acces aux donnees</title>
|
|
<style>
|
|
@page { margin: 0; size: A4; }
|
|
body { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #111827; margin: 0; padding: 0; }
|
|
.banner { background: #fabf04; padding: 16px 32px; border-bottom: 4px solid #111827; }
|
|
.banner img { height: 36px; }
|
|
.banner-title { font-size: 8px; font-weight: 900; text-transform: uppercase; letter-spacing: 2px; color: #111827; margin-top: 4px; opacity: 0.7; }
|
|
.container { padding: 24px 32px 16px; }
|
|
.doc-type { display: inline-block; padding: 4px 12px; background: #4338ca; color: #fff; font-size: 8px; font-weight: 900; text-transform: uppercase; letter-spacing: 2px; margin-bottom: 8px; }
|
|
h1 { font-size: 18px; font-weight: 900; text-transform: uppercase; letter-spacing: -0.5px; font-style: italic; margin: 0 0 4px 0; line-height: 1.1; }
|
|
h2 { font-size: 11px; font-weight: 900; text-transform: uppercase; margin: 16px 0 4px; padding: 4px 10px; background: #fabf04; border: 2px solid #111827; display: inline-block; }
|
|
.subtitle { font-size: 9px; color: #666; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 16px; }
|
|
.info-grid { display: table; width: 100%; margin-bottom: 12px; }
|
|
.info-row { display: table-row; }
|
|
.info-grid .info-cell { display: table-cell; padding: 6px 10px; vertical-align: top; }
|
|
.info-label { font-size: 7px; font-weight: 900; text-transform: uppercase; letter-spacing: 1.5px; color: #999; display: block; margin-bottom: 1px; }
|
|
.info-value { font-size: 11px; font-weight: 700; color: #111827; }
|
|
.info-cell { border-left: 3px solid #4338ca; }
|
|
.session-meta { font-size: 9px; color: #666; margin: 2px 0 6px; }
|
|
.session-meta strong { color: #111827; }
|
|
table.data { width: 100%; border-collapse: collapse; margin-top: 4px; font-size: 9px; border: 2px solid #111827; }
|
|
table.data th { background: #111827; color: #fff; padding: 4px 8px; text-align: left; text-transform: uppercase; font-size: 8px; font-weight: 900; letter-spacing: 0.5px; }
|
|
table.data td { padding: 3px 8px; border-bottom: 1px solid #e5e7eb; }
|
|
table.data tr:nth-child(even) td { background: #f9fafb; }
|
|
.no-data { padding: 8px; background: #f9fafb; border: 2px dashed #d1d5db; font-style: italic; color: #999; text-align: center; font-size: 9px; }
|
|
.verify-box { margin: 12px 0; border: 2px solid #111827; display: table; width: 100%; }
|
|
.verify-row { display: table-row; }
|
|
.verify-qr { display: table-cell; text-align: center; width: 100px; padding: 8px; border-right: 2px solid #111827; vertical-align: middle; }
|
|
.verify-qr img { width: 72px; height: 72px; }
|
|
.verify-info { display: table-cell; padding: 8px 12px; font-size: 9px; vertical-align: middle; }
|
|
.verify-label { font-size: 7px; font-weight: 900; text-transform: uppercase; letter-spacing: 1.5px; color: #999; display: block; margin-bottom: 1px; }
|
|
.verify-url { font-size: 8px; font-family: monospace; color: #4338ca; word-break: break-all; }
|
|
.hmac { font-size: 7px; color: #aaa; word-break: break-all; margin: 8px 0; padding: 6px 8px; background: #f9fafb; border: 1px solid #e5e7eb; font-family: monospace; }
|
|
.dpo { font-size: 9px; margin: 8px 0 4px; }
|
|
.contact-box { display: inline-block; padding: 6px 16px; background: #111827; color: #fff; font-weight: 900; text-transform: uppercase; font-size: 9px; letter-spacing: 1px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="banner">
|
|
{% if logo %}<img src="{{ logo }}" alt="CRM SITECONSEIL">{% endif %}
|
|
<div class="banner-title">SARL SITECONSEIL</div>
|
|
</div>
|
|
<div class="container">
|
|
<span class="doc-type">Droit d'acces</span>
|
|
<h1>Donnees personnelles</h1>
|
|
<div class="subtitle">RGPD — Article 15</div>
|
|
<div class="info-grid">
|
|
<div class="info-row">
|
|
<div class="info-cell" style="width: 25%;"><span class="info-label">Reference</span><span class="info-value">{{ attestation.reference }}</span></div>
|
|
<div class="info-cell" style="width: 25%;"><span class="info-label">Date</span><span class="info-value">{{ date|date('d/m/Y a H:i') }}</span></div>
|
|
<div class="info-cell" style="width: 25%;"><span class="info-label">Adresse IP</span><span class="info-value">{{ ip }}</span></div>
|
|
<div class="info-cell" style="width: 25%;"><span class="info-label">Sessions</span><span class="info-value">{{ data|length }}</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
{% for entry in data %}
|
|
<h2>Session #{{ loop.index }}</h2>
|
|
<div class="session-meta"><strong>ID :</strong> {{ entry.visitor.id }} — <strong>Visite :</strong> {{ entry.visitor.createdAt|date('d/m/Y H:i') }}</div>
|
|
{% if entry.events|length > 0 %}
|
|
<table class="data">
|
|
<thead><tr><th style="width: 25%;">Date</th><th style="width: 20%;">Type</th><th style="width: 55%;">Page</th></tr></thead>
|
|
<tbody>
|
|
{% for event in entry.events %}
|
|
<tr><td>{{ event.createdAt|date('d/m/Y H:i:s') }}</td><td>{{ event.type }}</td><td>{{ event.page }}</td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% else %}
|
|
<div class="no-data">Aucun evenement enregistre.</div>
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
<div class="verify-box">
|
|
<div class="verify-row">
|
|
<div class="verify-qr"><img src="{{ qrcode }}" alt="QR Code"></div>
|
|
<div class="verify-info">
|
|
<span class="verify-label">Verifier ce document</span>
|
|
<p style="margin: 2px 0 4px; font-size: 9px; font-weight: 700;">Scannez le QR code ou consultez le lien ci-dessous.</p>
|
|
<span class="verify-label">URL</span>
|
|
<span class="verify-url">{{ verify_url }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="hmac">HMAC-SHA256 : {{ attestation.hmac }}</div>
|
|
<div style="margin-top: 16px;">
|
|
<p class="dpo"><strong>DPO</strong></p>
|
|
<span class="contact-box">contact@siteconseil.fr</span>
|
|
</div>
|
|
<div style="margin-top: 12px; display: inline-block; border: 2px solid #111827; padding: 8px 12px; width: 180px; height: 80px;">
|
|
<div style="font-size: 1px; color: #fff;">{% verbatim %}{{Sign;type=signature;width=150;height=50}}{% endverbatim %}</div>
|
|
</div>
|
|
<div style="margin-top: 16px; padding-top: 8px; border-top: 1px solid #ddd; font-size: 7px; color: #999; line-height: 1.6;">
|
|
SARL SITECONSEIL — RNA W022006988 — SIREN 943121517<br>
|
|
27 rue Le Sérurier, 02100 Saint-Quentin, France — contact@siteconseil.fr — 06 79 34 88 02<br>
|
|
<a href="https://www.siteconseil.fr" style="color: #999;">www.siteconseil.fr</a>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|