Skip to content

Marque blanche ​

Le superviseur est distribué par Desautel et par ses revendeurs. Un revendeur livre le même logiciel sous sa propre identité : son logo, ses couleurs, le nom de son compte d'administration, ses noms de profils de centrale.

Ce document décrit comment cette identité est portée, où elle se pose, et comment en ajouter une.

Contrainte de départ ​

Un seul installateur est compilé. Il porte l'identité Desautel — c'est l'éditeur du logiciel, et c'est lui qui signe le binaire. La marque appliquée au poste se choisit pendant l'installation, dans une page dédiée de l'assistant. Compiler un installateur par revendeur multiplierait les binaires à signer, à tester et à archiver pour la conformité CRA, sans rien apporter.

Il s'ensuit que toutes les marques sont embarquées dans l'installateur, et qu'une seule est déposée sur le poste.

Ce qu'une marque contient ​

Une marque est un ensemble de valeurs et de fichiers. Rien d'exécutable : ni code, ni script.

Les noms de fichier sont imposés : la construction cherche logo.png, logo-white.png et app.ico sous ce nom exact, quel que soit le distributeur.

ÉlémentClé ou fichierNatureValeur Desautel
Identifiantidtexte court, sans accent ni espacedesautel
Nom de l'éditeurnametexteDesautel
Adresse de l'éditeururlURLhttps://www.desautel.fr/contact
Logo principallogo.pngPNG, fond transparent—
Logo sur fond sombrelogo-white.pngPNG, fond transparent—
Marque réduite (optionnelle)logo-mark.pngPNG carré ; à défaut, l'icône sert(absente)
Icône de l'applicationapp.icoICO multi-tailles—
Couleur de marquecolorBase, colorDark, colorDeep3 nuances (base, foncée, profonde)#b81b34, #9e1329, #8a1226
Dégradé du panneau de marquegradientFrom, gradientMid, gradientTo3 nuances (départ, médiane, arrivée)#ae1a33, #8a1226, #730f1f
Teintes des lignes de profiltintSoft, tintStrong, tintAvatar3 nuances (survol, retenue, avatar)#fcf3f4, #f6e3e6, #fbedef
Noms des profils livrésprofileNamestable indexée par identifiant de profil(aucun)
Téléphone de l'assistancesupportPhonetexte, optionnel04 72 25 33 00
Courriel de l'assistancesupportEmailtexte, optionnelcontact@desautel.fr
Adresse postalesupportAddresstexte, optionnel945 avenue des Pré Seigneurs - 01120 MONTLUEL

Le compte d'administration ne figure pas dans cette liste : ni son nom ni son mot de passe n'appartiennent à la marque. Voir plus bas.

Les trois coordonnées — supportPhone, supportEmail, supportAddress — sont celles que la modale d'assistance affiche à l'exploitant. Elles se résolvent une par une : un revendeur qui ne déclare que son téléphone garde le courriel et l'adresse de l'éditeur. Un poste de supervision étant le plus souvent coupé d'Internet, ce sont les seuls moyens de joindre quelqu'un depuis l'écran — mieux vaut la permanence de l'éditeur qu'un champ vide.

Le mot de passe du compte d'administration ne fait pas partie de la marque : il reste le secret applicatif Security:SuperAdminPassword, propre à l'installation et jamais versionné. Voir la politique de sécurité.

Le nom du compte, lui, se saisit à l'installation. L'assistant présente d'abord le choix de la marque, puis la page du compte d'administration, dont le nom est prérempli avec l'identifiant de la marque retenue — et reste modifiable. Il n'accepte que lettres, chiffres, point, tiret et soulignement : c'est un identifiant de connexion, et l'exploitant doit pouvoir le taper. Le mot de passe y est demandé deux fois, les deux saisies devant coïncider.

Une installation antérieure à cette saisie garde son compte desautel : la clé Security:SuperAdminUsername est absente, et la résolution retombe sur ce nom.

Où la marque se pose ​

deployment/brands/<identifiant>/     ← une marque = un dossier, embarqué dans l'installateur
├── brand.json                       ← noms, couleurs, identifiant du compte d'administration
├── logo.png                         ← bandeau déplié, en-tête (fond clair)
├── logo-white.png                   ← connexion et démarrage (fond sombre)
├── logo-mark.png                    ← bandeau replié, avatar du compte (optionnel)
└── app.ico                          ← raccourcis, fenêtres, barre des tâches ; sert de marque
                                        réduite quand `logo-mark.png` est absent

        │  l'assistant d'installation copie le dossier choisi
        ▼
%ProgramData%\<AppName>\brand\       ← la marque retenue pour ce poste

Le backend lit ce dossier une fois au démarrage et sert son contenu à l'interface avec la configuration publique — donc avant toute authentification. Le client de bureau et le gestionnaire de service le lisent chacun au lancement pour teinter leurs fenêtres natives : ils démarrent indépendamment du service, et ne peuvent pas le lui demander. Le code de lecture vit dans le projet partagé, seul endroit que ces trois applications atteignent.

Ce dossier est lu, jamais écrit par l'application. Changer de marque sur un poste installé se fait en réinstallant, pas depuis l'interface : la marque identifie le distributeur, elle n'est pas un réglage d'exploitation.

Le premier écran ​

Le client de bureau s'ouvre sur un écran de démarrage plein écran, posé au-dessus de la fenêtre principale pendant le chargement de l'interface web. C'est le premier moment où le poste est visible, et le plus long — au démarrage de la machine, il précède tout le reste. Trois surfaces se superposent alors, et les trois portent la teinte de la marque :

SurfaceCe qu'elle prend
Écran de démarragedégradé complet et logo-white.png
Fond de la fenêtre principaleteinte médiane du dégradé
Fond du WebView2teinte médiane, sous la page tant qu'elle n'a pas peint

Elles suivent la même valeur pour que la fermeture de l'écran de démarrage ne se voie pas : un fond différent dessous ferait clignoter une couleur étrangère au moment du fondu.

Cet écran s'affiche avant que le service ait répondu — il ne peut donc pas lui demander la marque, et la lit lui-même dans le dossier déposé sur le poste. C'est la raison pour laquelle la marque expose ses images sous deux formes : un chemin de fichier pour les fenêtres natives, une URI de données pour l'interface web.

Le logo est chargé d'un bloc plutôt que laissé ouvert : un fichier verrouillé par la fenêtre empêcherait l'installateur de reposer une marque sur un poste déjà installé.

Ce que la marque ne change pas ​

  • Le nom du produit — « Superviseur » est le nom du logiciel, pas celui du distributeur.
  • Les noms techniques — service Windows, rôle PostgreSQL, chemins d'installation, ports. Les changer casserait les procédures d'exploitation et les scripts de dépannage sans bénéfice visible.
  • L'adressage Modbus — un profil de centrale décrit un firmware, pas une marque commerciale. Seul le nom d'un profil livré peut porter le vocabulaire du revendeur ; sa cartographie de registres est identique. Le nom se déclare par identifiant de profil dans profileNames, et s'applique au démarrage aux profils livrés que l'exploitant n'a pas modifiés — ceux qu'il a repris en main gardent le sien. « Rétablir » un profil lui rend le nom de la marque, non celui du catalogue de l'éditeur : le poste reste livré sous cette marque.
  • L'installateur — il reste aux couleurs Desautel, éditeur du logiciel.
  • L'icône gravée dans les exécutables — celle que l'explorateur Windows affiche sur le fichier .exe lui-même est une ressource du binaire, figée à la compilation ; la changer par marque imposerait un exécutable par marque. Tout ce que l'exploitant voit et manipule porte en revanche l'icône de la marque : raccourcis du menu Démarrer, du bureau et du démarrage automatique — pointés par l'installateur sur app.ico —, fenêtres du client de bureau, barre des tâches et icône de la zone de notification.
  • Les licences — une licence est liée au matériel et au logiciel, jamais au distributeur. Le fichier vit sous %ProgramData%\<AppName>\license.key, chemin qui ne porte pas la marque ; l'empreinte matérielle est faite de l'UUID système, du numéro de série de la carte mère et de l'identifiant du processeur ; le contenu signé nomme le logiciel et la machine, et rien d'autre. Changer de marque sur un poste, ou en installer une nouvelle, laisse donc la licence en place et valide. Cet invariant est verrouillé par dotnet/tests/client/Licensing/LicenseIsBrandIndependentTests.cs : y toucher fait échouer la suite. Voir l'émission de licences.

Où l'identité est appliquée ​

SurfaceCe qui la porte
Nom et logo du siteGlobalConfiguration — propre à l'installation, réglable en Réglages
Nom du produit, du service, de l'installateurapp.config.json, figé à la compilation
Bandeau latéral, en-têtelogo de la marque ; marque réduite une fois replié
Connexion et démarragelogo sur fond sombre, dégradé et teintes de la marque
Écran de démarrage du client de bureaulogo-white.png et dégradé, lus au lancement
Coordonnées de l'assistancesupportPhone, supportEmail, supportAddress
Avatar du compte d'administrationmarque réduite
Chrome de l'interface--color-brand*, écrites au chargement
Fenêtres du client, menu du gestionnairecouleur de marque et icône, lues au lancement
Raccourcis, barre des tâches, zone de notificationapp.ico de la marque
Nom du compte d'administrationsaisi à l'installation, prérempli avec la marque
Noms des profils livrésprofileNames du descripteur

Les couleurs étant déjà des variables CSS, une marque les écrit au chargement de la configuration : aucun composant n'a à la connaître.

Les neuf teintes sont déclarées, jamais calculées. Dériver un dégradé et des fonds de ligne de trois nuances de base donne un résultat plat sur une marque sombre et criard sur une marque vive ; et les couleurs livrées auraient bougé au passage. Une marque qui n'en déclare aucune reprend celles de l'éditeur, à l'identique.

Le panneau de marque de l'écran de connexion partage ses teintes avec l'écran de démarrage : les deux suivent la même déclaration. Le reste de la palette de connexion — neutres sable, encres, filets — n'appartient pas à la marque : c'est l'habillage de l'écran, commun à toutes.

Ajouter une marque ​

  1. Créer deployment/brands/<identifiant>/ sur le modèle de desautel/, seul pack livré.
  2. Y déposer les trois images — logo.png, logo-white.png, app.ico — et renseigner brand.json.
  3. Déclarer la marque dans app.config.json, section Brands : elle apparaît alors dans la page de choix de l'assistant d'installation.
  4. Reconstruire l'installateur — voir la construction de l'installateur.

Aucun code n'est à modifier. La construction refuse une marque déclarée sans dossier, dont le brand.json est illisible, dont l'identifiant déclaré ne correspond pas, ou à laquelle il manque une image : mieux vaut une erreur lisible au moment de la construction qu'un poste à moitié habillé.

Trois emplacements, trois formes. Le logo principal occupe le bandeau déplié et l'en-tête, sur fond clair. Le logo sur fond sombre se pose sur le dégradé de la marque, à la connexion et au démarrage. La marque réduite tient dans un carré — bandeau replié, avatar du compte d'administration — là où un mot-symbole horizontal deviendrait illisible ; sans elle, l'icône de l'application sert, étant déjà pensée pour cette taille.

L'identité retenue est mémorisée d'un démarrage à l'autre : sans cela, l'écran de démarrage porterait les couleurs de l'éditeur le temps d'un aller-retour avec le serveur, puis basculerait sous les yeux de l'opérateur. Seul le tout premier lancement d'un poste neuf montre encore l'identité livrée.

Le dépôt ne livre que la marque de l'éditeur. Une marque revendeur s'y ajoute par la procédure ci-dessus : elle donne ses couleurs, ses images, et peut renommer un profil livré — la centrale est la même, son nom commercial change.

Éprouver une marque en développement ​

Les packs sont déposés par l'installateur : hors d'un poste installé il n'y a aucun dossier à lire, et tout se présente sous la marque livrée. Le lancement peut donc en désigner une :

powershell
dotnet run --project dotnet/backend -- --brand <identifiant>

Le front reçoit son habillage du service : le lancer ainsi suffit à voir l'interface entière — écran de connexion, en-tête, couleurs, nom des profils — sous la marque demandée, sans rien recopier dans le dossier de données. Le client de bureau et le gestionnaire de service lisent le même réglage, par la variable d'environnement SUPERVISEUR_BRAND, qui vaut aussi pour le service :

powershell
$env:SUPERVISEUR_BRAND = "<identifiant>"

La valeur est un identifiant de deployment/brands/, ou le chemin d'un dossier quelconque — de quoi essayer un pack qu'un revendeur envoie sans l'installer dans le dépôt. Un identifiant introuvable ramène à la marque du poste, avec un signalement au journal : une faute de frappe n'interrompt pas la séance.

Ce raccourci n'est compilé qu'en DEBUG. Sur un poste livré, la marque ne vient que du dossier déposé par l'installateur, et aucun argument de lancement ne peut en présenter une autre.

Repli ​

Une installation dont le dossier brand est absent ou illisible démarre sur la marque Desautel, compilée dans l'application. Le superviseur ne refuse pas de démarrer pour une image manquante : un poste de supervision incendie doit s'ouvrir même mal habillé.

Documentation Technique