diff --git a/.gitignore b/.gitignore index 10c2736d5d697426d89622140c5cf606c26179c2..e361fe5c89c19cc1017b084dfbf5153f14f90ab2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,7 @@ vendor/* data/cache/* .idea deploy.log -VERSION \ No newline at end of file +VERSION +public/vendor/unincaen/app +public/vendor/unincaen/import +public/vendor/unincaen/code \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG index bf3aa27c6dfb6e7a5a354d918256d3310f6f670e..8e04a1faa5117aa98f763d0c08fa39ef0cf79f36 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -32,6 +32,8 @@ author: Laurent Lécluse - DSI - Unicaen L'apparence de l'application peut également être personnalisée en fournissant une URL qui pointe vers une feuille de style CSS propre à votre établissement. +* Nouvel outil en ligne de comande permettant de piloter OSE ( `<dossier OSE>/bin/ose help` pour la liste des possibilités) + * Nouvelle procédure d'installation (https://ose.unicaen.fr/deploiement) Le déploiement de OSE se fait désormais directement à partir de sa plateforme GitLab. @@ -39,6 +41,8 @@ Le déploiement de OSE se fait désormais directement à partir de sa plateforme * Suppression des anciens Jobs Oracle et remplacement par des tâches CRON +* Possibilité de changer le mot de passe d'un utilisateur local depuis la ligne de commande + ## Procédure de mise à jour * Sauvegardez votre fichier de configuration local (`config/application.local.php`) @@ -65,9 +69,9 @@ Le fichier n'est donc plus placé dans le répertoire `config`, mais à la **rac * Modifiez la structure de votre base de données en exécutant dans SQL developer le script de mise à jour suivant : `data/Mises à jour/06.3.sql` -* Modifiez votre configuration Apache pour ajouter la ligne suivante : -`Alias /ose/vendor/unicaen/import /var/www/ose/vendor/unicaen/import/public` -`/ose/` et `/var/www/ose/` sont à adapter à votre configuration. +* Modifiez votre configuration Apache pour supprimer la ligne suivante, qui n'est plus nécessaire : +`Alias /ose/vendor/unicaen/app /var/www/ose/vendor/unicaen/app/public` +`/ose/` et `/var/www/ose/` sont à adapter selon votre configuration. Pour plus d'informations, merci de vous reporter à la [procédure d'installation](https://ose.unicaen.fr/deploiement/install.html). * Créez les tâches CRON suivantes si elles n'existent pas déjà : diff --git a/bin/ose b/bin/ose index c4bbc712bddfbdbab9799463331aad316113b7a4..237c849794a181397dc7109aa6dadca7ae987816 100755 --- a/bin/ose +++ b/bin/ose @@ -17,12 +17,12 @@ switch ($action) { break; case 'migration': $oldVersion = $c->getArg(2); - $version = $c->getArg(3); + $version = $c->getArg(3); /* Action à effectuer */ break; case 'synchronisation': $job = $c->getArg(2); - $oa->exec('UnicaenImport SyncJob '.$job); + $oa->exec('UnicaenImport SyncJob ' . $job); break; case 'chargens-calcul-effectifs': $oa->exec('chargens-calcul-effectifs'); @@ -33,13 +33,18 @@ switch ($action) { case 'formule-calcul': $oa->exec('formule-calcul'); break; + case 'changement-mot-de-passe': + passwordChange($c, $oa); + break; + case 'maj-public-links': + majPublicLinks($c, $oa); + break; default: help($c, $oa); break; } - function update(Console $c, OseAdmin $oa) { $osedir = dirname(__DIR__); @@ -57,7 +62,7 @@ function update(Console $c, OseAdmin $oa) $oldVersion = $oa->currentVersion($osedir); $c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN); - $c->println("La version actuellement installée est la ".$oldVersion); + $c->println("La version actuellement installée est la " . $oldVersion); $c->println("Voici la liste des versions de OSE disponibles:"); $tags = $oa->getTags(); foreach ($tags as $tag) { @@ -96,9 +101,14 @@ function update(Console $c, OseAdmin $oa) "rm -Rf data/cache/*", "php vendor/bin/doctrine-module orm:generate-proxies", "chmod -R 777 data/cache/DoctrineProxy", - "php bin/ose migration $oldVersion $version" + "php bin/ose migration $oldVersion $version", ]); + // Mise à jour des liens vers les répertoires publics des dépendances + $c->println("\nMise à jour des liens vers les répertoires publics des dépendances", $c::COLOR_LIGHT_CYAN); + $res = $oa->majUnicaenSymLinks($osedir); + $c->println($res ? 'Liens mis à jour' : 'Liens déjà à jour', $c::COLOR_LIGHT_GREEN); + // Conclusion $c->println("\nFin de la mise à jour des fichiers", $c::COLOR_LIGHT_GREEN); $c->println("Il reste encore votre base de données à mettre à jour."); @@ -108,16 +118,64 @@ function update(Console $c, OseAdmin $oa) +function passwordChange(Console $c, OseAdmin $oa) +{ + $c->println("Veuillez saisir un login :"); + $login = $c->getInput(); + + $c->println("Veuillez maintenant saisir un mot de passe :"); + $pwd1 = $c->getSilentInput(); + + $c->println("Veuillez saisir à nouveau le même mot de passe :"); + $pwd2 = $c->getSilentInput(); + + if ($pwd1 <> $pwd2) { + $c->printDie('Les mots de passe saisis ne correspondent pas!'); + } + + $c->println('Application du changement de mot de pase ...'); + $oa->exec("changement-mot-de-passe --utilisateur=$login --mot-de-passe=$pwd1"); + + $c->println('Mot de passe changé', $c::COLOR_LIGHT_GREEN); +} + + + +function majPublicLinks(Console $c, OseAdmin $oa) +{ + $osedir = dirname(__DIR__); + + $c->println("\nMise à jour des liens vers les répertoires publics des dépendances", $c::COLOR_LIGHT_CYAN); + + $res = $oa->majUnicaenSymLinks($osedir); + + if ($res){ + $c->println('Liens mis à jour', $c::COLOR_LIGHT_GREEN); + }else{ + $c->println('Liens déjà à jour', $c::COLOR_LIGHT_GREEN); + } +} + + + function help(Console $c, OseAdmin $oa) { - $c->println('Actions possibles :'); - $c->println(" - update : Mise à jour de l'application"); - $c->println(" - notifier-indicateurs : Envoi des mails relatifs aux indicateurs"); - $c->println(" - synchronisation <job> : Effectue la synchronisation des données pour le <job> transmis"); - $c->println(" - chargens-calcul-effectifs : Calcul des effectifs du module Charges"); - $c->println(" - calcul-tableaux-bord : Recalcule tous les tableaux de bord de calculs itermédiaires"); - $c->println(" - formule-calcul : Calcul de toutes les heures complémentaires à l'aide de la formule"); + $actions = [ + "update" => "Mise à jour de l'application", + "notifier-indicateurs" => "Envoi des mails relatifs aux indicateurs", + "synchronisation" => "<job> : Effectue la synchronisation des données pour le <job> transmis", + "chargens-calcul-effectifs" => "Calcul des effectifs du module Charges", + "calcul-tableaux-bord" => "Recalcule tous les tableaux de bord de calculs itermédiaires", + "formule-calcul" => "Calcul de toutes les heures complémentaires à l'aide de la formule", + "changement-mot-de-passe" => "Changement de mot de passe (pour un utilisateur local uniquement)", + "maj-public-links" => "Mise à jour des liens vers les répertoires publics des dépendances", + ]; + $c->println('Actions possibles :'); + foreach ($actions as $a => $l) { + $c->print($a, $c::COLOR_BLACK, $c::BG_LIGHT_GRAY); + $c->println(" : " . $l); + } } @@ -155,6 +213,49 @@ class OseAdmin + public function majUnicaenSymLinks($oseDir ): bool + { + if (substr($oseDir, -1) !== '/') { + $oseDir .= '/'; + } + + $publicDir = $oseDir . 'public/vendor/unicaen/'; + $unicaenDir = $oseDir . 'vendor/unicaen/'; + + $oldLibs = []; + $od = array_filter(glob($publicDir . '*'), 'is_dir'); + foreach ($od as $dir) { + $oldLibs[] = basename($dir); + } + + $newLibs = []; + $nd = array_filter(glob($unicaenDir . '*'), 'is_dir'); + foreach ($nd as $dir) { + if (is_dir($dir . '/public')) { + $newLibs[] = basename($dir); + } + } + + $deleteLibs = array_diff($oldLibs, $newLibs); + $createLibs = array_diff($newLibs, $oldLibs); + + foreach ($deleteLibs as $lib) { + $command = "rm $publicDir$lib"; + $this->console->print($command); + $this->console->exec($command); + } + + foreach ($createLibs as $lib) { + $command = "ln -sf $unicaenDir$lib/public $publicDir$lib"; + $this->console->print($command); + $this->console->exec($command); + } + + return ! (empty($deleteLibs) && empty($createLibs)); + } + + + public function gitlabIsReachable(): bool { $gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false); @@ -225,7 +326,7 @@ class OseAdmin public function exec($args) { - $this->console->exec("php ".dirname(__DIR__)."/public/index.php " . $args); + $this->console->exec("php " . dirname(__DIR__) . "/public/index.php " . $args); } } @@ -272,11 +373,11 @@ class Console $this->println($this->strPad('Commande (description éventuelle)', $len) . "Résultat"); $this->println($this->strPad('----------------------', $len) . "--------"); foreach ($prerequis as $command => $desc) { - if (is_array($desc)){ + if (is_array($desc)) { extract($desc); - }else{ + } else { $description = $desc; - $facultatif = false; + $facultatif = false; } $return = null; @@ -286,15 +387,15 @@ class Console $this->print($this->strPad($command . ($description ? " ($description)" : ''), $len)); if ($passed) { $this->println('Commande trouvée', self::COLOR_LIGHT_GREEN); - } elseif($facultatif) { + } elseif ($facultatif) { $this->println('Manquante, facultative', self::COLOR_LIGHT_PURPLE); - }else{ + } else { $this->println('Commande manquante', self::COLOR_LIGHT_RED); $res = false; } } - if (!$res){ + if (!$res) { $this->printDie('Un ou plusieurs prérequis nécessaires ne sont pas présents sur cette machine. Merci de les installer avant de poursuivre l\'installation.'); } @@ -358,15 +459,15 @@ class Console - public function getArg($index=null) + public function getArg($index = null) { $args = isset($_SERVER['argv']) ? $_SERVER['argv'] : []; if (null === $index) return $args; - if (isset($args[$index])){ + if (isset($args[$index])) { return $args[$index]; - }else{ + } else { return null; } } @@ -380,6 +481,38 @@ class Console + public function getSilentInput() + { + if (preg_match('/^win/i', PHP_OS)) { + $vbscript = sys_get_temp_dir() . 'prompt_password.vbs'; + file_put_contents( + $vbscript, 'wscript.echo(InputBox("' + . addslashes('') + . '", "", "password here"))'); + $command = "cscript //nologo " . escapeshellarg($vbscript); + $password = rtrim(shell_exec($command)); + unlink($vbscript); + + return $password; + } else { + $command = "/usr/bin/env bash -c 'echo OK'"; + if (rtrim(shell_exec($command)) !== 'OK') { + trigger_error("Can't invoke bash"); + + return; + } + $command = "/usr/bin/env bash -c 'read -s -p \"" + . addslashes('') + . "\" mypassword && echo \$mypassword'"; + $password = rtrim(shell_exec($command)); + echo "\n"; + + return $password; + } + } + + + public function exec($command, $autoDisplay = true) { if (is_array($command)) { diff --git a/bin/ose-deploy b/bin/ose-deploy index 71bd9b39ca00939e6cb0fba48be33a5ea914be63..0523ba709b691c166764c5b2a701aa9e2662d780 100644 --- a/bin/ose-deploy +++ b/bin/ose-deploy @@ -32,27 +32,29 @@ if (!$od->checkPhpModules([ }; // Mise en place de la clé SSH -$c->println("\nMise en place de la clé SSH vers le GitLab hébergeant OSE", $c::COLOR_LIGHT_CYAN); -$c->println("L'accès au serveur Gitlab doit se faire par SSH."); -$c->print("Voulez-vous créer une clé SSH pour accéder au serveur Gitlab hébergeant OSE ? (o/n, n par défaut) "); -$needKey = $c->getInput(); -if (in_array($needKey, ["o", "O"])) { - $c->println("Génération de la clé SSH..."); - $c->print("Veuillez préciser l'adresse mail du compte utilisé pour accéder au Gitlab de OSE: "); - $gitlabMail = $c->getInput(); - $c->passthru("ssh-keygen -t rsa -C $gitlabMail -b 4096"); - $c->println("Intégrez ensuite votre clé SSH dans Gitlab."); - $c->println("Le serveur GitLab est accessible à l'adresse suivante : https://git.unicaen.fr/dsi/OSE"); - $c->println("Ensuite, appuyez sur \"Entrée\" pour continuer..."); - $c->getInput(); - if ($od->gitlabIsReachable()) { - $c->println("Votre clé SSH a bien été déployée et est fonctionnelle.", $c::COLOR_LIGHT_GREEN); +if (!$od->gitlabIsReachable()) { + $c->println("\nMise en place de la clé SSH vers le GitLab hébergeant OSE", $c::COLOR_LIGHT_CYAN); + $c->println("L'accès au serveur Gitlab doit se faire par SSH."); + $c->print("Voulez-vous créer une clé SSH pour accéder au serveur Gitlab hébergeant OSE ? (o/n, n par défaut) "); + $needKey = $c->getInput(); + if (in_array($needKey, ["o", "O"])) { + $c->println("Génération de la clé SSH..."); + $c->print("Veuillez préciser l'adresse mail du compte utilisé pour accéder au Gitlab de OSE: "); + $gitlabMail = $c->getInput(); + $c->passthru("ssh-keygen -t rsa -C $gitlabMail -b 4096"); + $c->println("Intégrez ensuite votre clé SSH dans Gitlab."); + $c->println("Le serveur GitLab est accessible à l'adresse suivante : https://git.unicaen.fr/dsi/OSE"); + $c->println("Ensuite, appuyez sur \"Entrée\" pour continuer..."); + $c->getInput(); + if ($od->gitlabIsReachable()) { + $c->println("Votre clé SSH a bien été déployée et est fonctionnelle.", $c::COLOR_LIGHT_GREEN); + } else { + $c->printDie("L'accès par SSH au serveur GitLab de OSE ne fonctionne pas. Merci de déployer par vous-même une clé, car vous en aurez besoin pour la suite de la procédure."); + } } else { - $c->printDie("L'accès par SSH au serveur GitLab de OSE ne fonctionne pas. Merci de déployer par vous-même une clé, car vous en aurez besoin pour la suite de la procédure."); - } -} else { - if (!$od->gitlabIsReachable()) { - $c->printDie("L'accès par SSH au serveur GitLab de OSE ne fonctionne pas. Merci de déployer par vous-même une clé, car vous en aurez besoin pour la suite de la procédure."); + if (!$od->gitlabIsReachable()) { + $c->printDie("L'accès par SSH au serveur GitLab de OSE ne fonctionne pas. Merci de déployer par vous-même une clé, car vous en aurez besoin pour la suite de la procédure."); + } } } @@ -123,6 +125,11 @@ $c->exec([ "cp config/application.local.php.dist config.local.php", ]); +// Mise à jour des liens vers les répertoires publics des dépendances +$c->println("\nMise à jour des liens vers les répertoires publics des dépendances", $c::COLOR_LIGHT_CYAN); +$od->majUnicaenSymLinks($osedir); +$c->println('Liens mis en place', $c::COLOR_LIGHT_GREEN); + // Mise en place des tâches CRON ?? @@ -133,11 +140,10 @@ $c->println(" 1 - Configurez votre serveur Apache"); $c->println(" 2 - Initialisez la base de données de OSE avec le script prévu à cet effet"); $c->println(" 3 - Mettez en place la configuration locale de l'application"); $c->println(" 4 - Une fois bien connecté, configurez vos connecteurs en vous appuyant\n le cas échéant sur ceux qui vous sont fournis"); -$c->println(" 5 - Mettez en place les tâches CRON et les JOBS Oracle nécessaires (envoi de mails pour les infdicateurs, Synchronisatio automatique, etc."); +$c->println(" 5 - Mettez en place les tâches CRON nécessaires (envoi de mails pour les indicateurs, Synchronisation automatique, etc."); $c->println(" 6 - Paramétrez l'application pour l'adapter à vos besoins"); $c->println(''); -$c->println("Pour la suite, merci de vous reporter sur la procédure d'installation de OSE (https://ose.unicaen.fr/deploiement/install)"); -$c->println("OSE possède également un guide de l'administrateur pour vous aider à configurer l'application"); +$c->println("Pour la suite, merci de vous reporter au guide de l'administrateur pour vous aider à configurer l'application"); $c->println(''); @@ -175,6 +181,49 @@ class OseDeploy + public function majUnicaenSymLinks($oseDir ): bool + { + if (substr($oseDir, -1) !== '/') { + $oseDir .= '/'; + } + + $publicDir = $oseDir . 'public/vendor/unicaen/'; + $unicaenDir = $oseDir . 'vendor/unicaen/'; + + $oldLibs = []; + $od = array_filter(glob($publicDir . '*'), 'is_dir'); + foreach ($od as $dir) { + $oldLibs[] = basename($dir); + } + + $newLibs = []; + $nd = array_filter(glob($unicaenDir . '*'), 'is_dir'); + foreach ($nd as $dir) { + if (is_dir($dir . '/public')) { + $newLibs[] = basename($dir); + } + } + + $deleteLibs = array_diff($oldLibs, $newLibs); + $createLibs = array_diff($newLibs, $oldLibs); + + foreach ($deleteLibs as $lib) { + $command = "rm $publicDir$lib"; + $this->console->print($command); + $this->console->exec($command); + } + + foreach ($createLibs as $lib) { + $command = "ln -sf $unicaenDir$lib/public $publicDir$lib"; + $this->console->print($command); + $this->console->exec($command); + } + + return ! (empty($deleteLibs) && empty($createLibs)); + } + + + public function checkPhpModules(array $modules) { $len = 60; @@ -312,11 +361,11 @@ class Console $this->println($this->strPad('Commande (description éventuelle)', $len) . "Résultat"); $this->println($this->strPad('----------------------', $len) . "--------"); foreach ($prerequis as $command => $desc) { - if (is_array($desc)){ + if (is_array($desc)) { extract($desc); - }else{ + } else { $description = $desc; - $facultatif = false; + $facultatif = false; } $return = null; @@ -326,15 +375,15 @@ class Console $this->print($this->strPad($command . ($description ? " ($description)" : ''), $len)); if ($passed) { $this->println('Commande trouvée', self::COLOR_LIGHT_GREEN); - } elseif($facultatif) { + } elseif ($facultatif) { $this->println('Manquante, facultative', self::COLOR_LIGHT_PURPLE); - }else{ + } else { $this->println('Commande manquante', self::COLOR_LIGHT_RED); $res = false; } } - if (!$res){ + if (!$res) { $this->printDie('Un ou plusieurs prérequis nécessaires ne sont pas présents sur cette machine. Merci de les installer avant de poursuivre l\'installation.'); } @@ -420,6 +469,38 @@ class Console + public function getSilentInput() + { + if (preg_match('/^win/i', PHP_OS)) { + $vbscript = sys_get_temp_dir() . 'prompt_password.vbs'; + file_put_contents( + $vbscript, 'wscript.echo(InputBox("' + . addslashes('') + . '", "", "password here"))'); + $command = "cscript //nologo " . escapeshellarg($vbscript); + $password = rtrim(shell_exec($command)); + unlink($vbscript); + + return $password; + } else { + $command = "/usr/bin/env bash -c 'echo OK'"; + if (rtrim(shell_exec($command)) !== 'OK') { + trigger_error("Can't invoke bash"); + + return; + } + $command = "/usr/bin/env bash -c 'read -s -p \"" + . addslashes('') + . "\" mypassword && echo \$mypassword'"; + $password = rtrim(shell_exec($command)); + echo "\n"; + + return $password; + } + } + + + public function exec($command, $autoDisplay = true) { if (is_array($command)) { diff --git a/composer.json b/composer.json index ec3ba225fcb65923b41e46472b477849055e45af..323ccc42d5a1b912ddf5bb4dd197a8c0c50f7598 100755 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "bjyoungblood/bjy-authorize": "dev-master", "zf-commons/zfc-user": "0.1.3", "zendframework/zend-file": "^2.4", - "unicaen/code": "1.1.5", + "unicaen/code": "1.1.6", "unicaen/import": "1.1.6", "unicaen/tbl": "1.0.3" } diff --git a/composer.lock b/composer.lock index e5ae04b7f44aee4e4413db58de02c78cce38a333..68dcdf1eeac1896edde9b25f1420bc9355d8f5bc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "d1c736056c2956117533af943f5a0618", + "content-hash": "a0650787c87b941797d1f4e117fc7145", "packages": [ { "name": "bjyoungblood/bjy-authorize", @@ -1529,11 +1529,11 @@ }, { "name": "unicaen/code", - "version": "1.1.5", + "version": "1.1.6", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/code.git", - "reference": "2890c341e174c6212b873e10649d7603a2f0abd4" + "reference": "607fe27c60c3c90a6c953cf2b16bfdbdc8b54d17" }, "require": { "doctrine/dbal": "^2.5", @@ -1551,7 +1551,7 @@ ] }, "description": "Boite à outils pour la programmation avec la bibliothèque Unicaen", - "time": "2018-04-04T14:06:04+00:00" + "time": "2018-04-12T15:24:29+00:00" }, { "name": "unicaen/import", diff --git a/config/autoload/unicaen-app.global.php b/config/autoload/unicaen-app.global.php index b37e8544b54af7c25c09d67ce57eea430c7c1b55..1c4ca0b05a662002980062b6a0749d3eefad7ac0 100644 --- a/config/autoload/unicaen-app.global.php +++ b/config/autoload/unicaen-app.global.php @@ -5,7 +5,7 @@ if (file_exists($versionFile)){ }else{ $version = 'inconnue'; } -$dateVersion = '12/04/2018'; +$dateVersion = '13/04/2018'; return [ 'unicaen-app' => [ diff --git "a/data/D\303\251ploiement/Changements.pdf" "b/data/D\303\251ploiement/Changements.pdf" index 170d6983eba0924dd39dc4eaf44a0e7f3eec456d..3bd5deea2250ff70c77265ffd685e1cd4f1994e0 100644 Binary files "a/data/D\303\251ploiement/Changements.pdf" and "b/data/D\303\251ploiement/Changements.pdf" differ diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.md" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.md" index f3d6d4790938339547026285750f755c220a9538..243af27ba58ef3d55c3ea5c3e494e09715cee2ac 100644 --- "a/data/D\303\251ploiement/Proc\303\251dure d'installation.md" +++ "b/data/D\303\251ploiement/Proc\303\251dure d'installation.md" @@ -65,9 +65,6 @@ A adapter à vos besoins. ServerName ose.unicaen.fr DocumentRoot /var/www/ose/public - Alias /vendor/unicaen/app /var/www/ose/vendor/unicaen/app/public - Alias /vendor/unicaen/import /var/www/ose/vendor/unicaen/import/public - RewriteEngine On RewriteBase / @@ -95,8 +92,6 @@ A adapter à vos besoins. Exemple pris avec /var/www/ose en répertoire d'installation et /ose en Alias. A adapter à vos besoins. ```apache -Alias /ose/vendor/unicaen/app /var/www/ose/vendor/unicaen/app/public -Alias /ose/vendor/unicaen/import /var/www/ose/vendor/unicaen/import/public Alias /ose /var/www/ose/public <Directory /var/www/ose/public> diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" index 8c5da9e2c5aa52921782c4bdc6151f738d054ea5..26fe5564e70b14026c0cb7c2dba357ce59938ec7 100644 Binary files "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" differ diff --git "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" index c4be40231e8600502bd81d33b88deb4871782190..08b3e6e2b8c00f54f7c708fccf54ee48ba113dbd 100644 Binary files "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" differ diff --git a/module/Application/Module.php b/module/Application/Module.php index e08855cfc35961bbe785b869ea0d09b53752786c..ccd62d49a659f142c705bfb817422270cace53f8 100755 --- a/module/Application/Module.php +++ b/module/Application/Module.php @@ -167,6 +167,9 @@ class Module implements ConsoleUsageProviderInterface, ConsoleBannerProviderInte 'calcul-tableaux-bord' => "Calcul de tous les tableaux de bord (sauf la formule qui est à part)", "Formule de calcul", 'formule-calcul' => "Calcul de toutes les heures complémentaires à l'aide de la formule", + + "Administration : Changement de mot de passe", + 'changement-mot-de-passe' => "Paramètres : --utilisateur, --mot-de-passe", ]; } diff --git a/module/Application/config/administration.config.php b/module/Application/config/administration.config.php index 743da826ee39173331862c2963deff19f5a32be2..09877f67bb573c01bc1247fd3e44cca9aeb5c172 100644 --- a/module/Application/config/administration.config.php +++ b/module/Application/config/administration.config.php @@ -21,6 +21,23 @@ return [ ], ], ], + + 'console' => [ + 'router' => [ + 'routes' => [ + 'changement-mot-de-passe' => [ + 'options' => [ + 'route' => 'changement-mot-de-passe [--utilisateur=] [--mot-de-passe=]', + 'defaults' => [ + 'controller' => 'Application\Controller\Administration', + 'action' => 'changement-mot-de-passe', + ], + ], + ], + ], + ], + ], + 'navigation' => [ 'default' => [ 'home' => [ diff --git a/module/Application/src/Application/Controller/AdministrationController.php b/module/Application/src/Application/Controller/AdministrationController.php index 627bab418c29a1b44e6ce1dc85d527c3d3da6296..a14d877c10604d8591b1cde5508d004122e5c3bc 100644 --- a/module/Application/src/Application/Controller/AdministrationController.php +++ b/module/Application/src/Application/Controller/AdministrationController.php @@ -2,6 +2,8 @@ namespace Application\Controller; +use Application\Service\Traits\UtilisateurServiceAwareTrait; + /** * Description of AdministrationController @@ -11,6 +13,9 @@ namespace Application\Controller; */ class AdministrationController extends AbstractController { + use UtilisateurServiceAwareTrait; + + /** * @@ -21,4 +26,19 @@ class AdministrationController extends AbstractController return []; } + + + public function changementMotDePasseAction() + { + $utilisateur = $this->getRequest()->getParam('utilisateur'); + $motDePasse = $this->getRequest()->getParam('mot-de-passe'); + + $userObject = $this->getServiceUtilisateur()->getByUsername($utilisateur); + if (!$userObject) { + throw new \Exception("Utilisateur $utilisateur non trouvé"); + } + + $userObject->setPassword($motDePasse, true); + $this->getServiceUtilisateur()->save($userObject); + } } \ No newline at end of file diff --git a/public/vendor/unicaen/apache-test b/public/vendor/unicaen/apache-test new file mode 100644 index 0000000000000000000000000000000000000000..a37e3be172b739d71333023665794b1816906b69 --- /dev/null +++ b/public/vendor/unicaen/apache-test @@ -0,0 +1 @@ +APACHE TEST OK \ No newline at end of file