<?php

//ini_set('display_errors', 1);

//ini_set('display_startup_errors', 1);

//error_reporting(E_ALL);

session_start();

include '../config.php';

// prevent XSS

$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);

//$_GET  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);





require 'aws-sdk/aws-autoloader.php';

use Aws\Ses\SesClient;

/* Reference to the ses client */

$client = SesClient::factory(array(

  'version' => 'latest',

  'region'  => $aws_region,

  'credentials' => array(

    'key' => $aws_access_key_id_PROD,

    'secret'  => $aws_secret_access_key_PROD,

  )

));

date_default_timezone_set('America/Mexico_City');



function cvf_ps_generate_random_code($length=10) {

    $string = '';

    $characters = "123456789ABCDEFHJKLMNPRTVWXYZ*";

    for ($p = 0; $p < $length; $p++) {

        $string .= $characters[mt_rand(0, strlen($characters)-1)];

    }

    return $string;

  }



$token = cvf_ps_generate_random_code(8);

$hash =  hash('sha256', $token);



//echo $_SESSION['captcha'];



if ( isset($_GET['captcha3']) && ($_GET['captcha3']!="") ){

    // Validation: Checking entered captcha code with the generated captcha code

    if(strcasecmp($_SESSION['captcha'], $_GET['captcha3']) != 0){

    // Note: the captcha code is compared case insensitively.

    // if you want case sensitive match, update the check above to strcmp()

    echo "<p class='errormsg'>El captcha es inválido.</p> ";

    exit();

    }

  }



///////////ESPAÑOL



    $time = time();

    

    $nombre = trim($_GET['nombre']);

    $nombre = urldecode($nombre);

    $nombre = strip_tags($nombre);

    $nombre = htmlspecialchars($nombre);



    $empresa = trim($_GET['empresa']);

    $empresa = urldecode($empresa);

    $empresa = strip_tags($empresa);

    $empresa = htmlspecialchars($empresa);



    $area = trim($_GET['area']);

    $area = urldecode($area);

    $area = strip_tags($area);

    $area = htmlspecialchars($area);



    $funcion = trim($_GET['funcion']);

    $funcion = urldecode($funcion);

    $funcion = strip_tags($funcion);

    $funcion = htmlspecialchars($funcion);



    $email = trim($_GET['email']);

    $email = urldecode($email);

    $email = strip_tags($email);

    $email = htmlspecialchars($email);

    

    $superior = trim($_GET['superior']);

    $superior = urldecode($superior);

    $superior = strip_tags($superior);

    $superior = htmlspecialchars($superior);





    $permisos = trim($_GET['permisos']);


    
    $permisos = strip_tags($permisos);

    $permisos = htmlspecialchars($permisos);

    //echo $permisos;


    //$permisos = implode(', ', $permisos);


    $rol =  "usuario";

    $enviado =  "enviar";

    $enviado =  "enviar";



    $lang = trim($_GET['lang']);



    //echo $email;





 

    // make sure we've got a valid email

    if( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {

        // split on @ and return last value of array (the domain)

        $domainemail = array_pop(explode('@', $email));

        $domainemailsuperior = array_pop(explode('@', $superior));

    

        // output domain

        //echo $domainemail;

    }





    //echo $lang;

    $curldomains = curl_init();

    curl_setopt_array($curldomains, array(

        CURLOPT_URL => $endpoint_graph_cms,

        CURLOPT_RETURNTRANSFER => true,

        CURLOPT_ENCODING => '',

        CURLOPT_MAXREDIRS => 10,

        CURLOPT_TIMEOUT => 0,

        CURLOPT_FOLLOWLOCATION => true,

        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

        CURLOPT_CUSTOMREQUEST => 'POST',

        CURLOPT_POSTFIELDS =>'{"query":"query MyQuery {\\r\\n  __typename\\r\\n  generalidadesSitioPrivado(where: {id: \\"ckuwqltrkpenm0b788cug2f0d\\"}) {\\r\\n    id\\r\\n    dominiosPermitidos\\r\\n    firmasDigitales\\r\\n    manualDeTarifas\\r\\n    terminosYCondiciones\\r\\n    localizations {\\r\\n      archivoIsin\\r\\n      dominiosPermitidos\\r\\n      firmasDigitales\\r\\n      manualDeTarifas\\r\\n      terminosYCondiciones\\r\\n    }\\r\\n    archivoIsin\\r\\n  }\\r\\n}","variables":{}}',

        CURLOPT_HTTPHEADER => array(

        'Content-Type: application/json',

        'Cookie: __cfduid=da2693cdfd39b7377a8a05e305da45b8f1613001694'

        ),

    ));

    

    $responsedomains = curl_exec($curldomains);



    curl_close($curldomains);

    //echo $response;



    $jsonrespuestadomains = json_decode($responsedomains, true);

    $iddomains = $jsonrespuestadomains['data']['generalidadesSitioPrivado']['id'];



    $dominios = $jsonrespuestadomains['data']['generalidadesSitioPrivado']['dominiosPermitidos'];



    $textodominios = $dominios;



    //echo $textodominios;



    if (strpos($textodominios, $domainemail)) {

        //echo "El dominio del correo <b>".$domainemail." </b>es admitido.";

        //exit();

    }

    else

    {

        echo "El dominio del correo <b>".$domainemail." </b>no es admitido.<br>";
        //echo $textodominios;

        exit();

    }

    



    if($domainemail != $domainemailsuperior){

        echo "El dominio del correo <b>".$email." </b>debe coincidir con el de <b>" . $domainemailsuperior."</b>";

        exit();

    }

    

    if($email == $superior){

        echo "El correo del nuevo usuario no puede ser el mismo que el del administrador que lo registra (<b>" . $superior."</b>)";

        exit();

    }





    $curluser = curl_init();

    curl_setopt_array($curluser, array(

    CURLOPT_URL => $endpoint_graph_cms,

    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_ENCODING => '',

    CURLOPT_MAXREDIRS => 10,

    CURLOPT_TIMEOUT => 0,

    CURLOPT_FOLLOWLOCATION => true,

    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

    CURLOPT_CUSTOMREQUEST => 'POST',

    CURLOPT_POSTFIELDS =>'{"query":"query MyQuery {\\r\\n  usuariosSitioPrivado(where: {email: \\"'.$email.'\\"}, last: 1, stage: PUBLISHED) {\\r\\n    id\\r\\n  resetPass\\r\\n fechaCambioPassword\\r\\n nombre\\r\\n  empresa\\r\\n  permisos\\r\\n  rol\\r\\n  tycAceptados\\r\\n  }\\r\\n}\\r\\n","variables":{}}',

    CURLOPT_HTTPHEADER => array(

    'Content-Type: application/json',

    'Cookie: __cfduid=da2693cdfd39b7377a8a05e305da45b8f1613001694'

    ),

    ));



    $responseuser = curl_exec($curluser);

    curl_close($curluser);



    $jsonrespuestauser = json_decode($responseuser, true);

    $idgraph = $jsonrespuestauser['data']['usuariosSitioPrivado'][0]['id'];

    $iduser = $jsonrespuestauser['data']['usuariosSitioPrivado'][0]['id'];



    if(strlen($iduser)>5){



        echo "El correo <b>" . $email."</b> ya está registrado en el sistema.";

        exit();

    }







    

    ///////////INGLÉS



    $time_en = time();



    ///////////////////////PETICIÓN GRAPH CMS

    $curl = curl_init();

    curl_setopt_array($curl, array(

        CURLOPT_URL => $endpoint_graph_cms,

        CURLOPT_RETURNTRANSFER => true,

        CURLOPT_ENCODING => '',

        CURLOPT_MAXREDIRS => 10,

        CURLOPT_TIMEOUT => 0,

        CURLOPT_FOLLOWLOCATION => true,

        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

        CURLOPT_CUSTOMREQUEST => 'POST',



        CURLOPT_POSTFIELDS =>'{"query":"mutation MyMutation {\\r\\n  createUsuarioSitioPrivado(data: {rol: \\"'.$rol.'\\", email: \\"'.$email.'\\", superior: \\"'.$superior.'\\", empresa: \\"'.$empresa.'\\", area: \\"'.$area.'\\", funcion: \\"'.$funcion.'\\", enviadoRevision: \\"'.$enviado.'\\", permisos: \\"'.$permisos.'\\", password: \\"'.$hash.'\\", resetPass: \\"1\\", estatus: \\"publicado\\", localizations: {create: {data: {rol: \\"'.$rol.'\\", email: \\"'.$email.'\\", superior: \\"'.$superior.'\\", empresa: \\"'.$empresa.'\\", area: \\"'.$area.'\\", funcion: \\"'.$funcion.'\\", enviadoRevision: \\"'.$enviado.'\\", permisos: \\"'.$permisos.'\\", password: \\"'.$hash.'\\", resetPass: \\"1\\", estatus: \\"publicado\\", nombre: \\"'.$nombre.'\\"}, locale: es_MX}}, nombre: \\"'.$nombre.'\\"}) {\\r\\n    id\\r\\n  }\\r\\n}","variables":{}}',





        CURLOPT_HTTPHEADER => array(

          'Content-Type: application/json',

          'Cookie: __cfduid=da2693cdfd39b7377a8a05e305da45b8f1613001694'

        ),

      ));



    $response = curl_exec($curl);

    curl_close($curl);

    //echo $response;



    $jsonrespuesta = json_decode($response, true);

    $id = $jsonrespuesta['data']['createUsuarioSitioPrivado']['id'];

    //echo $id;



    if(strlen($id)>10){



        $domain_superior = $domainemailsuperior;



        

              

        $curl2 = curl_init();

  

        curl_setopt_array($curl2, array(

          CURLOPT_URL => $endpoint_graph_cms,

          CURLOPT_RETURNTRANSFER => true,

          CURLOPT_ENCODING => '',

          CURLOPT_MAXREDIRS => 10,

          CURLOPT_TIMEOUT => 0,

          CURLOPT_FOLLOWLOCATION => true,

          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

          CURLOPT_CUSTOMREQUEST => 'POST',

          CURLOPT_POSTFIELDS =>'{"query":"query MyQuery {\\r\\n  usuariosSitioPrivado( stage: PUBLISHED, where: {email_contains: \\"'.$domain_superior.'\\"}) {email\\r\\n   localizations {\\r\\n email\\r\\n  }\\r\\n     id\\r\\n  }\\r\\n}\\r\\n","variables":{}}',

          CURLOPT_HTTPHEADER => array(

            'Content-Type: application/json',

            'Cookie: __cfduid=da2693cdfd39b7377a8a05e305da45b8f1613001694'

          ),

        ));

        

        

  

        $response2 = curl_exec($curl2);

        //echo $response2;

        //print_r($response);

  

        curl_close($curl2);



        $superiores_array = array();

  

        $arrayform2 = json_decode($response2, true);

  

          foreach ($arrayform2['data']['usuariosSitioPrivado'] as $item) {

  

              foreach ($item['localizations'] as $subitem) {

                array_push($superiores_array, $subitem['email']);

  

          }

    

      

      }



      $superiores = implode(", ", $superiores_array);



        if($lang == 'es'){

            $titulomail = "Acceso a clientes | INDEVAL";

            $titulo = "Estimado(a) ".$nombre."<br>¡Bienvenido(a) a la sección privada de Indeval! ";

            $textomail1 = "Estás ahora registrado como <b>Usuario</b> en el sitio de Indeval.<br>A continuación encuentras las credenciales para acceder al sitio privado. Por cuestiones de seguridad, la plataforma te solicitará captures una nueva contraseña:"; 

            $textomail2 = 'Si tienes alguna duda, por favor comunícate con el <a href="mailto:'.$superiores.'">administrador de tu empresa</a>.';

            $textofecha = "Fecha y Hora de envío: ";

            $sucess = "Usuario añadido correctamente";

            $fail = "OCurrió un error al añadir el usuario. Verifica la información o intenta nuevamente en unos minutos";

            $despedida = '<p>¡Muchas gracias!</p><p>Indeval.</p>';

        }

        

        if($lang == 'en'){

            $titulomail = "Clients access | INDEVAL";

            $titulo = "Dear(a) ".$nombre."<br>Welcome to the private section of Indeval! ";

            $textomail1 = "You are now registered as <b>User</b> in the Indeval's website.<br>Below are the credentials to access the private site. For security reasons, the platform will ask you to enter a new password:";

            $textomail2 = 'If you have any questions, please contact your <a href="mailto:'.$superiores.'">company administrator</a>.';

            $textofecha= "Date and hour: ";

            $sucess = "User added successfully.";

            $fail = "An error occurred while adding the user. Please check the information or try again in a few minutes";

            $despedida = '<p>Thank you!</p><p>Indeval.</p>';

        }



        



        $curlpub = curl_init();



        curl_setopt_array($curlpub, array(

            CURLOPT_URL => $endpoint_graph_cms,

            CURLOPT_RETURNTRANSFER => true,

            CURLOPT_ENCODING => '',

            CURLOPT_MAXREDIRS => 10,

            CURLOPT_TIMEOUT => 0,

            CURLOPT_FOLLOWLOCATION => true,

            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

            CURLOPT_CUSTOMREQUEST => 'POST',

    

            CURLOPT_POSTFIELDS =>'{"query":"mutation MyMutation {\\r\\n  publishUsuarioSitioPrivado(\\r\\n    where: {id: \\"'.$id.'\\"}\\r\\n    to: PUBLISHED\\r\\n    locales: es_MX\\r\\n  ) {\\r\\n    id\\r\\n  }\\r\\n}\\r\\n","variables":{}}',

            CURLOPT_HTTPHEADER => array(

              'Content-Type: application/json',

              'Cookie: __cfduid=da2693cdfd39b7377a8a05e305da45b8f1613001694'

            ),

          ));

  

          $responsepub = curl_exec($curlpub);

          curl_close($curlpub);



        $EmailEnvio = $email;



        if(strlen($EmailEnvio)>5){







          $to = $EmailEnvio; 

          //$email = 'noreply@arjm.xyz';

        

          $email_subject = $titulomail; //Asunto



          $result = $client->verifyEmailIdentity([

            'EmailAddress' => $EmailEnvio,

          ]);

        

          if($result){

          

            if($lang == 'es'){

              echo "<p style='text-align: center; font-size: 17.5px;'><b>Email de verificación enviado correctamente</b></p>";

          

              echo "<p style='text-align: center; font-size: 13.5px;'>En breve el usuario recibirá un correo con el asunto 'Amazon Web Services – Email Address Verification Request', para enviar los mensajes de nuestra plataforma es necesario que confirme la dirección de correo haciendo click en el enlace incluido en el correo mencionado. Una vez verificada la dirección de email, se enviará el mensaje de bienvenida a nuestro Sitio Privado con sus datos de acceso temporales (Puede tardar hasta 10 minutos).</p>

              <p style='text-align: center;'>Si tienes algún problema o duda, por favor comunícate a <a href='mailto:comercialyproducto@grupobmv.com.mx' target='_blank'>comercialyproducto@grupobmv.com.mx</a></p>";

            }

            

            if($lang == 'en'){

              echo "<p style='text-align: center; font-size: 17.5px;'><b>Verification email sent successfully</b></p>";

          

              echo "<p style='text-align: center; font-size: 13.5px;'>Shortly the user will receive an email with the subject 'Amazon Web Services – Email Address Verification Request', to send messages from our platform it's neccesary to confirm the email address by clicking the link included in the aforementioned email. Once the email address is verified, the welcome message to our Private Site will be sent with the temporary access data (It may take up to 10 minutes).</p>

              <p style='text-align: center;'>If you have any problems or questions, please contact  <a href='mailto:comercialyproducto@grupobmv.com.mx' target='_blank'>comercialyproducto@grupobmv.com.mx</a></p>";

            }

            

          

          

          }

          else{

            if($lang == 'es'){

              echo "<p>Ocurrió un error al enviar el correo de verificación. Por favor intente más adelante. Si el problema persiste, contacte a <b><a href='mailto:comercialyproducto@grupobmv.com.mx' target='_blank'>comercialyproducto@grupobmv.com.mx</a> </b></p>";

          

              

            }

            

            if($lang == 'en'){

              echo "<p>An error occurred while sending the verification email. Please try again later. If the problem persists, contact <b><a href='mailto:comercialyproducto@grupobmv.com.mx' target='_blank'>comercialyproducto@grupobmv.com.mx</a> </b></p>";

            }

          }

    





        /*

        ACTIVAR CUANDO SE DESACTIVE SANDBOX



    

          //ENVIAR CORREO CON AMAZON SES

    

          //Now that you have the client ready, you can build the message

          $msg = array();

          $msg['Source'] = "indeval@grupobmv.com.mx";

          //ToAddresses must be an array

          $msg['Destination'] = array(

            'ToAddresses' => array($EmailEnvio)

          );

    

          //Next we will form the body of the email:

          $msg['Message'] = array(

              // Subject is required

              'Subject' => array(

                // Data is required

                'Data' => $email_subject,

                'Charset' => 'UTF-8',

            ),

            // Body

            'Body' => array(

              'Text' => array(

              // Data

              'Data' => $email_subject,

              'Charset' => 'UTF-8',

              ),

              'Html' => array(

              // Data is required

              'Data' => '

              <body style="background-color:#2b4365;">

                <table border=0 width="90%" style="border: 2px solid #2b4365; font-family: Century gothic, Helvetica, sans-serif;color:#2b4365;font-size: 15px;background-color: #ebebee;max-width: 700px;padding: 40px 20px;border-radius: 20px;position: relative;margin: 0 auto;top: 1em; text-align:center;">

                      <tr><td align="center">

                      <img src="https://indeval-webdocs-publico-01122020.s3.amazonaws.com/img/indeval_logo.png" alt="Indeval" style="width:200px; margin: 0px auto 20px;"/>

                      </td></tr>

    

                      <tr><td align="center" height="200">

                      <h3 style="color:#2b4365; foont-weight:bold; text-align:center;">'.$titulo.'</h3>



                      

              

                      <div style="text-align:center; color:#444; margin-top:20px; width:80%;background-color: #eee;

                      border-radius: 30px;

                      padding: 30px;"><b>'.$textomail1.'</b><br>



                      <p><b>Usuario</b>: '.$email.'</p>



                      <p><b>Contraseña</b>: '.$token.'</p>



      

                      <br /><br />

                      <p>'.$textomail2.' </p> 

 

                      '.$despedida.'

                      

                      </td></tr>							 

                </table>

                <p style="color:#fff; width:100%; text-align:center;">'.$textofecha.date("d-m-Y h:i:s").'</p>

              </body>

            ',

              'Charset' => 'UTF-8',

              ),

            )

          );

    

          //Now you are all set. You call sendEmail to send the email:

    

          try{

          $result = $client->sendEmail($msg);

    

          //Msg id from AWS. Can be used for tracking.

          $msg_id = $result->get('MessageId');

          //echo("MessageId: $msg_id");

    

          //view sample output

          //print_r($result);

          } catch (Exception $e) {

          //Exception Caught.

          //echo($e->getMessage());

          echo "<p class='errormsg'>Ocurrió un error al enviar el correo, intente nuevamente en unos minutos.</p> ";

          }

    

          if(strlen($msg_id)>5){

            //echo $sucess;

          }

          else{

            echo "<p class='errormsg'>Ocurrió un error al enviar el correo, intente nuevamente en unos minutos.</p> ";

          }

    

          //Print the result to check if it is successful

          //print_r($result);

    

          //termina mail SES





          TERMINA ACTIVAR CUANDO SE DESACTIVE SANDBOX

          */







          

        }

        echo '

            <script>

                $("#addUserForm").trigger("reset");

                $("#addUserForm").trigger("reset");

                //$("#respuestanewuser").append("<h5>'.$sucess.'.</h5>");

                setTimeout(() => {

                    //resetFormUsuario();        

                }, 3000);

            </script>';



      

    }



    else{

        $errorclass ="class='errormensaje'"; 

        echo '

        <script>

            $("#addUserForm").trigger("reset");

            $("#addUserForm").trigger("reset");

            $("#respuestanewuser").append("<p '.$errorclass.'>'.$fail.'.</p>");



            setTimeout(() => {

                //$(".popUpNew").fadeOut();        

            }, 3000);

        </script>';

    }







