This commit fixes potential 404 errors when downloading certificate and private key files.
Changes made:
1. **CertificateController.php**: The logic of the `download()` method has been reviewed. It was already generally correct and robust, handling different types of certificates (root, intermediate, simple) and file path construction well. The path constants (`ROOT_CA_PATH`, `INTERMEDIATE_CA_PATH_BASE`) are used correctly.
2. **app/src/Views/certificates/index.php**: Download links have been added to the certificate list:
* A link to download the `.pem` certificate file is now available for each certificate.
* For root certificates (`ca.cert.pem`), an additional link to download the private key (`ca.key.pem`) is displayed if you have the 'admin' role.
* Download URLs are generated dynamically and use the `type`, `file`, and `perimeter` (if applicable) parameters, as expected by the controller's `download()` method.
* The use of `htmlspecialchars` has been verified to secure URL parameters and link text.
Indirect code testing has been performed. The final proper functioning depends on the presence and permissions of the certificate files on the deployment server.
La vue `app/src/Views/users/edit_password.php` utilisait des chemins relatifs incorrects pour inclure `header.php` et `footer.php`, provoquant une erreur fatale.
Cette correction remplace les chemins relatifs par des chemins absolus en utilisant la constante `APP_ROOT_DIR`.
Modifications :
- Mise à jour des `require_once` pour `header.php` et `footer.php` dans `app/src/Views/users/edit_password.php` pour utiliser `APP_ROOT_DIR`.
- Ajout de commentaires en début de fichier pour lister les variables attendues du contrôleur.
- Uniformisation de l'affichage des messages d'erreur via la variable `$errorMessage`.
J'ai ajouté les clés de traduction nécessaires pour la fonctionnalité de modification de rôle utilisateur à tous les fichiers de langue.
- Les traductions françaises et anglaises sont fournies.
- Pour les autres langues (ar, de, es, hi, it, ja, pt, ru, zh), les textes anglais sont utilisés comme placeholders.
Ceci corrige l'omission de la mise à jour de tous les fichiers de langue lors de l'implémentation initiale de la fonctionnalité.
J'ai implémenté la possibilité pour les administrateurs de changer le rôle des utilisateurs entre 'user' et 'admin' directement depuis la page de liste des utilisateurs.
Changements apportés :
- Ajout d'une méthode `toggleAdminRole` dans `UserController.php` pour gérer la logique de changement de rôle.
- Intégration de vérifications de sécurité pour empêcher la modification du rôle de l'admin principal, de votre propre rôle, ou la suppression du dernier rôle admin.
- Ajout d'une route POST `/users/toggle-admin` pour cette nouvelle fonctionnalité.
- Modification de la vue `app/src/Views/users/index.php` pour afficher les boutons de changement de rôle ("Passer Admin" / "Retirer Admin") avec une confirmation JavaScript.
- Mise à jour du fichier de langue `fr.json` avec les nouvelles chaînes de caractères nécessaires.
- Journalisation des actions de modification de rôle.
Il est recommandé de tester manuellement cette fonctionnalité pour s'assurer qu'elle fonctionne comme prévu dans tous les scénarios.
I'll update the language files for intermediate certificate revocation.
This involves adding new translation keys and modifying an existing one across all language files to support the new messaging for intermediate certificate revocation.
Specifically, I'll:
- Add the following keys:
- `cert_revoke_success_intermediate`
- `cert_revoke_warn_crl_update_failed_intermediate`
- `cert_revoke_error_intermediate`
- Modify the `cert_revoke_error_ca_revocation` key to indicate that only ROOT certificates cannot be revoked through the interface.
Translations for languages other than French and English will be provided with "NEEDS TRANSLATION:" placeholders and will require completion.
Implémente la fonctionnalité de révocation pour les certificats de type 'intermédiaire'.
Modifications principales :
- CertificateController.php :
- Suppression de l'interdiction de révoquer les certificats intermédiaires.
- Ajout d'une logique spécifique pour révoquer un certificat intermédiaire en utilisant la configuration et la CRL du CA Racine.
- Les certificats 'simple' continuent d'être révoqués via le script revoke_cert.sh.
- app/src/Views/certificates/index.php :
- Le bouton 'Révoquer' est maintenant affiché pour les certificats intermédiaires non révoqués.
- app/src/Lang/fr.json :
- Ajout de nouvelles clés de traduction pour les messages relatifs à la révocation des certificats intermédiaires.
- Modification de la clé 'cert_revoke_error_ca_revocation' pour indiquer que seuls les certificats ROOT ne peuvent être révoqués via l'interface.
Ces modifications permettent une gestion plus complète des certificats intermédiaires directement depuis l'interface utilisateur.
Les boutons "Download Certificate (.pem)" et "Download Private Key (.key)" pour le certificat racine dans la page Dashboard étaient affichés sur des lignes séparées.
Cette modification les place sur la même ligne en les regroupant dans un unique élément <p> et ajoute une petite marge à gauche du second bouton pour une meilleure séparation visuelle.
Ceci améliore l'interface utilisateur en rendant la section plus compacte et lisible.
This commit addresses several issues related to the creation of leaf certificates signed by functional scope intermediate CAs:
1. **Providing environment variables to `create_cert.sh`:**
* `CertificateController.php` was modified to extract the `ROOT_DOMAIN` from the Root CA certificate.
* The `SAN` (Subject Alternative Name) environment variable is now built dynamically (e.g., `DNS:cert_name.scope_name.root_domain`).
* The `OCSP_URL` (from the application configuration) and `SAN` environment variables are passed to the execution environment of the `create_cert.sh` script. This resolves "variable has no value" errors in OpenSSL when using the intermediate CA configuration file that references `$ENV::OCSP_URL` and `$ENV::SAN`.
2. **Explicit use of `v3_leaf` extensions:**
* The `scripts/create_cert.sh` script was modified to explicitly use `-reqexts v3_leaf` (for the CSR) and `-extensions v3_leaf` (for CA signing). This ensures that the `[v3_leaf]` section of the OpenSSL configuration file (containing SAN and OCSP directives) is correctly applied to leaf certificates.
3. **Correction of success detection in `CertificateController.php`:**
* The string searched for by `strpos` to detect a success message from `create_cert.sh` has been made more precise, ensuring that the PHP controller correctly interprets the script's result.
These changes ensure that leaf certificates are created with the correct extensions and that their creation is properly recognized by the application.
Ce commit adresse plusieurs problèmes qui empêchaient la création correcte des périmètres fonctionnels et de leurs certificats intermédiaires associés.
Modifications apportées :
1. **Scripts Shell (create_root_cert.sh, create_intermediate_cert.sh):**
* Correction des chemins de copie pour les fichiers de configuration OpenSSL (`root-openssl.conf`, `intermediate-openssl.conf`) pour utiliser `/opt/scripts/configs/` comme source correcte dans l'environnement d'exécution.
* Ajout de `set -e` au début des scripts pour un arrêt immédiat en cas d'erreur.
* Modification de `scripts/configs/root-openssl.conf` pour que sa directive `dir` pointe vers `/opt/tls/root`, assurant que la CA Racine trouve correctement ses propres fichiers.
* Modification de `scripts/create_intermediate_cert.sh` pour que la directive `dir` dans les fichiers `openssl.cnf` des CA intermédiaires soit dynamiquement ajustée au chemin spécifique du périmètre (ex: `/opt/tls/intermediate/nom_perimetre`).
* `create_intermediate_cert.sh` accepte maintenant `ROOT_DOMAIN` comme argument et l'utilise pour rendre uniques les CN des certificats intermédiaires et OCSP (ex: `nom_perimetre.intermediate.example.com`).
* Correction des chemins de sortie pour la CRL et les fichiers OCSP (clé privée et CSR) dans `create_intermediate_cert.sh` pour utiliser `$INTERMEDIATE_CA_DIR` comme base.
2. **Contrôleur PHP (PerimeterController.php):**
* Extraction dynamique du `ROOT_DOMAIN` à partir du CN du certificat de la CA Racine existante et passage de cette valeur au script `create_intermediate_cert.sh`.
* Utilisation d'une expression régulière plus robuste pour l'extraction du `ROOT_DOMAIN`.
* Passage des variables d'environnement `OCSP_URL` (depuis la configuration PHP) et `SAN` (vide) au script `create_intermediate_cert.sh` pour éviter les erreurs de "variable has no value" dans OpenSSL.
3. **Initialisation (app/public/index.php):**
* Ajout de logs de débogage et d'une gestion d'erreur défensive pour s'assurer que `$_SESSION['init_root_domain']` est correctement défini avant d'être utilisé pour créer la CA Racine.
Ces changements combinés résolvent le problème initial de création de certificat intermédiaire et plusieurs autres problèmes découverts, menant à une création réussie des périmètres fonctionnels.
Ce commit introduit la possibilité pour vous de télécharger les fichiers de certificats (racine, intermédiaire, final) et la clé privée du certificat racine (administrateurs uniquement) directement depuis la page du tableau de bord.
Changements inclus :
- Ajout d'une méthode `download()` dans `CertificateController` pour gérer la logique de téléchargement sécurisé des fichiers.
- Ajout d'une nouvelle route `GET /certificates/download`.
- Correction et standardisation des liens de téléchargement dans la vue du dashboard pour assurer la transmission correcte des paramètres (type de certificat, nom de fichier, périmètre).
- La méthode de téléchargement inclut la journalisation des tentatives et des erreurs, ainsi que la gestion des permissions pour la clé privée racine.
- Ajoute session_write_close() avant la redirection pour assurer la sauvegarde des modifications de session (par exemple, la suppression des identifiants d'initialisation).
- Remplace la redirection par en-tête HTTP `Refresh` par une redirection JavaScript côté client. Cela améliore la fiabilité de la redirection, en particulier lorsque du contenu HTML a déjà été envoyé ou dans certains environnements serveur.
Ces modifications résolvent un problème où la page pouvait rester bloquée sur le message "Redirection vers la page de connexion dans 5 secondes..." sans effectuer la redirection.
Cette modification effectue le remplissage initial des fichiers pour les langues récemment ajoutées (Japonais, Russe, Arabe, Hindi, Mandarin Chinois) :
- Fichiers JSON de langue (`app/src/Lang/*.json`):
- Le contenu de `en.json` a été utilisé comme modèle.
- Les valeurs textuelles ont été remplacées par des placeholders indiquant "[Auto-traduction en <Langue>] <Texte_Anglais_Original>" pour signifier qu'une traduction réelle est nécessaire.
- Fichiers README spécifiques (`docs/languages/README.*.md`):
- Un contenu de base structuré a été créé en français, incluant les sections : Description, Configuration, Installation, et Fonctionnement.
- Ce contenu de base a été adapté pour chaque nouvelle langue, avec chaque paragraphe préfixé par "[Auto-traduction en <Langue>]" pour indiquer que le texte est un placeholder nécessitant une traduction.
Ces modifications fournissent la structure et le contenu initial pour faciliter la future traduction complète de l'application et de sa documentation dans les nouvelles langues.
Modifie le processus d'initialisation de l'application :
- Lors du premier lancement, un formulaire vous demande maintenant de saisir le mot de passe souhaité pour le compte administrateur initial et le ROOT_DOMAIN à utiliser pour le certificat CA.
- Ces informations sont temporairement stockées en session.
- Le script `create_root_cert.sh` a été modifié pour accepter le ROOT_DOMAIN en argument et l'utilise pour générer le CN du certificat racine.
- Le mot de passe fourni est utilisé pour créer le premier utilisateur administrateur.
- Les variables de session contenant ces informations sont nettoyées après la fin du processus d'initialisation.
Cela améliore la sécurité en évitant un mot de passe par défaut codé en dur et permet une configuration flexible du domaine du certificat racine dès le départ.
Cette modification met à jour le fichier README.md global pour inclure les émojis de drapeaux correspondants devant chaque lien de documentation linguistique.
Cela améliore l'attrait visuel et l'identification rapide des sections de langue.
Cette modification introduit une nouvelle structure pour la documentation README :
- Un fichier README.md global a été créé à la racine du projet. Il fournit une brève description du projet et des liens vers des documentations spécifiques à chaque langue.
- Des fichiers README spécifiques à chaque langue supportée (fr, en, de, it, pt, es, ja, ru, ar, hi, zh) ont été créés dans le répertoire `docs/languages/`.
- Chaque README spécifique à une langue contient actuellement un message indiquant que la documentation est en cours de rédaction et un lien pour revenir au README principal.
Cette structure facilitera la fourniture et la maintenance d'une documentation localisée pour les utilisateurs du projet.
Cette modification étend la prise en charge linguistique de l'application en ajoutant les langues suivantes :
- Japonais (ja)
- Russe (ru)
- Arabe (ar)
- Hindi (hi)
- Mandarin Chinois (zh)
Les changements incluent :
- La mise à jour de la constante `SUPPORTED_LANGUAGES` dans `app/src/config/app.php`.
- La création de fichiers JSON vides (`ja.json`, `ru.json`, `ar.json`, `hi.json`, `zh.json`) dans `app/src/Lang/` pour ces nouvelles langues.
Ces fichiers de langue peuvent être remplis ultérieurement avec les traductions appropriées.
Le problème initialement perçu comme un non-rafraîchissement de la liste des utilisateurs après la création d'un nouvel utilisateur était en fait dû à une erreur fatale PHP dans la vue `users/index.php`.
La variable `$authService` n'était pas correctement passée à la vue depuis `UserController::index`, ce qui provoquait une `Error: Call to a member function getUserId() on null`. Cette erreur arrêtait l'exécution du script et empêchait le rendu correct de la page, donnant l'impression que la liste n'était pas mise à jour.
Cette modification s'assure que `$this->authService` est assigné à une variable `$authService` dans le scope de la vue `users/index.php`, résolvant ainsi l'erreur fatale.
Avec cette correction, la page de la liste des utilisateurs se charge correctement après la création d'un utilisateur, et la liste est bien à jour, affichant le nouvel utilisateur comme attendu.
Ajuste plusieurs variables CSS dans style.css pour augmenter
la lisibilité en mode clair, en réponse à vos retours.
Modifications principales :
- Assombrit --header-bg et --table-header-bg pour un meilleur contraste
avec le texte blanc.
- Ajuste --button-primary-bg, --button-primary-hover-bg,
--button-secondary-bg, et --button-secondary-hover-bg
pour améliorer la lisibilité du texte blanc sur les boutons.
Ce commit apporte les modifications suivantes pour résoudre les problèmes
de chargement des fichiers CSS et potentiellement de rendu des pages :
- docker-compose.yml:
- Modifie le montage du volume pour le service nginx de
`./app/public:/var/www/html:ro` à `./app:/var/www/html:ro`
pour s'aligner avec la directive `root /var/www/html/public;`
dans la configuration Nginx.
- Met à jour la commande de démarrage du service php-fpm pour
appliquer `chown -R www-data:www-data` et `chmod -R 775`
à l'ensemble du répertoire `/var/www/html` afin d'assurer
les bonnes permissions pour les fichiers de l'application.
- Supprime le fichier CSS dupliqué `app/public/dark-mode.css`.
Le fichier correct `app/public/css/dark-mode.css` est conservé.
- Conserve une ligne de débogage temporaire dans `app/src/Views/shared/header.php`
pour aider à diagnostiquer les problèmes de mode sombre.
Ce commit inclut les actions suivantes :
- Vérification de la syntaxe des définitions de routes dans app/public/index.php. Aucune correction n'a été nécessaire car la potentielle erreur 'AuthController@@logout' était déjà corrigée.
- Suppression des fichiers .bak obsolètes :
- app/public/index.php.bak
- app/public/ocsp_responder.php.bak
- app/src/Services/LanguageService.php.bak
Ces changements contribuent à la propreté et à la maintenabilité du code.