Client (C# / .NET 8 / WPF, MVVM via CommunityToolkit.Mvvm):
- PSLauncher.App: WPF UI dark theme (Epic-style sidebar + hero + big play button)
with UpdateAvailableDialog rendering Markdown release notes via Markdig.Wpf.
- PSLauncher.Core: services for installation registry (scans Proserve v{X.Y.Z}/),
process launcher, manifest fetch, SHA-256 integrity, HTTP download with
progress, ZIP install via .tmp + atomic rename, update orchestrator.
- PSLauncher.Models: RemoteManifest, InstalledVersion, LocalConfig DTOs.
Server (PHP 8 for OVH mutualisé, deployed under www/PS_Launcher/):
- Front controller + routes /manifest and /releasenotes/{version}.
- Static signed-manifest workflow with tools/sign-manifest.php CLI to
recompute SHA-256 and sizeBytes after each ZIP upload.
- .htaccess: HTTPS redirect, rewrite, security headers.
- config.example.php template; real config.php is gitignored.
Cohabiting versions: each release lives in its own Proserve v{version}/ folder
under installRoot. Old versions are never deleted automatically.
Roadmap: v0.3 = HTTP Range resume + Polly retry + state.json,
v0.4 = MySQL license + Ed25519 signatures + DPAPI, v0.5 = settings/UX polish.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
784 B
ApacheConf
29 lines
784 B
ApacheConf
RewriteEngine On
|
|
RewriteBase /PS_Launcher/
|
|
|
|
# HTTPS forcé
|
|
RewriteCond %{HTTPS} off
|
|
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
|
|
|
# Pas de listing de répertoires
|
|
Options -Indexes
|
|
|
|
# /PS_Launcher/api/* → api/index.php (le PATH_INFO est exposé via QUERY_STRING)
|
|
RewriteRule ^api/?$ api/index.php [QSA,L]
|
|
RewriteRule ^api/(.*)$ api/index.php/$1 [QSA,L]
|
|
|
|
# Bloquer l'accès direct aux fichiers sensibles
|
|
<FilesMatch "\.(sql|md\.bak|log|env)$">
|
|
Require all denied
|
|
</FilesMatch>
|
|
|
|
# Headers de sécurité
|
|
<IfModule mod_headers.c>
|
|
Header set X-Content-Type-Options "nosniff"
|
|
Header set X-Frame-Options "DENY"
|
|
Header set Referrer-Policy "no-referrer"
|
|
</IfModule>
|
|
|
|
# Type MIME pour les ZIPs (assure la pris en compte de Range:)
|
|
AddType application/zip .zip
|