<?php
// error_reporting(0);
/*

Local:	C:\Dropbox\htdocs\RND\AnonymousChatApp\apiServer\Apiserver
Remote:	/var/www/mingle.eft.xyz/html
Local URL: https://mingle.eft.xyz/messageReceiver.php





999Wasi Parameters:

 base64_encoded_key_secret generation method	>	Consumer Key:Consumer Secret

Consumer Key	:	 ntWhiOiNXn_0ti8NO5hTqlTwgbsa

Consumer Secret	:	LuH_O9stNNU94karPpIEe0IGTf0a



base64_encode(ntWhiOiNXn_0ti8NO5hTqlTwgbsa:LuH_O9stNNU94karPpIEe0IGTf0a);



Encoded	>	bnRXaGlPaU5Ybl8wdGk4Tk81aFRxbFR3Z2JzYTpMdUhfTzlzdE5OVTk0a2FyUHBJRWUwSUdUZjBh





*/



header("Access-Control-Allow-Origin: *");

header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");

header("Access-Control-Allow-Headers: *");






require_once("includes/dbparameters.php");
require_once("includes/common-variables.php");
require_once("includes/common-functions.php");


$requestmessage = file_get_contents('php://input');
$value = json_decode($requestmessage, true);
if(!is_array($value)){
	writetolog('Could not decode JSON',$errorlog);
}



writetolog("\n\nREQEUST	<< ".$requestmessage."\n Headers: ".json_encode(apache_request_headers()),$inputlogfile);

$db = mysqli_connect($db_host, $db_username ,$db_password, $db_name);
// mysqli_set_charset($db,"utf8");
mysqli_set_charset($db,"utf8mb4");


$response_object = array();



if($value["secret"] <> "HJKX71%UHYH")

{

	$RespCode = "0009";//"Authorization failure"

	goto outputpoint;

}



$response_object["operator"] = $operator = $value["operator"];

if(

	(

		array_key_exists($value["operator"],$session_key_based_operators)

	) and (

			!(!isset(apache_request_headers()['sessionkey']) and in_array($operator,$sessionkey_optional_operators))

		   )

  )

{//needs session key



	$sessionKey = apache_request_headers()['sessionkey'];

	$pushMessageToken = apache_request_headers()['devicetoken'];



	//if($sessionKey <> "" and !in_array($operator,$sessionkey_optional_operators))





	$userID = $response_object["userID"] = $value["userID"];

	$querystring = "SELECT * FROM $mypal_users WHERE id = $userID AND sessionKey = '$sessionKey' AND session_last_active_time > '$session_expiry_interval'";

	writetolog($querystring,$sqllog);	

	$userquery = mysqli_query($db,$querystring);

	

	if($userqueryarray = mysqli_fetch_assoc($userquery))

	{//session valid

		$response_object["sessionKey"] = $userqueryarray["sessionKey"];

		$response_object["subscriptionStatus"] = $userqueryarray["subscriptionStatus"];



		$party1msisdn = $msisdn = $userqueryarray['msisdn'];

		if($pushMessageToken <>"")

		{

			$querystring = "UPDATE $mypal_users SET session_last_active_time = '$time', pushMessageToken='$pushMessageToken'  WHERE id = $userqueryarray[id]";

		}else{

			$querystring = "UPDATE $mypal_users SET session_last_active_time = '$time' WHERE id = $userqueryarray[id]";

		}

		writetolog($querystring,$sqllog);		

		$userquery = mysqli_query($db,$querystring);	

		

		if(!in_array($operator,$subscription_check_bypass_operators))

		{

			//check subscription status

			if($userqueryarray["subscriptionStatus"] <> "SUBSCRIBED")

			{

				//check subscription status

				// $RespCode = include("ideabiz/SubscriptionStatusCheck.php");

			 

				if($RespCode <> "0013")

				{//not subscribed

					// $RespCode = include("ideabiz/PINSubscription.php");

					// goto outputpoint;

				}

			}

		}



	}else{

			if(!in_array($operator,$sessionkey_optional_operators))

			{

				//session invalid

				unset($value["operator"]);

				$RespCode = "0025";

				

				goto outputpoint;

			}

	}

}



//exit();



switch($operator)

{	


/************************************************************************/

/*******Signup, Login, Subscription, OTP submission, Password************/

/************************************************************************/
	

	case "login":
	{
		/*
		Request:
		--------
		{
		"operator":"login",
		"google_user_key":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjkyN2I4ZmI2N2JiYWQ3NzQ0NWU1ZmVhNGM3MWFhOTg0NmQ3ZGRkMDEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI4NzM4OTY3OTk1MTQtdTJtaGswdGc4aWd1djk0dmlrYm1xNmJzNzJnbjhkNmwuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI4NzM4OTY3OTk1MTQtdWdnMm1yaHQxdDY1ZWlycWJ1MTBqbGgya21majkxNTAuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTU3ODQxMzUzMTIzMzE5OTYwMTYiLCJlbWFpbCI6ImFuamFuYXJ0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiQW5qYW5hIFJhdG5heWFrZSIsInBpY3R1cmUiOiJodHRwczovL2xoMy5nb29nbGV1c2VyY29udGVudC5jb20vYS9BQ2c4b2NLT2RQZVE2c3VDQ3g1cFY5VHYtd21iWG9GTEVUMHNHX2VVMEcwUnRsUlNLUDNQd2ZjPXM5Ni1jIiwiZ2l2ZW5fbmFtZSI6IkFuamFuYSIsImZhbWlseV9uYW1lIjoiUmF0bmF5YWtlIiwiaWF0IjoxNzU4ODA5MjIwLCJleHAiOjE3NTg4MTI4MjB9.MekvXDbFKWY8qy6_Gmy7iAEqdUY63yuvgXvOjpvJ7DFM69k3osVqMynebqp1ZuHfa8dEOrpN7JecTjz8vU6S-gCHIVXT-1rMOZbXBkJcJNn9gNIqSr1b2yFUweJoQ1-Jh5TgUJA53tT1WKICxXfCQPWzp9u8-L9dtgKHzdi8y0EObprhAdMak9mvNJ4eNO2gEdUvqJ06345BC3ZXYscuwv1fFRu6kLGV7L0VqyfvhigdtWZ46Ztbp_Bw1sZYFCVtuFSq5rPFdOGpDF6_JwMvoxqd_juezShraCHCT5oiEPJ6NR_EvdQr3pZ1xl4ho87B7MrXnB2TN0lP7oBXsB3r-A",
		"device_token":"eUTco_V4S2KfFrXqEGfkBV:APA91bE4SkC3aorOXjdSVmUquxEigSQzwPvqPF0JlMT2M-Aub9zRrSbLvptEvgq10ZQM18_RrzY69zL7ZjiSChRpPDrGI9faLq0N48v1jYHf03DYaoOtIo4",
		"secret":"HJKX71%UHYH"
		}
		Response:
		---------
		{"operator":"login","userID":"18548","sessionKey":"<sessionKey>","respCode":"0023","respDesc":"User logged in successfully"}
		*/


		$loginResponse = login_user($value["google_user_key"],$value["device_token"],$value["firebase_uid"],$value["email"],$value["name"],json_encode($value["permissions"]));
		$RespCode = $loginResponse["respCode"];

		if($RespCode == "0023")

		{//Login successful	>	check subscription status		

			// $party1msisdn = $msisdn = $loginResponse["mobile"];
			$userID = $response_object["userID"] = $loginResponse["userID"];

			$response_object["sessionKey"] = $loginResponse["sessionKey"];
			$response_object["chat_history"] = $loginResponse["chat_history"];
			$response_object["connection_status"] = $loginResponse["connection_status"];
			// $response_object["disableCalling"] = $loginResponse["disableCalling"];
			$response_object["searchFilter"] = $searchFilter;
			$response_object["otherparty_profileImage"] = $loginResponse["otherparty_profileImage"];

		}					

		break;

	}	


/******************************************************************/

/**********************Profile Operators**************************/

/******************************************************************/

	case "getProfile":

	{

		$profileObject = GetProfile($value["userID"]);

		$RespCode = $profileObject["respCode"];

		$response_object["profileData"] = $profileObject["profile"];

		$response_object["profileImage"] = $profileObject["profileImage"];

		break;

	}

	

	case "setProfile":

	{

		if(isset($value["profileImage"]) and $value["profileImage"] <> "")

		{//save and set profile image

		  $profileImageObject = SetImage($value["userID"], $value["profileImage"]);

		}

		

		$profileObject = SetProfile($value["userID"], $value["profileData"]);

		$RespCode = (isset($profileImageObject["respCode"])) ? $profileImageObject["respCode"] : $profileObject["respCode"];

		$response_object["profileData"] = $profileObject["profile"];

		$response_object["profileImage"] = $profileObject["profileImage"];

				

		break;

	}

	case "setAbout":
	{
	
		$profileObject = setAbout($value["userID"], $value["aboutMe"]);
		$RespCode = "0078"; //"0078" => "About me set successful"
		$response_object["profileData"] = $profileObject["profile"];
		$response_object["profileImage"] = $profileObject["profileImage"];

				
		break;

	}

	case "setProfilePhoto":

	{
		$profileImageObject = SetImage($value["userID"], $value["profileImage"]);
		$response_object["profileImage"] = $profileImageObject["profileImage"];
		$RespCode = $profileImageObject["respCode"];

		break;

	}

	case "deleteProfilePhoto":

	{
		$profileImageObject = deleteProfilePhoto($value["userID"]);
		$response_object["profileImage"] = "";
		$RespCode = $profileImageObject["respCode"];

		break;

	}

	case "reverseGeoCode":

	{

		$reverseGeoCodeObject = reverseGeoCode($value["userID"],$value["lat"],$value["lon"]);

		$RespCode = $reverseGeoCodeObject["respCode"];

		$response_object["location"] = $reverseGeoCodeObject["location"];

		break;

	}




/*****************************************************************************/

/*****Friend Find, Check Who, Add friend, Remove Friend, Chat, Stop Chat******/

/*****************************************************************************/

	case "friendFind":

	{

		$permissions_array = $value["permissions"];
		$friendFindObject = FindFriend($userID, json_encode($permissions_array));

		$RespCode = $friendFindObject["respCode"];

		if($RespCode == '0085') //"0085" => "Subscription initiation request sent successfully"
		{
			$response_object["trigger_subscription"] = $friendFindObject["trigger_subscription"];
			$response_object["searchFilter"] = $searchFilter;
			break;
		}

		$party2details = GetProfileToString($friendFindObject["otherPartyDetails"]["profileData"]);

		$response_object["otherPartyDetails"] = $friendFindObject["otherPartyDetails"];
		$response_object["searchFilter"] = $searchFilter;
		if($RespCode == '0027') //"You are connected with a user"
		{
			$response_object["callholdtimer"] = $callholdtimer;
		}

		break;

	}

	

	case "getWho":

	{

		$getWhoObject = GetWho($userID);

		$RespCode = $getWhoObject["respCode"];

		$party2details = GetProfileToString($getWhoObject["otherPartyDetails"]["profileData"]);

		$response_object["otherPartyDetails"] = $getWhoObject["otherPartyDetails"];

		

		break;

	}	



	case "addFriend":

	{

		$friendRequestObject = SendFriendRequest($userID);

		$RespCode = $friendRequestObject["respCode"];

		$response_object["otherPartyDetails"] = $friendRequestObject["otherPartyDetails"];

		break;

	}

	

	case "getFriends":

	{

		$GetFriendsObject = GetFriends($userID);

		$RespCode = $GetFriendsObject["respCode"];

		$response_object["FriendsData"] = $GetFriendsObject["FriendsData"];

		break;

	}

	

	case "acceptFriend":

	{

		$AcceptFriendObject = AcceptFriend($userID, $value["friendID"]);		

		$RespCode = $AcceptFriendObject["respCode"];

		$response_object["otherPartyDetails"] = $AcceptFriendObject["otherPartyDetails"];

		break;

	}



	case "rejectFriend":

		{

			$RejectFriendObject = RejectFriend($userID, $value["friendID"]);	//RejectFriend($userID, $friendID)	

			$RespCode = $RejectFriendObject["respCode"];

			$response_object["otherPartyDetails"] = $RejectFriendObject["otherPartyDetails"];

			break;

		}

	

	case "removeFriend":

	{

		$RemoveFriendsObject = RemoveFriend($userID, $value["friendID"]);

		$RespCode = $RemoveFriendsObject["respCode"];

		$response_object["otherPartyDetails"] = $RemoveFriendsObject["otherPartyDetails"];

		break;

	}	

	case "withdrawRequest":

	{

		$RemoveFriendsObject = withdrawRequest($userID, $value["friendID"]);

		$RespCode = $RemoveFriendsObject["respCode"];

		$response_object["otherPartyDetails"] = $RemoveFriendsObject["otherPartyDetails"];

		break;

	}

	case "reportUser":

	{

		$reportUserObject = reportUser($userID);

		$RespCode = $reportUserObject["respCode"];

		break;

	}

	

	case "connectFriend":

	{

		$ConnectFriendObject = ConnectFriend($userID, $value["friendID"]);

		$RespCode = $ConnectFriendObject["respCode"];

		$party2details = GetProfileToString($ConnectFriendObject["otherPartyDetails"]["profileData"]);

		$response_object["otherPartyDetails"] = $ConnectFriendObject["otherPartyDetails"];

		break;

	}

	case "setFriendMute":

	{
		$ConnectFriendObject = setFriendMute($userID, $value["setFriendID"], $value["mute"]);

		$RespCode = $ConnectFriendObject["respCode"]; //"0086" => "Friend mute setting updated successfully"

		$party2details = GetProfileToString($ConnectFriendObject["otherPartyDetails"]["profileData"]);

		$response_object["otherPartyDetails"] = $ConnectFriendObject["otherPartyDetails"];

		break;

	}

	
	case "chatMessage":

	{

		$SendChatMessageObject = SendChatMessage($userID, $value["message"]);

		$RespCode = $SendChatMessageObject["respCode"];

		$response_object["otherPartyDetails"] = $SendChatMessageObject["otherPartyDetails"];

		break;

	}

	case "disableCalling":

	{

		$disableCallingObject = disableCalling($userID, $value["disableCalling"]);

		$RespCode = $disableCallingObject["respCode"];

		$response_object["disableCalling"] = $disableCallingObject["disable"];

		break;

	}

	case "callInvite":

	{

		$callInviteObject = callInvite($userID, $value["callType"], $webrtc_manager['callInvite']);

		$RespCode = $callInviteObject["respCode"];
		$response_object["party2id"] = $callInviteObject["party2id"];
		$response_object["token"] = $callInviteObject["twilioToken"];
		$response_object["room"] = $callInviteObject["twilio_room"];
		$response_object["otherPartyDetails"] = $callInviteObject["otherPartyDetails"];
		$response_object["own_profileImage"] = $callInviteObject["own_profileImage"];
		

		break;

	}

	case "callDecline":
	{
		$callDeclineObject = callDecline($userID, $webrtc_manager['callDecline']);
		$RespCode = $callDeclineObject["respCode"];

		break;
	}

	case "callCancel":
	{
		$callCancelObject = callCancel($userID, $webrtc_manager['callCancel']);
		$RespCode = $callCancelObject["respCode"];

		break;
	}


	case "callAnswer":
	{

		$callAnswerObject = callAnswer($userID, $value["room"], $webrtc_manager['callAnswer']);
	
		$RespCode = $callAnswerObject["respCode"];
		$response_object["token"] = $callAnswerObject["twilioToken"];
		$response_object["room"] = $callAnswerObject["twilio_room"];
		$response_object["otherPartyDetails"] = $callAnswerObject["otherPartyDetails"];
		$response_object["own_profileImage"] = $callAnswerObject["own_profileImage"];

		break;

	}

	case "callEnd":
	{
		$callCancelObject = callEnd($userID, $webrtc_manager['callEnd']);
		$RespCode = $callCancelObject["respCode"];

		break;
	}


	case "callTimeout":
	{
		/*
		callTimeout → server times out if no answer in e.g., 30s.
		*/

		// $callInviteObject = callInvite($userID, $value["callType"]);

		// $RespCode = $callInviteObject["respCode"];
		// $response_object["party2id"] = $callInviteObject["party2id"];
		

		break;

	}


	
	case "clearHistory":
	{

		$clearHistoryObject = clearHistory($userID);

		$RespCode = $clearHistoryObject["respCode"];

		break;

	}


	case "stopChat":

	{

		$StopChatObject = StopChat($userID);

		$RespCode = $StopChatObject["respCode"];

		break;

	}

	

	case "getPushMessages":

	{

		$PushMessageObject = GetPushMessage($userID);

		$RespCode = $PushMessageObject["respCode"];

		$response_object["messageQueue"] = $PushMessageObject["messageQueue"];

		break;

	}

	case "gettnc":
	{
		$htmlContent = @file_get_contents("static_content/terms_of_service.html");
		header('Content-Type: application/json');
		$response_object["tnc"] = $htmlContent;
		$RespCode = "0050"; //"0050" => "TnC returned successfully",
		break;
	}


	case "getprivacy":
	{
		$htmlContent = @file_get_contents("static_content/privacy_policy.html");
		header('Content-Type: application/json');
		$response_object["privacy"] = $htmlContent;
		$RespCode = "0051"; //"0051" => "Privacy policy returned successfully"
		break;
	}

	case "getfaq":
	{
		$htmlContent = @file_get_contents("static_content/faq.html");
		header('Content-Type: application/json');
		// $htmlContent = '<html faq content>';
		$response_object["faq"] = $htmlContent;
		$RespCode = "0081"; //"0081" => "FAQ returned successfully"
		break;
	}

	case "getabout":
	{
		$htmlContent = @file_get_contents("static_content/about.html");
		header('Content-Type: application/json');
		// $htmlContent = '<html about content>';
		$response_object["about"] = $htmlContent;
		$RespCode = "0082"; //"0082" => "About returned successfully"
		break;
	}

	case "sendFeedback":
	{
		// $profileObject = setAbout($value["userID"], $value["aboutMe"]);
		$RespCode = "0079"; //"0079" => "Feedback submitted successfully"
		// $response_object["profileData"] = $profileObject["profile"];
		// $response_object["profileImage"] = $profileObject["profileImage"];
		break;
	}

	case "deleteAccount":
	{
		// $profileObject = setAbout($value["userID"], $value["aboutMe"]);
		$RespCode = "0080"; //"0080" => "Account deleted successfully",
		// $response_object["profileData"] = $profileObject["profile"];
		// $response_object["profileImage"] = $profileObject["profileImage"];
		break;
	}

	case "gethelper":
	{
		// $profileObject = setAbout($value["userID"], $value["aboutMe"]);
		$RespCode = "0084"; //"0084" => "Helper Data sent successfully"
		$response_object["helperData"] = $helperData;

		// $response_object["profileData"] = $profileObject["profile"];
		// $response_object["profileImage"] = $profileObject["profileImage"];
		break;
	}

	case "logdata":
	{
		$device_token = $value["device_token"];
		$action = $value["action"];
		$data = $value["data"];
		$RespCode = "0083"; //"0083" => "Data logged successfully"
		break;
	}

	case "trackinstall":
	{
		$clickid = $value["clickid"];
		$server_ref = $value["server_ref"];

		$RespCode = "0088"; //"0088" => "tracking data posted successfully"
		break;
	}


	default:
	{

		$RespCode = "0008";
		break;

	}

	

}



//Dump response

//$response_object["ResponseDesc"] = $ResponseCodeDesc[$response_object["ResponseCode"]];



outputpoint:



$response_object["respCode"] = $RespCode;



if(isset($response_object["subscriptionStatus"]))

{

	$response_object["subscriptionStatus"] = mapSubscriptionStatus($response_object["subscriptionStatus"]);

}



$response_object["respDesc"] = str_replace(array("<mobile>","<package_id>","<service>","<party2details>"),array($party1msisdn,$package_id,$service_name,$party2details), $ResponseCodeDesc[$RespCode]);



$responsemessage = json_encode($response_object);

writetolog("RESPONSE  >> ".$responsemessage,$inputlogfile);

echo $responsemessage;



exit();





?>