1:"$Sreact.fragment" 2:I[70119,["/_next/static/chunks/31d43793a1cb3f9f.js"],"default"] 3:I[39756,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"] 4:I[37457,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"] e:I[68027,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"default"] :HL["/_next/static/chunks/72b91a557eccd659.css","style"] 0:{"P":null,"b":"3j51AZN_4-ufz6TRQsmjK","c":["","blog","gdpr-protection-donnees"],"q":"","i":false,"f":[[["",{"children":["blog",{"children":["gdpr-protection-donnees",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/72b91a557eccd659.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/31d43793a1cb3f9f.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"fr","children":["$","body",null,{"className":"flex min-h-screen flex-col antialiased","children":[["$","$L2",null,{}],["$","main",null,{"className":"mx-auto w-full max-w-6xl flex-grow content-container my-6 p-8","children":["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","footer",null,{"className":"w-full bg-gray-900/95 backdrop-blur-md text-gray-300 py-12 mt-6","children":["$","div",null,{"className":"max-w-6xl mx-auto px-6","children":[["$","div",null,{"className":"grid md:grid-cols-4 gap-8","children":[["$","div",null,{"children":[["$","h3",null,{"className":"text-2xl font-bold text-white mb-4","children":"Tuxyo"}],["$","p",null,{"className":"text-gray-400 mb-4","children":"Des solutions adaptées pour faire grandir votre entreprise"}],["$","div",null,{"className":"flex space-x-4","children":[["$","a",null,{"href":"#","className":"text-gray-400 hover:text-white transition","children":["$","svg",null,{"className":"w-5 h-5","fill":"currentColor","viewBox":"0 0 24 24","children":["$","path",null,{"d":"M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z"}]}]}],["$","a",null,{"href":"#","className":"text-gray-400 hover:text-white transition","children":["$","svg",null,{"className":"w-5 h-5","fill":"currentColor","viewBox":"0 0 24 24","children":["$","path",null,{"d":"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"}]}]}],["$","a",null,{"href":"#","className":"text-gray-400 hover:text-white transition","children":["$","svg",null,{"className":"w-5 h-5","fill":"currentColor","viewBox":"0 0 24 24","children":"$L5"}]}]]}]]}],"$L6","$L7","$L8"]}],"$L9"]}]}]]}]}]]}],{"children":["$La",{"children":["$Lb",{"children":["$Lc",{},null,false,false]},null,false,false]},null,false,false]},null,false,false],"$Ld",false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true} f:I[22016,["/_next/static/chunks/31d43793a1cb3f9f.js"],""] 35:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"ViewportBoundary"] 37:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"MetadataBoundary"] 38:"$Sreact.suspense" 5:["$","path",null,{"d":"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"}] 6:["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold text-white mb-4","children":"Services"}],["$","ul",null,{"className":"space-y-2 text-sm","children":[["$","li",null,{"children":["$","a",null,{"href":"/services","className":"hover:text-white transition","children":"Développement web"}]}],["$","li",null,{"children":["$","a",null,{"href":"/services","className":"hover:text-white transition","children":"Solutions SaaS"}]}],["$","li",null,{"children":["$","a",null,{"href":"/services","className":"hover:text-white transition","children":"Conseil & Formation"}]}]]}]]}] 7:["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold text-white mb-4","children":"Entreprise"}],["$","ul",null,{"className":"space-y-2 text-sm","children":[["$","li",null,{"children":["$","a",null,{"href":"/about","className":"hover:text-white transition","children":"À propos"}]}],["$","li",null,{"children":["$","a",null,{"href":"/blog","className":"hover:text-white transition","children":"Blog"}]}],["$","li",null,{"children":["$","a",null,{"href":"/contact","className":"hover:text-white transition","children":"Contact"}]}]]}]]}] 8:["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold text-white mb-4","children":"Contact"}],["$","ul",null,{"className":"space-y-2 text-sm","children":["$","li",null,{"className":"flex items-center","children":[["$","svg",null,{"className":"w-4 h-4 mr-2","fill":"none","stroke":"currentColor","viewBox":"0 0 24 24","children":["$","path",null,{"strokeLinecap":"round","strokeLinejoin":"round","strokeWidth":2,"d":"M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"}]}],"contact@tuxyo.com"]}]}]]}] 9:["$","div",null,{"className":"border-t border-gray-800 mt-8 pt-8 text-center text-sm text-gray-400","children":["$","p",null,{"children":["© 2001-",2026," Tuxyo. Tous droits réservés. Version ","0.7.2505"]}]}] a:["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] b:["$","$1","c",{"children":[null,["$","$L3",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] c:["$","$1","c",{"children":[["$","article",null,{"className":"max-w-4xl mx-auto","children":[["$","nav",null,{"className":"mb-8","children":["$","div",null,{"className":"flex items-center space-x-2 text-sm text-gray-600","children":[["$","$Lf",null,{"href":"/","className":"hover:text-tuxyoBlue","children":"Accueil"}],["$","span",null,{"children":"/"}],["$","$Lf",null,{"href":"/blog","className":"hover:text-tuxyoBlue","children":"Blog"}],["$","span",null,{"children":"/"}],["$","span",null,{"className":"text-gray-900","children":"GDPR et protection des données"}]]}]}],["$","header",null,{"className":"mb-12","children":[["$","div",null,{"className":"flex items-center space-x-4 mb-6","children":[["$","span",null,{"className":"px-3 py-1 bg-red-100 text-red-700 text-sm font-medium rounded-full","children":"Sécurité"}],["$","div",null,{"className":"flex items-center text-gray-500 text-sm","children":[["$","svg",null,{"className":"w-4 h-4 mr-1","fill":"none","stroke":"currentColor","viewBox":"0 0 24 24","children":["$","path",null,{"strokeLinecap":"round","strokeLinejoin":"round","strokeWidth":2,"d":"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"}]}],"8 min de lecture"]}],["$","span",null,{"className":"text-gray-500 text-sm","children":"5 Avril 2024"}]]}],["$","h1",null,{"className":"text-4xl md:text-5xl font-bold text-gray-900 mb-6 leading-tight","children":"GDPR et protection des données : Guide pratique pour developers"}],["$","p",null,{"className":"text-xl text-gray-600 leading-relaxed","children":"Comprendre et implémenter le RGPD dans vos applications web : obligations légales, techniques de protection des données et bonnes pratiques de développement."}]]}],["$","div",null,{"className":"prose prose-lg max-w-none","children":[["$","h2",null,{"children":"Introduction au RGPD pour les développeurs"}],["$","p",null,{"children":"Le Règlement Général sur la Protection des Données (RGPD) est entré en vigueur en mai 2018 et a révolutionné la façon dont nous traitons les données personnelles. Pour les développeurs, comprendre et implémenter correctement le RGPD n'est plus optionnel : c'est une obligation légale qui peut coûter très cher en cas de non-conformité."}],["$","div",null,{"className":"bg-red-50 p-6 rounded-lg my-6","children":[["$","h3",null,{"className":"text-red-800 font-semibold mb-2","children":"⚠️ Amendes RGPD"}],["$","p",null,{"className":"text-red-700 text-sm","children":"Les amendes peuvent atteindre 4% du chiffre d'affaires annuel mondial ou 20 millions d'euros, selon le montant le plus élevé. L'autorité de contrôle française (CNIL) a déjà infligé des millions d'euros d'amendes à des entreprises non conformes."}]]}],["$","h2",null,{"children":"Principes fondamentaux du RGPD"}],["$","h3",null,{"children":"1. Données personnelles : définition"}],["$","p",null,{"children":"Une donnée personnelle est toute information se rapportant à une personne physique identifiée ou identifiable. Cela inclut :"}],["$","ul",null,{"children":[["$","li",null,{"children":[["$","strong",null,{"children":"Identifiants directs"}]," : nom, prénom, email, téléphone"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Identifiants indirects"}]," : adresse IP, cookies, identifiant unique"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Données sensibles"}]," : santé, religion, orientation politique, etc."]}]]}],["$","h3",null,{"children":"2. Les 7 principes clés"}],["$","div",null,{"className":"bg-blue-50 p-6 rounded-lg my-6","children":["$","ol",null,{"className":"space-y-2","children":[["$","li",null,{"children":[["$","strong",null,{"children":"Licéité"}]," : traitement basé sur un fondement légal"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Loyauté et transparence"}]," : information claire des personnes"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Finalité"}]," : objectifs déterminés et légitimes"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Minimisation"}]," : données adéquates et non excessives"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Exactitude"}]," : données exactes et à jour"]}],["$","li",null,{"children":["$L10"," : durée de conservation définie"]}],"$L11"]}]}],"$L12","$L13","$L14","$L15","$L16","$L17","$L18","$L19","$L1a","$L1b","$L1c","$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23","$L24","$L25","$L26","$L27","$L28","$L29","$L2a","$L2b","$L2c","$L2d","$L2e","$L2f","$L30","$L31","$L32"]}],"$L33"]}],null,"$L34"]}] d:["$","$1","h",{"children":[null,["$","$L35",null,{"children":"$@36"}],["$","div",null,{"hidden":true,"children":["$","$L37",null,{"children":["$","$38",null,{"name":"Next.Metadata","children":"$@39"}]}]}],null]}] 3f:I[97367,["/_next/static/chunks/ff1a16fafef87110.js","/_next/static/chunks/247eb132b7f7b574.js"],"OutletBoundary"] 10:["$","strong",null,{"children":"Conservation limitée"}] 11:["$","li",null,{"children":[["$","strong",null,{"children":"Sécurité"}]," : protection technique et organisationnelle"]}] 12:["$","h2",null,{"children":"Implémentation technique du consentement"}] 13:["$","h3",null,{"children":"Bannière de cookies RGPD"}] 14:["$","p",null,{"children":"Le consentement doit être libre, éclairé, spécifique et univoque. Voici un exemple d'implémentation :"}] 3a:Tbee,// React Cookie Consent Component import { useState, useEffect } from 'react'; export function CookieConsent() { const [showBanner, setShowBanner] = useState(false); const [preferences, setPreferences] = useState({ necessary: true, analytics: false, marketing: false }); useEffect(() => { const consent = localStorage.getItem('cookie-consent'); if (!consent) { setShowBanner(true); } }, []); const acceptAll = () => { const consent = { necessary: true, analytics: true, marketing: true, timestamp: new Date().toISOString() }; localStorage.setItem('cookie-consent', JSON.stringify(consent)); setShowBanner(false); loadAnalytics(); }; const acceptSelection = () => { const consent = { ...preferences, timestamp: new Date().toISOString() }; localStorage.setItem('cookie-consent', JSON.stringify(consent)); setShowBanner(false); if (preferences.analytics) loadAnalytics(); }; if (!showBanner) return null; return (

Gestion des cookies

Nous utilisons des cookies pour améliorer votre expérience. Vous pouvez choisir quels cookies accepter.

); }15:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"$3a"}]}] 16:["$","h3",null,{"children":"Gestion des préférences utilisateur"}] 17:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"// API endpoint pour la gestion des préférences\napp.post('/api/user/privacy-preferences', async (req, res) => {\n try {\n const { userId, preferences } = req.body;\n \n // Validation des données\n const validPreferences = {\n emailMarketing: Boolean(preferences.emailMarketing),\n dataAnalytics: Boolean(preferences.dataAnalytics),\n thirdPartySharing: Boolean(preferences.thirdPartySharing),\n updatedAt: new Date()\n };\n\n // Sauvegarde en base de données\n await User.findByIdAndUpdate(userId, {\n privacyPreferences: validPreferences\n });\n\n // Log de l'action pour audit\n await logPrivacyAction({\n userId,\n action: 'PREFERENCES_UPDATED',\n details: validPreferences,\n timestamp: new Date()\n });\n\n res.json({ success: true, preferences: validPreferences });\n } catch (error) {\n res.status(500).json({ error: 'Erreur lors de la mise à jour' });\n }\n});"}]}] 18:["$","h2",null,{"children":"Droits des utilisateurs et implémentation"}] 19:["$","h3",null,{"children":"Droit d'accès et de portabilité"}] 1a:["$","p",null,{"children":"Les utilisateurs ont le droit d'accéder à leurs données et de les récupérer dans un format lisible :"}] 3b:T455,// Endpoint pour l'export des données utilisateur app.get('/api/user/:id/export', authenticateUser, async (req, res) => { try { const userId = req.params.id; // Vérifier que l'utilisateur demande ses propres données if (req.user.id !== userId) { return res.status(403).json({ error: 'Accès non autorisé' }); } // Collecter toutes les données utilisateur const userData = { profile: await User.findById(userId).select('-password'), orders: await Order.find({ userId }), preferences: await UserPreferences.findOne({ userId }), activityLog: await ActivityLog.find({ userId }).limit(100), exportDate: new Date().toISOString() }; // Log de la demande d'export await logPrivacyAction({ userId, action: 'DATA_EXPORT_REQUESTED', timestamp: new Date() }); res.setHeader('Content-Type', 'application/json'); res.setHeader('Content-Disposition', 'attachment; filename=user-data.json'); res.json(userData); } catch (error) { res.status(500).json({ error: 'Erreur lors de l\'export' }); } });1b:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"$3b"}]}] 1c:["$","h3",null,{"children":"Droit à l'effacement (droit à l'oubli)"}] 3c:T5d6,// Suppression sécurisée des données utilisateur app.delete('/api/user/:id/delete-account', authenticateUser, async (req, res) => { try { const userId = req.params.id; if (req.user.id !== userId) { return res.status(403).json({ error: 'Accès non autorisé' }); } // Vérifier les obligations légales de conservation const user = await User.findById(userId); const hasActiveOrders = await Order.exists({ userId, createdAt: { $gte: new Date(Date.now() - 3 * 365 * 24 * 60 * 60 * 1000) } }); if (hasActiveOrders) { return res.status(400).json({ error: 'Suppression impossible : commandes récentes (obligation légale)' }); } // Anonymisation des données au lieu de suppression complète await User.findByIdAndUpdate(userId, { email: `deleted-${userId}@anonymized.com`, firstName: 'Utilisateur', lastName: 'Supprimé', phone: null, address: null, isDeleted: true, deletedAt: new Date() }); // Suppression des données non essentielles await UserPreferences.deleteOne({ userId }); await ActivityLog.deleteMany({ userId }); // Log de la suppression await logPrivacyAction({ userId, action: 'ACCOUNT_DELETED', timestamp: new Date() }); res.json({ success: true, message: 'Compte supprimé avec succès' }); } catch (error) { res.status(500).json({ error: 'Erreur lors de la suppression' }); } });1d:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"$3c"}]}] 1e:["$","h2",null,{"children":"Sécurisation et chiffrement des données"}] 1f:["$","h3",null,{"children":"Chiffrement en base de données"}] 20:["$","p",null,{"children":"Les données sensibles doivent être chiffrées même en base de données. Voici un exemple avec MongoDB :"}] 3d:T6e5,const mongoose = require('mongoose'); const crypto = require('crypto'); const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY; // 32 bytes key const ALGORITHM = 'aes-256-gcm'; // Fonctions de chiffrement/déchiffrement function encrypt(text) { const iv = crypto.randomBytes(16); const cipher = crypto.createCipher(ALGORITHM, ENCRYPTION_KEY, iv); let encrypted = cipher.update(text, 'utf8', 'hex'); encrypted += cipher.final('hex'); const authTag = cipher.getAuthTag(); return { iv: iv.toString('hex'), encrypted, authTag: authTag.toString('hex') }; } function decrypt(encryptedData) { const decipher = crypto.createDecipher( ALGORITHM, ENCRYPTION_KEY, Buffer.from(encryptedData.iv, 'hex') ); decipher.setAuthTag(Buffer.from(encryptedData.authTag, 'hex')); let decrypted = decipher.update(encryptedData.encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } // Schema avec chiffrement automatique const UserSchema = new mongoose.Schema({ email: { type: String, required: true }, // Données sensibles chiffrées encryptedPhone: Object, encryptedAddress: Object }); UserSchema.pre('save', function() { if (this.phone && this.isModified('phone')) { this.encryptedPhone = encrypt(this.phone); this.phone = undefined; } if (this.address && this.isModified('address')) { this.encryptedAddress = encrypt(JSON.stringify(this.address)); this.address = undefined; } }); UserSchema.methods.getDecryptedPhone = function() { return this.encryptedPhone ? decrypt(this.encryptedPhone) : null; }; UserSchema.methods.getDecryptedAddress = function() { return this.encryptedAddress ? JSON.parse(decrypt(this.encryptedAddress)) : null; };21:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"$3d"}]}] 22:["$","h3",null,{"children":"Audit et logs de conformité"}] 23:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"// Système de logs pour audit RGPD\nconst PrivacyLogSchema = new mongoose.Schema({\n userId: { type: String, required: true },\n action: { \n type: String, \n enum: [\n 'CONSENT_GIVEN', \n 'CONSENT_WITHDRAWN', \n 'DATA_ACCESSED', \n 'DATA_EXPORTED', \n 'DATA_DELETED',\n 'PREFERENCES_UPDATED'\n ],\n required: true \n },\n details: Object,\n ipAddress: String,\n userAgent: String,\n timestamp: { type: Date, default: Date.now },\n legalBasis: String // Fondement juridique du traitement\n});\n\nasync function logPrivacyAction(data) {\n try {\n const log = new PrivacyLog({\n ...data,\n ipAddress: data.req?.ip || 'unknown',\n userAgent: data.req?.get('User-Agent') || 'unknown'\n });\n \n await log.save();\n } catch (error) {\n console.error('Erreur lors du logging RGPD:', error);\n }\n}"}]}] 24:["$","h2",null,{"children":"Politique de confidentialité et mentions légales"}] 25:["$","h3",null,{"children":"Éléments obligatoires d'une politique de confidentialité"}] 26:["$","div",null,{"className":"bg-gray-50 p-6 rounded-lg my-6","children":["$","ul",null,{"className":"space-y-2","children":[["$","li",null,{"children":[["$","strong",null,{"children":"Identité du responsable de traitement"}]," : nom, contact DPO"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Finalités du traitement"}]," : pourquoi collecter ces données"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Base juridique"}]," : consentement, intérêt légitime, etc."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Destinataires"}]," : qui a accès aux données"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Durée de conservation"}]," : combien de temps garder les données"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Droits des personnes"}]," : accès, rectification, effacement, etc."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Transferts hors UE"}]," : vers quels pays et avec quelles garanties"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Contact"}]," : comment exercer ses droits"]}]]}]}] 27:["$","h3",null,{"children":"Template de politique de confidentialité"}] 3e:Ta8f,// Composant React pour politique de confidentialité export function PrivacyPolicy() { return (

Politique de confidentialité

1. Responsable de traitement

Tuxyo SARL
Siège social : [Adresse]
SIRET : [Numéro]
Email : contact@tuxyo.com
DPO : privacy@tuxyo.com

2. Données collectées et finalités

Données Finalité Base juridique Conservation
Email, nom Gestion des comptes utilisateurs Exécution du contrat Durée du compte + 3 ans
Données de navigation Amélioration du service Intérêt légitime 13 mois maximum

3. Vos droits

Vous disposez des droits suivants concernant vos données personnelles :

Pour exercer ces droits, contactez-nous à : privacy@tuxyo.com

); }28:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"$3e"}]}] 29:["$","h2",null,{"children":"Outils et ressources pour la conformité RGPD"}] 2a:["$","h3",null,{"children":"Solutions techniques"}] 2b:["$","ul",null,{"children":[["$","li",null,{"children":[["$","strong",null,{"children":"Cookiebot"}]," : gestion automatique des cookies"]}],["$","li",null,{"children":[["$","strong",null,{"children":"OneTrust"}]," : plateforme complète de privacy management"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Iubenda"}]," : générateur de politique de confidentialité"]}],["$","li",null,{"children":[["$","strong",null,{"children":"Consent Management Platforms"}]," : Quantcast Choice, Didomi"]}]]}] 2c:["$","h3",null,{"children":"Bibliothèques open source"}] 2d:["$","pre",null,{"className":"bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto","children":["$","code",null,{"children":"// Packages NPM utiles pour le RGPD\n{\n \"dependencies\": {\n \"cookie-consent-js\": \"^1.0.0\",\n \"gdpr-cookie-consent\": \"^2.0.0\",\n \"js-cookie\": \"^3.0.0\",\n \"node-gdpr\": \"^1.0.0\",\n \"privacy-center\": \"^2.1.0\"\n }\n}"}]}] 2e:["$","h2",null,{"children":"Checklist de conformité RGPD"}] 2f:["$","div",null,{"className":"bg-green-50 p-6 rounded-lg my-6","children":[["$","h3",null,{"children":"✅ Checklist technique"}],["$","div",null,{"className":"grid md:grid-cols-2 gap-4 mt-4","children":[["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold mb-2","children":"Consentement"}],["$","ul",null,{"className":"space-y-1 text-sm","children":[["$","li",null,{"children":"□ Bannière de cookies conforme"}],["$","li",null,{"children":"□ Granularité du consentement"}],["$","li",null,{"children":"□ Preuve du consentement conservée"}],["$","li",null,{"children":"□ Retrait du consentement facile"}]]}]]}],["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold mb-2","children":"Droits des utilisateurs"}],["$","ul",null,{"className":"space-y-1 text-sm","children":[["$","li",null,{"children":"□ Interface d'accès aux données"}],["$","li",null,{"children":"□ Export des données (portabilité)"}],["$","li",null,{"children":"□ Suppression/anonymisation"}],["$","li",null,{"children":"□ Modification des préférences"}]]}]]}],["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold mb-2","children":"Sécurité"}],["$","ul",null,{"className":"space-y-1 text-sm","children":[["$","li",null,{"children":"□ Chiffrement des données sensibles"}],["$","li",null,{"children":"□ Pseudonymisation si possible"}],["$","li",null,{"children":"□ Accès restreint (principe du moindre privilège)"}],["$","li",null,{"children":"□ Logs d'audit et monitoring"}]]}]]}],["$","div",null,{"children":[["$","h4",null,{"className":"font-semibold mb-2","children":"Documentation"}],["$","ul",null,{"className":"space-y-1 text-sm","children":[["$","li",null,{"children":"□ Politique de confidentialité à jour"}],["$","li",null,{"children":"□ Registre des traitements"}],["$","li",null,{"children":"□ Procédures de gestion des droits"}],["$","li",null,{"children":"□ Plan de réponse aux violations"}]]}]]}]]}]]}] 30:["$","h2",null,{"children":"Conclusion"}] 31:["$","p",null,{"children":"La conformité RGPD pour les développeurs nécessite une approche technique rigoureuse combinée à une compréhension des obligations légales. En intégrant ces pratiques dès la conception (Privacy by Design), vous protégez non seulement vos utilisateurs mais aussi votre entreprise contre les risques juridiques et financiers."}] 32:["$","p",null,{"children":"N'hésitez pas à consulter un expert juridique spécialisé en protection des données pour valider votre implémentation, car les enjeux financiers et de réputation sont considérables."}] 33:["$","footer",null,{"className":"mt-16 pt-8 border-t border-gray-200","children":["$","div",null,{"className":"flex items-center justify-between","children":[["$","div",null,{"children":[["$","p",null,{"className":"text-sm text-gray-600 mb-2","children":"Publié le 5 Avril 2024"}],["$","div",null,{"className":"flex items-center space-x-4","children":[["$","span",null,{"className":"text-sm text-gray-500","children":"Partager:"}],["$","a",null,{"href":"#","className":"text-tuxyoBlue hover:text-blue-700","children":"Twitter"}],["$","a",null,{"href":"#","className":"text-tuxyoBlue hover:text-blue-700","children":"LinkedIn"}]]}]]}],["$","$Lf",null,{"href":"/blog","className":"bg-tuxyoBlue text-white px-6 py-2 rounded-lg font-medium hover:bg-blue-700 transition","children":"← Retour au blog"}]]}]}] 34:["$","$L3f",null,{"children":["$","$38",null,{"name":"Next.MetadataOutlet","children":"$@40"}]}] 36:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] 39:[["$","title","0",{"children":"Tuxyo - Solutions logicielles expertes"}],["$","meta","1",{"name":"description","content":"Expertise en développement logiciel avec +25 ans d'expérience. Spécialisé en Java, NodeJS, Spring Boot, ReactJS, et solutions Cloud. Architecture et développement de solutions robustes."}]] 40:null