location.href = '" . BASE_HTTP . "index.php';"); exit(); } } /** * Funzione per la verifica dei parametri ricevuti in post e il controllo di veriticità del login * @global type $con * @global type $statoSportello * @return type */ public static function checkLogLoginSpid() { global $con, $statoSportello; $response = false; if (count($_POST) > 3) { $fiscalNumberTINIT = explode("-", $_POST['fiscalNumber']); $fiscalNumber = $fiscalNumberTINIT[1]; $mobilePhone = trim($_POST['mobilePhone']); $email = trim($_POST['email']); $idCard = trim($_POST['idCard']); $inResponseTo = trim($_POST['inResponseTo']); $AuthnInstantExplode = explode("-", $_POST['AuthnInstant']); $name = trim($_POST['name']); $familyName = trim($_POST['familyName']); $placeOfBirth = trim($_POST['placeOfBirth']); $countyOfBirth = trim($_POST['countyOfBirth']); $dateOfBirth = trim($_POST['dateOfBirth']); $gender = trim($_POST['gender']); $address = trim($_POST['address']); $digitalAddress = trim($_POST['digitalAddress']); $AuthnInstant = $AuthnInstantExplode[1]; if (!empty($fiscalNumber) && !empty($inResponseTo) && !empty($AuthnInstant) && strlen($fiscalNumber) == 16) { if ($statoSportello == SPORTELLO_PRESENTAZIONE) { $verifySpid = AccessLog::selectLogOCI($fiscalNumber, $inResponseTo, $AuthnInstant, RETURNTOSPID); } else { $verifySpid = AccessLog::selectLog($fiscalNumber, $inResponseTo, $AuthnInstant, RETURNTOSPID); } if ($verifySpid) { $response = array( "fiscalNumber" => $fiscalNumber, "inResponseTo" => $inResponseTo, "AuthnInstant" => $AuthnInstant, "name" => $name, "familyName" => $familyName, "dateOfBirth" => $dateOfBirth, "gender" => Utils::extractGenderFromCF($fiscalNumber), "mobilePhone" => $mobilePhone, "email" => $email, "idCard" => $idCard, "placeOfBirth" => $placeOfBirth, "countyOfBirth" => $countyOfBirth, "gender" => $gender, "address" => $address, "digitalAddress" => $digitalAddress, ); } } } return $response; } public static function getFakeSPIDAccount() { $account = new Account(); $account->CODICE_FISCALE = "LNGMLL68P70A089T"; $account->Anagrafica->CODICE_FISCALE = "LNGMLL68P70A089T"; $account->Anagrafica->NOME = "Tizio2"; $account->Anagrafica->COGNOME = "Ferraro2"; $account->Anagrafica->SESSO = "M"; $account->Anagrafica->DATA_NASCITA = "2021-10-20"; $account->Anagrafica->COMUNE_NASCITA = "MESSINA"; $account->Anagrafica->PROV_NASCITA = "ME"; $account->Anagrafica->CAP_NASCITA = "95010"; $account->Anagrafica->COMUNE_RESIDENZA = "PALERMO"; $account->Anagrafica->PROV_RESIDENZA = "PA"; $account->Anagrafica->CAP_RESIDENZA = "96100"; $account->Anagrafica->INDIRIZZO_RESIDENZA = "VIA LITRI"; $account->Anagrafica->CIVICO_RESIDENZA = "11"; $account->Anagrafica->SPID_CELLULARE = "33333333"; $account->Anagrafica->SPID_EMAIL = "CASCIARO@GMAIL.COM"; $account->Anagrafica->SPID_DOCUMENTO = "AS09452389"; $account->Anagrafica->SPID_DOCUMENTO_SCADENZA = "02/01/2013"; $account->Anagrafica->SPID_DOCUMENTO_RILASCIO = "31/01/2013"; $account->Anagrafica->SPID_TIPO_DOCUMENTO = "CartaIdentita'"; $account->Anagrafica->SPID_DOCUMENTO_ENTE = "ComuneRoma"; $account->AUTORIZZAZIONE_TRATTAMENTO = 1; return $account; } public static function loginFake($cf) { global $con, $cfTEST; $fiscalNumberbase = "TINIT-" . $cf; if (!in_array($fiscalNumberbase, $cfTEST)) { return array(); } $fiscalNumberTINIT = explode("-", $fiscalNumberbase); $fiscalNumber = $fiscalNumberTINIT[1]; $mobilePhone = "22222222"; $email = "CASCIARO@GMAIL.COM"; $idCard = "CartaIdentita' AS09452389 ComuneRoma 2013-01-02 2013-01-31"; $dateOfBirth = rand(1956, 2000)."-01-25"; $countyOfBirth = "CT"; $placeOfBirth = "G371"; $gender = Utils::extractGenderFromCF($fiscalNumber); $name = ($gender == 'M' ? "Mario" : "Maria") ; $familyName = "Rossi"; $address = "Via delle vie 12 88046 Lamezia Terme CZ"; $digitalAddress = "utente@pec.it"; $card = Utils::splitDocSPID($idCard); $LoggedAccount = Account::load($fiscalNumber); if ($LoggedAccount->ID <= 0) { $LoggedAccount->CODICE_FISCALE = $fiscalNumber; $resAccount = $LoggedAccount->Save(); if ($resAccount["esito"]) { ######################################## $domanda = new Domanda(); $domanda->ID_ACCOUNT = $resAccount['lastId']; $resDomanda = $domanda->Save(); if ($resDomanda["esito"]) { $LoggedAccount->loadDati(); /* Load Dati correlati */ $transaction = true; } ######################################## } } else { $transaction = true; } if ($transaction) { $loadComuneFromSPID = Comune::getComuneAndCAPFromCatasto($placeOfBirth); $jsonEncodeLogged = json_encode($LoggedAccount); $jsonDecodeLogged = json_decode($jsonEncodeLogged, true); $LoggedAccount->Anagrafica->COGNOME = $familyName; $LoggedAccount->Anagrafica->NOME = $name; if ($LoggedAccount->AUTORIZZAZIONE_TRATTAMENTO != 1) { $LoggedAccount->Anagrafica->SPID_CELLULARE = $mobilePhone; $LoggedAccount->Anagrafica->SPID_EMAIL = $email; $LoggedAccount->Anagrafica->SPID_TIPO_DOCUMENTO = $card['TIPO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO = $card['NUMERO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_ENTE = $card['ENTE_RILASCIO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_RILASCIO = $card['DATA_EMISSIONE']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_SCADENZA = $card['DATA_SCADENZA']; $LoggedAccount->Anagrafica->DATA_NASCITA = $dateOfBirth; $LoggedAccount->Anagrafica->PROV_NASCITA = $countyOfBirth; $LoggedAccount->Anagrafica->COMUNE_NASCITA = $loadComuneFromSPID['DESCRIZIONE']; $LoggedAccount->Anagrafica->CAP_NASCITA = $loadComuneFromSPID['CAP']; $LoggedAccount->Anagrafica->SESSO = $gender; } else { $LoggedAccount->loadDati(); $LoggedAccount->Anagrafica->SPID_CELLULARE = $mobilePhone; $LoggedAccount->Anagrafica->SPID_EMAIL = $email; $LoggedAccount->Anagrafica->SPID_TIPO_DOCUMENTO = $card['TIPO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO = $card['NUMERO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_ENTE = $card['ENTE_RILASCIO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_RILASCIO = $card['DATA_EMISSIONE']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_SCADENZA = $card['DATA_SCADENZA']; $LoggedAccount->Anagrafica->DATA_NASCITA = $dateOfBirth; $LoggedAccount->Anagrafica->PROV_NASCITA = $countyOfBirth; $LoggedAccount->Anagrafica->COMUNE_NASCITA = $loadComuneFromSPID['DESCRIZIONE']; $LoggedAccount->Anagrafica->CAP_NASCITA = $loadComuneFromSPID['CAP']; $LoggedAccount->Anagrafica->SESSO = $gender; } session_name('voli_2023_2024'); session_start(); $_SESSION['ID'] = $LoggedAccount->ID; $_SESSION['LoggedAccount'] = json_encode($LoggedAccount); } return($LoggedAccount); } public static function loginFakeStressTest() { $account = self::getFakeSPIDAccount(); $LoggedAccount = Account::load($account->CODICE_FISCALE); if ($LoggedAccount->ID <= 0) { $LoggedAccount->Save(); $LoggedAccount->loadDati(); } session_name('voli_2023_2024'); session_start(); $_SESSION['ID'] = $LoggedAccount->ID; $_SESSION['LoggedAccount'] = json_encode($LoggedAccount); return($LoggedAccount); } public static function login() { global $con; $transaction = false; $LoggedAccount = new Account(); $con->db_transactionStart(); $params = self::checkLogLoginSpid(); if ($params) { $logSpid = new SPID_ACCESSI(); $logSpid->CODICE_FISCALE = $params["fiscalNumber"]; $logSpid->INRESPONSETO = $params["inResponseTo"]; $logSpid->AUTHNINSTANT = $params["AuthnInstant"]; $resSpid = $logSpid->Save(); if ($resSpid["esito"] == 1) { $card = Utils::splitDocSPID($params["idCard"]); $LoggedAccount = Account::load($params["fiscalNumber"]); if ($LoggedAccount->ID <= 0) { $LoggedAccount->CODICE_FISCALE = $params["fiscalNumber"]; $resAccount = $LoggedAccount->Save(); if ($resAccount["esito"]) { ######################################## $domanda = new Domanda(); $domanda->ID_ACCOUNT = $resAccount['lastId']; $resDomanda = $domanda->Save(); if ($resDomanda["esito"]) { $LoggedAccount->loadDati(); /* Load Dati correlati */ $transaction = true; } ######################################## } } else { $transaction = true; } } } if ($transaction) { $loadComuneFromSPID = Comune::getComuneAndCAPFromCatasto($params['placeOfBirth']); $jsonEncodeLogged = json_encode($LoggedAccount); $jsonDecodeLogged = json_decode($jsonEncodeLogged, true); $LoggedAccount->Anagrafica->COGNOME = $params["familyName"]; $LoggedAccount->Anagrafica->NOME = $params["name"]; $con->db_transactionCommit(); if ($LoggedAccount->AUTORIZZAZIONE_TRATTAMENTO != 1) { $LoggedAccount->Anagrafica->SPID_CELLULARE = $params["mobilePhone"]; $LoggedAccount->Anagrafica->SPID_EMAIL = $params["email"]; $LoggedAccount->Anagrafica->SPID_TIPO_DOCUMENTO = $card['TIPO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO = $card['NUMERO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_ENTE = $card['ENTE_RILASCIO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_RILASCIO = $card['DATA_EMISSIONE']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_SCADENZA = $card['DATA_SCADENZA']; $LoggedAccount->Anagrafica->DATA_NASCITA = $params['dateOfBirth']; $LoggedAccount->Anagrafica->PROV_NASCITA = $params['countyOfBirth']; $LoggedAccount->Anagrafica->COMUNE_NASCITA = $loadComuneFromSPID['DESCRIZIONE']; $LoggedAccount->Anagrafica->CAP_NASCITA = $loadComuneFromSPID['CAP']; $LoggedAccount->Anagrafica->SESSO = Utils::extractGenderFromCF($params["fiscalNumber"]); } else { $LoggedAccount->loadDati(); $LoggedAccount->Anagrafica->SPID_CELLULARE = $params["mobilePhone"]; $LoggedAccount->Anagrafica->SPID_EMAIL = $params["email"]; $LoggedAccount->Anagrafica->SPID_TIPO_DOCUMENTO = $card['TIPO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO = $card['NUMERO_DOCUMENTO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_ENTE = $card['ENTE_RILASCIO']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_RILASCIO = $card['DATA_EMISSIONE']; $LoggedAccount->Anagrafica->SPID_DOCUMENTO_SCADENZA = $card['DATA_SCADENZA']; $LoggedAccount->Anagrafica->DATA_NASCITA = $params['dateOfBirth']; $LoggedAccount->Anagrafica->PROV_NASCITA = $params['countyOfBirth']; $LoggedAccount->Anagrafica->COMUNE_NASCITA = $loadComuneFromSPID['DESCRIZIONE']; $LoggedAccount->Anagrafica->CAP_NASCITA = $loadComuneFromSPID['CAP']; $LoggedAccount->Anagrafica->SESSO = Utils::extractGenderFromCF($params["fiscalNumber"]); } session_name('voli_2023_2024'); session_start(); $_SESSION['ID'] = $LoggedAccount->ID; $_SESSION['LoggedAccount'] = json_encode($LoggedAccount); } else { $con->db_transactionRollback(); $response['erroreDescrizione'] = "Al momento non è possibile completare l'operazione. - 2"; } return($LoggedAccount); } public static function login_spidOCI() { $LoggedAccount = new Account(); $params = self::checkLogLoginSpid(); if ($params) { $LoggedAccount = Account::selectFromCodiceFiscaleOCI($params["fiscalNumber"]); if ($LoggedAccount->ID > 0) { session_name('voli_2023_2024'); session_start(); $_SESSION['ID'] = $LoggedAccount->ID; $_SESSION['inResponseTo'] = $params['inResponseTo']; $_SESSION['LoggedAccount'] = json_encode($LoggedAccount); } } return($LoggedAccount); } public static function login_spidOCIFake($cf) { global $cfTEST; $fiscalNumberbase = "TINIT-" . $cf; if (!in_array($fiscalNumberbase, $cfTEST)) { return array(); } $fiscalNumberTINIT = explode("-", $fiscalNumberbase); $fiscalNumber = $fiscalNumberTINIT[1]; $inResponseTo = "CICCIO"; $LoggedAccount = new Account(); if ($fiscalNumber) { $LoggedAccount = Account::selectFromCodiceFiscaleOCI($fiscalNumber); if ($LoggedAccount->ID > 0) { session_name('voli_2023_2024'); session_start(); $_SESSION['ID'] = $LoggedAccount->ID; $_SESSION['inResponseTo'] = $inResponseTo; $_SESSION['LoggedAccount'] = json_encode($LoggedAccount); } } return($LoggedAccount); } } class SPID_ACCESSI extends DataClass { const TABLE_NAME = "SPID_ACCESSI"; const SEQ_NAME = "SPID_ACCESSI_ID_SEQ"; public $ID = 0; // Primary key public $CODICE_FISCALE = ""; public $INRESPONSETO = ""; public $AUTHNINSTANT = ""; public function __construct($src = null) { global $con; if ($src == null) { return; } if (is_array($src)) { if (isset($src['ID']) && $src['ID'] > 0) { $this->_loadAndFillObject($src['ID'], self::TABLE_NAME, $src); } else { $this->_loadByRow($src, $stripSlashes); } } elseif (intval($src)) { $this->_loadById($src, self::TABLE_NAME, true); } } public function Save() { global $con; $vars = get_object_vars($this); $sql = Utils::prepareQuery(self::TABLE_NAME, $vars); $queryabi = $con->prepare($sql); foreach ($vars as $k => $v) { if ($k == "ID" && $v == 0) { continue; } $queryabi->bindValue(":" . $k, $v); } try { $it = parent::_Save($queryabi); } catch (Exception $exc) { $it['erroreDescrizione'] = $exc->getMessage(); } return $it; } public static function selectFromCodiceFiscaleOCI($codice_fiscale = "") { global $conOCI; $account = new SPID_ACCESSI(); try { $sql = "SELECT * FROM " . self::TABLE_NAME . " WHERE CODICE_FISCALE = :codice_fiscale "; $statement = $conOCI->db_getStatement($sql); oci_bind_by_name($statement, ":codice_fiscale", $codice_fiscale); $row = $conOCI->db_fetch_array($statement); if (intval($row['ID']) > 0) { Utils::FillObjectFromRow($account, $row); } $conOCI->db_free_statement($statement); $conOCI->db_close(); } catch (Exception $exc) { $conOCI->db_free_statement($statement); $conOCI->db_close(); } return $account; } /** * Funzione per la visualizzazione dei logs * @param type $record * @param type $campo */ public function Parse(&$record, $campo = "") { array_push($record, array("Campo" => $campo, "Valore" => $this->$campo)); } }