SPB Git

Repository Public

page.tsx 6.0 KB 71 lines tsx

1import type { Metadata } from "next";2import { sql } from "@/lib/db";3import { ownerUser } from "@/lib/auth";4import { requestLocale } from "@/lib/locale";5import { PublicFrame } from "@/components/public/frame";67export const dynamic = "force-dynamic";8export const metadata: Metadata = { title: "Confidentialité" };910const H = ({ children }: { children: React.ReactNode }) => <h2 className="t-headline mt-7 mb-2">{children}</h2>;1112/** Describes what the application really does with personal information. Keep it in step with docs/SECURITY.md. */13export default async function PrivacyPage() {14  const locale = await requestLocale();15  const owner = await ownerUser();16  const [s] = owner ? await sql<{ public_name: string; retention_days: number; reply_to: string | null }[]>`SELECT public_name, retention_days, reply_to::text FROM settings WHERE user_id = ${owner.id}` : [];17  const name = s?.public_name || "le propriétaire de ce calendrier";18  const days = s?.retention_days ?? 730;19  const contact = s?.reply_to ?? null;20  const fr = locale === "fr";21  return (22    <PublicFrame narrow>23      <article className="card p-6 sm:p-8 leading-relaxed">24        {fr ? (25          <>26            <h1 className="t-title">Politique de confidentialité</h1>27            <p className="t-mute mt-2">Cette page décrit le traitement réel des renseignements personnels par ce service de prise de rendez-vous, exploité par {name} sur son propre serveur.</p>28            <H>Renseignements recueillis</H>29            <ul className="list-disc pl-5 grid gap-1.5">30              <li>Ceux que vous inscrivez dans le formulaire : nom, courriel, organisation (facultatif), motif du rendez-vous et réponses aux questions.</li>31              <li>Le moment demandé, votre fuseau horaire, la langue d&apos;affichage et l&apos;adresse IP de la demande (protection contre les abus).</li>32              <li>Aucun témoin publicitaire ni outil de mesure d&apos;audience tiers. Un témoin de préférence de langue et, pour l&apos;administrateur seulement, un témoin de session.</li>33            </ul>34            <H>Utilisation</H>35            <p>Ces renseignements servent uniquement à traiter votre demande, à confirmer, déplacer ou annuler le rendez-vous et à vous en aviser par courriel. Ils ne sont ni vendus ni utilisés à des fins de prospection.</p>36            <H>Communication à des tiers</H>37            <p>Les courriels transactionnels sont acheminés par un fournisseur d&apos;envoi de courriels, qui reçoit votre adresse et le contenu du message (jamais le motif de votre demande). Le motif et vos réponses ne figurent ni dans les courriels, ni dans les invitations de calendrier, ni dans les adresses de page.</p>38            <H>Conservation</H>39            <p>Les demandes et rendez-vous sont supprimés automatiquement {days} jours après leur date. Les sauvegardes chiffrées sont conservées 30 jours.</p>40            <H>Vos droits</H>41            <p>Conformément à la Loi sur la protection des renseignements personnels dans le secteur privé du Québec (« Loi 25 »), vous pouvez demander l&apos;accès à vos renseignements, leur rectification ou leur suppression, et retirer votre consentement. {contact ? <>Écrivez à <a className="text-blue underline underline-offset-2" href={`mailto:${contact}`}>{contact}</a>.</> : <>Répondez à l&apos;un des courriels reçus de ce service ou utilisez votre lien de gestion pour retirer une demande.</>} Le responsable de la protection des renseignements personnels est {name}.</p>42            <H>Sécurité</H>43            <p>Connexion chiffrée (HTTPS), accès administrateur par clé d&apos;accès, liens de gestion à jetons aléatoires conservés sous forme hachée, journal d&apos;audit et sauvegardes chiffrées.</p>44          </>45        ) : (46          <>47            <h1 className="t-title">Privacy policy</h1>48            <p className="t-mute mt-2">This page describes what this booking service, run by {name} on their own server, really does with personal information.</p>49            <H>Information collected</H>50            <ul className="list-disc pl-5 grid gap-1.5">51              <li>What you enter in the form: name, e-mail, organization (optional), reason for the appointment and answers to the questions.</li>52              <li>The requested time, your time zone, the display language and the IP address of the request (abuse protection).</li>53              <li>No advertising cookie and no third-party analytics. One language-preference cookie and, for the administrator only, a session cookie.</li>54            </ul>55            <H>Use</H>56            <p>This information is used only to process your request, to confirm, move or cancel the appointment and to notify you by e-mail. It is neither sold nor used for marketing.</p>57            <H>Disclosure to third parties</H>58            <p>Transactional e-mails go through an e-mail delivery provider, which receives your address and the content of the message (never the reason for your request). The reason and your answers never appear in e-mails, calendar invitations or page addresses.</p>59            <H>Retention</H>60            <p>Requests and appointments are deleted automatically {days} days after their date. Encrypted backups are kept 30 days.</p>61            <H>Your rights</H>62            <p>Under Québec&apos;s Act respecting the protection of personal information in the private sector (“Law 25”), you may ask to access, correct or delete your information and withdraw your consent. {contact ? <>Write to <a className="text-blue underline underline-offset-2" href={`mailto:${contact}`}>{contact}</a>.</> : <>Reply to any e-mail received from this service, or use your management link to withdraw a request.</>} The person responsible for the protection of personal information is {name}.</p>63            <H>Security</H>64            <p>Encrypted connection (HTTPS), passkey-only administrator access, management links with random tokens stored hashed, audit trail and encrypted backups.</p>65          </>66        )}67      </article>68    </PublicFrame>69  );70}71
Files main
Menu

Theme