Astral 360 WSA — Accélérateur de sites

Inventaire des comptes

Liste de tous les comptes cPanel avec leur profil de cache, recherche, filtres, application en masse, export CSV.

La page Account Inventory liste tous les comptes cPanel du serveur avec leur profil de cache actuel et permet d'appliquer des actions individuelles ou en masse.

Accès : Barre latérale → Account Inventory.

💡 Cette page est l'outil principal de gestion de masse. Pour configurer un compte spécifique en profondeur (par domaine, par sous-domaine, listes de bots personnalisées), l'utilisateur final passe par son propre panneau cPanel.

Page Account Inventory — liste des comptes cPanel avec leur profil de cache


1. Vue d'ensemble

   ┌──────────────────────────────────────────────────────────┐
   │  Account Inventory                                       │
   │  120 cPanel accounts · 357 domains · 12 overrides        │
   │                            [ Export CSV ]  [ Back ]      │
   ├──────────────────────────────────────────────────────────┤
   │  [ All 120 | Default 95 | Daily 18 | Store 5 | Over. 12 ]│
   ├──────────────────────────────────────────────────────────┤
   │  🔍 [ Filter by username or domain... ]    visible 120/120│
   ├──────────────────────────────────────────────────────────┤
   │  ☐  Account            Domains  Preset       Overrides   │
   │  ☐  user1 / dom.com    3        Default      —     [×]   │
   │  ☐  user2 / shop.fr    7        Daily        2 ov. [×]   │
   │  ☐  user3 / blog.com   1        Store        —     [×]   │
   │  ☐  user4 / app.com    2        Advanced     5 ov. [×]   │
   │  ...                                                     │
   ├──────────────────────────────────────────────────────────┤
   │  0 selected   Apply preset: [Default▾]  □ inc. advanced  │
   │                                  [ Review & apply… ]     │
   └──────────────────────────────────────────────────────────┘

2. En-tête

2.1 Compteurs

Affichés sous le titre :

  • N cPanel accounts — Nombre total de comptes détectés.
  • N domains — Total des domaines hébergés (sommation domaines + sous-domaines + addons).
  • N overrides — Total des configurations personnalisées par-domaine (un compte peut avoir plusieurs overrides).

2.2 Bouton Export CSV

Télécharge l'inventaire complet au format CSV. Le fichier est nommé wsa-account-inventory-YYYYMMDD-HHMI.csv.

Colonnes du CSV :

Colonne Contenu
user Username cPanel
main_domain Domaine principal
domain_count Nombre de domaines (incl. addons + subs)
preset Profil actuel (default, update_daily, online_store, advanced)
override_count Nombre de configurations par-domaine
is_suspended 1 si le compte est suspendu cPanel
last_modified Timestamp de la dernière modification WSA

Utile pour :

  • Facturer en fonction de l'usage WSA réel par client.
  • Audit annuel des configurations clients.
  • Migration de serveur (export, import sur la cible).

2.3 Bouton Back to dashboard

Retour à la page d'accueil WSA.


3. Filtres rapides (tabs)

5 tabs cliquables qui filtrent la liste des comptes :

   [ All 120 | Default 95 | Daily 18 | Store 5 | With overrides 12 ]
Tab Filtre
All Tous les comptes.
Default Comptes sur le profil par défaut serveur.
Daily Comptes sur le profil update_daily.
Store Comptes sur le profil online_store.
With overrides Comptes ayant au moins une configuration par-domaine personnalisée.

Le nombre affiché à côté de chaque tab est le compteur réel mis à jour à chaque chargement de page.


4. Barre de recherche

   🔍 [ Filter by username or domain... ]      visible 120/120

Filtre en direct sur :

  • Username cPanel
  • Domaine principal
  • Domaines additionnels (addon, sub)

La saisie filtre instantanément la table (pas de bouton Search — la recherche est temps réel JavaScript).

À droite, un compteur affiche visible / total pour indiquer combien de lignes sont actuellement affichées.


5. Le tableau des comptes

5.1 Colonnes

Colonne Largeur Contenu
34 px Checkbox pour bulk select. Cliquer la checkbox dans le header sélectionne/désélectionne tout le visible.
Account / main domain flex Username (gras) + domaine principal (mono). Cliquable — ouvre la modale de détail.
Domains num Nombre total de domaines (1 = main seul, 5 = main + 4 addons/subs).
Cache preset flex Profil actuel sous forme de pastille colorée.
Overrides flex « N overrides » si > 0 (pastille brand), sinon « — ».
Actions actions Bouton ⌫ (Clear cache) pour la ligne.

5.2 Bouton ⌫ Clear cache par-row

Sur chaque ligne, un bouton icône avec tooltip Clear this account cache. Au clic :

  1. Confirmation modale : « Clear all cached responses for USERNAME? »
  2. Sur OK : POST account-inventory-clear-cache avec target_user.
  3. Exécution backend : wsa --purgecache-user=<user>.
  4. Bannière de succès : « Cache purge requested for user. »

L'action est rapide (< 1 s par compte typiquement) — les répertoires de cache du compte sont renommés instantanément et supprimés en background.

5.3 Clic sur le nom du compte → modale de détail

Modale de détail du compte — sélecteur de preset et surcharges par domaine

Cliquer sur la colonne Account / main domain d'une ligne ouvre une modale détaillée :

   ┌──────────────────────────────────────────────────────┐
   │  user1                                          [×]  │
   │  example.com · 3 domains                             │
   ├──────────────────────────────────────────────────────┤
   │                                                      │
   │  Cache preset                                        │
   │   ┌─────────────────────────────────────────────┐    │
   │   │ ⚪  Use default settings on my site         │    │
   │   │     Aggressive cache, long TTLs. Best for   │    │
   │   │     static or rarely-updated sites.         │    │
   │   ├─────────────────────────────────────────────┤    │
   │   │ ⚪  Update site every day                   │    │
   │   │     Shorter TTLs and background reval.      │    │
   │   ├─────────────────────────────────────────────┤    │
   │   │ ⚫  Online store                  [current]  │    │
   │   │     Excludes carts, sessions, checkout...   │    │
   │   ├─────────────────────────────────────────────┤    │
   │   │ ⚪  Advanced (custom)                       │    │
   │   │     Per-account custom configuration...     │    │
   │   └─────────────────────────────────────────────┘    │
   │                                                      │
   │  Domains (3)                                         │
   │   main      example.com         inherits     [✏][↺]  │
   │   addon     shop.example.fr     Daily        [✏][↺]  │
   │   sub       blog.example.com    inherits     [✏]     │
   │                                                      │
   │  preset will change online_store → update_daily      │
   │                            [ Cancel ]  [ Apply changes ] │
   └──────────────────────────────────────────────────────┘

5.3.1 Section Cache preset

4 cartes radio :

  • Default settings — Profil défaut serveur (default).
  • Update daily — Profil mise à jour quotidienne (update_daily).
  • Online store — Profil e-commerce avec bypass cart/checkout (online_store).
  • Advanced — Configuration custom gérée par le client cPanel (advanced). À ne pas écraser par bulk apply sauf cas spécifique.

Le profil actuel est marqué [current]. Cliquer une autre carte la sélectionne comme pending — le bouton Apply changes devient actif.

5.3.2 Section Domains

Liste de tous les domaines du compte (main + addons + subs) avec leur preset effectif :

  • inherits — Le domaine utilise le preset de l'utilisateur (pas d'override).
  • Daily / Online store / etc. — Le domaine a un override par-domaine (cf. fichier ~user/.wsa/<domain>.json).

Pour chaque domaine, deux boutons potentiels :

  • ✏ Edit — Ouvre un prompt pour choisir un preset. POST account-inventory-apply-preset-domain avec target_user, target_domain, preset.
  • ↺ Revert — (visible seulement quand un override existe). Supprime le fichier d'override et fait hériter le domaine du preset de l'utilisateur. Demande confirmation.
  • « preset will change X → Y » — Indication du diff.
  • Cancel — Ferme sans appliquer.
  • Apply changes — Active uniquement quand un preset différent est sélectionné. POST account-inventory-apply-preset avec target_user, preset. Page rechargée avec banner de succès/erreur.

6. Bulk actions (barre du bas)

Cette barre apparaît dès qu'au moins un compte est coché dans le tableau.

   3 selected   Apply preset: [Default ▾]   ☐ Include advanced
                                          [ Review & apply… ]

6.1 Compteur N selected

Mis à jour en temps réel quand l'utilisateur (dé)coche des lignes.

6.2 Dropdown Apply preset

3 choix :

  • Default
  • Update daily
  • Online store

(Pas d'option Advanced en bulk — chaque compte avancé doit être configuré individuellement.)

6.3 Checkbox Include advanced

Par défaut décochée. Détermine le comportement quand un des comptes cochés est actuellement en mode Advanced :

  • Décochée (défaut) — Les comptes Advanced sont silencieusement skippés (préserve la config personnalisée du client).
  • Cochée — Les comptes Advanced sont écrasés par le preset choisi. ⚠️ Action destructive — la configuration personnalisée du client est perdue.

6.4 Bouton Review & apply…

Ouvre une modale de plan qui prévisualise les changements avant l'application réelle.


7. Plan modal (prévisualisation)

   ┌──────────────────────────────────────────────────────┐
   │  Bulk preset apply — review                     [×]  │
   ├──────────────────────────────────────────────────────┤
   │   3 selected · 2 changes · 0 overwrites · 1 skipped  │
   │                                                      │
   │  ⚠ 0 advanced accounts will be overwritten           │
   │                                                      │
   │  User     From       →    To       Note              │
   │  user2    Default    →    Daily                      │
   │  user5    Store      →    Daily                      │
   │  user7    Default    =    Default   no change        │
   │                                                      │
   │  Apply will run on 2 accounts and skip 1.            │
   │                            [ Cancel ]  [ Apply to 2 ] │
   └──────────────────────────────────────────────────────┘

7.1 Compteurs en haut

  • N selected — Comptes cochés.
  • N changes — Comptes qui vont effectivement changer.
  • N overwrites — Comptes en mode Advanced qui seront écrasés (visible uniquement si Include advanced est coché).
  • N skipped — Comptes inchangés ou skippés (raison : Advanced sans include, ou no change car déjà sur le preset cible).

7.2 Bannière d'avertissement overwrites

Si des comptes Advanced vont être écrasés, une bannière jaune en haut signale :

⚠️ N advanced accounts will be overwritten — their custom configuration will be lost.

7.3 Tableau par-ligne

Pour chaque compte sélectionné :

  • User / Domain
  • From (preset actuel, pastille)
  • Arrow (→ pour changer, = pour skip)
  • To (preset cible, ou « (no change) » pour skip)
  • Note (« overwrites custom », « skip · Advanced », « no change »)

Les lignes skip sont visuellement grisées ; les overwrites sont en orange/jaune.

  • Cancel — Ferme la modale, aucune action.

  • Apply to N accounts — Désactivé si N=0. Sur clic :

    1. POST account-inventory-bulk-apply avec users[], preset, include_advanced=0|1.
    2. Pour chaque user dans users[], le serveur :
      • Valide le username (regex ^[a-z][a-z0-9_-]{0,31}$).
      • Lit la config actuelle.
      • Si Advanced et include_advanced=0 : skip.
      • Sinon : applique le nouveau preset, déclenche wsa --rebuild-user=<user>.
    3. Bannière de succès : « Bulk preset apply: N applied, M skipped (advanced mode). »

8. Sécurité et validation

Toutes les actions de cette page sont validées en triple profondeur :

8.1 Côté client (JS)

  • Username : regex ^[a-z][a-z0-9_-]{0,31}$ avant l'envoi.
  • Preset : choix limité aux options du dropdown.
  • Pas de submit si la validation échoue.

8.2 Côté dispatcher PHP

  • target_user re-validé avec la même regex avant tout traitement.
  • target_domain validé contre la regex RFC domain.
  • preset validé contre la liste blanche dans apply_preset_to_user.

8.3 Côté account_inventory class

  • Vérification d'existence du compte (pwd -u <user>).
  • Vérification de propriété du domaine (domain_belongs_to_user).
  • escapeshellarg sur tout argument passé à shell_exec.

Aucune injection possible via la configuration ou les POST de cette page.

8.4 Audit log

Chaque action (clear-cache, apply-preset, bulk-apply, apply-preset-domain, revert-domain, export-csv) est journalisée dans /var/log/wsa/wsa.log avec :

  • Username de l'admin WHM qui a déclenché l'action.
  • Username cible et preset appliqué.
  • Timestamp.
  • Résultat (success/skip/fail).

9. Pour aller plus loin

  • Mode simple cPanel — Comment les clients utilisent le profil que vous appliquez ici.
  • Mode avancé cPanel — Comment les clients passent au mode Advanced (et donc sortent du contrôle bulk-apply sans include_advanced).
  • Ligne de commandewsa --rebuild-user, wsa --purgecache-user, équivalents CLI des actions de cette page.