<?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("REQEUST	<< ".$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 "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 "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"]);
		$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"];

		}					

		

		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 "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":

	{

		$friendFindObject = FindFriend($userID);

		$RespCode = $friendFindObject["respCode"];

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

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

		

		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 "chatMessage":

	{

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

		$RespCode = $SendChatMessageObject["respCode"];

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

		break;

	}

	case "callInvite":

	{

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

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

		break;

	}

	case "callAccept":

	{

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

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

		break;

	}

	case "callDecline":

	{

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

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

		break;

	}


	case "callOffer":
	{
		/*
		// Caller -> server
		{"operator":"callOffer","userID":"37","otherPartyID":"40","callId":"<uuid>","sdp":"<base64 or raw>","callType":"video", "secret":"HJKX..."}
		*/

		$callOfferObject = callOffer($userID);

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

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

		break;

	}

	case "callAnswer":
	{
		/*
		// Callee -> server
		{"operator":"callAnswer","userID":"40","otherPartyID":"37","callId":"<uuid>","sdp":"<...>","callType":"video", "secret":"HJKX..."}
		*/

		$callInviteObject = callAnswer($userID);

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

		break;

	}

	case "callIce":
	{
		/*
		// Either side (repeat for each ice)
		{"operator":"callIce","userID":"37","otherPartyID":"40","callId":"<uuid>","ice":{"sdpMid":"0","sdpMLineIndex":0,"candidate":"candidate:..."}, "secret":"HJKX..."}
		*/

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

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

		break;

	}

	case "callEnd":
	{
		/*
		// End
		{"operator":"callEnd","userID":"37","otherPartyID":"40","callId":"<uuid>", "reason":"hangup","secret":"HJKX..."}
		*/

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

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

		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;

	}


	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();





?>