<?
include_once(_DIR_EXT.'/HTML/c_page_XML_AJAX.php');
class c_page_ajax extends c_page_XML_AJAX
{
    //без проверки авторизации не работала проверка сертификата ЭЦП при авторизации
    function check_member()
    {
        return(1) ;
    }

    function get_doc_content()
    {   $sign_uid=$_POST['sign_uid'] ;
        $doc_rec=DOCS()->get_doc_by_id($_POST['doc_id']) ;
        LOG_JSON('debug_signature')->reg('cryptopro/get_doc_content','Получен запрос на контент документа: '.$doc_rec['__doc_dir']);

        $cont=file_get_contents($doc_rec['__doc_dir']) ;
        LOG_JSON('debug_signature')->reg('cryptopro/get_doc_content','Получен контент документа: '.show_size(mb_strlen($cont)));

        $this->add_element('cert_id',$_POST['cert_id']) ;
        $this->add_element('doc_id',$_POST['doc_id']) ;
        $this->add_element('check_sign',($_POST['check_sign'])? 1:0) ;
        $this->add_element('emulate_sign',($_POST['emulate_sign'])? 1:0) ;
        $this->add_element('doc_content',base64_encode($cont)) ;

        LOG_JSON('debug_signature')->flush('debug_signature_'.$sign_uid);
    }



    // проверка параметров текущего сертификата сохранному сертификату аккаукнта
    // передаются ID аккаунта, для которого выполняется проверка
    function check_params_sert_of_account()
    {   $rec_account=ACCOUNTS()->get_member_by_id($_POST['account_id']) ;
        $errors=array() ;
        if ($rec_account['certificate']['SerialNumber']!=$_POST['cert']['SerialNumber'])  $errors[]='SerialNumber' ;
        if ($rec_account['certificate']['Thumbprint']!=$_POST['cert']['Thumbprint'])  $errors[]='Thumbprint' ;
        if ($rec_account['certificate']['ValidFromDate']!=$_POST['cert']['ValidFromDate'])  $errors[]='ValidFromDate' ;
        if ($rec_account['certificate']['ValidToDate']!=$_POST['cert']['ValidToDate'])  $errors[]='ValidToDate' ;

        $result=array() ;
        $this->add_element('JSCODE','<script>if (jBox_window!=undefined) jBox_window.close();</script>') ;
        if (_sizeof($errors)) $this->add_element('check_result.HTML','<div class="red center">Не прошла проверка сертификата по следующим условиям: '.implode(', ',$errors).'</div>')  ;
        else
        { $this->add_element('check_result.HTML','<div class="green center">Проверка сертификата прошла успешно</div>')  ;
          $_SESSION['autorize_process']['sert_valid']=1 ; // ставим флаг, что сертификат подтвержден
              $_SESSION['autorize_process']['logs'][]='Сертификат пользователя успешно подтвержден' ;

          // если процесс авторизации был начат под AD
          if ($_SESSION['autorize_process']['from_AD']) $this->go_url='/cab/' ; // отправляем на главную страницу, при загрузке произойдет авторизация по AD
          else
          {  $options_autorize['pass_is_hash']=1 ;
             $rec=ACCOUNTS()->get_member_by_id($_SESSION['autorize_process']['account_id']) ;
             LOGS()->reg_log('CRYPTOPRO/ajax/autorize_without_smena','Будет выполнена отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'],array('data'=>$_SESSION['autorize_process'])) ;
             if ($rec['pkey']) $result=ACCOUNTS()->member_login($rec['login'],$rec['password'],$options_autorize) ;  // авторизуем пользователя
             LOGS()->reg_log('CRYPTOPRO/ajax/autorize_without_smena','Выполнена отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'],array('data'=>$result)) ;
             if ($result['code']=='login_success')$this->go_url='/cab/' ;
          ESMO()->reg_monitor_mess(MEMBER()->cur_group_id,array('update_page'=>1)) ; // перегружаем текущею страницу на мониторинге
        }
        }
        }

    // авторизация без начала смены
    function autorize_without_smena()
    {   if (!$_SESSION['autorize_process']['account_id'])  { $this->go_url='/cab/' ; return ; }

        $_SESSION['autorize_process']['sert_valid']=2 ; // ставим флаг 2 что проверка сертификата невозможна
        $_SESSION['autorize_process']['block_smena']=1 ; // ставим флаг что при авторизации необходимо заблокировать смену
        $_SESSION['autorize_process']['logs'][]='При проверке сертификата выбран вход без начала смены' ;
        // переводим на главную страницу, будет повторная авторизация с установленными флагами
       /*
        if (!MEMBER()->id and                               // если пользователь еще не авторизован
            $GLOBALS['LS_AD_allow_auth_by_AD_login'] and   // если разрешена авторизация по AD
            $_SERVER['REMOTE_USER']                      // если передано имя пользователя AD
           )
       {   // внутри check_AD_user будет вызов  member_autorize
           AD()->check_AD_user(array('debug'=>$this->show_debug_check_AD_user,'no_ecp_check_sert_by_auth'=>1,'block_smena'=>1)) ;
       }
       else
       { // !!! передавать не ID аккаунта, а логин/пароль для повтороной авторизации
         $rec_account=ACCOUNTS()->get_member_by_id($_POST['account_id']) ;
       $result=ACCOUNTS()->member_autorize($rec_account,array('block_smena'=>1)) ;  // авторизуем пользователя без открытия смены

       }
       */
       if ($_SESSION['autorize_process']['from_AD']) $this->go_url='/cab/' ;
       else
       {   $options_autorize['pass_is_hash']=1 ;
           $options_autorize['block_smena']=$_SESSION['autorize_process']['block_smena'] ;
           $rec=ACCOUNTS()->get_member_by_id($_SESSION['autorize_process']['account_id']) ;
           LOGS()->reg_log('CRYPTOPRO/ajax/autorize_without_smena','Будет выполнена отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'],array('data'=>$_SESSION['autorize_process'])) ;
           if ($rec['pkey']) $result=ACCOUNTS()->member_login($rec['login'],$rec['password'],$options_autorize) ;  // авторизуем пользователя
           LOGS()->reg_log('CRYPTOPRO/ajax/autorize_without_smena','Выполнена отложенная авторизация сотрудника ID '.$_SESSION['autorize_process']['account_id'],array('data'=>$result)) ;
           if ($result['code']=='login_success')$this->go_url='/cab/' ;

    }
       //ESMO()->reg_monitor_mess(MEMBER()->cur_group_id,array('update_page'=>1)) ; // перегружаем текущею страницу на мониторинге
    }

    function save_cryptopro_to_account()
    {   $data=$_POST['cp_params']['cryptopro'] ;
        $data['time_update']=date('d.m.Y H:i:s') ;
        //damp_array($data,1,-1) ;
        ACCOUNTS()->account_save($_POST['account_id'],array('ext_info'=>array('cryptopro'=>$data))) ;
        ACCOUNTS()->update_member_info(MEMBER()) ;
    }

    function save_sert_to_account()
    {   //$this->add_element('show_modal_window','HTML',array('title'=>'Регистрация нового клиента','_after_close_update_page'=>1)) ;
        $data=$_POST['cert'] ;
        $data['time_update']=date('d.m.Y H:i:s') ;
        //damp_array($data,1,-1) ;
        $result=ACCOUNTS()->account_save($_POST['account_id'],array('ext_info'=>array('certificate'=>$data)),['save_log'=>1]) ;
        //damp_array($result);
        ACCOUNTS()->update_member_info(MEMBER()) ;
        $this->add_element('JSCODE','<script>if (jBox_window!=undefined) jBox_window.close();</script>') ; // закрываем модальное окно
        //$this->update_page=1 ; // обновляем страницу для отображения нового сертификата
        $this->add_element('show_notife','Данные по сертификату сохранены',array('color'=>'green')) ;
    }

    function save_sert_to_account_prepare()
    {
        $this->add_element('show_modal_window','HTML',array('title'=>'Криптопро')) ;   // показываем модальное окно
        ?><p>Ожидайте, производиться чтение сертификата ЭЦП</p>
          <div class="center"><img src="/images/loading14.gif" width="400px"></div>
        <?
    }

    /*
    function reg_log()
    {   $reg_event=1 ;
        include_once(_DIR_TO_MODULES.'/engine/i_logs.php') ;
        LOG_JSON('debug_signature')->reg($_POST['t'],$_POST['text']) ;
        if (LOG_JSON('debug_signature')->log_file_exists('debug_signature_'.$_POST['uid'])) $reg_event=0 ;
        $log_fname=LOG_JSON('debug_signature')->flush('debug_signature_'.$_POST['uid']) ;
        if ($reg_event) LOGS()->reg_log('debug_signature','<a href="'.$log_fname.'" target="_blank">Лог</a>',array('account_id'=>MEMBER()->id)) ;
    }
    */

    function get_panel_plugin_install()
    {   ob_start() ;
        ?><div id="boxdiv">Установить плагин cryptopro</div><?
        $text=ob_get_clean() ;
        $this->add_element('boxdiv',$text);
    }

    function cadesplugin_error()
    {
        ob_start() ;
        damp_array($_POST['data'],1,-1);
        $text=ob_get_clean() ;
       LOGS()->reg_log('cadesplugin_error', $text) ;
    }

}
?>
