<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;//A voir
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;//A voir
use Symfony\Component\HttpFoundation\Cookie;//A voir
use Symfony\Component\HttpFoundation\Response;//A voir
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;//A voir
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;//A voir
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;//A voir
use Symfony\Component\HttpFoundation\JsonResponse;//A voir
use App\Entity\Utilisateur;
use App\Entity\Service;
use App\Entity\Parametre;
use Symfony\Component\HttpFoundation\RedirectResponse;//A voir
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use App\Repository\ATBGRepository;
use App\Repository\AbbreviationLangueRepository;
use App\Repository\AbbreviationRepository;
use App\Repository\ActualiteRepository;
use App\Repository\AntibiotiqueRepository;
use App\Repository\CasCliniquesCategorieRepository;
use App\Repository\CasCliniquesQuestionRepository;
use App\Repository\CasCliniquesReponseRepository;
use App\Repository\CasCliniquesReponseUtilisateurRepository;
use App\Repository\CelluleRepository;
use App\Repository\CelluleTitreCompletRepository;
use App\Repository\CoAntibiotiqueCalculRepository;
use App\Repository\ContenuRepository;
use App\Repository\EtablissementRepository;
use App\Repository\FamilleAntibiotiqueRepository;
use App\Repository\FavorisRepository;
use App\Repository\InformationHopitalRepository;
use App\Repository\InformationReferenceRepository;
use App\Repository\InformationRepository;
use App\Repository\IntervenantSessioneppRepository;
use App\Repository\LangueRepository;
use App\Repository\MicroorganismeRepository;
use App\Repository\NoteRepository;
use App\Repository\ParametreRepository;
use App\Repository\PaysRepository;
use App\Repository\PersonnalisationRepository;
use App\Repository\PersonnalisationSpectreRepository;
use App\Repository\QualiteRepository;
use App\Repository\ReferenceHopitalRepository;
use App\Repository\ReferenceRepository;
use App\Repository\SessioneppRepository;
use App\Repository\SessioneppUrlRepository;
use App\Repository\SpecialiteRepository;
use App\Repository\ServiceRepository;
use App\Repository\SessionConnexionRepository;
use App\Repository\SpectreRepository;
use App\Repository\TicketPatientRepository;
use App\Repository\TypeInformationRepository;
use App\Repository\UtilisateurRepository;
use App\Repository\VersionRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use App\Service\InformationsComtpeService;
use App\Service\ContentHandler;
use App\Service\EncryptionService;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mime\Address;
use AuthenticationBundle\Security\User\WebserviceUser;
use \DateTime;
class AuthenticationController extends ATBGController
{
private $dispatcher;
private $mailer;
public function __construct(
private AbbreviationLangueRepository $abbreviationLangueRepo,
private AbbreviationRepository $abbreviationRepo,
private ActualiteRepository $actualiteRepo,
private AntibiotiqueRepository $antibiotiqueRepo,
private CasCliniquesCategorieRepository $casCliniquesCategorieRepo,
private CasCliniquesQuestionRepository $casCliniquesQuestionRepo,
private CasCliniquesReponseRepository $casCliniquesReponseRepo,
private CasCliniquesReponseUtilisateurRepository $casCliniquesReponseUtilisateurRepo,
private CelluleRepository $celluleRepo,
private CelluleTitreCompletRepository $celluleTitreCompletRepo,
private CoAntibiotiqueCalculRepository $coAntibiotiqueCalculRepo,
private ContenuRepository $contenuRepo,
private EtablissementRepository $etablissementRepo,
private FamilleAntibiotiqueRepository $familleAntibiotiqueRepository,
private FavorisRepository $favorisRepo,
private InformationHopitalRepository $informationHopitalRepo,
private InformationReferenceRepository $informationReferenceRepo,
private InformationRepository $informationRepo,
private IntervenantSessioneppRepository $intervenantSessioneppRepo,
private LangueRepository $langueRepo,
private MicroorganismeRepository $microorganismeRepo,
private NoteRepository $noteRepo,
private ParametreRepository $parametreRepo,
private PaysRepository $paysRepo,
private PersonnalisationRepository $personnalisationRepo,
private PersonnalisationSpectreRepository $personnalisationSpectreRepo,
private QualiteRepository $qualiteRepo,
private ReferenceHopitalRepository $referenceHopitalRepo,
private ReferenceRepository $referenceRepo,
private ServiceRepository $serviceRepo,
private SessionConnexionRepository $sessionConnexionRepo,
private SessioneppRepository $sessioneppRepo,
private SessioneppUrlRepository $sessioneppUrlRepo,
private SpecialiteRepository $specialiteRepo,
private SpectreRepository $spectreRepo,
private TicketPatientRepository $ticketPatientRepo,
private TypeInformationRepository $typeInformationRepo,
private UtilisateurRepository $utilisateurRepo,
private VersionRepository $versionRepo,
private TranslatorInterface $translator,
private EncryptionService $encryptService,
private LangController $langService,
MailerInterface $mailer
){
$this->dispatcher = new EventDispatcher();
$this->mailer = $mailer;
}
private function logUserAndRedirect($username, $roles, Request $request)
{
$firewall = 'main';
$token = new UsernamePasswordToken($username, null, $firewall, $roles);
$this->get("security.token_storage")->setToken($token);
$event = new InteractiveLoginEvent($request, $token);
//$this->dispatcher->dispatch("security.interactive_login", $event);
$this->dispatcher->dispatch($event);
if ($request->getSession()->get('_security.main.target_path'))
{
return $this->redirect($request->getSession()->get('_security.main.target_path'));
}
else
{
$returned = parent::suppression_parametres_get($request);
if ($returned != null)
{
return $returned;
}
else
{
return $this->redirectToRoute('actualites_home');
}
}
}
// les connexions ADADA et BOUTIQUE ne sont pas incluses dans les entités. Les connexions webedition et webhopital font appels à du code SQL natif sans entityRepository
private function connexionWebHopital(Request $request, &$error, &$warning, $vidal = false)
{
$roles = array('ROLE_AUTHENTICATED');
$session = $request->getSession();
$ip_client = $request->getClientIp();
$connexionReferer = false;
$referer = $request->headers->get('referer');
if ($referer && !preg_match("/".str_replace("/", "\/", $request->getHttpHost())."/", $referer))
{
$ip_client = $referer;
$connexionReferer = true;
$url_referer = $request->getSession()->get('_security.main.target_path');
$session->invalidate(3600);
$session->set('_security.main.target_path',$url_referer);
}
// echo $ip_client;
while ($ip_client != null)
{
$adada_connection = $this->get('doctrine')->getConnection('adada');
$sql = "" .
"SELECT count(client_ip_ip) as nbips, client_vidal_token,client_vidal, client_nom, client_id, client_date_fin_installation, client_ref_nom, client_ref_prenom,client_cbip
FROM ADADA_CLIENT
LEFT JOIN ADADA_CLIENT_IP on ADADA_CLIENT.client_id=ADADA_CLIENT_IP.client_ip_id_client
WHERE (ADADA_CLIENT_IP.client_ip_ip = :client_ip1
OR IF(REPLACE(ADADA_CLIENT_IP.client_ip_ip, '.*', '') <> ADADA_CLIENT_IP.client_ip_ip,:client_ip2 like CONCAT(REPLACE(ADADA_CLIENT_IP.client_ip_ip, '.*', ''), '%'),''))
AND client_produit like '%hopital_web%'";
if ($vidal && !$request->query->get('code'))
{
$error[] = $this->translator->trans("authentification_lien_vidal_non_valide");
$ip_client = null;
}
else
{
if ($vidal)
{
$current_time = new \DateTime();
$vidal_code_1 = $current_time->format('dmYH');
$current_time->sub(new \DateInterval('P1H'));
$vidal_code_2 = $current_time->format('dmYH');
$current_time->add(new \DateInterval('P2H'));
$vidal_code_3 = $current_time->format('dmYH');
$sql .= ' and client_vidal = 1 and (md5(concat(client_vidal_token, :vidal_code_1)) = :code1 or md5(concat(client_vidal_token, :vidal_code_2)) = :code2 or md5(concat(client_vidal_token, :vidal_code_3)) = :code3)';
}
$stmt = $adada_connection->prepare($sql);
$stmt->bindValue('client_ip1', $ip_client);
$stmt->bindValue('client_ip2', $ip_client);
if ($vidal)
{
$stmt->bindValue('vidal_code_1', $vidal_code_1);
$stmt->bindValue('code1', $request->query->get('code'));
$stmt->bindValue('vidal_code_2', $vidal_code_2);
$stmt->bindValue('code2', $request->query->get('code'));
$stmt->bindValue('vidal_code_3', $vidal_code_3);
$stmt->bindValue('code3', $request->query->get('code'));
}
$stmt->execute();
// dump($stmt);
// dd($users);
$users = $stmt->execute()->fetchAll();
$user = $users[0];
$nbips = $user['nbips'];
$pays_code = $this->parametreRepo->findParametrePaysCode($user['client_id']);
if($pays_code != null && $pays_code != "") $this->langService->setLocale($request, strtolower(substr($pays_code, 0, 2)));
else $this->langService->setLocale($request, 'fr');
if($nbips>0)
{
//Une seule adresse IP, on redirige sans vérifier la clef
if($nbips==1)
{
$session->set('titre_hopital', $user['client_nom']);
$session->set('client_id_adada', $user['client_id']);
$session->set('client_vidal', $user['client_vidal']);
$session->set('client_vidal_token', $user['client_vidal_token']);
$session->set('client_cbip', $user['client_cbip']);
$this->checkExpirationDateWebHopital($user['client_date_fin_installation'], $error, $warning);
$this->checkCodeFiness($user['client_id'], $error, $warning, $request);
$ip_client = null;
}
else
{
//aucune clef passée dans l'URL
if (!$request->query->get('cle_url') && !$session->get('cle_url'))
{
$error[] = $this->translator->trans("authentification_cle_authentification_pas_presente");
$ip_client = null;
}
else
{
$cle_url = "aaaaaaaaaaaaaaaaaa";
if (!$request->query->get('cle_url'))
{
$cle_url = $session->get('cle_url');
}
else
{
$cle_url = $request->query->get('cle_url');
}
$sql = "SELECT count(client_ip_ip) as nbips, client_vidal_token, client_vidal, client_nom, client_id, client_date_fin_installation, client_ref_nom, client_ref_prenom,client_cbip
FROM ADADA_CLIENT
LEFT JOIN ADADA_CLIENT_IP on ADADA_CLIENT.client_id=ADADA_CLIENT_IP.client_ip_id_client AND (ADADA_CLIENT_IP.client_ip_ip = :ip_client1 OR :ip_client2 like CONCAT(REPLACE(ADADA_CLIENT_IP.client_ip_ip, '.*', ''), '%'))
WHERE ADADA_CLIENT.client_cle_url = :cle_url
AND client_produit like '%hopital_web%'";
$stmt = $adada_connection->prepare($sql);
$stmt->bindValue('ip_client1', $ip_client);
$stmt->bindValue('ip_client2', $ip_client);
$stmt->bindValue('cle_url', $cle_url);
$stmt->execute();
$users = $stmt->fetchAll();
$row = $users[0];
$nbips = $row['nbips'];
if( $nbips > 0)
{
//Clef url vérifiée
if($nbips == 1)
{
$session->set('titre_hopital', $row['client_nom']);
$session->set('client_id_adada', $row['client_id']);
$session->set('client_vidal', $row['client_vidal']);
$session->set('client_vidal_token', $row['client_vidal_token']);
$session->set('client_cbip', $user['client_cbip']);
$session->set('cle_url', $cle_url);
$this->checkExpirationDateWebHopital($row['client_date_fin_installation'], $error, $warning);
$this->checkCodeFiness( $row['client_id'], $error, $warning, $request);
$ip_client = null;
}
else
{
$error[] = $this->translator->trans("authentification_cle_authentification_deja_connectee");
$ip_client = null;
}
}
else
{
$error[] = $this->translator->trans("authentification_cle_authentification_pas_valide");
$ip_client = null;
}
}
}
}
else
{
if ($connexionReferer === true)
{
$ip_client = $request->getClientIp();
$connexionReferer = false;
}
else
{
$ip_client = null;
$error[] = $this->translator->trans("authentification_ip_non_reconnue");
}
}
}
}
return $roles;
}
private function checkExpirationDateWebHopital($date, &$error, &$warning)
{
// si date de fin d'installation < maintenant, on bloque. Si moins de X jours on avertie
$date_expiration = \DateTime::createFromFormat("Y-m-d", $date);
$current_date = new \DateTime();
if ($date_expiration < $current_date)
{
$error[] = $this->translator->trans("authentification_abonnement_expire");
}
else
{
// avertissement 30 jours avant
$current_date->add(new \DateInterval('P1M'));
if ($date_expiration < $current_date)
{
$warning[] = $this->translator->trans("authentification_abonnement_bientot_expirer");
}
}
}
private function checkCodeFiness($idAdada, &$error, &$warning, Request $request)
{
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
$etablissements = $this->etablissementRepo->findby(array('clientIdAdada' => $idAdada));
if (count($etablissements) > 1)
{
if (!$request->query->get('finess') && !$session->get('finess'))
{
$error[] = $this->translator->trans("authentification_code_finess_pas_present");
}
else
{
$finess = "aaaaaaaaaaaaaaaaaa";
$nom_finess = "";
$id_etablissement = "";
$finessOK = false;
if (!$request->query->get('finess'))
{
$finess = $session->get('finess');
}
else
{
$finess = $request->query->get('finess');
}
foreach ($etablissements as $etablissement)
{
if ($etablissement->getCodeFiness() == $finess)
{
$finess = $etablissement->getCodeFiness();
$nom_finess = $etablissement->getNomEtablissement();
$id_etablissement = $etablissement->getIdEtablissement();
$finessOK = true;
}
}
if ($finessOK)
{
$session->set('finess', $finess);
$session->set('nom_finess', $nom_finess);
$session->set('id_etablissement', $id_etablissement);
$session->set('multi_finess', 1);
}
else
{
$error[] = $this->translator->trans("authentification_code_finess_pas_trouve");
}
}
}
else if (count($etablissements) == 1)
{
$session->set('nom_finess', $etablissements[0]->getNomEtablissement());
$session->set('id_etablissement', $etablissements[0]->getIdEtablissement());
$session->set('multi_finess', 0);
}
else
{
//Pas de Code FINESS enregistrer pour ce client
$error[] = $this->translator->trans("authentification_code_finess_non_rattache");
}
}
private function certification($certificat,&$client_identifiant, &$client_date_fin, &$client_idadada, &$client_ip, &$errors)
{
$tmp = openssl_decrypt($certificat->getValeur() ,'AES-128-CBC', $this->getParameter('nom_hopital_intranet'), 0, 'AETUOSFHKMµXVN.');
$tmp = explode("||",$tmp);
$client_idadada = $tmp[0];
$client_identifiant = $tmp[1];
$client_ip = $tmp[2];
$client_date_fin = $tmp[3];
}
public function informationsKey(&$client_identifiant, &$client_date_fin, &$client_idadada, &$client_ip, &$errors)
{
$em = $this->getDoctrine()->getManager();
$path_to_web = $this->getParameter('kernel.project_dir');
if (file_exists($path_to_web . '/antibiogarde.key'))
{
$certificat = $this->parametreRepo->findCertificat($this->getParameter('client_id_adada_intranet'));
if ($certificat != null)
{
$this->certification($certificat,$client_identifiant,$client_date_fin,$client_idadada,$client_ip,$errors);
return true;
}
else
{
$server_addr = '';
if (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR'] <> '')
{
$server_addr = $_SERVER['SERVER_ADDR'];
} else {
$server_addr = gethostbyname($_SERVER['SERVER_NAME']);
}
$key_file= file_get_contents($path_to_web . '/antibiogarde.key');
$request = curl_init();
curl_setopt($request, CURLOPT_URL, $this->getParameter('url_certification_intranet'));
curl_setopt($request,CURLOPT_POSTFIELDS, "key=".$key_file."&ip=".$server_addr."&nomhopital=".$this->getParameter('nom_hopital_intranet'));
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
$datas = json_decode(curl_exec($request));
if ($datas->responseCode == 0)
{
$certificat = new Parametre();
$certificat->setClientIdAdada($this->getParameter('client_id_adada_intranet'));
$certificat->setClef("certificat_authenticite");
$certificat->setValeur($datas->certificat);
$certificat->setOrdre(0);
$em->persist($certificat);
$em->flush();
$this->certification($certificat,$client_identifiant,$client_date_fin,$client_idadada,$client_ip,$errors);
return true;
}
else
{
$errors[] = $this->translator->trans("authentification_erreur")." ".$datas->responseCode." : ".$this->translator->trans("authentification_clef_antibiogarde_non_valide_ou_expiree");
return false;
}
}
}
else
{
$certificat = $this->parametreRepo->findCertificat($this->getParameter('client_id_adada_intranet'));
if ($certificat != null)
{
$em->remove($certificat);
$em->flush();
}
$errors[] = $this->translator->trans("authentification_clef_antibiogarde_non_installe");
return false;
}
}
private function connexionIntranet(Request $request, &$errors, &$warnings)
{
$roles = array('ROLE_AUTHENTICATED');
$session = $request->getSession();
$recupOK = $this->informationsKey($client_identifiant,$client_date_fin,$client_idadada,$client_ip,$errors);
if ($recupOK)
{
$server_addr = '';
if (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR'] <> '')
{
$server_addr = $_SERVER['SERVER_ADDR'];
} else {
$server_addr = gethostbyname($_SERVER['SERVER_NAME']);
}
$clefOK = (md5($client_identifiant) == md5($this->getParameter('client_clef_intranet')));
$dateOK = (date("Y-m-d") < $client_date_fin);
$ipOK = ($server_addr == $client_ip);
$idOK = ($this->getParameter('client_id_adada_intranet') == $client_idadada);
if(!$clefOK || !$dateOK || !$ipOK || !$idOK )
{
$codeError = "";
$codeError .= ($idOK) ? "0" : "1" ;
$codeError .= ($ipOK) ? "0" : "1" ;
$codeError .= ($dateOK) ? "0" : "1" ;
$codeError .= ($clefOK) ? "0" : "1" ;
$errors[] = $this->translator->trans("authentification_erreur")." ".$codeError." : ".$this->translator->trans("authentification_clef_antibiogarde_non_valide_ou_expiree");
return array();
}
else
{
$session->set('titre_hopital', $this->getParameter('nom_hopital_intranet'));
$session->set('client_id_adada', $this->getParameter('client_id_adada_intranet'));
$session->set('client_vidal', $this->getParameter('activation_interfacage_vidal'));
$session->set('client_vidal_token', $this->getParameter('token_interfacage_vidal'));
$session->set('client_cbip', $this->getParameter('activation_interfacage_cbip'));
$em = $this->getDoctrine()->getManager();
$etablissements = $this->etablissementRepo->findby(array('clientIdAdada' => $client_idadada));
$session->set('nom_finess', $etablissements[0]->getNomEtablissement());
$session->set('id_etablissement', $etablissements[0]->getIdEtablissement());
$session->set('multi_finess', 0);
return $roles;
}
}
return array();
}
public function login(Request $request)
{
parse_str(parse_url($request->getSession()->get('_security.main.target_path'), PHP_URL_QUERY), $output);
if (array_key_exists("finess", $output))
{
$request->query->set('finess', $output['finess']);
}
if (array_key_exists("cle_url", $output))
{
$request->query->set('cle_url', $output['cle_url']);
}
if ($this->get('security.authorization_checker')->isGranted('ROLE_AUTHENTICATED') && !$request->query->get('cle_url') && !$request->query->get('finess'))
{
$returned = parent::suppression_parametres_get($request);
if ($returned != null)
{
return $returned;
}
else
{
return $this->redirectToRoute('actualites_home');
}
}
$version_antibiogarde = $this->getParameter('version_antibiogarde');
$errors = array();
$warning = array();
$roles = array();
switch($version_antibiogarde)
{
case "web_edition":
$errors[] = $this->translator->trans("authentification_authentifie_pour_utiliser");
break;
case "web_hopital":
$roles = $this->connexionWebHopital($request, $errors, $warning);
break;
case "intranet":
$roles = $this->connexionIntranet($request, $errors, $warning);
break;
default:
$errors[] = $this->translator->trans("authentification_erreur_survenue");
break;
}
if (count($errors) > 0)
{
if ($request->getSession()->get('login_errors') == null)
{
foreach ($errors as $error) {
$request->getSession()->set('login_errors', $error);
}
}
else{
if($request->getSession()->get('login_errors') == $this->getParameter('lien_modification_mdp_impose_webedition')) {
$mail = $request->getSession()->get('_security.last_username');
$request->getSession()->invalidate();
return $this->redirect($this->getParameter('lien_modification_mdp_impose_webedition').'?mail='.$mail);
}
}
return $this->render('Authentication/login.html.twig');
}
else
{
$request->getSession()->set('login_warnings', $warning);
return $this->logUserAndRedirect($version_antibiogarde, $roles, $request);
}
}
public function loginMessage()
{
return $this->render('Authentication/login.html.twig');
}
public function loginCheck()
{
}
public function loginForm(Request $request)
{
$errors = $request->getSession()->get('login_errors');
$request->getSession()->remove('login_errors');
return $this->render('Authentication/login-form.html.twig', array('errors' => $errors));
}
public function inscriptionEPP(InformationsComtpeService $infoCptService)
{
$errorsCompte = array();
$formDatasCompte = array();
$messageCompte = "";
$donneesFormulaire = $infoCptService->getDonneesFormulaire();
return $this->render('Authentication/mon-compte.html.twig', array('utilisateur' => null, 'errorsCompte' => $errorsCompte,'formDatasCompte' => $formDatasCompte,'messageCompte' => $messageCompte,'donneesFormulaire' => $donneesFormulaire ));
}
public function mot_de_passe_perdu_epp(InformationsComtpeService $infoCptService)
{
$error = '';
$formDatasPassword = array();
$message = '';
$donneesFormulaire = $infoCptService->getDonneesFormulaire();
return $this->render('Authentication/password-lost-form.html.twig',array('message' => $message, 'error' => $error,'formDatasPassword' => $formDatasPassword));
}
/********************************************************************************************************************************************/
/**************************************************** MON COMPTE ************************************************************************/
/********************************************************************************************************************************************/
/**
* Require ROLE_USER only for this action
*
* @IsGranted("ROLE_USER")
*/
public function mes_parametres($path)
{
return $this->render('Authentication/gestion-parametre-compte.html.twig', array('path' => $path, 'errorsCompte' => array(), 'errorsInfos' => ''));
}
public function conditions_utlisation()
{
return new JsonResponse( array (
'responseCode' => 0,
'content' => $this->render('Authentication/conditions-utilisation.html.twig')->getContent()
));
}
public function mon_compte_form(Request $request, InformationsComtpeService $infoCptService)
{
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
$errorsCompte = array();
$messageCompte = "";
$messageInfo = "";
$content = '';
$formDatasCompte = array();
$conditionsOK = false;
$new = false;
$utilisateur = null;
if ($request->isMethod('POST'))
{
$id_utilisateur = $session->get('id_utilisateur');
$client_id_adada = $session->get('client_id_adada');
$id_etablissement = $session->get('id_etablissement');
if ($id_utilisateur == null || empty($id_utilisateur))
{
$utilisateur = new Utilisateur();
$utilisateur->setClientIdAdada($client_id_adada);
$utilisateur->setActif(1);
$new = true;
}
else
{
$utilisateur = $this->utilisateurRepo->findOneby(array(
'clientIdAdada' => $client_id_adada,
'idUtilisateur' => $id_utilisateur
));
}
$utilisateur->setEtablissement($this->etablissementRepo->findOneBy(array('clientIdAdada' => $client_id_adada,'idEtablissement' => $id_etablissement)));
$isOK = true;
$new_pass = '';
$new_pass_isOK = true;
foreach ($request->request as $key => $value)
{
$formDatasCompte[$key] = trim($value);
switch ($key)
{
case 'qualite':
if ($value != -1 )
{
$utilisateur->setQualite($this->qualiteRepo->findOneby(array('idQualite' => $value)));
}
else
{
$utilisateur->setQualite(null);
}
break;
case 'login':
if (trim($value) != '' && strlen(trim($value)) <= 255)
{
$utilisateur->setUsername(trim($value));
$copieUser = $this->utilisateurRepo->findUtilisateurCopie($utilisateur->getUsername(),null,$id_utilisateur,$client_id_adada);
if ($copieUser != null)
{
$isOK = false;
$errorsCompte["login"] = "- ".$this->translator->trans("authentification_erreur_login_utilise");
}
}
else
{
$isOK = false;
$errorsCompte["login"] = "- ".$this->translator->trans("authentification_erreur_saisir_login");
}
break;
case 'nom':
if (trim($value) != '' && strlen(trim($value)) <= 255)
{
$utilisateur->setNom(trim($value));
}
else
{
$isOK = false;
$errorsCompte["nom"] = "- ".$this->translator->trans("authentification_erreur_saisir_nom");
}
break;
case 'prenom':
if (trim($value) != '' && strlen(trim($value)) <= 255)
{
$utilisateur->setPrenom(trim($value));
}
else
{
$isOK = false;
$errorsCompte["prenom"] = "- ".$this->translator->trans("authentification_erreur_saisir_prneom");
}
break;
case 'email':
if (trim($value) != '' && strlen(trim($value)) <= 500)
{
if (filter_var(trim($value), FILTER_VALIDATE_EMAIL))
{
$utilisateur->setEmail(trim($value));
$copieUser = $this->utilisateurRepo->findUtilisateurCopie(null,$utilisateur->getEmail(),$id_utilisateur,$client_id_adada);
if ($copieUser != null)
{
$isOK = false;
$errorsCompte["email"] = "- ".$this->translator->trans("authentification_email_deja_utilise");
}
}
else
{
$isOK = false;
$errorsCompte["email"] = "- ".$this->translator->trans("authentification_email_saisi_non_valide");
}
}
else
{
$isOK = false;
$errorsCompte["email"] = "- ".$this->translator->trans("authentification_saisir_email");
}
break;
case 'telephone':
if (trim($value) != '' && strlen(trim($value)) <= 20 && preg_match("/^0\d(?:[ ]\d{2}){4}$/", trim($value)) == 1)
{
$utilisateur->setTelephone(trim($value));
}
else
{
if (trim($value) == '')
{
$utilisateur->setTelephone(null);
}
else
{
$isOK = false;
$errorsCompte["telephone"] = "- ".$this->translator->trans("authentification_telephone_non_valide");
}
}
break;
case 'rpps':
if (trim($value) == '')
{
$utilisateur->setNumeroRpps(null);
}
else
{
$utilisateur->setNumeroRpps(trim($value));
}
// if (trim($value) != '' && strlen(trim($value)) <= 20 && preg_match("/^\d{11}$/", trim($value)) == 1)
// {
// $utilisateur->setNumeroRpps(trim($value));
// }
// else
// {
// if (trim($value) == '')
// {
// $utilisateur->setNumeroRpps(null);
// }
// else
// {
// $isOK = false;
// $errorsCompte["rpps"] = "- Votre numéros RPPS saisi n'est pas valide. Il doit être sous la forme de 11 chiffres sans espace.";
// }
// }
break;
case 'specialite':
if ($value != -1 )
{
$utilisateur->setSpecialite($this->specialiteRepo->findOneby(array('idSpecialite' => $value)));
}
else
{
$utilisateur->setSpecialite(null);
}
break;
case 'serviceList':
if ($value != -1 )
{
$utilisateur->setService($this->serviceRepo->findOneby(array('idService' => $value)));
}
else
{
$utilisateur->setService(null);
}
break;
case 'serviceInput':
if (trim($value) != '' && strlen(trim($value)) <= 255 && strlen(trim($value)) >= 1)
{
$service = new Service();
$service->setNomService(trim($value));
$service->setClientIdAdada($client_id_adada);
$em->persist($service);
$utilisateur->setService($service);
}
else
{
$isOK = false;
$errorsCompte["service"] = "- ".$this->translator->trans("authentification_service_non_valide");
}
break;
case 'new_pwd':
if ($value != '' && strlen($value) <= 255)
{
$new_pass = $value;
}
break;
case 'rep_new_pwd':
if ($new_pass != '' || $value != '')
{
if (
strlen($new_pass) >= 12 && strlen($value) >= 12 &&
preg_match('/[A-Z]/', $value) &&
preg_match('/[a-z]/', $value) &&
preg_match('/[0-9]/', $value) &&
preg_match('/[!@#$%^&*()_+\\-=\\[\\]{};:\'",.<>?]/', $value) &&
!password_verify($value, $utilisateur->getPassword())
) {
if ($value == $new_pass)
{
$utilisateur->setPassword(password_hash($new_pass, PASSWORD_BCRYPT));
}
else
{
$isOK = false;
$errorsCompte["newPass"] = "- ".$this->translator->trans("authentification_mdp_differents");
}
}
else
{
$isOK = false;
$errorsCompte["newPass"] = "- ".$this->translator->trans("authentification_mdp_non_valide");
}
}
else if($new)
{
$isOK = false;
$errorsCompte["newPass"] = "- ".$this->translator->trans("authentification_saisir_mdp");
}
break;
case 'conditions':
$conditionsOK = true;
break;
default:
# code...
break;
}
}
if ($new && !$conditionsOK)
{
$isOK = false;
$errorsCompte["conditions"] = "- ".$this->translator->trans("authentification_accepter_conditions");
}
if ($isOK == true)
{
if ($new)
{
$messageCompte = $this->translator->trans("authentification_compte_enregistre");
}
else
{
$messageCompte = $this->translator->trans("authentification_modifications_ok");
}
$formDatasCompte = array();
$em->persist($utilisateur);
$em->flush();
}
else
{
$em->clear();
}
}
$infos = $infoCptService->getInfoCompte();
$donneesFormulaire = $infoCptService->getDonneesFormulaire();
if ($new && $isOK)
{
// Création de l'e-mail : nous créons une instance du mailer symfony
$message = (new TemplatedEmail())
->subject($this->translator->trans("authentification_email_confirmation_inscription"))
->from(new Address("contact@antibiogarde.org" , "Antibiogarde"))
->to($utilisateur->getEmail())
->htmlTemplate('Asset/Courriers/confirmation-inscription.html.twig');
// Retour au service mailer, nous utilisons sa méthode « send() » pour envoyer notre $message
$this->mailer->send($message);
$content = $this->render('Authentication/mon-compte.html.twig',
array('utilisateur' => null, 'errorsCompte' => $errorsCompte,'formDatasCompte' => $formDatasCompte,'messageCompte' => $messageCompte,'donneesFormulaire' => $donneesFormulaire )
)->getContent();
}
else
{
$content = $this->render('Authentication/mes-parametres.html.twig', array( 'infos' => $infos,
'donneesFormulaire' => $donneesFormulaire,
'errorsCompte' => $errorsCompte,
'formDatasCompte' => $formDatasCompte,
'messageInfo' => null,
'messageCompte' => $messageCompte))->getContent();
}
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
}
/**
* Require ROLE_REFERENT only for this action
*
* @IsGranted("ROLE_REFERENT")
*/
public function mes_informations_form(Request $request, InformationsComtpeService $infoCptService)
{
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
$client_id_adada = $session->get('client_id_adada');
$messageInfo = "";
$messageCompte = "";
$errorsCompte = array();
$formDatasCompte = array();
if ($request->isMethod('POST'))
{
$boutique_connection = $this->container->get('doctrine')->getConnection('adada');
$stmt = $boutique_connection->prepare("update ADADA_CLIENT set client_vidal = :vidal, client_vidal_token = :vidal_token, client_cbip = :cbip WHERE client_id = :client_id");
$stmt->bindValue('vidal', $request->request->getAlnum('interfacageVidal'));
$stmt->bindValue('vidal_token', $request->request->getAlnum('tokenVidal'));
$stmt->bindValue('cbip', $request->request->getAlnum('interfacageCbip'));
$stmt->bindValue('client_id', $client_id_adada);
$stmt->execute();
$session->set('client_vidal', $request->request->getAlnum('interfacageVidal'));
$session->set('client_vidal_token', $request->request->getAlnum('tokenVidal'));
$session->set('client_cbip', $request->request->getAlnum('interfacageCbip'));
$personnalisations = $this->parametreRepo->findParametreAffichagePersonnalisations($client_id_adada);
$personnalisations->setValeur($request->request->getAlnum('affichage_personnalisation'));
$em->persist($personnalisations);
$em->flush();
foreach ($request->request as $key => $value)
{
$formDatasCompte[$key] = trim($value);
}
}
$infos = $infoCptService->getInfoCompte();
$donneesFormulaire = $infoCptService->getDonneesFormulaire();
$messageInfo = $this->translator->trans("authentification_modifications_ok");
$content = $this->render('Authentication/mes-parametres.html.twig', array( 'infos' => $infos,
'donneesFormulaire' => $donneesFormulaire,
'errorsCompte' => $errorsCompte,
'formDatasCompte' => $formDatasCompte,
'messageInfo' => $messageInfo,
'messageCompte' => $messageCompte));
if ($request->isMethod('POST')) $content = $content->getContent();
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
}
/**
* Require ROLE_USER only for this action
*
* @IsGranted("ROLE_USER")
*/
public function load_mes_informations(Request $request, InformationsComtpeService $infoCptService)
{
if ($request->isXmlHttpRequest())
{
$infos = $infoCptService->getInfoCompte();
$donneesFormulaire = $infoCptService->getDonneesFormulaire();
$errorsCompte = array();
$messageCompte = "";
$messageInfo = "";
$formDatasCompte = array();
$content = $this->render('Authentication/mes-parametres.html.twig', array( 'infos' => $infos,
'donneesFormulaire' => $donneesFormulaire,
'errorsCompte' => $errorsCompte,
'formDatasCompte' => $formDatasCompte,
'messageInfo' => $messageInfo,
'messageCompte' => $messageCompte))->getContent();
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
} else throw $this->createNotFoundException();
}
/**
* Require ROLE_USER only for this action
*
* @IsGranted("ROLE_USER")
*/
public function load_parrainages(Request $request)
{
if ($request->isXmlHttpRequest())
{
$content = '';
$errorsParrainages = array();
$formDatasParrainages = array();
$message = "";
$allEmailsVide = false;
if ($this->getParameter('version_antibiogarde') == 'web_edition')
{
$content = $this->render('Authentication/parrainages.html.twig',array('formDatasParrainages' => $formDatasParrainages,
'errorsParrainages' => $errorsParrainages,
'message' => $message,
'allEmailsVide' => $allEmailsVide))->getContent();
}
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
} else throw $this->createNotFoundException();
}
/**
* Require ROLE_USER only for this action
*
* @IsGranted("ROLE_USER")
*/
public function parrainages_form(Request $request)
{
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
$emails = array();
$errorsParrainages = array();
$formDatasParrainages = array();
$content = "";
$allEmailsOK = true;
$allEmailsVide = true;
$message = "";
$boutique_connection = $this->container->get('doctrine')->getConnection('boutique');
if ($request->isMethod('POST'))
{
foreach ($request->request as $key => $value)
{
if (!filter_var(trim($value), FILTER_VALIDATE_EMAIL) and trim($value) != "")
{
$allEmailsOK = false;
$allEmailsVide = false;
$errorsParrainages[] = "has-error";
}
else
{
if (trim($value) != "")
{
$allEmailsVide = false;
$errorsParrainages[] = "has-success";
$emails[] = trim($value);
}
else
{
$errorsParrainages[] = "";
}
}
$formDatasParrainages[$key] = trim($value);
}
}
if ($allEmailsOK && !$allEmailsVide)
{
$stmt = $boutique_connection->prepare("SELECT * FROM BOU_PARAMETRE where clef = 'gainTempsFilleul'");
$stmt = $stmt->execute();
$data = $stmt->fetch();
$joursMois = $data['valeur']." ".$this->translator->trans("authentification_jours");
if (($data['valeur']*1/30) >= 1)
{
$joursMois = (int)($data['valeur']*1/30)." ".$this->translator->trans("authentification_mois");
}
// Récupération du service
//$mailer = $this->container->get('mailer');
// Création de l'e-mail : nous créons une instance du mailer symfony
$message = (new TemplatedEmail())
->subject($session->get('nom_auteur_utilisateur')." ".$this->translator->trans("authentification_decouvrir_antibiogarde"))
->from(new Address("contact@antibiogarde.org" , "Antibiogarde"))
->to(...$emails)
->htmlTemplate('Asset/Courriers/invitation-parrainage.html.twig')
->context([
'nomParrain' => $session->get('nom_auteur_utilisateur'),
'emailParrain' => $session->get('email_auteur_utilisateur'),
'moisGratuitFilleul' => $joursMois
]);
// Retour au service mailer, nous utilisons sa méthode « send() » pour envoyer notre $message
$this->mailer->send($message);
$message = $this->translator->trans("authentification_demande_parrainage_ok");
}
$content = $this->render('Authentication/parrainages.html.twig',array('formDatasParrainages' => $formDatasParrainages,
'errorsParrainages' => $errorsParrainages,
'message' => $message,
'allEmailsVide' => $allEmailsVide))->getContent();
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
}
/**
* Require ROLE_USER only for this action
*
* @IsGranted("ROLE_USER")
*/
public function load_appareil(Request $request)
{
$session = $request->getSession();
if ($request->isXmlHttpRequest())
{
$content = '';
$message = '';
$error = '';
$udid = '';
if ($this->getParameter('version_antibiogarde') == 'web_edition')
{
$boutique_connection = $this->container->get('doctrine')->getConnection('boutique');
$stmt = $boutique_connection->prepare("SELECT udidDevice FROM BOU_APPAREIL_CONNECTE where numUtilisateur = :numUtilisateur and (numProduit = 1 or numProduit = 3)");
$stmt->bindValue('numUtilisateur', $session->get('webedition_id_utilisateur_boutique'));
$stmt = $stmt->execute();
if (count($stmt->fetchAll()) > 0)
{
$data = $stmt->fetch();
$udid = $data["udidDevice"];
}
$content = $this->render('Authentication/appareil.html.twig',array('udid' => $udid,'message' => $message,'error'=>$error))->getContent();
}
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
} else throw $this->createNotFoundException();
}
/**
* Require ROLE_USER only for this action
*
* @IsGranted("ROLE_USER")
*/
public function appareil_form(Request $request)
{
$session = $request->getSession();
$error = '';
$message = '';
if ($request->isXmlHttpRequest())
{
$udid = $request->request->all()['device'];
$boutique_connection = $this->container->get('doctrine')->getConnection('boutique');
$stmt = $boutique_connection->prepare("DELETE FROM BOU_APPAREIL_CONNECTE where numUtilisateur = :numUtilisateur and (numProduit = 1 or numProduit = 3) and udidDevice = :udid");
$stmt->bindValue('numUtilisateur', $session->get('webedition_id_utilisateur_boutique'));
$stmt->bindValue('udid', $udid);
$stmt->execute();
$stmt = $boutique_connection->prepare("SELECT udidDevice FROM BOU_APPAREIL_CONNECTE where numUtilisateur = :numUtilisateur and (numProduit = 1 or numProduit = 3) ");
$stmt->bindValue('numUtilisateur', $session->get('webedition_id_utilisateur_boutique'));
$stmtExec = $stmt->execute();
if (count($stmtExec->fetchAll()) > 0)
{
$data = $stmtExec->fetch();
$udid = $data["udidDevice"];
$error = $this->translator->trans("authentification_erreur_suppression");
}
else
{
$udid = '';
$message = $this->translator->trans("authentification_suppression_ok");
}
$content = $this->render('Authentication/appareil.html.twig',array('udid' => $udid,'message' => $message, 'error' => $error));
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content
));
} else throw $this->createNotFoundException();
}
public function mot_de_passe_perdu_form(Request $request)
{
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
$error = '';
$message = '';
$formDatasPassword = array();
if ($request->isMethod('POST'))
{
$client_id_adada = $session->get('client_id_adada');
foreach ($request->request as $key => $value)
{
$formDatasPassword[$key] = trim($value);
switch ($key)
{
case 'password_mail':
if (filter_var(trim($value), FILTER_VALIDATE_EMAIL))
{
$utilisateur = $this->utilisateurRepo->findOneby(array(
'clientIdAdada' => $client_id_adada,
'email' => trim($value)
));
if ($utilisateur == null)
{
$error = $this->translator->trans("authentification_email_non_trouve");
}
else
{
$nomPrenom = ($utilisateur->getQualite() != null) ? $utilisateur->getQualite()->getSlugFR()." " : "" ;
$nomPrenom .= $utilisateur->getNom()." ".$utilisateur->getPrenom();
$newPassword = $this->generatePassword();
//Set du nouveau password
$utilisateur->setPassword(password_hash($newPassword, PASSWORD_BCRYPT));
$em->persist($utilisateur);
$em->flush();
// Création de l'e-mail : nous créons une instance du mailer symfony
$message = (new TemplatedEmail())
->subject($this->translator->trans("authentification_identifiants_antibiogarde"))
->from(new Address("contact@antibiogarde.org" , "Antibiogarde"))
->to($utilisateur->getEmail())
->htmlTemplate('Asset/Courriers/password-lost.html.twig')
->context([
'username' => $utilisateur->getUsername(),
'password' => $newPassword,
'nomPrenom' => $nomPrenom
]);
// Retour au service mailer, nous utilisons sa méthode « send() » pour envoyer notre $message
$this->mailer->send($message);
$message = $this->translator->trans("authentification_identifiants_envoyes");
$formDatasPassword = array();
}
}
else
{
$error = $this->translator->trans("authentification_email_saisi_non_valide");
}
break;
default:
# code...
break;
}
}
}
$content = $this->render('Authentication/password-lost-form.html.twig',array('message' => $message, 'error' => $error, 'formDatasPassword' => $formDatasPassword));
return new JsonResponse( array (
'responseCode' => 0,
'content' => $content->getContent()
));
}
public function auto_connexion(Request $request)
{
$session = $request->getSession();
$login = $session->get('email_auteur_utilisateur');
$pwd = $session->get('pwd_auteur_utilisateur');
return $this->render('Authentication/auto-connexion.html.twig',array('login' => $login, 'pwd' => $pwd));
}
public function auto_connexion_edition(Request $request, $hash)
{
// dd($this->get("security.token_storage")->getToken());
// dd(($this->encryptService->encryptData('doudou03|aurelien@agence-ie.com')));
$decodeHash = $this->encryptService->decryptData($hash);
$decodeHash = explode('|', $decodeHash);
$session = $request->getSession();
$login = $decodeHash[1];
$pwd = $decodeHash[0];
$udid = $decodeHash[2];
if(count($decodeHash) > 3) {
$categ = $decodeHash[3];
$id = $decodeHash[4];
$session->set('parametre-mobile-spectre', $categ.(($id!=null)?'/'.$id:''));
if(count($decodeHash) > 5) {
$session->set('parametre-mobile-spectre', $categ.(($id!=null)?'/'.$id:'').'/'.$decodeHash[5]);
}
}
$boutique_connection = $this->container->get('doctrine')->getConnection('boutique');
if($login == '(null)' && $pwd == '(null)') {
$stmt = $boutique_connection->prepare("SELECT bu.EMAIL, bu.PWD
FROM BOU_UTILISATEUR bu
INNER JOIN BOU_ACCEDE ba on ba.NUMUTILISATEUR = bu.NUMUTILISATEUR
INNER JOIN BOU_NOTIFICATION_EMAIL_DEVICE bned ON bned.email = bu.EMAIL
INNER JOIN BOU_NOTIFICATION_DEVICE bnd ON bnd.id_device = bned.id_device
WHERE bnd.deviceIdentifier = :udid
AND (ba.numProduit = 1 or ba.numProduit = 3)
LIMIT 1");
$stmt->bindValue('udid', $udid);
$result = $stmt->execute();
$data = $result->fetchAll();
if (count($data) >= 1){
$login = $data[0]['EMAIL'];
$pwd = $data[0]['PWD'];
}
else throw $this->createNotFoundException();
}
else {
$login = $this->getParameter('utilisateur_login_mobile_spectre');
$pwd = $this->getParameter('utilisateur_pwd_mobile_spectre');
}
$stmt = $boutique_connection->prepare("SELECT bu.NUMUTILISATEUR, bu.password as PWD
FROM BOU_UTILISATEUR bu
LEFT JOIN BOU_ACCEDE ba on ba.NUMUTILISATEUR = bu.NUMUTILISATEUR and (ba.NUMPRODUIT = 1 or ba.NUMPRODUIT = 3)
WHERE EMAIL = :username
ORDER BY ba.DATEVALIDITE DESC
LIMIT 1");
$stmt->bindValue('username', $login);
$result = $stmt->execute();
$data = $result->fetchAll();
if (count($data) >= 1 && password_verify($pwd, $data[0]['PWD']) )
{
$sessionCo = $this->sessionConnexionRepo->findOneByIdUtilisateurBoutique($data[0]['NUMUTILISATEUR']);
if ($sessionCo) {
$em = $this->getDoctrine()->getManager();
$em->remove($sessionCo);
$em->flush();
}
}
$session->set('mobile-spectre', true);
return $this->render('Authentication/auto-connexion-edition.html.twig',array('_username' => $login, '_password' => $pwd));
}
public function ramsay_connexion(Request $request, $hash){
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
// On recupere la cle privé pour décryter le hash
$privateKeyPath = $this->getParameter('kernel.project_dir') . '/public/build/certificat/ramsay/private.key';
// On remplace les caractere speciaux du hash d'abord et ensuite, on decode base 64 le hash
$hash_final = base64_decode(strtr($hash, '._-', '+/='));
// Option openSSL necessaire pour le décryptage
$key = openssl_pkey_new([
'digest_alg' => 'sha512',
'private_key_bits' => 1024,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
]);
// Recupere la cle sous format PEM
openssl_pkey_export($key, $privateKey);
// On vérifie que le fichier provateKey existe
if (!file_exists($privateKeyPath)) {
file_put_contents($privateKeyPath, $privateKey);
}
// $publicKeyPath = $this->getParameter('kernel.project_dir') . '/public/build/certificat/ramsay/public.key';
// $publicKey = openssl_pkey_get_details($key);
// if (!file_exists($publicKeyPath)) {
// file_put_contents($publicKeyPath, $publicKey['key']);
// }
// $expirationDate = new \DateTime('now +2hours');
// $data = json_encode([
// 'RPPS' => 'test_feelandclic',
// 'expired_at' => $expirationDate->format('Y-m-d H:i:s'),
// ]);
// var_dump("Donnee envoyé : <br/>".$data);
// openssl_public_encrypt($data, $encryptedData, file_get_contents($publicKeyPath));
// // replace ambiguous characters
// var_dump('Transmis crypté :<br/>: '.$encryptedData);
// var_dump('Transmis crypté et encodé base 64 :<br/>'.base64_encode($encryptedData));
// var_dump('Transmis dans URL :<br/>'.strtr(base64_encode($encryptedData), '+/=', '._-'));
// die();
// ON decrypte le hash passer dans l'url avec notre clef privée
$decryptOk = openssl_private_decrypt($hash_final, $decryptedData, file_get_contents($privateKeyPath));
if ($decryptOk) {
// on decode le json pour manipuler les données envoyés
$data = json_decode($decryptedData);
// On prepare les dates pour vérifier si le lien est expiré ou non
$date_expiration = new DateTime($data->expired_at);
$date_expiration = $date_expiration->format('YmdHis');
$now = new DateTime(date('Y-m-d H:i:s'));
$now = $now->format('YmdHis');
//Si le lien est expiré, on set en session une variable qui permet d'affiché une modal avec une erreur
if ($now > $date_expiration){
$session->set('connexion_ramsay', 'ramsay_connexion_ko_lien_expire');
}
// Sinon, on tente de connecter un utilisateur temporaire
else {
$session->set('connexion_ramsay', 'ramsay_connexion_ok');
$sql = "INSERT INTO BOU_RAMSAY_CONNEXION (rpps,date_connexion) VALUES (?,?)";
$this->insertupdateDeleteQueryBoutique($sql, array($data->RPPS,$now));
$login = $this->parametreRepo->findOneByClef($this->getParameter('ramsay_code_login'));
$pwd = $this->parametreRepo->findOneByClef($this->getParameter('ramsay_code_pwd'));
return $this->render('Authentication/auto-connexion-ramsay.html.twig',array('login' => $login->getValeur(), 'pwd' => $pwd->getValeur()));
}
}
else {
// Si on arrive jusqu'ici, c'est que le decryptage de la chaine passé en url est en erreur
$session->set('connexion_ramsay', 'ramsay_connexion_ko_decryptage');
}
return $this->redirectToRoute('actualites_home');
}
public function ramsay_deconnexion(Request $request){
if ($this->container->get('security.token_storage')->getToken())
{
$user = $this->container->get('security.token_storage')->getToken()->getUser();
$version_antibiogarde = $this->getParameter('version_antibiogarde');
// pour web_edition, on supprime une connexion PC pour débloquer l'utilisateur
$em = $this->container->get('doctrine')->getManager();
$session = $this->sessionConnexionRepo->findOneByIdUtilisateurBoutique($user->getUniqueID());
if ($session)
{
$em->remove($session);
$em->flush();
}
}
$referer_url = $request->headers->get('referer');
$currentSession = $request->getSession();
if (!$currentSession->get('cle_url') && !$currentSession->get('finess'))
{
$currentSession->invalidate();
}
else
{
$cle_url = null;
$finess = null;
$nom_finess = null;
$id_etablissement = null;
if ($currentSession->get('cle_url'))
{
$cle_url = $currentSession->get('cle_url');
}
if ($currentSession->get('finess'))
{
$finess = $currentSession->get('finess');
$nom_finess = $currentSession->get('nom_finess');
$id_etablissement = $currentSession->get('id_etablissement');
}
$currentSession->invalidate();
if ($cle_url != null)
{
$currentSession->set('cle_url',$cle_url);
}
if ($finess != null)
{
$currentSession->set('finess',$finess);
$currentSession->set('nom_finess',$nom_finess);
$currentSession->set('id_etablissement',$id_etablissement);
}
}
return new JsonResponse(true);
}
private function insertupdateDeleteQueryBoutique($sql, $params=null){
$em = $this->get('doctrine')->getConnection('boutique');
$query = $em->prepare($sql);
if($params != null){
if(is_array($params)){
foreach ($params as $key => $value) {
$i=$key+1;
$query->bindValue($i, $value);
}
}
}
return $query->execute();
}
private function generatePassword($length = 12) {
$uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$lowercase = 'abcdefghijklmnopqrstuvwxyz';
$digits = '0123456789';
$specialChars = '*-+.!?$';
// On s'assure d'avoir au moins un de chaque catégorie
$password = $uppercase[random_int(0, strlen($uppercase) - 1)] .
$lowercase[random_int(0, strlen($lowercase) - 1)] .
$digits[random_int(0, strlen($digits) - 1)] .
$specialChars[random_int(0, strlen($specialChars) - 1)];
// Ajouter des caractères aléatoires pour atteindre la longueur demandée
$allChars = $uppercase . $lowercase . $digits . $specialChars;
for ($i = 4; $i < $length; $i++) {
$password .= $allChars[random_int(0, strlen($allChars) - 1)];
}
// Mélanger pour éviter un schéma prévisible
return str_shuffle($password);
}
}