v0.28.10 — Mode auto + settings lock par license + fix post-install state
Mode auto (auto-launch d'une version désignée au démarrage et après exit) : - Master toggle + version désignée via bouton AUTO (orange) sur chaque row - Countdown 5 s configurable avec popup d'annulation (StartAutoLaunchCountdown) - Args CLI passés à PROSERVE : opérateur tape juste le nom (autoconnect, login), le launcher ajoute -/=/quotes. Format produit identique à un .bat. Fix : passage de ArgumentList à Arguments string pour éviter le quotage auto .NET sur les args contenant '=' (cassait FParse::Value). - Garde-fou anti double-lancement : refuse de lancer si _runningProserve vivant OU IProcessLauncher.IsRunning() détecte une instance externe. Silent pour les triggers auto, popup pour les clics manuels. - Option « Attendre santé système » : countdown différé tant que les health checks ne sont pas tous OK (phase 1 du dialog avec liste des pending). Settings lock par license (remplace l'ancien lock global manifest) : - Colonne settings_lock_password_hash sur table licenses (migration 003) - Backoffice : bouton 🔒 par license pour set/clear hash SHA-256 - Payload /license/validate inclut settingsLockPasswordHash (v3 canonique) - 3-tier fallback signature : v3 → v2 → legacy pour compat cache offline - SettingsLockService : in-memory unlock state, gate l'expander Avancés - SettingsLockDialog : prompt mdp, persiste déverrouillé jusqu'au restart Fix post-install : la row restait en visuel « Installing » jusqu'au prochain Check Updates. Reset explicite row.State=InstalledIdle + _activeRow=null AVANT le RebuildList post-install pour purger l'instance orpheline. Migrations : - 002_channel_betas.sql réécrit en ALTER simples (DELIMITER cassait migrate.php qui split sur ';\n') - migrate.php tolère « Duplicate column/key name » comme idempotent Strings (5 langues, ~25 nouvelles) : - Renomme « Relance automatique » → « Lancement automatique » (dialog utilisé pour les 3 entry points : clic, startup, post-exit) - Tooltips auto-mode, settings lock prompts, health wait phase, etc. Bumps : 0.27.4 → 0.28.10 (csproj + .iss). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,45 +5,14 @@
|
||||
--
|
||||
-- À jouer après 001_init.sql.
|
||||
--
|
||||
-- IDEMPOTENCE : OVH mutualisé peut tourner sur MariaDB pré-10.0.2 où
|
||||
-- ALTER TABLE ... IF NOT EXISTS n'existe pas. On contourne avec une PROCEDURE
|
||||
-- temporaire qui consulte INFORMATION_SCHEMA avant chaque ALTER. Comme ça la
|
||||
-- migration peut être re-jouée sans erreur sur n'importe quelle version
|
||||
-- MariaDB / MySQL 5.5+.
|
||||
-- IDEMPOTENCE : les ALTER ci-dessous throw une exception sur OVH si la colonne /
|
||||
-- l'index existe déjà. migrate.php attrape ces erreurs spécifiques ("Duplicate
|
||||
-- column", "Duplicate key name") et continue. Tu peux rejouer le script sans
|
||||
-- risque sur n'importe quelle DB (vide, partiellement migrée, complètement).
|
||||
|
||||
DROP PROCEDURE IF EXISTS ps_launcher_migrate_002;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE ps_launcher_migrate_002()
|
||||
BEGIN
|
||||
-- channel
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'licenses' AND COLUMN_NAME = 'channel'
|
||||
) THEN
|
||||
ALTER TABLE licenses ADD COLUMN channel VARCHAR(64) NULL AFTER max_machines;
|
||||
END IF;
|
||||
|
||||
-- can_see_betas
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'licenses' AND COLUMN_NAME = 'can_see_betas'
|
||||
) THEN
|
||||
ALTER TABLE licenses ADD COLUMN can_see_betas TINYINT(1) NOT NULL DEFAULT 0 AFTER channel;
|
||||
END IF;
|
||||
|
||||
-- index sur channel (une simple recherche bénéficie peu mais c'est pas cher)
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'licenses' AND INDEX_NAME = 'idx_channel'
|
||||
) THEN
|
||||
ALTER TABLE licenses ADD INDEX idx_channel (channel);
|
||||
END IF;
|
||||
END $$
|
||||
DELIMITER ;
|
||||
|
||||
CALL ps_launcher_migrate_002();
|
||||
DROP PROCEDURE ps_launcher_migrate_002;
|
||||
ALTER TABLE licenses ADD COLUMN channel VARCHAR(64) NULL AFTER max_machines;
|
||||
ALTER TABLE licenses ADD COLUMN can_see_betas TINYINT(1) NOT NULL DEFAULT 0 AFTER channel;
|
||||
ALTER TABLE licenses ADD INDEX idx_channel (channel);
|
||||
|
||||
-- Note : pas de migration de data. Les licenses existantes gardent
|
||||
-- channel = NULL (= manifest default) et can_see_betas = 0 (= pas d'accès aux betas).
|
||||
|
||||
15
server/migrations/003_settings_lock.sql
Normal file
15
server/migrations/003_settings_lock.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
-- PS_Launcher schema v3
|
||||
-- Ajoute settings_lock_password_hash sur la table licenses : permet à l'admin
|
||||
-- de définir un mot de passe par-license qui verrouille la section "Avancés"
|
||||
-- des Settings côté launcher. Le hash SHA-256 (hex lowercase) est renvoyé au
|
||||
-- launcher dans la réponse signée de /license/validate, donc l'intégrité
|
||||
-- bénéficie de la signature Ed25519 existante.
|
||||
--
|
||||
-- À jouer après 001_init.sql et 002_channel_betas.sql.
|
||||
-- migrate.php attrape "Duplicate column" comme idempotent.
|
||||
|
||||
ALTER TABLE licenses ADD COLUMN settings_lock_password_hash CHAR(64) NULL AFTER can_see_betas;
|
||||
|
||||
-- Note : les licenses existantes ont settings_lock_password_hash = NULL → pas
|
||||
-- de verrouillage côté launcher → comportement identique à avant. L'admin
|
||||
-- attribue manuellement via le bouton 🔒 Lock dans licenses.php.
|
||||
Reference in New Issue
Block a user