Commit 15c7e91b authored by Théo GUILLON's avatar Théo GUILLON
Browse files

Ajout : mise en place du fonctionnement en mode LDAPS

parent d4dbbc5a
...@@ -533,4 +533,10 @@ DELETE FROM valeurs WHERE champ_name IN ( ...@@ -533,4 +533,10 @@ DELETE FROM valeurs WHERE champ_name IN (
'soustraitant' 'soustraitant'
); );
ALTER TABLE connecteur_ldaps ADD COLUMN certificat_url VARCHAR(100);
CREATE UNIQUE INDEX connecteur_ldaps_certificat_url_idx ON connecteur_ldaps (certificat_url);
ALTER TABLE connecteur_ldaps ADD COLUMN certificat_name VARCHAR(100);
CREATE UNIQUE INDEX connecteur_ldaps_certificat_name_certificat_url_idx ON connecteur_ldaps (certificat_name, certificat_url);
COMMIT; COMMIT;
...@@ -91,7 +91,7 @@ define('FORMAT_DATE_HEURE', '%e-%m-%Y à %H:%M'); ...@@ -91,7 +91,7 @@ define('FORMAT_DATE_HEURE', '%e-%m-%Y à %H:%M');
define('REGEXP_ALPHA_FR', "/^[a-zA-Z\'-ÂÀâàÇçÉÊÈËéêèëÎÏîïÔÖôöÛÙûù ]*$/i"); define('REGEXP_ALPHA_FR', "/^[a-zA-Z\'-ÂÀâàÇçÉÊÈËéêèëÎÏîïÔÖôöÛÙûù ]*$/i");
//Validation champs email //Validation champs email
define('REGEXP_EMAIL_FR', '/^[a-zA-Z1-9\-@._]*$/i'); define('REGEXP_EMAIL_FR', '/^[a-zA-Z0-9\-@._]*$/i');
Configure::write('logoAcceptedTypes', [ Configure::write('logoAcceptedTypes', [
'image/png', // .png 'image/png', // .png
...@@ -99,3 +99,7 @@ Configure::write('logoAcceptedTypes', [ ...@@ -99,3 +99,7 @@ Configure::write('logoAcceptedTypes', [
'image/gif', // .gif 'image/gif', // .gif
'image/svg+xml' //.svg 'image/svg+xml' //.svg
]); ]);
//Dossier qui va contenir les certificats des organisations pour le LDAPS
define('CERTIFICATS', DS . "certificats");
define('CHEMIN_CERTIFICATS', CHEMIN_FICHIER . CERTIFICATS . DS);
...@@ -260,6 +260,11 @@ class CronShell extends Shell { ...@@ -260,6 +260,11 @@ class CronShell extends Shell {
]); ]);
Configure::write('LdapManager.Ldap', $connecteurLdap['ConnecteurLdap']); Configure::write('LdapManager.Ldap', $connecteurLdap['ConnecteurLdap']);
if (!empty($connecteurLdap['ConnecteurLdap']['certificat_url'])) {
Configure::write('LdapManager.Ldap.ldaps_cert', CHEMIN_CERTIFICATS . $connecteurLdap['ConnecteurLdap']['certificat_url']);
}
Configure::write('AuthManager.Authentification', $authentification['Authentification']); Configure::write('AuthManager.Authentification', $authentification['Authentification']);
} }
......
...@@ -46,7 +46,8 @@ class ConnecteurLdapsController extends AppController { ...@@ -46,7 +46,8 @@ class ConnecteurLdapsController extends AppController {
* @created 20/03/2018 * @created 20/03/2018
* @version V1.0.0 * @version V1.0.0
*/ */
public function add() { public function add()
{
$this->set('title', __d('connecteur_ldap', 'connecteur_ldap.titreLdap')); $this->set('title', __d('connecteur_ldap', 'connecteur_ldap.titreLdap'));
$this->set('options', $this->ConnecteurLdap->enums()); $this->set('options', $this->ConnecteurLdap->enums());
...@@ -59,10 +60,23 @@ class ConnecteurLdapsController extends AppController { ...@@ -59,10 +60,23 @@ class ConnecteurLdapsController extends AppController {
]); ]);
} }
$this->request->data['ConnecteurLdap']['organisation_id'] = $this->Session->read('Organisation.id'); $success = true;
$this->ConnecteurLdap->create($this->request->data); $this->Service->begin();
if (false !== $this->ConnecteurLdap->save(null, ['atomic' => true])) { $data = $this->request->data;
$data['ConnecteurLdap']['organisation_id'] = $this->Session->read('Organisation.id');
$this->ConnecteurLdap->create($data);
$success = $success && false !== $this->ConnecteurLdap->save(null, ['atomic' => false]);
if ($success == true) {
if (!empty($data['ConnecteurLdap']['certificat']) && !empty($data['ConnecteurLdap']['id'])) {
$success = $this->ConnecteurLdap->saveFile($data['ConnecteurLdap']['certificat'], $data['ConnecteurLdap']['id']);
}
}
if ($success == true) {
$this->ConnecteurLdap->commit();
$this->Session->setFlash(__d('connecteur_ldap', 'connecteur_ldap.flashsuccessConnecteurEnregistrer'), 'flashsuccess'); $this->Session->setFlash(__d('connecteur_ldap', 'connecteur_ldap.flashsuccessConnecteurEnregistrer'), 'flashsuccess');
$this->redirect([ $this->redirect([
...@@ -70,6 +84,7 @@ class ConnecteurLdapsController extends AppController { ...@@ -70,6 +84,7 @@ class ConnecteurLdapsController extends AppController {
'action' => 'index' 'action' => 'index'
]); ]);
} else { } else {
$this->ConnecteurLdap->rollback();
$this->Session->setFlash(__d('connecteur_ldap', 'connecteur_ldap.flasherrorErreurEnregistrementConnecteur'), 'flasherror'); $this->Session->setFlash(__d('connecteur_ldap', 'connecteur_ldap.flasherrorErreurEnregistrementConnecteur'), 'flasherror');
} }
} else { } else {
...@@ -81,5 +96,31 @@ class ConnecteurLdapsController extends AppController { ...@@ -81,5 +96,31 @@ class ConnecteurLdapsController extends AppController {
$this->request->data = $this->ConnecteurLdap->find('first', $query); $this->request->data = $this->ConnecteurLdap->find('first', $query);
} }
} }
public function deleteFile($id, $urlFile) {
$this->autoRender = false;
$this->ConnecteurLdap->begin();
$cheminFile = CHEMIN_CERTIFICATS . $urlFile;
$this->ConnecteurLdap->id = $id;
$record = [
'certificat_url' => null,
'certificat_name' => null
];
$success = $this->ConnecteurLdap->save($record, ['atomic' => false]) !== false
&& unlink($cheminFile) === true;
if ($success == true) {
$this->ConnecteurLdap->commit();
$this->Session->setFlash(__d('norme', 'norme.flashsuccessFichierSupprimer'), 'flashsuccess');
} else {
$this->ConnecteurLdap->rollback();
$this->Session->setFlash(__d('norme', 'norme.flasherrorFichierSupprimer'), 'flasherror');
}
$this->redirect($this->Referers->get());
}
} }
...@@ -840,6 +840,8 @@ class UsersController extends AppController { ...@@ -840,6 +840,8 @@ class UsersController extends AppController {
'ConnecteurLdap.tls', 'ConnecteurLdap.tls',
'ConnecteurLdap.version', 'ConnecteurLdap.version',
'ConnecteurLdap.account_suffix', 'ConnecteurLdap.account_suffix',
'ConnecteurLdap.certificat_url',
'ConnecteurLdap.certificat_name',
'ConnecteurLdap.username', 'ConnecteurLdap.username',
'ConnecteurLdap.note', 'ConnecteurLdap.note',
'ConnecteurLdap.nom', 'ConnecteurLdap.nom',
...@@ -903,6 +905,11 @@ class UsersController extends AppController { ...@@ -903,6 +905,11 @@ class UsersController extends AppController {
unset ($connecteurLdap['ConnecteurLdap']['active']); unset ($connecteurLdap['ConnecteurLdap']['active']);
Configure::write('LdapManager.Ldap', $connecteurLdap['ConnecteurLdap']); Configure::write('LdapManager.Ldap', $connecteurLdap['ConnecteurLdap']);
if (!empty($connecteurLdap['ConnecteurLdap']['certificat_url'])) {
Configure::write('LdapManager.Ldap.ldaps_cert', CHEMIN_CERTIFICATS . $connecteurLdap['ConnecteurLdap']['certificat_url']);
}
Configure::write('AuthManager.Authentification', $connecteurLdap['Authentification']); Configure::write('AuthManager.Authentification', $connecteurLdap['Authentification']);
$autorisationLogin = $this->Auth->login(); $autorisationLogin = $this->Auth->login();
......
...@@ -263,7 +263,8 @@ function create_arborescence_files($user_id = null) ...@@ -263,7 +263,8 @@ function create_arborescence_files($user_id = null)
CHEMIN_FICHIER . CONNECTEURS, CHEMIN_FICHIER . CONNECTEURS,
CHEMIN_PIECE_JOINT_ARTICLE, CHEMIN_PIECE_JOINT_ARTICLE,
CHEMIN_PIECE_JOINT_ARTICLE_TMP, CHEMIN_PIECE_JOINT_ARTICLE_TMP,
CHEMIN_LOGOS CHEMIN_LOGOS,
CHEMIN_CERTIFICATS
]; ];
if ($user_id !== null) { if ($user_id !== null) {
......
...@@ -101,6 +101,12 @@ msgstr "Suffixe du compte" ...@@ -101,6 +101,12 @@ msgstr "Suffixe du compte"
msgid "connecteur_ldap.placeholderChampAccountSuffix" msgid "connecteur_ldap.placeholderChampAccountSuffix"
msgstr "@mairie-xxx.xxx" msgstr "@mairie-xxx.xxx"
msgid "connecteur_ldap.champCertificat"
msgstr "Certificat .crt"
msgid "connecteur_ldap.titleBtFileCertificat"
msgstr "Choisir un fichier .crt"
msgid "connecteur_ldap.titreTableauConcordances" msgid "connecteur_ldap.titreTableauConcordances"
msgstr "Tableau des concordances :" msgstr "Tableau des concordances :"
......
...@@ -41,5 +41,56 @@ class ConnecteurLdap extends AppModel { ...@@ -41,5 +41,56 @@ class ConnecteurLdap extends AppModel {
'foreignKey' => 'organisation_id' 'foreignKey' => 'organisation_id'
] ]
]; ];
/**
* @param $data
* @param $id
* @return bool
* @throws Exception
*
* @access public
*
* @author Théo GUILLON <theo.guillon@libriciel.coop>
* @created 16/07/2020
* @version V2.0.0
*/
public function saveFile($file, $id)
{
$success = true;
if ($file['type'] === 'application/x-x509-ca-cert') {
if (!empty($file['name'])) {
$extension = '.crt';
// On verifie si le dossier file existe. Si c'est pas le cas on le cree
$success = create_arborescence_files();
if ($success == true && !empty($file['tmp_name'])) {
$url = time();
$certificat_url = $url . $extension;
$success = $success && move_uploaded_file($file['tmp_name'], CHEMIN_CERTIFICATS . $certificat_url);
if ($success === true) {
$this->id = $id;
$record = [
'certificat_url' => $certificat_url,
'certificat_name' => $file['name']
];
$success = $success && $this->save($record, ['atomic' => false]) !== false;
}
} else {
$success = false;
}
} else {
$success = false;
}
return ($success);
} else {
$success = false;
}
return ($success);
}
} }
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
<?php <?php
echo $this->WebcilForm->create('ConnecteurLdap',[ echo $this->WebcilForm->create('ConnecteurLdap',[
'autocomplete' => 'off', 'autocomplete' => 'off',
'type' => 'file',
'inputDefaults' => ['div' => false], 'inputDefaults' => ['div' => false],
'class' => 'form-horizontal', 'class' => 'form-horizontal',
'novalidate' => 'novalidate' 'novalidate' => 'novalidate'
...@@ -101,7 +102,10 @@ ...@@ -101,7 +102,10 @@
'tls' => [ 'tls' => [
'id' => 'tls', 'id' => 'tls',
'class' => 'form-control usersDeroulant', 'class' => 'form-control usersDeroulant',
'options' => [false => 'Non', true => 'Oui'], 'options' => [
false => 'Non',
true => 'Oui'
],
'empty' => false, 'empty' => false,
'required' => true, 'required' => true,
'placeholder' => false 'placeholder' => false
...@@ -117,8 +121,60 @@ ...@@ -117,8 +121,60 @@
], ],
'account_suffix' => [ 'account_suffix' => [
'id' => 'account_suffix' 'id' => 'account_suffix'
] ],
// 'certificat' => [
// 'id' => 'certificat',
// 'div' => 'input-group inputsForm',
// 'type' => 'file',
// 'class' => 'filestyle',
// 'data-buttonText' => __d('connecteur_ldap', 'connecteur_ldap.titleBtFileCertificat'),
// 'data-buttonBefore' => 'false',
// ]
]); ]);
if (empty($this->request->data['ConnecteurLdap']['certificat_name'])) {
echo $this->WebcilForm->input('certificat', [
'id' => 'certificat',
'div' => 'input-group inputsForm',
'type' => 'file',
'class' => 'filestyle',
'data-buttonText' => __d('connecteur_ldap', 'connecteur_ldap.titleBtFileCertificat'),
'data-buttonBefore' => 'false',
]);
} else {
?>
<table class="table" id="render">
<tbody>
<tr>
<td class="col-md-1">
<i class="fa fa-file-text-o fa-lg"></i>
</td>
<td class="col-md-9 tdleft">
<?php
echo $this->request->data['ConnecteurLdap']['certificat_name'];
?>
</td>
<td class="col-md-2">
<?php
echo $this->Html->link('<span class="fa fa-trash fa-lg"><!----></span>', [
'controller' => 'connecteurLdaps',
'action' => 'deleteFile',
$this->request->data['ConnecteurLdap']['id'],
$this->request->data['ConnecteurLdap']['certificat_url'],
], [
'class' => 'btn btn-default-danger btn-sm my-tooltip',
'title' => __d('norme','norme.btnSupprimerFichierNorme'),
'escapeTitle' => false
]);
?>
</td>
</tr>
</tbody>
</table>
<?php
}
?> ?>
<h2> <h2>
...@@ -181,7 +237,9 @@ ...@@ -181,7 +237,9 @@
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function () { $(document).ready(function () {
$("span.icon-span-filestyle").removeClass('icon-span-filestyle');
$("#ldap-block").hide(); $("#ldap-block").hide();
<?php <?php
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment