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

<?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));
}
}