Auth hardening: - payments: per-customer JWT authorization on dual-use /payments routes (balance/methods/invoice/checkout/setup/portal/toggle-ppa) via authorizeCustomer + PAYMENTS_AUTH=enforce; portal retains+sends magic-link JWT (sessionStorage) - hub: fail-closed Stripe webhook, /accept/doc-pdf IDOR gate, telephony field-name guard (SQLi), modem-bridge private-IP guard (SSRF), ALWAYS_ENFORCE expansion Leaked-credential cleanup (token already rotated in ERPNext): - de-hardcode ERPNext API token -> env in bulk_submit.py, import_items.py, apps/client/deploy.sh; placeholder in apps/ops/infra/nginx.conf (nginx injects) - ops prod build no longer bakes VITE_ERP_TOKEN (.env.production empty) - de-hardcode legacy DB password -> env in import_items.py - gitignore legacy migration PII exports (tsv/json) Conversations/UI: - floating (un-docked) conversation panel; full-width mailbox - per-message real sender from email headers; unified scroll; header spacing - campaign pre-send review (subject/from/channel), Gmail send channel, clone-as-draft Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
31 lines
2.1 KiB
HTML
31 lines
2.1 KiB
HTML
<!doctype html>
|
||
<html lang="fr">
|
||
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
|
||
<body style="margin:0;background:#f4f6f8;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:#1e293b">
|
||
<table role="presentation" width="100%" cellpadding="0" cellspacing="0"><tr><td align="center" style="padding:40px 16px 28px">
|
||
<table role="presentation" width="600" cellpadding="0" cellspacing="0" style="max-width:600px;background:#ffffff;border-radius:10px;overflow:hidden;border:1px solid #e2e8f0">
|
||
<tr><td style="background:#ffffff;padding:24px 28px 6px;text-align:left"><img src="https://xqy3m.mjt.lu/img2/xqy3m/eed4d18c-8065-4c5f-b47c-58af63171cd0/content" alt="TARGO" width="140" style="width:140px;max-width:140px;height:auto;display:block;border:0"></td></tr>
|
||
<tr><td style="padding:28px">
|
||
<p style="margin:0 0 14px;font-size:15px">Bonjour {{firstname}},</p>
|
||
<p style="margin:0 0 14px;font-size:15px;line-height:1.6">
|
||
À la suite d’une erreur dans notre nouveau système de paiement automatique, certains paiements peuvent avoir été prélevés plus d’une fois pour quelques clients, dont vous.
|
||
<strong>La situation a été corrigée et les montants prélevés en trop ont été remboursés sur votre carte.</strong>
|
||
</p>
|
||
|
||
<p style="margin:0 0 14px;font-size:15px;line-height:1.6">
|
||
Nous nous excusons sincèrement pour ce désagrément. Selon l’émetteur de votre carte, un délai de quelques jours peut être nécessaire avant que le remboursement apparaisse sur votre relevé.
|
||
Si vous remarquez quoi que ce soit d’inhabituel ou si vous avez une question, vous pouvez nous écrire à
|
||
<a href="mailto:facturation@targo.ca" style="color:#2563eb;text-decoration:none">facturation@targo.ca</a>.
|
||
</p>
|
||
|
||
<p style="margin:20px 0 0;font-size:15px">
|
||
Merci de votre compréhension,<br>
|
||
<strong>L’équipe Facturation — TARGO</strong>
|
||
</p>
|
||
</td></tr>
|
||
<tr><td style="background:#f8fafc;padding:14px 28px;border-top:1px solid #eef2f7;font-size:12px;color:#94a3b8"> </td></tr>
|
||
</table>
|
||
</td></tr></table>
|
||
</body>
|
||
</html>
|