Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
411 righe
17 KiB
411 righe
17 KiB
<?php |
|
|
|
/** |
|
* Description of SPID |
|
* |
|
* @author Gigi |
|
*/ |
|
class SPID extends DataClass { |
|
|
|
public static function checkNumberParamsSpid() { |
|
if (!FAKE_SPID && count($_POST) < 3) { |
|
echo("<script>location.href = '" . BASE_HTTP . "index.php';</script>"); |
|
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)); |
|
} |
|
|
|
}
|
|
|