<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

	exec("./php_my_root strongswan rereadsecrets"); // 테스트 끝나면 이 라인은 삭제할 것

ini_set('max_execution_time', 86400); // 실행지연시간 24시간(=86400초)로 설정함!
date_default_timezone_set('Asia/Seoul');
//date_default_timezone_set('Asia/Shanghai');

///// 자동동기화 STEP2 [[
/////
$B_START_TIME = date("Y-m-d",time() - 60*60*24*7);  // 최근7일간
//$B_START_TIME = date("Y-m-d H:i:s",time() - 60*60*24*185);  // 최근185일간
//$B_START_TIME = "1970-01-01";  // 1970-01-01부터

$B_LAST_TIME = date("Y-m-d",time()+172800); // 서버 시간 오차를 충분히 감안하여 현재시간+2일 지정함
/////

$B_process_start_time = time();

/// 연관되는테이블 지정 [[
require_once "db_original_1.php"; // 원본 DB 연결
require_once "db_target_1.php"; // 백업 DB 연결

$B_table_name_original_1 = "vpn_free_list";
$B_table_name_target_1 = "vpn_free_list_svr1";
/// 연관되는테이블 지정 ]]


// 업데이트 여부 체크 [[
// 업데이트 원리 : 최근7일이내 새로 추가된 이미지가 있으면 최근 7일간의 자료 덮어쓰기
$B_query_original_1_precheck = "SELECT uniqid, time_update FROM `$B_table_name_original_1` ORDER BY time_update DESC LIMIT 1";
$B_result_original_1_precheck = $DB_ORIGINAL_1->query($B_query_original_1_precheck);
$B_row_original_1_precheck = $B_result_original_1_precheck->fetch_assoc();
$B_uniqid_original_1_precheck=addslashes($B_row_original_1_precheck['uniqid']);
$B_time_update_original_1_precheck=addslashes($B_row_original_1_precheck['time_update']);

$B_query_target_1_precheck = "SELECT uniqid, time_update FROM `$B_table_name_target_1` ORDER BY time_update DESC LIMIT 1";
$B_result_target_1_precheck = $DB_TARGET_1->query($B_query_target_1_precheck);
$B_row_target_1_precheck = $B_result_target_1_precheck->fetch_assoc();
$B_uniqid_target_1_precheck=addslashes($B_row_target_1_precheck['uniqid']);
$B_time_update_target_1_precheck=addslashes($B_row_target_1_precheck['time_update']);

$update_flag = "";
$NowDatetime = date("Y-m-d H:i:s");
$LINUX_LINEFEED_CHAR = chr(13).chr(10);

if ((trim($B_time_update_original_1_precheck) != "") && (trim($B_time_update_original_1_precheck) == trim($B_time_update_target_1_precheck))) {  // 최종 DB정보가 같다면 실행중단
	//	echo "###".$B_uniqid_original_1_precheck . "(". $B_time_update_original_1_precheck.") + " . $B_uniqid_target_1_precheck ."(".$B_time_update_target_1_precheck.")###";
	echo $NowDatetime." 변경사항이 없습니다<br>";
	exit;
} else if (trim($B_time_update_original_1_precheck) == "") {  //  || $B_time_update_target_1_precheck == "" 를 포함 안하는 이유는 빈 테이블 일수도 있어서 임
	//	echo "@@@".$B_uniqid_original_1_precheck . "(". $B_time_update_original_1_precheck.") + " . $B_uniqid_target_1_precheck ."(".$B_time_update_target_1_precheck.")@@@";
	exit;
}
// 업데이트 여부 체크 [[



//$B_query_original_1 = "SELECT * FROM `$B_table_name_original_1` WHERE `uniqid` between unix_timestamp('$B_START_TIME') and unix_timestamp('$B_LAST_TIME') ";
$B_query_original_1 = "SELECT * FROM `$B_table_name_original_1` WHERE  laststat = 'play' AND point > '0' AND date_format(datetime_start,'%Y-%m-%d %H:%i:%s') <= date_format('$NowDatetime','%Y-%m-%d %H:%i:%s') AND date_format(datetime_end,'%Y-%m-%d %H:%i:%s') >= date_format('$NowDatetime','%Y-%m-%d %H:%i:%s') ORDER BY time_update DESC ";
//$B_query_original_1 = "SELECT * FROM `$B_table_name_original_1` ";
$B_result_original_1 = $DB_ORIGINAL_1->query($B_query_original_1);
$B_total_original_1 = mysqli_num_rows($B_result_original_1);

if ($B_total_original_1 > 0) {

	$DB_TARGET_1->query("TRUNCATE TABLE `$B_table_name_target_1`"); // 새로 저장하기 위해 테이블 내용 비우기

	$B_row_original_1_cnt = 0;
	$B_row_target_1_cnt_insert = 0;
	$B_row_target_1_cnt_update = 0;
	$B_row_target_1_cnt_unknown = 0;
	$B_IPSEC_SECRETS_SET[] = '# ipsec.secrets - strongSwan IPsec secrets file';
	$B_IPSEC_SECRETS_SET[] = ': RSA "privkey.pem"';



	while( $B_row_original_1 = mysqli_fetch_array($B_result_original_1) ) {
		$B_row_original_1_cnt++;

		$passwd_save = substr(base64_decode($B_row_original_1["passwd"]),13,50);

		$B_IPSEC_SECRETS_SET[] = $B_row_original_1["ctemailid"].' : EAP "'.$passwd_save.'"';  // ipsec.secrets 파일을 업데이트 할 내용 작성

		$B_CNT=0;
		if (isset($B_result_target_1)) unset($B_result_target_1);
		if (isset($B_total_target_1)) unset($B_total_target_1);
		if (isset($B_array_original_1_json_data)) unset($B_array_original_1_json_data);
		if (isset($B_array_original_1_object)) unset($B_array_original_1_object);
		if (isset($B_QUERY_SET)) unset($B_QUERY_SET);

		$B_array_original_1_json_data = json_encode($B_row_original_1);
		$B_array_original_1_object = json_decode($B_array_original_1_json_data);

		foreach ($B_array_original_1_object as $key => $value) {
			$B_CNT++;
			if (($B_CNT % 2) == 0) {

				switch ($key) {
					case "no":
					case "uniqid":
					case "time_update":
					   $B_QUERY_SET[] = $key."='".$value."'";
						break;
					default:
						break;
				}

			}
		}

		$B_QUERY_SET_FINAL = implode($B_QUERY_SET, ",");
		$B_IPSEC_SECRETS_TEXT = implode($B_IPSEC_SECRETS_SET, $LINUX_LINEFEED_CHAR);

//		echo $B_QUERY_SET_FINAL."<br><br>***********************<br><br>";



			//************ 백업하기 [[
			$B_row_target_1_cnt_insert++;
			if ($B_row_original_1_cnt == 1) {  // 최초 1개만 클라이언트 서버 DB에 저장하기 위함
				$B_QUERY_STRING = "INSERT `$B_table_name_target_1` SET " . $B_QUERY_SET_FINAL;
				$DB_TARGET_1->query($B_QUERY_STRING);
			}
			//************ 백업하기 ]]



	} //while

	$B_process_end_time = time();


//	echo "[$B_START_TIME~$B_LAST_TIME] [$B_table_name_original_1] 원본갯수 $B_row_original_1_cnt | INSERT갯수 $B_row_target_1_cnt_insert  | UPDATE갯수 $B_row_target_1_cnt_update   | UNKNOWN갯수 $B_row_target_1_cnt_unknown | 처리속도 ".($B_process_end_time - $B_process_start_time)." 초";
	echo "".$NowDatetime." "."동작상태 아이디 : $B_row_original_1_cnt  개 , 처리속도 : ".($B_process_end_time - $B_process_start_time)." 초<br>";

	$update_flag = "yes";


} else {
	echo "처리된 자료가 없습니다<br>";
	exit;
}
///// 자동동기화 STEP2 ]]
?>


<?php
/////////// IKEv2 회원정보 업데이트 strongSwan에 비번 추가/수정후 서비스 재실행 [[
if ($update_flag == "yes") {

///// 테스트용 아이디 디폴트 [[
$B_IPSEC_SECRETS_TESTID_TEXT = "user1 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user2 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user3 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user4 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user5 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user6 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user7 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user8 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user9 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."user10 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test1 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test2 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test3 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test4 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test5 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test6 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test7 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test8 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test9 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."test10 : EAP \"vpn12345\"".$LINUX_LINEFEED_CHAR."cuijin1501 : EAP \"vpn1501\"".$LINUX_LINEFEED_CHAR;
$B_IPSEC_SECRETS_TEXT = $B_IPSEC_SECRETS_TEXT .$LINUX_LINEFEED_CHAR . $B_IPSEC_SECRETS_TESTID_TEXT;
///// 테스트용 아이디 디폴트 ]]

	$fp = fopen("/etc/strongswan/ipsec.secrets" , "w");
	fwrite($fp,$B_IPSEC_SECRETS_TEXT,strlen($B_IPSEC_SECRETS_TEXT));
	fclose($fp);

	exec("./php_my_root strongswan rereadsecrets");

//	shell_exec('systemctl restart strongswan >/dev/null 2>/dev/null &');
//			$result = passthru("systemctl restart strongswan", $return);
//			echo $result;

	/*
		$document_all = "";
		$f = fopen("/etc/strongswan/ipsec.secrets" , "r");
		while ( ( $line = fgets( $f, 4096 ) ) !== false ) {  // 파일이 끝날 때까지 loop
			$document_all = $document_all . $line.chr(13).chr(10);       // 한 줄을 출력한다.
		}
		fclose($f);                     // 파일을 닫는다.
		echo "*****<br>".$document_all."<br>*****";

//			$document_all = $document_all . "abc@abc.com : EAP \"" . "12345678\"";

		$fp = fopen("/etc/strongswan/ipsec.secrets" , "w");
		fwrite($fp,$document_all,strlen($document_all));
		fclose($fp);

		exec("systemctl restart strongswan", $output);
//			$result = passthru("systemctl restart strongswan", $return);
//			echo $result;
*/
/////////// IKEv2 회원정보 업데이트 strongSwan에 비번 추가/수정후 서비스 재실행 [[
}

?>
