<?php

if (!isset($Root) || empty($Root)) {
    $Root = dirname(dirname(__FILE__));
}

include_once("../include/config.php");
include_once($Root . "/include/funzioni.php");
include_once($Root . "/include/connessione.php");


if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Php Mailer
include_once($Root . "/PHPMailer/PHPMailerAutoload.php");

####################################################
############### FUNZIONI ANTI-BOT ##################
####################################################

function generaCSRFToken() {
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}


function verificaCSRFToken($token) {
    return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token);
}


function generaCaptchaMatematico() {
    $num1 = rand(1, 20);
    $num2 = rand(1, 20);
    $operatori = ['+', '-'];
    $operatore = $operatori[array_rand($operatori)];
    
    if ($operatore == '-') {
        if ($num1 < $num2) {
            $temp = $num1;
            $num1 = $num2;
            $num2 = $temp;
        }
    }
    
    $_SESSION['captcha_num1'] = $num1;
    $_SESSION['captcha_num2'] = $num2;
    $_SESSION['captcha_operatore'] = $operatore;
    $_SESSION['captcha_risultato'] = $operatore == '+' ? $num1 + $num2 : $num1 - $num2;
    $_SESSION['captcha_timestamp'] = time();
    
    return array(
        'num1' => $num1,
        'num2' => $num2,
        'operatore' => $operatore
    );
}


function verificaCaptchaMatematico($risposta) {

    if (!isset($_SESSION['captcha_timestamp']) || (time() - $_SESSION['captcha_timestamp']) > 300) {
        return false;
    }
    
    $risultato_atteso = isset($_SESSION['captcha_risultato']) ? $_SESSION['captcha_risultato'] : null;
    
    if ($risultato_atteso === null) {
        return false;
    }
    

    $risposta = intval(trim($risposta));
    return $risposta === $risultato_atteso;
}



function verificaTiming($time_start) {
    $time_end = time();
    $time_diff = $time_end - $time_start;
    $min_time = 3;
    
    return $time_diff >= $min_time;
}


function verificaHoneypot($honeypot) {
    return empty($honeypot);
}

####################################################
###################### REGISTRAZIONE ######################
####################################################


if (isset($_REQUEST["formRegistrazione"]) && $_REQUEST["formRegistrazione"] == "true") {
    
    $errore = "no";
    $stile_errore = array();
    $msg_errore = array();


    if (!isset($_REQUEST['csrf_token']) || !verificaCSRFToken($_REQUEST['csrf_token'])) {
        $stile_errore = "form-error";
        $msg_errore["csrf"] = " Token di sicurezza non valido!";
        $errore = "si";
        error_log("CSRF token non valido per l'IP: " . $_SERVER['REMOTE_ADDR']);
    }


    if (!verificaHoneypot($_REQUEST['honeypot'])) {
        $stile_errore = "form-error";
        $msg_errore["honeypot"] = " Errore di sicurezza!";
        $errore = "si";
        error_log("Honeypot rilevato per l'IP: " . $_SERVER['REMOTE_ADDR']);
    }


    $time_start = isset($_REQUEST['time_start']) ? intval($_REQUEST['time_start']) : 0;
    if (!verificaTiming($time_start)) {
        $stile_errore = "form-error";
        $msg_errore["timing"] = " Form inviato troppo velocemente!";
        $errore = "si";
        error_log("Timing sospetto per l'IP: " . $_SERVER['REMOTE_ADDR'] . " - Tempo: " . (time() - $time_start) . " secondi");
    }


    if (!isset($_REQUEST['captcha_risposta']) || !verificaCaptchaMatematico($_REQUEST['captcha_risposta'])) {
        $stile_errore = "form-error";
        $msg_errore["captcha"] = " Risposta del captcha errata o scaduta!";
        $errore = "si";
    }


    if ($_REQUEST["nome"] == "") {
        $stile_errore = "form-error";
        $msg_errore["nome"] = " campo obbligatorio!";
        $errore = "si";
    }
    
    if ($_REQUEST["cognome"] == "") {
        $stile_errore = "form-error";
        $msg_errore["cognome"] = " campo obbligatorio!";
        $errore = "si";
    }

    if ($_REQUEST["ditta"] == "") {
        $stile_errore = "form-error";
        $msg_errore["ditta"] = " campo obbligatorio!";
        $errore = "si";
    }

    if (!Utente::verificaEmail($_REQUEST["e_mail"])) {
        $stile_errore = "form-error";
        $msg_errore["e_mail"] = " formato e-mail errato!";
        $errore = "si";
    } else {

        $nome_dominio_temp = explode(".", $_SERVER["HTTP_HOST"]);
        $nome_dominio = $nome_dominio_temp["0"];
        
        if (isset($Codice_Ente[$nome_dominio])) {
            $codice_ente = $Codice_Ente[$nome_dominio];
            $ente_temp = Ente::seleziona("codice", $codice_ente);
            
            if ($ente_temp && isset($ente_temp->id)) {
                $id_ente = $ente_temp->id;
                
                $utente_rec = Utente::controllaEmailRecuperaPwd($_REQUEST["e_mail"], $id_ente);
                
                if ($utente_rec != NULL) {
                    $stile_errore = "form-error";
                    $msg_errore["e_mail"] = " indirizzo e-mail già registrato";
                    $errore = "si";
                }
            } else {
                $stile_errore = "form-error";
                $msg_errore["e_mail"] = " Errore nella configurazione dell'ente";
                $errore = "si";
            }
        } else {
            $stile_errore = "form-error";
            $msg_errore["e_mail"] = " Dominio non configurato: " . $nome_dominio;
            $errore = "si";
        }
    }


    if ($errore == "no") {
        
        $codice_registrazione = Utente::inserisciRegistrazione($id_ente, $_REQUEST["nome"], $_REQUEST["cognome"], $_REQUEST["ditta"], $_REQUEST["e_mail"]);
        
        // Invio mail
        $dati_mail = array();
        $dati_mail["destinatario"] = $_REQUEST["e_mail"];
        $dati_mail["oggetto"] = "[Whistleblowing] Registrazione nuovo utente";
        $dati_mail["testo"] = "Gentile " . $_REQUEST["nome"] . " " . $_REQUEST["cognome"] . ",<br />
è stata inoltrata una richiesta di registrazione al sistema Informativo Whistleblowing di " . $ente_temp->nome . ".<p>

Per attivare il suo profilo segua il link: <a href=\"" . (isset($_SERVER['HTTPS']) ? "https" : "http") . "://" . $_SERVER["HTTP_HOST"] . "/attivazione/attiva_utente.php?codice=" . $codice_registrazione . "\" title=\"Clicca qui\">clicca qui</a>, se la richiesta non è stata inoltrata da te, ignora questa mail.<p>

Distinti saluti";
        
        $mail = new PHPMailer();
        $mail->CharSet = 'UTF-8';
        $mail->Encoding = 'quoted-printable';
        $mail->IsSMTP();
        $mail->SMTPDebug = 2;
        $mail->Debugoutput = 'variable';
        $mail->Host = "127.0.0.1";
    
        $mail->setFrom($Casella_postale, $Mittente);
        $mail->addReplyTo($Casella_postale, $Mittente);        
        $mail->addAddress($dati_mail["destinatario"], "");
        $mail->Subject = $dati_mail["oggetto"];
        $mail->msgHTML($dati_mail["testo"]);
        $mail->AltBody = strip_tags($dati_mail["testo"]);
        $mail->IsHTML(true);

        $mail->send();

        $response_mail = serialize($mail->getSMTPInstance()->smtp_errors);
        $response_mail = addslashes($response_mail);    
        Utente::inserisciLogMail($ente_temp->id, $dati_mail["destinatario"], $response_mail);
        
        $msg = $Config["utente"]["msg_rec_inoltrata"];
        

        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
        $csrf_token = $_SESSION['csrf_token'];
        

        $captcha_data = generaCaptchaMatematico();
    }
}

include($Root . "/layout/top-app.php");

$csrf_token = generaCSRFToken();

$captcha_data = generaCaptchaMatematico();
?>

<script type="text/javascript">

var pageLoadTime = Math.floor(Date.now() / 1000);


document.addEventListener('DOMContentLoaded', function() {
    var honeypot = document.getElementById('honeypot');
    if (honeypot) {
        honeypot.style.display = 'none';
        honeypot.style.position = 'absolute';
        honeypot.style.left = '-9999px';
        honeypot.style.top = '-9999px';
    }
});
</script>

<div id="content">
<div class="padd">

<div id="login">

    <?php
    // Seleziona del logo
    if (isset($Codice_Ente) && isset($Host_Ente) && isset($Codice_Ente[$Host_Ente])) {
        $ente_logo = Ente::seleziona("codice", $Codice_Ente[$Host_Ente]);
        if ($ente_logo && $ente_logo->immagine != "") {
            $dimensioni = @getimagesize($Root . "/allegati/" . $Codice_Ente[$Host_Ente] . "/" . $ente_logo->immagine);
            if ($dimensioni && $dimensioni["1"] > 150) {
                $altezza_logo = "150";
            } else {
                $altezza_logo = $dimensioni ? $dimensioni["1"] : "100";
            }
            ?>
            <div align="center">
                <img src="<?php echo "/allegati/" . $Codice_Ente[$Host_Ente] . "/" . $ente_logo->immagine; ?>" height="<?php echo $altezza_logo; ?>" alt="<?php echo $ente_logo->nome; ?>" />
            </div>
        <?php } 
    } ?>

    <h1>Registrazione utente collaboratore</h1>
    
    <?php if (!isset($msg) || $msg == "") { ?>
    
        <p>Registrati per avere accesso alla pagina di segnalazione</p>
        
        <form name="formRegistrazione" method="post" action="" title="Registrazione ente collaboratore">
            <input name="formRegistrazione" type="hidden" id="formRegistrazione" value="true">
            

            <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>">
            

            <input type="hidden" name="time_start" id="time_start" value="<?php echo time(); ?>">
            

            <input type="text" name="honeypot" id="honeypot" value="" autocomplete="off" tabindex="-1" style="position:absolute;left:-9999px;top:-9999px;">

            <div>
                <label>Nome * </label>
                <span class="<?php echo isset($stile_errore) && isset($msg_errore["nome"]) ? $stile_errore : ''; ?>">
                    <?php echo isset($msg_errore["nome"]) ? $msg_errore["nome"] : ''; ?>
                </span>
                <input type="text" name="nome" id="nome" value="<?php echo isset($_REQUEST["nome"]) ? htmlspecialchars(stripslashes($_REQUEST["nome"])) : ''; ?>" />
                <div class="both"></div>
            </div>

            <div>
                <label>Cognome * </label>
                <span class="<?php echo isset($stile_errore) && isset($msg_errore["cognome"]) ? $stile_errore : ''; ?>">
                    <?php echo isset($msg_errore["cognome"]) ? $msg_errore["cognome"] : ''; ?>
                </span>
                <input type="text" name="cognome" id="cognome" value="<?php echo isset($_REQUEST["cognome"]) ? htmlspecialchars(stripslashes($_REQUEST["cognome"])) : ''; ?>" />
                <div class="both"></div>
            </div>

            <div>
                <label>E-mail * </label>
                <span class="<?php echo isset($stile_errore) && isset($msg_errore["e_mail"]) ? $stile_errore : ''; ?>">
                    <?php echo isset($msg_errore["e_mail"]) ? $msg_errore["e_mail"] : ''; ?>
                </span>
                <input type="text" name="e_mail" id="e_mail" value="<?php echo isset($_REQUEST["e_mail"]) ? htmlspecialchars(stripslashes($_REQUEST["e_mail"])) : ''; ?>" />
                <div class="both"></div>
            </div>

            <div>
                <label>Nome ditta collaboratrice * </label>
                <span class="<?php echo isset($stile_errore) && isset($msg_errore["ditta"]) ? $stile_errore : ''; ?>">
                    <?php echo isset($msg_errore["ditta"]) ? $msg_errore["ditta"] : ''; ?>
                </span>
                <input type="text" name="ditta" id="ditta" value="<?php echo isset($_REQUEST["ditta"]) ? htmlspecialchars(stripslashes($_REQUEST["ditta"])) : ''; ?>" />
                <div class="both"></div>
            </div>

            <div>
                <label>Quanto fa <?php echo $captcha_data['num1']; ?> <?php echo $captcha_data['operatore']; ?> <?php echo $captcha_data['num2']; ?>? *</label>
                <span class="<?php echo isset($stile_errore) && isset($msg_errore["captcha"]) ? $stile_errore : ''; ?>">
                    <?php echo isset($msg_errore["captcha"]) ? $msg_errore["captcha"] : ''; ?>
                </span>
                <input type="text" name="captcha_risposta" id="captcha_risposta" value="" maxlength="3" autocomplete="off" />
                <div class="both"></div>
            </div>


            <div class="form-error">
                <?php 
                if (isset($msg_errore["csrf"])) echo $msg_errore["csrf"] . "<br>";
                if (isset($msg_errore["honeypot"])) echo $msg_errore["honeypot"] . "<br>";
                if (isset($msg_errore["timing"])) echo $msg_errore["timing"] . "<br>";
                ?>
            </div>
            
            <div class="btn-box">
                <input type="submit" name="Submit" value="Registrati" />
                <div class="both"></div>
            </div>
            
        </form>
        
    <?php } else { ?>
    
        <div id="errore">
            <div><?php echo $msg; ?></div>
        </div>
    
    <?php } ?>

</div>

<div class="both"></div>
</div>
</div>

<?php include($Root . "/layout/bottom-app.php"); ?>