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/*
.idea
deploy.log
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
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à :
......
......@@ -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__);
......@@ -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);
......@@ -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)) {
......
......@@ -32,6 +32,7 @@ if (!$od->checkPhpModules([
};
// 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("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) ");
......@@ -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.");
}
}
}
// Création du dossier
......@@ -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;
......@@ -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)) {
......
......@@ -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",
......
......@@ -5,7 +5,7 @@ if (file_exists($versionFile)){
}else{
$version = 'inconnue';
}
$dateVersion = '12/04/2018';
$dateVersion = '13/04/2018';
return [
'unicaen-app' => [
......
No preview for this file type
......@@ -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>
......
No preview for this file type
No preview for this file type
......@@ -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",
];
}
......
......@@ -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' => [
......
......@@ -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
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