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