HEX
Server: Apache/2.4.59 (Debian)
System: Linux skycube.cz 4.19.0-25-amd64 #1 SMP Debian 4.19.289-2 (2023-08-08) x86_64
User: ilya (534)
PHP: 7.3.31-1~deb10u7
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: /var/www/ilya/data/www/povoleni.ru/modules/services/check.php
<?

function check_application($code,$type,$year,$zov) {

	/* {
	  "identification" : "OAM-21080/DP-2023",
	  "state" : "INPROGRESS"
	}

	{
	  "timestamp" : "2023-08-05T13:22:27.126823",
	  "status" : 400,
	  "code" : "NO_CODE",
	  "path" : "POST /api/ip/external/proceedings/state/cj/zov?idCj=21080&database=DP&year=2023&zov=",
	  "message" : "reCaptcha was not successfully validated"
	} */

	$proxy_data = mysqli_fetch_array(query("SELECT * FROM `proxy_list` ORDER BY RAND() LIMIT 1"));


	$proxy = $proxy_data['host'];
	$proxyauth = $proxy_data['auth'];

	require(__DIR__ . '/../../includes/bestcaptchasolver.php');      // load API library

	$ACCESS_TOKEN = '4D0FF5D715954021868C12C09DB89552';
	$PAGE_URL = 'https://frs.gov.cz/informace-o-stavu-rizeni/?';
	$SITE_KEY = '6LfDkwskAAAAAJkuXNNbQPBcNfD4V7nQHbg68ptU';

	$bcs = new BestCaptchaSolver($ACCESS_TOKEN);      // get token from https://bestcaptchasolver.com/account
	// check account balance
	$balance = $bcs->account_balance();       // get balance
	//echo "Balance: $balance";

	//echo ' Submitting recaptcha...';
	$p = array();
	$p['page_url'] = $PAGE_URL;
	$p['site_key'] = $SITE_KEY;

	// other parameters
	// ----------------------------------------------------------------------
	// reCAPTCHA type(s) - optional, defaults to 1
	// ---------------------------------------------
	// 1 - v2
	// 2 - invisible
	// 3 - v3
	// 4 - enterprise v2
	// 5 - enterprise v3
	//
	$p["type"] = "3";
	//
	$p["v3_action"] = "proceedings";    // action used when solving v3 reCaptcha, optional
	//$p["v3_min_score"] = "0.3";  // min score to target when solving v3, optional
	//$p['domain'] = "www.google.com";      // used in loading reCAPTCHA, in some cases it works better with - recaptcha.net
	//$p["data_s"] = "recaptcha data-s parameter used in loading reCAPTCHA"; // optional
	//$p["cookie_input"] = "a=b;c=d";              // used in solving of reCAPTCHA, optional
	//$p['user_agent'] = 'user agent here';        // optional
	$p["proxy"] = $proxyauth.'@'.$proxy;     // proxy with/out authentication, optional
	//$p["affiliate_id"] = "affiliate_id";         // get it from /account, optional

	$id = $bcs->submit_recaptcha($p);
	// get response now that we have the ID
	$gresponse = NULL;

	while($gresponse === NULL) {
		$gresponse = $bcs->retrieve($id)['gresponse'];  // get the image text (if completed)
		$proxy_status = $bcs->retrieve($id)['proxy_status'];
		sleep(5);                  // retry every 5 seconds
	}

	// completed at this point
	echo " Recaptcha response: $gresponse";
	$proxy_status = $bcs->retrieve($id)['proxy_status'];
	// $bcs->set_captcha_bad($id);       // set bad captcha for specific id

	$url = 'https://frs.gov.cz/api/ip/external/proceedings/state/cj/zov?idCj='.$code.'&database='.$type.'&year='.$year.'&zov='.$zov;
print "Key: ".$gresponse."\nProxy: ".$proxy_status."\n";
	$data = '{ "captcha": "'.$gresponse.'" }';

	$additional_headers = array(                                                                       
		'Accept: application/json',
		'Content-Type: application/json'
	);

	$ch = curl_init($url);                                                                      
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);                                                                  
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
	curl_setopt($ch, CURLOPT_HTTPHEADER, $additional_headers); 
	curl_setopt ($ch, CURLOPT_PROXY, $proxy);
	curl_setopt ($ch, CURLOPT_PROXYUSERPWD, $proxyauth);

	$server_output = curl_exec ($ch);

	echo  "<b>".$server_output."</b>";

	curl_close($ch);

	$parsed_output = json_decode($server_output);

	if(array_key_exists('message',$parsed_output))
		if($parsed_output->{'message'}=='reCaptcha was not successfully validated') {
			print "Achtung! Problem with reCaptcha!";
			//$bcs->set_captcha_bad($id);
			query("UPDATE `proxy_list` SET `last_used`=NOW(), `attempts_failed`=`attempts_failed`+1 WHERE `id`='".$proxy_data['id']."' LIMIT 1;");
			die($parsed_output->{'message'});
		}
		else {
			print "ReCaptcha is OK.";
		}
	query("UPDATE `proxy_list` SET `last_used`=NOW(), `attempts_success`=`attempts_success`+1 WHERE `id`='".$proxy_data['id']."' LIMIT 1;");
	return $parsed_output;
}

function mail2telegram($text) { // Remove header and footer from email to send via telegram
	
	$text = substr($text,strpos($text,"\n\n"));
	$text = substr($text,0,strrpos($text,"\n\n"));
	
	return trim($text);
}

function get_mail_check_positive($data) {
	global $global_vars;

	$mail = array();
	$mail['subject'] = $global_vars['translation'][$data['language']]['index_check_email_positive_subject']." ".get_application_number($data);
	$mail['subject'] = '=?UTF-8?B?'.base64_encode($mail['subject']).'?=';
	
	if($data['zov']!='') {
		$mail['text'] = $global_vars['translation'][$data['language']]['index_check_email_positive_text_1']." ".get_application_number($data)."! ".$global_vars['translation'][$data['language']]['index_check_email_positive_text_zov'];
	}
	else {
		$mail['text'] = $global_vars['translation'][$data['language']]['index_check_email_positive_text_1']." ".get_application_number($data)."! ".$global_vars['translation'][$data['language']]['index_check_email_positive_text_dp'];
	}
	
	$mail['headers'] = "From: ".$global_vars['translation'][$data['language']]['site_name']." <no-reply@povoleni.ru>\r\nReply-To: info@povoleni.ru\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n";
	
	return $mail;
}

function get_mail_check_negative($data) {
	global $global_vars;

	$mail = array();
	$mail['subject'] = $global_vars['translation'][$data['language']]['index_check_email_negative_subject']." ".get_application_number($data);
	$mail['subject'] = '=?UTF-8?B?'.base64_encode($mail['subject']).'?=';
	
	if($data['zov']!='') {
		$mail['text'] = $global_vars['translation'][$data['language']]['index_check_email_negative_text_1']." ".get_application_number($data).". ".$global_vars['translation'][$data['language']]['index_check_email_negative_text_zov'];
	}
	else {
		$mail['text'] = $global_vars['translation'][$data['language']]['index_check_email_negative_text_1']." ".get_application_number($data).". ".$global_vars['translation'][$data['language']]['index_check_email_negative_text_dp'];
	}
	$mail['headers'] = "From: ".$global_vars['translation'][$data['language']]['site_name']." <no-reply@povoleni.ru>\r\nReply-To: info@povoleni.ru\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n";
	
	return $mail;
}

function get_mail_check_not_found($data) {
	global $global_vars;

	$mail = array();
	$mail['subject'] = $global_vars['translation'][$data['language']]['index_check_email_not_found_subject']." ".get_application_number($data);
	$mail['subject'] = '=?UTF-8?B?'.base64_encode($mail['subject']).'?=';
	$mail['text'] = $global_vars['translation'][$data['language']]['index_check_email_not_found_text_1']." ".get_application_number($data).$global_vars['translation'][$data['language']]['index_check_email_not_found_text_2'];
	$mail['headers'] = "From: ".$global_vars['translation'][$data['language']]['site_name']." <no-reply@povoleni.ru>\r\nReply-To: info@povoleni.ru\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n";
	
	return $mail;
}


$result = query("SELECT * FROM `entries` WHERE `status`=2 AND (DATE_ADD(`updated`, INTERVAL 12 HOUR)<NOW() OR `updated` IS NULL) ORDER BY `updated` ASC LIMIT 1;");

//$result = query("SELECT * FROM `entries` WHERE `id`=16649 LIMIT 1;");

//$result = query("SELECT * FROM `entries` WHERE `id`=10482");

if(mysql_num_rows($result)>0) {
	while($data = mysql_fetch_array($result)) {


		if(strpos($data['code'],"-"))
			$data['code'] = substr($data['code'],0,strpos($data['code'],"-"));
		while($data['code'][0]=="0") {
			$data['code'] = substr($data['code'],1);
		}
		
		if($data['zov']!='') {		
			$frs_result = check_application('','','',$data['zov']);
		}
		else {
			$frs_result = check_application($data['code'],$data['type'],$data['year'],'');
		}
			
		$is_sent = FALSE;
print $result->{'identification'}.': '.$result->{'state'};

		if(array_key_exists('state',$frs_result)) 
		if(($frs_result->{'state'}=='DECLINED') || ($frs_result->{'state'}=='APPROVED')) {
			print "<strong>".get_application_number($data).": Ready (".$frs_result->{'state'}.")!</strong><br />";
			if($frs_result->{'state'}=='DECLINED')
				$mail = get_mail_check_negative($data);
			elseif($frs_result->{'state'}=='APPROVED')
				$mail = get_mail_check_positive($data);
			
			
			if($data['email']!='') {
				$mailer = new PHPMailer(); // create a new object		
				$mailer->CharSet = "UTF-8";
				$mailer->IsSMTP(); // enable SMTP
				$mailer->SMTPDebug = false; // debugging: 1 = errors and messages, 2 = messages only
				$mailer->SMTPAuth = true; // authentication enabled
				$mailer->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for Gmail
				$mailer->Host = "smtp.gmail.com";
				$mailer->Port = 587; // or 587
				$mailer->IsHTML(false);
				$mailer->Username = SITE_EMAIL_USERNAME;
				$mailer->Password = SITE_EMAIL_PASSWORD;
				$mailer->SetFrom(SITE_EMAIL,$global_vars['translation'][$data['language']]['site_name']);
				$mailer->AddReplyTo(SITE_EMAIL_REPLYTO,$global_vars['translation'][$data['language']]['site_name']);
				$mailer->Subject = $mail['subject'];
				$mailer->Body = $mail['text'];
				$mailer->AddAddress($data['email']);
				
				if($mailer->Send())
					$is_sent = TRUE;
			}
			elseif($data['telegram_id']!='') {				
				send_telegram($data['telegram_id'],mail2telegram($mail['text']));
				$is_sent = TRUE;
			}

			if($is_sent) {
				query("UPDATE `entries` SET `updated`=NOW(), `comment`='".$frs_result->{'state'}."', `status`=3 WHERE `id`=".$data['id']);
			}			
		}
		else {
			if($frs_result->{'status'}=='404') {
					
				$mail = get_mail_check_not_found($data);
				
				if($data['email']!='') {
			
					$mailer = new PHPMailer(); // create a new object		
					$mailer->CharSet = "UTF-8";
					$mailer->IsSMTP(); // enable SMTP
					$mailer->SMTPDebug = false; // debugging: 1 = errors and messages, 2 = messages only
					$mailer->SMTPAuth = true; // authentication enabled
					$mailer->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for Gmail
					$mailer->Host = "smtp.gmail.com";
					$mailer->Port = 587; // or 587
					$mailer->IsHTML(false);
					$mailer->Username = SITE_EMAIL_USERNAME;
					$mailer->Password = SITE_EMAIL_PASSWORD;
					$mailer->SetFrom(SITE_EMAIL,$global_vars['translation'][$data['language']]['site_name']);
					$mailer->AddReplyTo(SITE_EMAIL_REPLYTO,$global_vars['translation'][$data['language']]['site_name']);
					$mailer->Subject = $mail['subject'];
					$mailer->Body = $mail['text'];
					$mailer->AddAddress($data['email']);
					if($mailer->Send()) {
						$is_sent = TRUE;
					}
				}
				elseif($data['telegram_id']!='') {				
					send_telegram($data['telegram_id'],mail2telegram($mail['text']));
					$is_sent = TRUE;
				}
				
				if($is_sent) {
					query("UPDATE `entries` SET `status`='5' WHERE `id`='".$data['id']."';");
				}

			}
			query("UPDATE `entries` SET `updated`=NOW(), `comment`='".$frs_result->{'state'}."' WHERE `id`=".$data['id']);
			print get_application_number($data).": Not yet<br />"; 
		}

	}
}

/////////////////////////////////////////////////////////////////////////////////////

function get_mail_outdate($data) {
	global $global_vars;

	$mail = array();
	$mail['subject'] = $global_vars['translation'][$data['language']]['index_get_table_email_subject_1']." ".get_application_number($data)." ".$global_vars['translation'][$data['language']]['index_get_table_email_subject_2'];
	$mail['subject'] = '=?UTF-8?B?'.base64_encode($mail['subject']).'?=';
	$mail['text'] = $global_vars['translation'][$data['language']]['index_get_table_email_text_1']." ".get_application_number($data)." ".$global_vars['translation'][$data['language']]['index_get_table_email_text_2'];
	$mail['headers'] = "From: ".$global_vars['translation'][$data['language']]['site_name']." <no-reply@povoleni.ru>\r\nReply-To: info@povoleni.ru\r\nMIME-Version: 1.0\r\nContent-type: text/plain; charset=UTF-8\r\n";

	return $mail;
}

$result = query("SELECT * FROM `entries` WHERE (DATE_ADD(`updated`, INTERVAL 2 DAY)<NOW()) AND (`status`=2);");

if(mysql_num_rows($result)>0) {
	$result2 = query("SELECT * FROM `entries` WHERE (DATE_ADD(`updated`, INTERVAL 1 HOUR)>NOW()) AND (`status`=2);");
	if(mysql_num_rows($result2)==0) {
		mail("mailbox@rudomilov.com","Problem with povoleni.ru", "Возникла задержка в обработке очереди.");
	}
}

$result = query("SELECT * FROM `entries` WHERE ((DATE_ADD(`added`, INTERVAL 2 YEAR)<NOW()) OR (`year`<YEAR(DATE_SUB(NOW(), INTERVAL 2 YEAR)))) AND `status`=2 LIMIT 1;");

if(mysql_num_rows($result)>0) {
	
	$is_sent = FALSE;
	
	while($data = mysql_fetch_array($result)) {
		$mail = get_mail_outdate($data);
		//mail($data['email'],$mail['subject'],$mail['text'],$mail['headers']);
		
		if($data['email']!='') {
			$mailer = new PHPMailer(); // create a new object		
			$mailer->CharSet = "UTF-8";
			$mailer->IsSMTP(); // enable SMTP
			$mailer->SMTPDebug = false; // debugging: 1 = errors and messages, 2 = messages only
			$mailer->SMTPAuth = true; // authentication enabled
			$mailer->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for Gmail
			$mailer->Host = "smtp.gmail.com";
			$mailer->Port = 587; // or 587
			$mailer->IsHTML(false);
			$mailer->Username = SITE_EMAIL_USERNAME;
			$mailer->Password = SITE_EMAIL_PASSWORD;
			$mailer->SetFrom(SITE_EMAIL,$global_vars['translation'][$data['language']]['site_name']);
			$mailer->AddReplyTo(SITE_EMAIL_REPLYTO,$global_vars['translation'][$data['language']]['site_name']);
			$mailer->Subject = $mail['subject'];
			$mailer->Body = $mail['text'];
			$mailer->AddAddress($data['email']);
		
			if($mailer->Send())
				$is_sent = TRUE;
		}
		elseif($data['telegram_id']!='') {
			send_telegram($data['telegram_id'],mail2telegram($mail['text']));
			$is_sent = TRUE;
		}
		
		if($is_sent)
			query("UPDATE `entries` SET `status`=4 WHERE `id`='".$data['id']."';");
	}
}

?>