diff --git a/src/ninegate-1.0/.gitignore b/src/ninegate-1.0/.gitignore index f0b8bd87..77814bb3 100644 --- a/src/ninegate-1.0/.gitignore +++ b/src/ninegate-1.0/.gitignore @@ -1,5 +1,6 @@ /.web-server-pid /app/config/parameters.yml +/app/config/template.yml /src/Cadoles/CoreBundle/Command/data/core-init-01.sql /build/ /phpunit.xml diff --git a/src/ninegate-1.0/app/config/template.yml b/src/ninegate-1.0/app/config/template.yml deleted file mode 100644 index db304ff2..00000000 --- a/src/ninegate-1.0/app/config/template.yml +++ /dev/null @@ -1,127 +0,0 @@ -# This file is auto-generated during the composer install -parameters: - # Determine qui est le maitre de l'identitité = SQL / LDAP / SSO - # Si SQL cela veut dire que c'est l'applicatif qui gère les utilisateurs - # Sinon la source est externe soit via un annuaire soit via des attributs venant d'un SSO - # Si la source est externe de fait pas de module d'inscription ni de reset de password - # Et pas de synchronisation vers un annuaire ou vers ePortail - masteridentity: LDAP - - # Mode d'authentification soit SQL / LDAP / CAS / SAML - # Pour l'instant SQL - CAS - SAML Reste à faire LDAP - # Attention si le masteridentity est différent de SQL le mode d'authentification est forcement différent de SQL - # Car aucune synchronisation des password n'est possible - mode_auth: CAS - - # Mode de registration : none / byuser / byadmin - # none = désactivation de l'inscription mais reset de password possible - # byuser = aucune validation par un administrateur, l'utilisateur valide son inscription par lui-même - # byadmin = validation de l'inscription par un administrateur, sauf si domaine de messagerie dans la liste blanche - moderegistration: none - - # Activation module - cron_activate: true - portal_activate: true - - # Information de base de l'annuaire - ldap_host: 172.27.7.61 - ldap_port: 389 - ldap_user: cn=admin,o=gouv,c=fr - ldap_password: eole - ldap_basedn: o=gouv,c=fr - - # Mise en page - alias: ninegate - libelle_etab: ldapbundle - numero_etab: 0000000A - colormain: 2c3e50 # Couleur principale - fontcolorhover: FFFFFF # Couleur des polices sur fond de couleur principale - keyterm: 8 # Taille mini du password - labelniveau01: Ecole # Label singulier du niveau 01 d'organisation - labelsniveau01: Ecoles # Label pluriel du niveau 01 d'organisation - iconniveau01: fa-building # Icon du niveau 01 d'organisation - labelsirenniveau01: SIREN # Label SIREN - viewniveau02: false # Gérer un niveau 02 d'organisation - labelniveau02: niveau02 # Label singulier du niveau 02 d'organisation - labelsniveau02: niveaus02 # Label pluriel du niveau 02 d'organisation - iconniveau02: fa-sitemap # Icon du niveau 02 d'organisation - labelsiretniveau02: SIRET # Label SIRET - - # Si masteridentity est à SQL = où sont synchronisées les datas dans l'annuaire - ldap_sync: false - ldap_baseuser: - ldap_baseniveau01: - ldap_baseniveau02: - ldap_basegroup: - - # Si masteridentity est à LDAP = quel est le modele d'organisation - # Si open = rien de particulier - # Si scribe = on génére des groupes correspondant au profil / classe / niveau / option - ldap_template: scribe - - # Si masteridentity est à LDAP = quel champs sont à récupérer - ldap_username: uid - ldap_firstname: givenname - ldap_lastname: sn - ldap_email: mail - ldap_usersadmin: [admin,prof.6a] - - eportail_sync: false - eportail_url: # /eportail - eportail_login: # /eportail/login.php - eportail_database_host: # 172.27.7.64 - eportail_database_port: # 3306 - eportail_database_name: # eportail - eportail_database_user: # eportail - eportail_database_password: # "changme" - - # Si mode_auth = CAS - cas_host: ldapbundle.ac-arno.fr - cas_path: - cas_port: 8443 - - # Si mode_aut = SAML - saml_entityid: 'http://dev.nuonet.cadoles' - saml_logout_url: 'http://172.27.7.67:8088/idp/profile/Logout' - saml_idps_list: ['http://172.27.7.67:8088/idp/shibboleth'] - - # Si mode_auth = CAS ou SAML les attributs permettant de matché avec les utilisateurs - user_attr_cas_username: username - user_attr_cas_mail: email - user_attr_cas_lastname: lastname - user_attr_cas_firstname: firstname - - user_attr_saml_username: eduPersonPrincipalName - user_attr_saml_mail: mail - user_attr_saml_lastname: sn - user_attr_saml_firstname: givenName - - mailer_port: '2525' - mailer_encryption: null - mailer_authmode: null - noreply: noreply@ldapbundle.ac-arno.fr - -# Doctrine Configuration -doctrine: - dbal: - default_connection: default - connections: - default: - driver: pdo_mysql - host: '%database_host%' - port: '%database_port%' - dbname: '%database_name%' - user: '%database_user%' - password: '%database_password%' - charset: UTF8 - orm: - default_entity_manager: default - entity_managers: - default: - connection: default - mappings: - CadolesCoreBundle: ~ - CadolesCronBundle: ~ - CadolesPortalBundle: ~ - - \ No newline at end of file diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql b/src/ninegate-1.0/scripts/install/core-init-01.sql similarity index 99% rename from src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql rename to src/ninegate-1.0/scripts/install/core-init-01.sql index f055395b..ad7cab2e 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql +++ b/src/ninegate-1.0/scripts/install/core-init-01.sql @@ -8,7 +8,7 @@ INSERT IGNORE INTO `niveau01` (`id`, `label`, `siren`) VALUES (-100, 'Interne', 'SIREN'); INSERT IGNORE INTO `user` (`id`, `niveau01_id`, `username`, `firstname`, `lastname`, `password`, `email`, `avatar`, `role`,`siren`,`authlevel`) VALUES -(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}9tH17tlC86xamslwYLnhF4qiMaQqvbuL +(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}yiDxhDNog19bkfbdXAX1PH2iZWUu5eGy ', 'admin@ldapbundle.ac-arno.fr', 'admin.jpg', 'ROLE_ADMIN', '130007107', 'simple'); diff --git a/src/ninegate-1.0/scripts/install/install.sh b/src/ninegate-1.0/scripts/install/install.sh new file mode 100755 index 00000000..8387b218 --- /dev/null +++ b/src/ninegate-1.0/scripts/install/install.sh @@ -0,0 +1,57 @@ +#!/bin/bash +echo "INSTALLATION NINEGATE HORS EOLE" +cd /var/www/html/ninegate + +www_dir="/var/www/html" + +yes | cp scripts/apache/ninegate.conf /etc/apache2/sites-available/ +a2ensite ninegate +service apache2 restart + +# Récuper les composer associés à la version de php installé +version72=`php -r 'echo version_compare(phpversion(), "7.2.0", ">=");'` +if [[ "$version72" == "1" ]] +then + cp -rf /var/www/html/ninegate/scripts/php72/composer.json /var/www/html/ninegate/composer.json + cp -rf /var/www/html/ninegate/scripts/php72/composer.lock /var/www/html/ninegate/composer.lock +else + version70=`php -r 'echo version_compare(phpversion(), "7.0.0", ">=");'` + if [[ "$version70" == "1" ]] + then + cp -rf /var/www/html/ninegate/scripts/php70/composer.json /var/www/html/ninegate/composer.json + cp -rf /var/www/html/ninegate/scripts/php70/composer.lock /var/www/html/ninegate/composer.lock + fi +fi + +# Installation des dépendances composer +composer install +rm -f /var/www/html/ninegate/var/logs/dev.log + +# Permissions +./perm.sh www-data + +# Nettoyage du cache +rm /var/www/html/ninegate/var/cache -rf +php bin/console cache:clear --env=prod --no-debug + +# Migration si nécessaire du schéma de la base +php bin/console doctrine:schema:update --force --env=prod --no-debug + +# Insertion data de base +php bin/console Core:InitData --env=prod +php bin/console Cron:InitData --env=prod +php bin/console Portal:InitData --env=prod + +# Passage des scripts +php bin/console Core:Script --env=prod + +# Generation des assets +bin/console assetic:dump --env=prod + +# Copie des polices du projet dans le rep web +cp -rf src/Cadoles/CoreBundle/Resources/public/fonts web/ + +bin/console Core:SetPassword admin admin + +# Permissions +./perm.sh www-data \ No newline at end of file diff --git a/src/ninegate-1.0/scripts/install/ninegate.conf b/src/ninegate-1.0/scripts/install/ninegate.conf new file mode 100644 index 00000000..d5ef51aa --- /dev/null +++ b/src/ninegate-1.0/scripts/install/ninegate.conf @@ -0,0 +1,11 @@ +Alias /ninegate /var/www/html/ninegate/web + + + AllowOverride All + Order Allow,Deny + Allow from All + Options Indexes FollowSymLinks MultiViews + php_admin_flag allow_url_fopen On + + + diff --git a/src/ninegate-1.0/scripts/install/template.yml b/src/ninegate-1.0/scripts/install/template.yml new file mode 100644 index 00000000..b165a49a --- /dev/null +++ b/src/ninegate-1.0/scripts/install/template.yml @@ -0,0 +1,139 @@ +# This file is auto-generated during the composer install +parameters: + # Determine qui est le maitre de l'identitité = SQL / LDAP / SSO + # Si SQL cela veut dire que c'est l'applicatif qui gère les utilisateurs + # Sinon la source est externe soit via un annuaire soit via des attributs venant d'un SSO + # Si la source est externe de fait pas de module d'inscription ni de reset de password + # Et pas de synchronisation vers un annuaire ou vers ePortail + masteridentity: SQL + + # Mode d'authentification soit SQL / LDAP / CAS / SAML + # Pour l'instant SQL - CAS - SAML Reste à faire LDAP + # Attention si le masteridentity est différent de SQL le mode d'authentification est forcement différent de SQL + # Car aucune synchronisation des password n'est possible + mode_auth: SQL + + # Mode de registration : none / byuser / byadmin + # none = désactivation de l'inscription mais reset de password possible + # byuser = aucune validation par un administrateur, l'utilisateur valide son inscription par lui-même + # byadmin = validation de l'inscription par un administrateur, sauf si domaine de messagerie dans la liste blanche + moderegistration: byadmin + + # Activation module + cron_activate: true + portal_activate: true + module_activate: false + page_activate: false + item_activate: false + alert_activate: false + calendar_activate: false + blog_activate: false + project_activate: false + flux_activate: false + notice_activate: false + + # Mise en page + weburl: localhost + alias: ninegate + libelle_etab: ninegate + numero_etab: ~ + colormain: 2c3e50 # Couleur principale + fontcolorhover: FFFFFF # Couleur des polices sur fond de couleur principale + keyterm: 8 # Taille mini du password + labelniveau01: Département # Label singulier du niveau 01 d'organisation + labelsniveau01: Départements # Label pluriel du niveau 01 d'organisation + iconniveau01: fa-building # Icon du niveau 01 d'organisation + labelsirenniveau01: SIREN # Label SIREN + viewniveau02: true # Gérer un niveau 02 d'organisation + labelniveau02: Service # Label singulier du niveau 02 d'organisation + labelsniveau02: Services # Label pluriel du niveau 02 d'organisation + iconniveau02: fa-sitemap # Icon du niveau 02 d'organisation + labelsiretniveau02: SIRET # Label SIRET + + mailer_port: '2525' + mailer_encryption: null + mailer_authmode: null + noreply: noreply@ninegate.fr + + websocket_activate: false + websocket_host: localhost + websocket_port: 5555 + websocket_portinterne: 5556 + + activate_widadminer: false + activate_widbalado: false + activate_widdokuwiki: false + activate_wideconnect: false + activate_widetherhome: false + activate_widfluxbb: false + activate_widgepi: false + activate_widglpi: false + activate_widgrr: false + activate_widkanboard: false + activate_widlimesurvey: false + activate_widmindmaps: false + activate_widmoodle: false + activate_widnextcloud: false + activate_widonlyoffice: false + activate_widopensondage: false + activate_widphpldapadmin: false + activate_widpiwik: false + activate_widroundcube: false + activate_widsacoche: false + activate_widwordpress: false + + syncenvole_activate: false + widbalado_activate_syncenvole: false + widgepi_activate_syncenvole: false + widnextcloud_activate_syncenvole: false + widonlyoffice_sync: false + widpiwik_activate_syncenvole: false + widsacoche_activate_syncenvole: false + + + + activate_widsonde: false + widsonde_url: + + saml_entityid: 'http://discovery' + saml_logout_url: 'http://localhost:8088/idp/profile/Logout' + saml_idps_list: ['http://localhost:8088/idp/shibboleth'] + + ldap_sync: false + ldap_template: open + ldap_host: 127.0.0.1 + ldap_port: 389 + ldap_user: cn=admin,o=gouv,c=fr + ldap_password: ~ + ldap_basedn: o=gouv,c=fr + ldap_baseuser: + ldap_baseniveau01: + ldap_baseniveau02: + ldap_basegroup: + + +# Doctrine Configuration +doctrine: + dbal: + default_connection: default + connections: + default: + driver: pdo_mysql + host: '%database_host%' + port: '%database_port%' + dbname: '%database_name%' + user: '%database_user%' + password: '%database_password%' + charset: UTF8 + orm: + default_entity_manager: default + entity_managers: + default: + connection: default + mappings: + CadolesCoreBundle: ~ + CadolesCronBundle: ~ + CadolesPortalBundle: ~ + CadolesWebsocketBundle: ~ + + \ No newline at end of file diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/PurgeFileCommand.php b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/PurgeFileCommand.php index 1d8a5c25..8f449b4e 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/PurgeFileCommand.php +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/PurgeFileCommand.php @@ -22,6 +22,7 @@ class PurgeFileCommand extends Command private $output; private $filesystem; private $rootlog; + private $byexec; protected function configure() { @@ -30,7 +31,8 @@ class PurgeFileCommand extends Command ->setDescription('Purge Files') ->setHelp('This command Purge the obsolete Files') ->addArgument('cronid', InputArgument::OPTIONAL, 'ID Cron Job') - ->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron') + ->addArgument('lastchance', InputArgument::OPTIONAL, 'Lastchance to run the cron') + ->addArgument('byexec', InputArgument::OPTIONAL, 'By Cron:Exec') ; } @@ -43,6 +45,11 @@ class PurgeFileCommand extends Command $this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/"; $alias = $this->container->getParameter('alias'); + // Le script est-il executé via Cron:Exec + $this->byexec = $input->getArgument('byexec'); + if($this->byexec=="") $this->byexec=false; + echo "pouet".$this->byexec; + $this->writelnred(''); $this->writelnred('== Core:PurgeFile'); $this->writelnred('=========================================================================================================='); @@ -368,9 +375,11 @@ class PurgeFileCommand extends Command private function writelnred($string) { $this->output->writeln(''.$string.''); $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + if($this->byexec) $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n"); } private function writeln($string) { $this->output->writeln($string); $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + if($this->byexec) $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n"); } } diff --git a/src/ninegate-1.0/src/Cadoles/CronBundle/Command/CronexecCommand.php b/src/ninegate-1.0/src/Cadoles/CronBundle/Command/CronexecCommand.php new file mode 100644 index 00000000..cb8c23fb --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/CronBundle/Command/CronexecCommand.php @@ -0,0 +1,92 @@ +setName('Cron:Exec') + ->setDescription("Executer les commandes présente dans le bus des commandes à exécuter à la volet") + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + + $this->container = $this->getApplication()->getKernel()->getContainer(); + $this->em = $this->container->get('doctrine')->getEntityManager(); + $this->output = $output; + $this->filesystem = new Filesystem(); + $this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/"; + echo $this->rootlog; + // On supprime le fichier de log spécifique à ce script + //$this->filesystem->remove($this->rootlog."exec.log"); + $this->filesystem->dumpFile($this->rootlog.'exec.log', ""); + $this->filesystem->chown($this->rootlog.'exec.log', "www-data"); + + $cronexecs=$this->em->getRepository("CadolesCronBundle:Cronexec")->findAll(); + if($cronexecs) { + $this->writelnred(''); + $this->writelnred('== Cron:Exec'); + $this->writelnred('=========================================================================================================='); + + foreach($cronexecs as $cron) { + // Récupération de la commande + $command = $this->getApplication()->find($cron->getCommand()); + + // Réccuépration des parametres + $jsonparameter=json_decode($cron->getJsonargument(),true); + + // Parametre id du cron actuel + $jsonparameter["cronid"]=$cron->getId(); + $jsonparameter["byexec"]=true; + + // Formater la chaine de parametre + $parameter = new ArrayInput($jsonparameter); + + // Executer la commande + $returnCode=false; + try{ + $returnCode = $command->run($parameter, $output); + } + catch(\Exception $e) { + $this->writelnred("JOB EN ERREUR"); + } + } + } + + return 1; + } + + private function writelnred($string) { + $this->output->writeln(''.$string.''); + $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n"); + } + private function writeln($string) { + $this->output->writeln($string); + $this->filesystem->appendToFile($this->rootlog.'cron.log', $string."\n"); + $this->filesystem->appendToFile($this->rootlog.'exec.log', $string."\n"); + } +} diff --git a/src/ninegate-1.0/src/Cadoles/CronBundle/Command/MailCommand.php b/src/ninegate-1.0/src/Cadoles/CronBundle/Command/MailCommand.php index 352431fb..ec395e55 100644 --- a/src/ninegate-1.0/src/Cadoles/CronBundle/Command/MailCommand.php +++ b/src/ninegate-1.0/src/Cadoles/CronBundle/Command/MailCommand.php @@ -42,7 +42,7 @@ class MailCommand extends ContainerAwareCommand $this->filesystem = new Filesystem(); $this->rootlog = $this->container->get('kernel')->getRootDir()."/../var/logs/"; - $mailer_host = $this->getContainer()->getParameter('cron_activate'); + $mailer_host = $this->getContainer()->getParameter('mailer_host'); $this->writelnred(''); $this->writelnred('== Cron:Mail'); diff --git a/src/ninegate-1.0/src/Cadoles/CronBundle/Controller/CronController.php b/src/ninegate-1.0/src/Cadoles/CronBundle/Controller/CronController.php index 55f80111..98e69db3 100644 --- a/src/ninegate-1.0/src/Cadoles/CronBundle/Controller/CronController.php +++ b/src/ninegate-1.0/src/Cadoles/CronBundle/Controller/CronController.php @@ -172,6 +172,23 @@ class CronController extends Controller ]); } + public function cronexecAction() { + return $this->render('CadolesCronBundle:Cron:exec.html.twig', [ + 'useheader' => true, + 'usemenu' => false, + 'usesidebar' => true, + ]); + } + + public function cronexecreadAction() { + $kernel = $this->get('kernel'); + $path = $this->get('kernel')->getRootDir() . '/../var/logs/exec.log'; + $content = file_get_contents($path); + + $output["data"]=$content; + return new Response(json_encode($content), 200); + } + public function logAction(Request $request, $id) { $kernel = $this->get('kernel'); diff --git a/src/ninegate-1.0/src/Cadoles/CronBundle/Entity/Cronexec.php b/src/ninegate-1.0/src/Cadoles/CronBundle/Entity/Cronexec.php new file mode 100644 index 00000000..3ebca4b2 --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/CronBundle/Entity/Cronexec.php @@ -0,0 +1,98 @@ +id; + } + + /** + * Set command + * + * @param string $command + * + * @return Cronexec + */ + public function setCommand($command) + { + $this->command = $command; + + return $this; + } + + /** + * Get command + * + * @return string + */ + public function getCommand() + { + return $this->command; + } + + /** + * Set jsonargument + * + * @param string $jsonargument + * + * @return Cronexec + */ + public function setJsonargument($jsonargument) + { + $this->jsonargument = $jsonargument; + + return $this; + } + + /** + * Get jsonargument + * + * @return string + */ + public function getJsonargument() + { + return $this->jsonargument; + } +} diff --git a/src/ninegate-1.0/src/Cadoles/CronBundle/Repository/CronexecRepository.php b/src/ninegate-1.0/src/Cadoles/CronBundle/Repository/CronexecRepository.php new file mode 100644 index 00000000..45bfe70f --- /dev/null +++ b/src/ninegate-1.0/src/Cadoles/CronBundle/Repository/CronexecRepository.php @@ -0,0 +1,9 @@ +JOB EXEC +

+
+
+ Logs +
+ +
+
+
+{% endblock %} + +{% block localjavascript %} + function refreshContent() { + console.log("refresh"); + + $.ajax({ + method: "POST", + url: "{{ path('cadoles_cron_config_cronexecread') }}", + success: function(data, dataType) + { + $(".panel-body").html(data.replace(/\"/g,"").replace(/\\n/g,"
")); + } + }); + }; + + var timer=setInterval(refreshContent, 1000); + +{% endblock %} \ No newline at end of file