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 (
'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;
......@@ -91,7 +91,7 @@ define('FORMAT_DATE_HEURE', '%e-%m-%Y à %H:%M');
define('REGEXP_ALPHA_FR', "/^[a-zA-Z\'-ÂÀâàÇçÉÊÈËéêèëÎÏîïÔÖôöÛÙûù ]*$/i");
//Validation champs email
define('REGEXP_EMAIL_FR', '/^[a-zA-Z1-9\-@._]*$/i');
define('REGEXP_EMAIL_FR', '/^[a-zA-Z0-9\-@._]*$/i');
Configure::write('logoAcceptedTypes', [
'image/png', // .png
......@@ -99,3 +99,7 @@ Configure::write('logoAcceptedTypes', [
'image/gif', // .gif
'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 {
]);
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']);
}
......
......@@ -46,7 +46,8 @@ class ConnecteurLdapsController extends AppController {
* @created 20/03/2018
* @version V1.0.0
*/
public function add() {
public function add()
{
$this->set('title', __d('connecteur_ldap', 'connecteur_ldap.titreLdap'));
$this->set('options', $this->ConnecteurLdap->enums());
......@@ -59,10 +60,23 @@ class ConnecteurLdapsController extends AppController {
]);
}
$this->request->data['ConnecteurLdap']['organisation_id'] = $this->Session->read('Organisation.id');
$this->ConnecteurLdap->create($this->request->data);
$success = true;
$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->redirect([
......@@ -70,6 +84,7 @@ class ConnecteurLdapsController extends AppController {
'action' => 'index'
]);
} else {
$this->ConnecteurLdap->rollback();
$this->Session->setFlash(__d('connecteur_ldap', 'connecteur_ldap.flasherrorErreurEnregistrementConnecteur'), 'flasherror');
}
} else {
......@@ -82,4 +97,30 @@ class ConnecteurLdapsController extends AppController {
}
}
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 {
'ConnecteurLdap.tls',
'ConnecteurLdap.version',
'ConnecteurLdap.account_suffix',
'ConnecteurLdap.certificat_url',
'ConnecteurLdap.certificat_name',
'ConnecteurLdap.username',
'ConnecteurLdap.note',
'ConnecteurLdap.nom',
......@@ -903,6 +905,11 @@ class UsersController extends AppController {
unset ($connecteurLdap['ConnecteurLdap']['active']);
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']);
$autorisationLogin = $this->Auth->login();
......
......@@ -263,7 +263,8 @@ function create_arborescence_files($user_id = null)
CHEMIN_FICHIER . CONNECTEURS,
CHEMIN_PIECE_JOINT_ARTICLE,
CHEMIN_PIECE_JOINT_ARTICLE_TMP,
CHEMIN_LOGOS
CHEMIN_LOGOS,
CHEMIN_CERTIFICATS
];
if ($user_id !== null) {
......
......@@ -101,6 +101,12 @@ msgstr "Suffixe du compte"
msgid "connecteur_ldap.placeholderChampAccountSuffix"
msgstr "@mairie-xxx.xxx"
msgid "connecteur_ldap.champCertificat"
msgstr "Certificat .crt"
msgid "connecteur_ldap.titleBtFileCertificat"
msgstr "Choisir un fichier .crt"
msgid "connecteur_ldap.titreTableauConcordances"
msgstr "Tableau des concordances :"
......
......@@ -42,4 +42,55 @@ class ConnecteurLdap extends AppModel {
]
];
/**
* @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 @@
<?php
echo $this->WebcilForm->create('ConnecteurLdap',[
'autocomplete' => 'off',
'type' => 'file',
'inputDefaults' => ['div' => false],
'class' => 'form-horizontal',
'novalidate' => 'novalidate'
......@@ -101,7 +102,10 @@
'tls' => [
'id' => 'tls',
'class' => 'form-control usersDeroulant',
'options' => [false => 'Non', true => 'Oui'],
'options' => [
false => 'Non',
true => 'Oui'
],
'empty' => false,
'required' => true,
'placeholder' => false
......@@ -117,9 +121,61 @@
],
'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>
<?php
......@@ -182,6 +238,8 @@
<script type="text/javascript">
$(document).ready(function () {
$("span.icon-span-filestyle").removeClass('icon-span-filestyle');
$("#ldap-block").hide();
<?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