<?php

	//--------------------------------------------------------------------------------------------------------
	$Flag_debug = true ;
	$Flag_debug = false ;
	
	$code_erreur = 0;
	$errorMessage = "";
	$AQCM05_connected = false ;

	//--------------------------------------------------------------------------------------------------------
	include("../M4_6/AQCM_get_VPN_parameters.php") ;

	//--------------------------------------------------------------------------------------------------------
	$p_aqcm_Peer_Name    = isset($_POST["Peer_Name"])    ? $_POST["Peer_Name"]    : "none";
	$p_aqcm_Peer_Address = isset($_POST["Peer_Address"]) ? $_POST["Peer_Address"] : "none";
	
	if ( $code_erreur == 0 ) {
		
		if ( ( $p_aqcm_Peer_Name == "none" ) || ( $p_aqcm_Peer_Name == "?" ) ) {
			$code_erreur = 11;
			$errorMessage = " - erreur #11 : le nom du nouveau «&nbsp;peer administrateur&nbsp;» n'est pas correctement défini !";
		}

	}

	if ( $code_erreur == 0 ) {
		
		if ( filter_var($p_aqcm_Peer_Address, FILTER_VALIDATE_IP) ) {

		} else {
			$code_erreur = 12;
			$errorMessage = " - erreur #12 : l'adresse IP du nouveau « peer administrateur » n'est pas correctement définie !";
		}
		
	}
	
	if ( $code_erreur == 0 ) {
		$p_aqcm_Peer_Address = $p_aqcm_Peer_Address . "/32" ;
	}

	if ( $Flag_debug ) echo( $p_aqcm_Peer_Address . "<br>" ) ;

	//-------------------------------------------------------------------------------------------
	// création des nouvelles clefs dans /var/www/html/v2/wireguard/
	//-------------------------------------------------------------------------------------------
	if ( $code_erreur == 0 ) {
		
		$cmd_2 = "sudo /home/scripts_shell/wireguard_create_keys.sh" ;

		$result_2 = exec($cmd_2, $exec_output_2, $exec_return_2);

		if ( $exec_return_2 ) {
			$code_erreur = 2 ;
			$errorMessage = " - erreur #2 : création des clefs de cryptage : échec !!!";
		}
		
	}

	//------------------------------------------------------------------------
	if ( $code_erreur == 0 ) {
		
		$public_key_file = fopen('/var/www/html/v2/wireguard/wg1_publickey', 'r');
		
		if ( ! $public_key_file ) {
			$public_key_string = "?" ;
			$code_erreur = 3 ;
			$errorMessage = " - erreur #3 : anomalie lors de la création de la clef publique !!!";
		}
		else {
			$public_key_string = fgets($public_key_file) ;
		}
		
		fclose( $public_key_file ) ;
		
		$new_peer_PublicKey = preg_replace("/\r|\n/", "", $public_key_string);
		
		if ( $Flag_debug ) echo( $new_peer_PublicKey . "<br>" ) ;
		
	}
		
	//------------------------------------------------------------------------
	if ( $code_erreur == 0 ) {
		
		$private_key_file = fopen('/var/www/html/v2/wireguard/wg1_privatekey', 'r');
		
		if ( ! $private_key_file ) {
			$private_key_string = "?" ;
			$code_erreur = 4 ;
			$errorMessage = " - erreur #4 : anomalie lors de la création de la clef privée !!!";
		}
		else {
			$private_key_string = fgets($private_key_file) ;
		}
		
		fclose( $private_key_file ) ;
		
		$new_peer_PrivateKey = preg_replace("/\r|\n/", "", $private_key_string);
		
		if ( $Flag_debug ) echo( $new_peer_PrivateKey . "<br>" ) ;

	}

	echo ("- création des clefs de cryptage : ");
	if ( $code_erreur == 0 ) {
		echo ("<font color='Lime'>succès...</font></br>");
	} else {
		echo ("<font color='Salmon'>échec !!!</font></br>");
	}
	flush();
	
	//-------------------------------------------------------------------------------------------
	// création du nouveau peer dans AQCM05_SITE_00001_001.AQCM05_SONDES_WG
	// NB : si le peer existe déjà, l'opération est sans effet mais sans erreur signalée
	//-------------------------------------------------------------------------------------------
	if ( $code_erreur == 0 ) {
		
		include("../_identifiants/sql_identification_sans_base.php") ;
		$mysql_base = "AQCM05_SITE_00001_001" ;
		
		$link = mysqli_connect($mysql_host,$mysql_user,$mysql_password, $mysql_base);
		
		if ( ! $link ) {
			
			$code_erreur = 5 ;
			$errorMessage = " - erreur #5 : anomalie lors de la connexion à la base MySQL !!!";
			
		} 
		else {

			$AQCM05_connected = true ;
			
			$query = "
				INSERT INTO AQCM05_SONDES_WG (aqcm_WG_NAME, aqcm_WG_Peer_AllowedIPs, aqcm_WG_Peer_PublicKey) 
				SELECT * FROM (SELECT '" . $p_aqcm_Peer_Name . "', '" . $p_aqcm_Peer_Address . "', '" . $new_peer_PublicKey . "') AS tmp
				WHERE NOT EXISTS (
					SELECT aqcm_WG_Peer_AllowedIPs FROM AQCM05_SONDES_WG WHERE aqcm_WG_Peer_AllowedIPs = '" . $p_aqcm_Peer_Address . "'
				) LIMIT 1";

			if ( $Flag_debug ) echo( $query . "<br>" ) ;

			
			$result = mysqli_query($link, $query);
			
			if ( ! $result ) {
				$code_erreur = 6 ;
				$errorMessage = " - erreur #6 : échec lors de la requête MySQL !!!";
			}
			else {	

			}
			
		}
		
	}

	echo ("- création du nouveau peer : ");
	if ( $code_erreur == 0 ) {
		echo ("<font color='Lime'>succès...</font></br>");
	} else {
		echo ("<font color='Salmon'>échec !!!</font></br>");
	}
	flush();
	
	//-------------------------------------------------------------------------------------------
	// création du fichier de configuration : /var/www/html/v2/wireguard/wg1.conf
	//-------------------------------------------------------------------------------------------
	if ($code_erreur == 0 ) {

		$WG_strings[0] = "[Interface]" ;
		$WG_strings[1] = "Address = "					. $p_aqcm_Peer_Address ;
		$WG_strings[2] = "PrivateKey = "				. $new_peer_PrivateKey ;
		$WG_strings[3] = "" ;
		$WG_strings[4] = "[Peer]" ;
		$WG_strings[5] = "PublicKey = "				. $aqcm_WG_Server_PublicKey ;
		$WG_strings[6] = "AllowedIPs = "				. $aqcm_WG_server_AllowedIPs . ",8.8.8.8/32";
		$WG_strings[7] = "Endpoint = "				. $aqcm_WG_URL . ":"  . $aqcm_WG_ListenPort ;
		$WG_strings[8] = "PersistentKeepalive = "	. $aqcm_WG_Keepalive ;
		
		//--------------------------------------------------------------
		$wireguard_configuration_path_name_1     = "/var/www/html" ;
		$wireguard_configuration_path_name_2     = "/v2/wireguard/" ;
		$wireguard_configuration_short_file_name = "wg1.conf" ;
		$wireguard_configuration_long_file_name  = $wireguard_configuration_path_name_1 . $wireguard_configuration_path_name_2 . $wireguard_configuration_short_file_name ;

		if (file_exists($wireguard_configuration_long_file_name)) {
			$cmd_1 = "sudo chmod 666 " . $wireguard_configuration_long_file_name ;
			$result_1 = exec($cmd_1, $exec_output_1, $exec_return_1);
		}

		$fp = fopen($wireguard_configuration_long_file_name, 'w');
		for ($i=0; $i < 9; $i++) {
			fwrite($fp, $WG_strings[$i] . "\n" );
		}
		fclose($fp);
		
	}
	
	//--------------------------------------------------------------------------------------------------------
	// 
	//--------------------------------------------------------------------------------------------------------
	if ( $code_erreur == 0 ) {

		$configuration_file_name = $wireguard_configuration_path_name_2 . $wireguard_configuration_short_file_name . "?force_load=" . strval(time());
		
		echo("<br>");
		echo("La création du nouveau peer administrateur ");
		echo("est terminée côté serveur AQCM05. Le fichier de configuration suivant ");
		echo("permettra de paramétrer le logiciel client wireguard ");
		echo("sur le poste de cet administrateur :<br><br>");

		echo("<div align='left'>");
		echo("lien de téléchargement&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;→ ");
		echo('<a href="' . $configuration_file_name . '" download="wg1.conf">' . $wireguard_configuration_short_file_name . '</a>');
		echo("</div>");
			
	}
	
	//--------------------------------------------------------------------------------------------------------
	// clôture
	//--------------------------------------------------------------------------------------------------------
	if ( $AQCM05_connected ) {
		
		mysqli_close($link);
		
	}
	
	//--------------------------------------------------------------------------------------------------------
	// 
	//--------------------------------------------------------------------------------------------------------
	if ( $code_erreur == 0 ) {
		
		echo( "<font color='#FF00FF'>"   . "</br>NB : pour activer la nouvelle configuration," . '</br>' );
		echo( "<font color='#FF00FF'>"   . "     il faut ouvrir (ou réouvrir) le tunnel « wireguard »" . '</br>' );
		
	} else {
		echo("</br></br><font color='Salmon'>" . $errorMessage . "</font></br>");
	}

	//-----------------------------------------------------------------------------------------------------------------

?>
