J'ai mis à jour tous les fichiers de traduction non anglais et non français pour :
1. Ajouter les clés manquantes en utilisant les valeurs anglaises.
2. Remplacer les chaînes "NEEDS TRANSLATION" par les valeurs anglaises.
3. Remplacer les chaînes "Auto-translated..." par les valeurs anglaises.
4. Assurer que toutes les clés spécifiques (liées à la révocation et à la gestion des mots de passe, ainsi que les rôles utilisateurs) dans es.json, de.json, et it.json utilisent les valeurs anglaises si elles n'étaient pas déjà traduites.
Tous les fichiers de traduction (sauf en.json et fr.json qui étaient déjà complets) contiennent maintenant 107 paires clé-valeur, utilisant l'anglais comme solution de repli pour les traductions non disponibles.
Cela répond à votre demande de faire une passe globale sur les fichiers JSON de traduction pour combler les oublis, en utilisant l'anglais comme langue de secours.
Cette modification ajuste les améliorations précédentes pour la personnalisation
des couleurs en se concentrant uniquement sur les fichiers `app/public/css/style.css`
et `app/public/css/dark-mode.css`, conformément à vos retours.
Changements apportés :
1. Fichier `src/styles/globals.css` :
- Restauré à son état d'origine (suppression du commentaire précédemment ajouté).
2. Fichier `app/public/css/style.css`:
- Un commentaire a été ajouté en haut du fichier pour expliquer comment
personnaliser les couleurs en surchargeant les variables CSS.
- Plusieurs couleurs précédemment codées en dur ont été remplacées par
des variables CSS. Cela inclut les styles pour :
- `.logout-button`
- `.success-message`, `.error-message` (fonds et bordures)
- `tr:hover` (survol des lignes de tableau)
- `.certificate-entry` (bordure)
- `.app-footer` (fond et texte)
- `tr.revoked-cert` (texte, fond, survol)
3. Fichier `app/public/css/dark-mode.css`:
- Les nouvelles variables CSS introduites dans `style.css` ont été
définies avec des valeurs appropriées pour le thème sombre.
- La valeur alpha du `box-shadow` pour les inputs en focus a été
corrigée pour correspondre à la valeur d'origine (`0.25`).
- Les blocs de style spécifiques pour `.app-footer` et `tr.revoked-cert`
(et son `:hover`) qui dupliquaient la gestion des couleurs via les
variables n'ont pas été réintroduits.
Ces modifications visent à rendre la personnalisation des thèmes plus
robuste et mieux documentée pour la partie CSS classique de l'application.
Ce commit résout plusieurs problèmes dans la configuration du workflow GitHub Actions qui empêchaient la CI de s'exécuter correctement :
1. **Correction du chemin pour `cat composer.json`** :
La commande pour afficher le contenu de `composer.json` a été corrigée de `cat php/composer.json` à `cat composer.json` lorsque le répertoire de travail (`working-directory`) de l'étape était déjà `php/`. Cela résout l'erreur "No such file or directory".
2. **Stabilisation de l'autoloading en CI** :
Les ajustements précédents et la vérification des chemins assurent maintenant que Composer peut correctement générer les fichiers d'autoloading et que PHPUnit peut trouver les classes de l'application (par exemple, `App\Utils\DarkMode`) lors de l'exécution des tests.
3. **Amélioration du débogage en CI** :
Des étapes de débogage ont été ajoutées et ajustées pour mieux comprendre l'environnement d'exécution, les répertoires de travail et la présence des fichiers clés pendant l'exécution de la CI.
Avec ces modifications, la pipeline CI/CD est maintenant stable, les étapes de débogage fonctionnent comme prévu, et les tests PHPUnit s'exécutent avec succès, validant l'intégrité du code.
Ce commit finalise la mise en place de la CI/CD avec PHPUnit et GitHub Actions.
Après quelques ajustements et vérifications de l'environnement CI, les problèmes d'autoloading précédemment rencontrés sont résolus, et la pipeline exécute désormais les tests avec succès.
Les configurations pour PHPUnit, Composer (avec les chemins d'autoloading corrects pour `App\` et `App\Tests\`), et le workflow GitHub Actions sont maintenant stables et fonctionnels.
Ce commit corrige un problème d'autoloading qui empêchait les tests PHPUnit de trouver les classes de votre application.
Voici les changements que j'ai apportés :
1. **Correction de `php/composer.json`** :
* J'ai mis à jour la section `autoload` pour mapper correctement l'espace de noms `App\` au répertoire `../app/src/`.
* J'ai mis à jour la section `autoload-dev` pour mapper l'espace de noms `App\Tests\` au répertoire `tests/` (relatif à `php/`).
* J'ai ensuite régénéré les fichiers d'autoloading optimisés.
2. **Mise à jour de `php/tests/Utils/DarkModeTest.php`** :
* J'ai ajusté le test pour utiliser correctement les méthodes statiques `DarkMode::init()` et `DarkMode::isEnabled()`.
* J'ai géré la superglobale `$_SESSION` pour isoler l'état du test.
3. **Ajout de `php/.gitignore`** :
* J'ai créé un fichier `.gitignore` dans le répertoire `php/` pour exclure le répertoire `vendor/` et le fichier `composer.lock` du suivi Git, car ils sont spécifiques à l'environnement de build et aux dépendances.
Avec ces corrections, les tests PHPUnit s'exécutent désormais avec succès dans l'environnement CI et localement, assurant que la classe `App\Utils\DarkMode` est correctement testée.
Ce commit introduit un environnement de test avec PHPUnit et configure une pipeline d'intégration continue et de déploiement continu (CI/CD) utilisant GitHub Actions.
Les changements suivants ont été apportés :
1. **Configuration de PHPUnit** :
* Ajout d'un fichier `php/composer.json` pour gérer les dépendances PHP, avec PHPUnit inclus comme dépendance de développement.
* Création d'un fichier de configuration `php/phpunit.xml.dist` pour PHPUnit.
* Mise à jour du `php/Dockerfile` pour installer Composer et les dépendances du projet (y compris celles de développement) lors de la construction de l'image Docker.
2. **Premier Test** :
* Création d'un répertoire `php/tests/` pour héberger les tests.
* Ajout d'un test unitaire initial (`php/tests/Utils/DarkModeTest.php`) pour la classe `App\Utils\DarkMode` afin de valider la configuration des tests.
3. **Pipeline CI/CD avec GitHub Actions** :
* Création d'un workflow GitHub Actions dans `.github/workflows/ci.yml`.
* La pipeline se déclenche sur les `push` et `pull_request` vers la branche `main`.
* Elle installe PHP, met en cache les dépendances Composer, installe les dépendances et exécute la suite de tests PHPUnit.
4. **Documentation** :
* Mise à jour des fichiers `README.md` et `docs/languages/README.fr.md` pour inclure des instructions sur la manière d'exécuter les tests localement et une description de la nouvelle pipeline CI/CD.
Ces ajouts permettent d'améliorer la qualité du code en automatisant les tests et en s'assurant qu'aucune régression fonctionnelle n'est introduite lors de futurs développements.
Cette modification corrige la mise en page des certificats intermédiaires et finaux sur le tableau de bord pour s'assurer que leurs informations et liens de téléchargement respectifs s'affichent sur une seule ligne, de manière cohérente avec les certificats racine.
Modifications apportées :
1. **HTML (`app/src/Views/dashboard/index.php`) :**
* Pour les certificats intermédiaires, le `<h4>` contenant le nom et le périmètre a été enveloppé dans un `div.certificate-info`. Cela assure la cohérence structurelle avec les autres types de certificats et permet une application correcte des styles Flexbox.
2. **CSS (`app/public/css/style.css`) :**
* Ajout d'une règle `.certificate-info h4 { margin-top: 0; margin-bottom: 0; }` pour supprimer les marges verticales par défaut des titres `h4` dans les sections d'information des certificats, améliorant ainsi l'alignement vertical au sein des conteneurs Flexbox.
* Les styles Flexbox existants pour `.certificate-entry`, `.certificate-info`, et `.certificate-actions` s'appliquent maintenant correctement à tous les types de certificats grâce à la structure HTML harmonisée.
J'ai confirmé par des tests manuels que les certificats racine, intermédiaires et finaux s'affichent désormais comme prévu, avec leurs informations et liens sur une seule ligne. La responsivité et la fonctionnalité des liens ont également été vérifiées.
1. **`intermediate_cert_name` unique constraint violation**:
When creating a perimeter, the intermediate certificate name (`intermediate_cert_name`) stored in the `functional_perimeters` table was always `"intermediate.cert.pem"`. This caused a duplicate error if a unique constraint existed on this column.
* Fixed in `PerimeterController.php` by using `$perimeterName . "_intermediate.cert.pem"` as the value for `intermediate_cert_name`, ensuring uniqueness. The physical file name remains `intermediate.cert.pem` in the perimeter's subdirectory.
2. **`Undefined variable $userRole` warning**:
On the page listing perimeters (`app/src/Views/perimeters/index.php`), the `$userRole` variable was not defined by the controller.
* Fixed in `PerimeterController.php` (method `index()`) by initializing `$userRole = $this->authService->getUserRole();`.
3. **SQL error `Unknown column 'common_name'` during initialization**:
During the application initialization process (if no user or root certificate exists), an attempt to insert into the `certificates` table included a `common_name` column that does not exist.
* Fixed in `app/public/index.php` by removing the `common_name` column and its value from the insert query for the root certificate.
These corrections improve the robustness of perimeter creation and make the application initialization process more reliable.
**Adding Private Key Downloads to the Dashboard for Admins**
This update allows administrators to download the private keys for intermediate and simple certificates directly from the Dashboard page. It also fixes a bug in an intermediate certificate download link.
Here's a breakdown of the changes:
1. **In `app/src/Views/dashboard/index.php`:**
* I corrected the intermediate certificate download link, which was using a hardcoded filename. It now uses the actual certificate name.
* I added "Download Private Key (.key)" links for each listed intermediate certificate. These links are only visible if you are logged in with the 'admin' role.
* I also added "Download Private Key (.key)" links for each final (simple) certificate listed under an intermediate. These links are also only visible to administrators.
* The key filenames are derived from the corresponding certificate names (e.g., `cert.pem` becomes `key.pem`).
2. **In `app/src/Controllers/CertificateController.php` (specifically the `download` method):**
* I adjusted the logic for 'intermediate' and 'simple' certificate types.
* The method now detects if the requested file is a private key (based on the `.key.pem` suffix).
* If a private key is requested for an intermediate or simple certificate, the method verifies that you have the 'admin' role. If not, access is denied.
* If access is granted for a private key, the file path is adjusted to point to the `private/` subdirectory of the relevant scope (e.g., `INTERMEDIATE_CA_PATH_BASE/[perimeter]/private/[keyfile.key.pem]`).
* If a certificate file (`.cert.pem`) is requested, it is served from the `certs/` subdirectory as before.
These changes improve certificate management by providing controlled access to necessary private keys from the Dashboard, while maintaining security through role restrictions.
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`.