-
Launcher Version 3.4.1 Stable
released this
2026-11-10 17:06:31 +01:00 | 8 commits to master since this release🖥️ Launcher 3.4.1 — Site vitrine et captures WebP
Nouveau : le site vitrine LanisysGames (
website/GameLauncher.Website, ASP.NET Core Razor Pages), en ligne sur https://www.games.lanisys.fr. Il présente les jeux et le launcher, propose le téléchargement du launcher vérifié par signature, toutes les notes de version d'Exovival Zombie Reborn et des actualités. Il est isolé de la Launcher API et déployé sur un VPS séparé.Le launcher lui-même ne change pas (numéro de version seulement). L'outil UiSnapshot produit désormais aussi des captures en WebP, le format des images du site.
Aucune action sur le VPS du launcher. Le site s'installe sur son propre VPS :
website/deploy/LISEZMOI.md.✨ En bref
Changement 🆕 Nouveau Site vitrine : accueil, launcher, jeux, notes de version, actualités, mentions légales, confidentialité 🆕 Nouveau Téléchargement du launcher affiché seulement si la signature de launcher-update.jsonest valide (même clé et même code que le launcher)🆕 Nouveau tools\ui-snapshot.bat --format webp --quality <1-100>: captures en WebP🛡️ Sécurité Site en lecture seule : CSP stricte, aucun cookie, aucune ressource externe ; service systemd durci, sorties réseau limitées au serveur du launcher 🖥️ Launcher Aucun changement fonctionnel 🖧 Serveur Aucun changement sur le VPS du launcher 🧪 Qualité 22 nouveaux tests automatisés (40 cas)
🌐 Site vitrine
Pages
Adresse Contenu /Téléchargement du launcher, jeux, dernières actualités /launcherFonctions du launcher (côté joueur), téléchargement (version, taille, empreinte SHA-256), première installation, notes de la dernière version, lien vers les publications Gitea, questions fréquentes /jeux/exovival-zombie-rebornHistoire, contenu, cassettes VHS, extension « L'abri » en développement, configuration /jeux/<jeu>/notes-de-versionToutes les notes de version du jeu /jeux/projet-multijoueurJeu en préparation (page générique) /actualitesArticles en Markdown ( Content/News/*.md)/mentions-legales,/confidentialiteÉditeur, hébergeur ; données (aucun cookie, journaux 14 jours) Un thème par univers :
launcher(violet / cyan, comme le thème « default »),exovival(noir, vert, titres condensés ; en-tête « lampe UV » qui révèle le message de Léa sous le pointeur),multi(jeu en préparation). Bouton « Nous contacter » : simple lienmailto:, aucun formulaire.Ce que le site lit, et comment
Fichier Usage Contrôles launcher/launcher-update.jsonVersion, exécutable à télécharger, notes de la dernière version Signature ECDSA vérifiée ( UpdateSignature, cléupdate-signing.pubintégrée à l'exe du site) ; exécutable sur le même serveur, en https ; produit attendu facultatif (Site:Launcher:Product) ; sections « Serveur », « Développement »… masquées<jeu>/manifest.jsonVersion, tailles, notes de version Jeu attendu ( GameId) ; notes bornées et nettoyées comme dans le launcher (ChangelogLimits.Normalize)- Lecture côté serveur, en arrière-plan, toutes les 10 minutes, avec requêtes conditionnelles (
ETag,Last-Modified). Les pages ne déclenchent aucune requête sortante ; le navigateur des visiteurs ne contacte le serveur du launcher qu'en cliquant sur « Télécharger ». - https uniquement, aucune redirection suivie, taille et délai bornés (256 Ko pour
launcher-update.json, 32 Mo pour un manifest). - Fichier refusé (signature, produit, serveur, autre jeu) : l'information est retirée du site. Serveur injoignable : la dernière version valide reste affichée.
- La Launcher API n'est jamais appelée.
Actualités en Markdown
Liseuse maison (
Services/SafeMarkdown.cs, sans dépendance) : titres, listes, citations, code, liens, images. Tout le texte est encodé : le HTML écrit dans un article s'affiche tel quel. Liensjavascript:,data:et//…retirés ; images du site (/img/…) uniquement. Brouillons (draft: true) visibles seulement en développement.🛡️ Sécurité du site
- CSP stricte : scripts, styles, images et polices du site uniquement ; aucun script en ligne ; aucune ressource externe (polices Sora et Barlow auto-hébergées, licence OFL).
- En-têtes : HSTS,
X-Content-Type-Options,X-Frame-Options: DENY,Referrer-Policy,Permissions-Policy,Cross-Origin-Opener-Policy,Cross-Origin-Resource-Policy; en-têteServerretiré. - Lecture seule :
GETetHEADseulement (405 sinon), corps de requête limité à 1 Ko. - Aucun cookie, aucun compte, aucune mesure d'audience ; clés de protection des données en mémoire.
- Limite de requêtes par adresse IP : site (300 / min) et nginx (10 / s).
- Certificat HTTPS du serveur du launcher : même règle que par défaut ; en cas de refus, le journal détaille la chaîne de certificats et la cause (
TlsDiagnostics). - Réglages contrôlés au démarrage : un réglage incorrect arrête le site avec un message clair.
🚀 Déploiement (VPS séparé)
Pourquoi un autre VPS : une faille du site n'atteint ni l'API d'administration, ni le journal d'audit, ni les demandes des joueurs, ni les fichiers des jeux ; un pic de trafic sur le site ne ralentit pas les téléchargements.
Fichier Rôle tools\publish-site.batExe autonome linux-x64 (aucun .NET sur le VPS), archive + empreinte SHA-256 website/deploy/installer-site.shArchive vérifiée par son empreinte, binaires root dans /opt/lanisys-site,appsettings.Production.jsonconservé, sorties réseau recalculées (sortie.conf), retour à la version précédente si le site ne répond paswebsite/deploy/lanisys-site.serviceCompte temporaire ( DynamicUser), système en lecture seule, aucun privilège, dossier personnel/var/lib/lanisys-site(700), connexions sortantes limitées au serveur du launcher et au DNS, mémoire limitéewebsite/deploy/nginx-site.confRedirections http → https et domaine nu → www, HTTP/2, TLS 1.2 / 1.3, renouvellement Let's Encrypt sans coupure (webroot), lectures seulement, fichiers cachés jamais servis website/deploy/LISEZMOI.mdGuide complet : domaine, publication, installation, nginx et HTTPS, mentions légales, journaux, actualités, ajout d'un jeu, dépannage Compatibilité Debian 11 (constatée lors de la mise en ligne) :
- .NET a besoin d'un dossier personnel pour vérifier un certificat HTTPS ; le compte temporaire de systemd n'en a pas sous Debian 11 →
StateDirectory=lanisys-site+HOME=/var/lib/lanisys-site. - nginx 1.18 ne connaît pas
http2 on;→listen 443 ssl http2;.
📸 UiSnapshot : captures en WebP
Option Effet --format png|webpFormat des images ( pngpar défaut) ; pages supplémentaires.p2.webp… comprises--quality <1-100>Qualité WebP (85 par défaut ; 100 = sans perte) ; ignorée en PNG tools\ui-snapshot.bat --filter "main-*,launcher-update-verified" --format webp --quality 85- Transparence conservée (
--backdrop transparent).index.htmletreport.mdaffichent PNG et WebP ; une série complète efface aussi les anciens.webp. - Encodage par SkiaSharp 3.119.1 (Microsoft, licence MIT) : Windows sait lire le WebP mais pas l'écrire. Utilisé par cet outil de développement seulement : le launcher, la Launcher API et le site n'en dépendent pas.
🧪 Tests
Classe Vérifie WebsiteRemoteContentTests(12 tests, 22 cas)launcher-update.json: signature valide, contenu modifié, autre clé, exécutable hors du serveur (autre hôte, http, autre port, paramètres, pas un.exe), produit inattendu, clé intégrée ; manifest : bornes et nettoyage des notes, autre jeu, fichier illisible ; adresses https uniquement ; lecture bornée ; message d'erreur détaillé (certificat refusé)WebsiteMarkdownTests(6 tests, 12 cas)HTML brut affiché tel quel, liens javascript:/data:////vbscript:retirés, injection d'attribut impossible, images hors du site refusées, syntaxe prise en chargeWebsiteNewsTests(4 tests, 6 cas)En-tête des articles, noms de fichiers invalides, valeurs inconnues neutralisées, brouillons Les sources du site sont compilées dans le projet de tests (sans référence au projet du site, dont l'
appsettings.jsonremplacerait celui de la Launcher API dans le dossier des tests).⬆️ Mise à niveau
- Launcher 3.4.1 : facultatif, il ne change rien pour les joueurs. Si publié : mise à jour signée habituelle, sans
--priority(une version prioritaire déjà publiée est reprise automatiquement). - VPS du launcher, nginx, trousseau : aucune action.
- Site vitrine :
website/deploy/LISEZMOI.md(VPS séparé, Debian 11 à 13), puis compléterappsettings.Production.json: adresse publique, contact, mentions légales. - Gitea : le lien « Toutes les versions » du site suppose un dépôt public ; sinon, vider
Site:Launcher:ReleasesUrl.
- Administrateurs : aucune action.
- Joueurs : aucune action. Le site leur permet désormais de télécharger le launcher et de lire les notes de version sans l'installer.
- RGPD : le site ne collecte aucune donnée personnelle (ni compte, ni cookie, ni formulaire) ; journaux nginx conservés 14 jours, détaillés sur la page « Confidentialité ».
🔏 La sécurité des mises à jour du launcher ne change pas : la signature numérique et l'empreinte SHA-256 de chaque nouvelle version sont vérifiées avant toute installation.
What's Changed
Contributors
Full Changelog: v3.4.0...v3.4.1
Downloads
- Lecture côté serveur, en arrière-plan, toutes les 10 minutes, avec requêtes conditionnelles (