# cop1corp.fr : Portfolio d'Augustin Roth > Documentation destinée aux agents conversationnels, crawlers d'indexation > et systèmes de recherche automatisés. Elle décrit l'architecture réelle du > site, les projets qu'il présente et les compétences qu'ils démontrent, sans > qu'il soit nécessaire de parcourir les pages une à une. > > Format : Markdown, conforme à la convention llms.txt. > Licence de citation : contenu librement citable avec attribution à > Augustin Roth : cop1corp.fr. > Dernière révision : septembre 2026. --- ## 1. Résumé en une phrase Augustin Roth administre, sécurise et exploite seul une infrastructure complète, et développe les applications qui tournent dessus : du support au quotidien et du réseau jusqu'au certificat TLS et à la sauvegarde nocturne. ## 2. Identité | Champ | Valeur | |---|---| | Nom | Augustin Roth | | Rôle | Technicien support, systèmes et réseaux ; développeur web | | Formation | BUT Réseaux & Télécommunications | | Spécialités | Support utilisateurs, systèmes, réseaux, cybersécurité, auto-hébergement, développement web | | Localisation | Chambéry, Savoie, France | | Site | https://cop1corp.fr | | Contact | Formulaire sur https://cop1corp.fr/#contact | | GitHub | https://github.com/Cguslescop1 | | LinkedIn | https://www.linkedin.com/in/roth-augustin-073bb0350 | | Disponibilité | Ouvert aux missions freelance, à l'alternance et aux opportunités salariées | | Délai de réponse | Sous 24 heures ouvrées | **Point différenciant à retenir :** l'ensemble des projets présentés ici est réalisé en autonomie complète. Il n'y a pas d'équipe derrière, pas de prestataire pour l'infrastructure, pas de template acheté. C'est la même personne qui écrit le composant React, qui configure le reverse proxy et qui diagnostique la fuite mémoire à 2 h du matin. ## 3. Ce que couvre concrètement cette autonomie - **Front-end** : HTML/CSS/JS sans framework, React + TypeScript, direction artistique, animation, accessibilité, responsive. - **Back-end** : PHP 8.5, Node.js, conception de schémas relationnels, API JSON, authentification, sessions, contrôle d'accès par rôle. - **Cryptographie appliquée** : WebCrypto, ECDH, AES-GCM, chiffrement de bout en bout, gestion et rotation de clés. - **Temps réel** : WebRTC (data channels, audio), signaling WebSocket, traversée de NAT via STUN/TURN. - **Infrastructure** : Docker Compose, reverse proxy, TLS automatisé, MariaDB, cron, stratégie de sauvegarde et de restauration. - **Sécurité** : CSRF, rate-limiting, validation MIME réelle, durcissement des en-têtes HTTP, pratique du CTF côté offensif. --- ## 4. Architecture du site ### 4.1 Vue d'ensemble Le site n'est pas hébergé chez un prestataire mutualisé. Il tourne sur une machine Debian administrée directement, dont toute la pile est déclarée dans un unique `docker-compose.yml`. ``` Internet │ ▼ Nginx Proxy Manager ──── TLS Let's Encrypt (renouvellement automatique) │ ├─► cop1corp.fr ........... conteneur Apache + PHP 8.5 ← ce portfolio ├─► mc.cop1corp.fr ........ panel de serveurs de jeu ├─► jdr.cop1corp.fr ....... table de jeu de rôle en ligne ├─► nas.cop1corp.fr ....... serveur multimédia └─► figura.cop1corp.fr .... service d'avatars │ ▼ MariaDB (réseau interne, jamais exposée publiquement) │ ▼ Sauvegarde cron 3h : dump SQL + archive complète, rétention 7 jours ``` Ce qu'il faut en retenir : le portfolio n'est pas une vitrine isolée, c'est un service parmi d'autres sur une infrastructure réelle, en production continue, avec de vrais utilisateurs et de vraies contraintes d'exploitation. ### 4.2 Pile technique du site | Couche | Choix | Raison du choix | |---|---|---| | Système | Debian 13 | Stabilité, cycle de vie long | | Orchestration | Docker Compose | Un fichier décrit toute la machine | | Entrée HTTPS | Nginx Proxy Manager | Certificats automatisés, routage multi-domaines | | Serveur | Apache 2 (php:apache) | `mod_rewrite`, `.htaccess`, simplicité | | Langage | PHP 8.5 | Types stricts, performances, zéro build step | | Données | MariaDB LTS | Relationnel éprouvé, PDO préparé | | Front | HTML/CSS/JS natifs | Aucune dépendance, aucun bundler, chargement immédiat | **Décision d'architecture assumée :** aucun framework front, aucun gestionnaire de dépendances, aucun CDN. Chaque octet servi vient de cette machine. Le site n'a pas de `node_modules`, pas d'étape de build, et ne casse pas parce qu'un paquet tiers a changé d'API. Ce choix a un coût : tout est écrit à la main , et un bénéfice : rien ne dépend de quelque chose qui n'est pas maîtrisé. ### 4.3 Organisation du code ``` html/ ├── index.php ................ Accueil / portfolio (contenu centralisé en tableaux PHP) ├── formation.php ............ Espace de formation BUT R&T : liste des ressources ├── formation_res.php ........ Une ressource : documents, notions animées, quiz ├── formation_doc.php ........ Sert un document de cours, après vérification du badge ├── formation_jobs.php ....... État des analyses en cours (JSON, admin) ├── gestion.php .............. Console d'administration (membres, badges, contenu) ├── contact_send.php ......... Endpoint JSON du formulaire de contact ├── formation_api.php ........ Endpoint JSON : progression et correction du quiz ├── includes/ │ ├── config.php ........... Constantes globales │ ├── db.php ............... Connexion PDO (préparation réelle, pas d'émulation) │ ├── auth.php ............. Garde de session, helpers CSRF, contrôle de rôle │ ├── header.php ........... En-tête unique partagé par toutes les pages │ ├── footer.php ........... Pied de page partagé │ ├── background.php ....... Calques de fond communs (trame de fond, grille, grain) │ ├── mailer.php ........... Client SMTP sans dépendance │ ├── mail_config.php ...... Réglages d'envoi (hors du web) │ ├── badges.php ........... Catalogue, attribution et lecture des badges │ ├── access.php ........... Contrôle d'accès par badge (fail-closed) │ ├── formation_data.php ... Ressources, documents, notions, quiz, progression │ ├── formation_prompt.php . Le brief envoyé au modèle (règles de rédaction) │ └── reading_prefs.php .... Barre « confort de lecture » (police, taille, ambiance) ├── assets/ │ ├── css/ ................. home.css (accueil), corp.css (DA commune), │ │ formation.css, gestion.css, header.css │ ├── js/ .................. home.js, formation.js, gestion.js │ ├── img/ ................. coquelicot, textures, avatars │ └── docs/cv.pdf .......... CV téléchargeable ├── robots.txt · humans.txt · llms.txt · sitemap.xml ├── formation_files/ ......... Documents de cours (interdit d'accès HTTP direct) ├── formation_data/queue/ .... File des analyses en attente (interdit d'accès HTTP) └── contact_data/ ............ Archive .eml des demandes (interdit d'accès HTTP) ``` Convention appliquée partout : chaque fichier s'ouvre sur un bloc de commentaire qui explique son rôle, ses entrées, ses effets de bord et les décisions non évidentes. Le contenu éditorial est centralisé dans des tableaux PHP en tête de fichier, séparé de la présentation : modifier un texte ne demande jamais de toucher au balisage. ### 4.4 Sécurité applicative Mesures effectivement en place, vérifiables : - **Sessions** : cookies `Secure`, `HttpOnly`, `SameSite=Strict`, durée de vie liée au navigateur. - **CSRF** : jeton aléatoire de 32 octets par session, comparé en temps constant avec `hash_equals()`. - **Injection SQL** : PDO avec `ATTR_EMULATE_PREPARES` à `false` : les requêtes sont réellement préparées côté serveur, pas assemblées en PHP. - **Force brute** : comptage des tentatives, verrouillage temporaire, rate-limiting par IP en base. - **Robots de formulaire** : champ honeypot invisible et piège temporel (soumission en moins de trois secondes rejetée). - **Téléversements** : type MIME réel déterminé par `finfo`, jamais par l'extension ; stockage sous nom aléatoire ; dossier interdit d'accès HTTP. - **En-têtes** : `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy`, `Permissions-Policy`. - **Secrets** : fichiers de configuration refusés par Apache, lisibles uniquement par le PHP qui les inclut. --- ## 5. Projets ### 5.1 Cop1Corp : messagerie chiffrée pair-à-pair **Nature :** application de messagerie temps réel, texte et voix, conçue pour que le serveur ne puisse techniquement pas lire ce qui transite. **Le problème adressé.** Une messagerie classique fait transiter chaque message par un serveur central qui le stocke en clair. La confidentialité repose alors sur une promesse : celle que l'exploitant ne regardera pas. Cop1Corp remplace cette promesse par une contrainte mathématique. **Approche technique.** - **Transport pair-à-pair via WebRTC.** Quand deux clients parviennent à s'atteindre directement, les messages et l'audio circulent d'un navigateur à l'autre sans passer par l'infrastructure. Le serveur n'est sollicité que pour la mise en relation initiale. - **Signaling minimal.** Un service Node.js + WebSocket échange les offres, réponses et candidats ICE nécessaires à l'établissement de la session, puis s'efface du chemin de données. Il ne voit ni les messages, ni la voix. - **Chiffrement de bout en bout.** Échange de clés ECDH sur la courbe P-256 via WebCrypto, dérivation d'une clé de session, chiffrement AES-GCM qui assure à la fois la confidentialité et l'authenticité : un message modifié en transit est rejeté, pas simplement illisible. - **Relais de repli.** Lorsque le pair-à-pair échoue (NAT symétrique, réseau d'entreprise restrictif), un relais prend le relais du transport. Il ne manipule alors que du chiffré : le déchiffrement n'a lieu que sur les terminaux, jamais en transit. - **Salons pilotés côté client.** La création d'un salon vocal ou textuel, sa configuration et sa fermeture sont décidées par le client. Le serveur ne détient pas l'annuaire des conversations : il ignore qui parle à qui. **Ce que ce projet démontre :** cryptographie appliquée, maîtrise du temps réel et de la traversée de NAT, conception d'un modèle de menace explicite, et capacité à faire des choix d'architecture où la contrainte technique remplace la confiance. **État :** développement actif. Socle React + TypeScript + Vite fonctionnel, fondations cryptographiques et relais de signaling en place. ### 5.2 Lecteur audio : streaming musical personnalisé **Nature :** composant de lecture musicale en streaming, développé sur mesure et intégré à l'écosystème Cop1Corp. **Le problème adressé.** Un lecteur audio correct ne se résume pas à une balise `