Skip to content
Snippets Groups Projects
Commit 097d7f76 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Modification de la conf pour utiliser des liens symboliques plutôt que des liens

parent 4c6248cb
No related branches found
No related tags found
No related merge requests found
Showing with 323 additions and 66 deletions
...@@ -5,3 +5,6 @@ data/cache/* ...@@ -5,3 +5,6 @@ data/cache/*
.idea .idea
deploy.log deploy.log
VERSION VERSION
public/vendor/unincaen/app
public/vendor/unincaen/import
public/vendor/unincaen/code
\ No newline at end of file
...@@ -32,6 +32,8 @@ author: Laurent Lécluse - DSI - Unicaen ...@@ -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 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. 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) * 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. 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 ...@@ -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 * 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 ## Procédure de mise à jour
* Sauvegardez votre fichier de configuration local (`config/application.local.php`) * 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 ...@@ -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 : * 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` `data/Mises à jour/06.3.sql`
* Modifiez votre configuration Apache pour ajouter la ligne suivante : * Modifiez votre configuration Apache pour supprimer la ligne suivante, qui n'est plus nécessaire :
`Alias /ose/vendor/unicaen/import /var/www/ose/vendor/unicaen/import/public` `Alias /ose/vendor/unicaen/app /var/www/ose/vendor/unicaen/app/public`
`/ose/` et `/var/www/ose/` sont à adapter à votre configuration. `/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). 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à : * Créez les tâches CRON suivantes si elles n'existent pas déjà :
......
...@@ -33,13 +33,18 @@ switch ($action) { ...@@ -33,13 +33,18 @@ switch ($action) {
case 'formule-calcul': case 'formule-calcul':
$oa->exec('formule-calcul'); $oa->exec('formule-calcul');
break; break;
case 'changement-mot-de-passe':
passwordChange($c, $oa);
break;
case 'maj-public-links':
majPublicLinks($c, $oa);
break;
default: default:
help($c, $oa); help($c, $oa);
break; break;
} }
function update(Console $c, OseAdmin $oa) function update(Console $c, OseAdmin $oa)
{ {
$osedir = dirname(__DIR__); $osedir = dirname(__DIR__);
...@@ -96,9 +101,14 @@ function update(Console $c, OseAdmin $oa) ...@@ -96,9 +101,14 @@ function update(Console $c, OseAdmin $oa)
"rm -Rf data/cache/*", "rm -Rf data/cache/*",
"php vendor/bin/doctrine-module orm:generate-proxies", "php vendor/bin/doctrine-module orm:generate-proxies",
"chmod -R 777 data/cache/DoctrineProxy", "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 // Conclusion
$c->println("\nFin de la mise à jour des fichiers", $c::COLOR_LIGHT_GREEN); $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."); $c->println("Il reste encore votre base de données à mettre à jour.");
...@@ -108,16 +118,64 @@ function update(Console $c, OseAdmin $oa) ...@@ -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) function help(Console $c, OseAdmin $oa)
{ {
$c->println('Actions possibles :'); $actions = [
$c->println(" - update : Mise à jour de l'application"); "update" => "Mise à jour de l'application",
$c->println(" - notifier-indicateurs : Envoi des mails relatifs aux indicateurs"); "notifier-indicateurs" => "Envoi des mails relatifs aux indicateurs",
$c->println(" - synchronisation <job> : Effectue la synchronisation des données pour le <job> transmis"); "synchronisation" => "<job> : Effectue la synchronisation des données pour le <job> transmis",
$c->println(" - chargens-calcul-effectifs : Calcul des effectifs du module Charges"); "chargens-calcul-effectifs" => "Calcul des effectifs du module Charges",
$c->println(" - calcul-tableaux-bord : Recalcule tous les tableaux de bord de calculs itermédiaires"); "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"); "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 ...@@ -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 public function gitlabIsReachable(): bool
{ {
$gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false); $gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false);
...@@ -380,6 +481,38 @@ class Console ...@@ -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) public function exec($command, $autoDisplay = true)
{ {
if (is_array($command)) { if (is_array($command)) {
......
...@@ -32,6 +32,7 @@ if (!$od->checkPhpModules([ ...@@ -32,6 +32,7 @@ if (!$od->checkPhpModules([
}; };
// Mise en place de la clé SSH // Mise en place de la clé SSH
if (!$od->gitlabIsReachable()) {
$c->println("\nMise en place de la clé SSH vers le GitLab hébergeant OSE", $c::COLOR_LIGHT_CYAN); $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->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) "); $c->print("Voulez-vous créer une clé SSH pour accéder au serveur Gitlab hébergeant OSE ? (o/n, n par défaut) ");
...@@ -55,6 +56,7 @@ if (in_array($needKey, ["o", "O"])) { ...@@ -55,6 +56,7 @@ if (in_array($needKey, ["o", "O"])) {
$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."); $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.");
} }
} }
}
// Création du dossier // Création du dossier
...@@ -123,6 +125,11 @@ $c->exec([ ...@@ -123,6 +125,11 @@ $c->exec([
"cp config/application.local.php.dist config.local.php", "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 ?? // Mise en place des tâches CRON ??
...@@ -133,11 +140,10 @@ $c->println(" 1 - Configurez votre serveur Apache"); ...@@ -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(" 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(" 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(" 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(" 6 - Paramétrez l'application pour l'adapter à vos besoins");
$c->println(''); $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("Pour la suite, merci de vous reporter au guide de l'administrateur pour vous aider à configurer l'application");
$c->println("OSE possède également un guide de l'administrateur pour vous aider à configurer l'application");
$c->println(''); $c->println('');
...@@ -175,6 +181,49 @@ class OseDeploy ...@@ -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) public function checkPhpModules(array $modules)
{ {
$len = 60; $len = 60;
...@@ -420,6 +469,38 @@ class Console ...@@ -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) public function exec($command, $autoDisplay = true)
{ {
if (is_array($command)) { if (is_array($command)) {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "d1c736056c2956117533af943f5a0618", "content-hash": "a0650787c87b941797d1f4e117fc7145",
"packages": [ "packages": [
{ {
"name": "bjyoungblood/bjy-authorize", "name": "bjyoungblood/bjy-authorize",
...@@ -1529,11 +1529,11 @@ ...@@ -1529,11 +1529,11 @@
}, },
{ {
"name": "unicaen/code", "name": "unicaen/code",
"version": "1.1.5", "version": "1.1.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://git.unicaen.fr/lib/unicaen/code.git", "url": "https://git.unicaen.fr/lib/unicaen/code.git",
"reference": "2890c341e174c6212b873e10649d7603a2f0abd4" "reference": "607fe27c60c3c90a6c953cf2b16bfdbdc8b54d17"
}, },
"require": { "require": {
"doctrine/dbal": "^2.5", "doctrine/dbal": "^2.5",
...@@ -1551,7 +1551,7 @@ ...@@ -1551,7 +1551,7 @@
] ]
}, },
"description": "Boite à outils pour la programmation avec la bibliothèque Unicaen", "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", "name": "unicaen/import",
......
...@@ -5,7 +5,7 @@ if (file_exists($versionFile)){ ...@@ -5,7 +5,7 @@ if (file_exists($versionFile)){
}else{ }else{
$version = 'inconnue'; $version = 'inconnue';
} }
$dateVersion = '12/04/2018'; $dateVersion = '13/04/2018';
return [ return [
'unicaen-app' => [ 'unicaen-app' => [
......
No preview for this file type
...@@ -65,9 +65,6 @@ A adapter à vos besoins. ...@@ -65,9 +65,6 @@ A adapter à vos besoins.
ServerName ose.unicaen.fr ServerName ose.unicaen.fr
DocumentRoot /var/www/ose/public 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 RewriteEngine On
RewriteBase / RewriteBase /
...@@ -95,8 +92,6 @@ A adapter à vos besoins. ...@@ -95,8 +92,6 @@ A adapter à vos besoins.
Exemple pris avec /var/www/ose en répertoire d'installation et /ose en Alias. Exemple pris avec /var/www/ose en répertoire d'installation et /ose en Alias.
A adapter à vos besoins. A adapter à vos besoins.
```apache ```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 Alias /ose /var/www/ose/public
<Directory /var/www/ose/public> <Directory /var/www/ose/public>
......
No preview for this file type
No preview for this file type
...@@ -167,6 +167,9 @@ class Module implements ConsoleUsageProviderInterface, ConsoleBannerProviderInte ...@@ -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)", 'calcul-tableaux-bord' => "Calcul de tous les tableaux de bord (sauf la formule qui est à part)",
"Formule de calcul", "Formule de calcul",
'formule-calcul' => "Calcul de toutes les heures complémentaires à l'aide de la formule", '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",
]; ];
} }
......
...@@ -21,6 +21,23 @@ return [ ...@@ -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' => [ 'navigation' => [
'default' => [ 'default' => [
'home' => [ 'home' => [
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
namespace Application\Controller; namespace Application\Controller;
use Application\Service\Traits\UtilisateurServiceAwareTrait;
/** /**
* Description of AdministrationController * Description of AdministrationController
...@@ -11,6 +13,9 @@ namespace Application\Controller; ...@@ -11,6 +13,9 @@ namespace Application\Controller;
*/ */
class AdministrationController extends AbstractController class AdministrationController extends AbstractController
{ {
use UtilisateurServiceAwareTrait;
/** /**
* *
...@@ -21,4 +26,19 @@ class AdministrationController extends AbstractController ...@@ -21,4 +26,19 @@ class AdministrationController extends AbstractController
return []; 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
APACHE TEST OK
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment