about summary refs log blame commit diff stats
path: root/central/trunk/xmlrpc.php
blob: 64dc4f70b97375f6bb5b4b5ed22c23a2296c3d92 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                              

                                       
 
                                                                     
 
                                                                                                                    
         
                                                               



                                                       
                                                                   
 
                                                                                                                    
         
                                                                                                                                      
                                                         
                                               
                 
                                                                                                                                            
                                                          
 
                                                                       




                                                       
                                                                   
 
                                                                                                                    
         
                                                                                                                                      
                                                         
                                               
                 
                                                           
 
                                                                       




                                                       
                                                                   

                                                                                                                    
                                                                                                                   


                                                                      


                                                                                     







                                                               
                                                                                                                                                             
 
                                                                                                                    
         


                                                                                                                   
 




                                                                
 













                                                                                                                                                                      
                 
                                                               
                                                               



                                                       
                                                                                                                                                                                                 
 
                                                                                                                   
         
                                                                              
                 
                                                                     
                                                                                     
                 
                                                            
                                                                                                                            
                                                             
 
                                                    
 
                                                                                                                           
                                                                                                                                                                       
                                                                                                                     
                                                                                                                                                       
                                            
 
                                                                              
                 
                                                            
                                                                                                                            

                                                             
                                                    

                                                                                                                   
                                                                                                                                                               
                                                                                                             
                                                                                                                                               
                                            
                                                                                     

                                                         
 
                                                                                                          
                 






                                                                                                                                                                                                              
 
                                                                       
         
 



                                                                                     
                                                                                                                   
         
                                                                              
                 
                                                                     






                                                                       
                                                                                   
                                                                                                                   
         
                                                                              
                                                         
                                                                       




                                                       


                                                                                                                    
                                                                                                                                                                                                             


                                                        
                                                                                                                                                                                                                   







                                                                       
                                                                                             

                                                                                                                    

                                                                                                                                                                                                             
                                                        
                 
                                                                                                                                                                                                                                                                         
                                                        
 
                                                                       



                                                       
                                                                                      
 
                                                                                              
         
                                       
                                                         
                                                                                                        
                         

                                                                      
                                                               
                                 

                                                                                                                                                                                                                                                                     
 
                                                                                                                                   
 
                                                                                 
                         
                                                                                                                          
         
                                                                              
                 
                                                                 
                         



                                                                                                                
                                 


                                                                                                     
 



                                                                                                                                                                                                                                                                                     
 




                                                                                                                                                   





                                                       
                                                                                                          


                                                                                                      
                                                                                                        
                                                                                                    
                                                                                                            
                                                                                                      

                                          
  
<?php

/* InstaDisc Server - A Four Island Project */

include('includes/xmlrpc/xmlrpc.inc');
include('includes/xmlrpc/xmlrpcs.inc');
include('includes/instadisc.php');

function checkRegistration($username, $verification, $verificationID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		return new xmlrpcresp(new xmlrpcval(0, "int"));
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function deleteItem($username, $verification, $verificationID, $id)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getitem = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID = " . $id;
		$getitem2 = mysql_query($getitem);
		$getitem3 = mysql_fetch_array($getitem2);
		if ($getitem3['itemID'] == $id)
		{
			$delitem = "DELETE FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID = " . $id;
			$delitem2 = mysql_query($delitem);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function resendItem($username, $verification, $verificationID, $id)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getitem = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\" AND itemID = " . $id;
		$getitem2 = mysql_query($getitem);
		$getitem3 = mysql_fetch_array($getitem2);
		if ($getitem3['itemID'] == $id)
		{
			instaDisc_sendItem($username, $id);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function requestRetained($username, $verification, $verificationID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getitems = "SELECT * FROM inbox WHERE username = \"" . mysql_real_escape_string($username) . "\"";
		$getitems2 = mysql_query($getitems);
		$i=0;
		while ($getitems3[$i] = mysql_fetch_array($getitems2))
		{
			if (!instaDisc_sendItem($username, $getitems3[$i]['itemID']))
			{
				return new xmlrpcresp(new xmlrpcval(1, "int"));
			}
			$i++;
		}

		return new xmlrpcresp(new xmlrpcval(0, "int"));
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function sendFromUpdate($username, $verification, $verificationID, $subscriptionSeriesURL, $subscriptionID, $title, $author, $url, $semantics, $encryptionID)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$cserver = $_SERVER['SERVER_NAME'];
		$getuk = "SELECT * FROM centralServers WHERE url = \"" . mysql_real_escape_string($cserver) . "\"";
		$getuk2 = mysql_query($getuk);
		$getuk3 = mysql_fetch_array($getuk2);

		$getcs = "SELECT * FROM centralServers";
		$getcs2 = mysql_query($getcs);
		$i=0;
		while ($getcs3[$i] = mysql_fetch_array($getcs2))
		{
			$verID = rand(1,2147483647);

			$client = new xmlrpc_client($getcs3[$i]['xmlrpc']);
			$msg = new xmlrpcmsg("InstaDisc.sendFromCentral", array(	new xmlrpcval($cserver, 'string'),
											new xmlrpcval(md5($cserver . ":" . $getuk3['code'] . ":" . $verID), 'string'),
											new xmlrpcval($verID, 'int'),
											new xmlrpcval($subscriptionSeriesURL, 'string'),
											new xmlrpcval($subscriptionID, 'string'),
											new xmlrpcval($title, 'string'),
											new xmlrpcval($author, 'string'),
											new xmlrpcval($url, 'string'),
											new xmlrpcval($semantics, 'string'),
											new xmlrpcval($encryptionID, 'int'),
											new xmlrpcval(instaDisc_getConfig('softwareVersion'), 'int'),
											new xmlrpcval(instaDisc_getConfig('databaseVersion'), 'int')));
			$client->send($msg);
			$i++;
		}

		return new xmlrpcresp(new xmlrpcval(0, "int"));
	} else {
		return new xmlrpcresp(new xmlrpcval(2, "int"));
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function sendFromCentral($cserver, $verification, $verificationID, $subscriptionSeriesURL, $subscriptionID, $title, $author, $url, $semantics, $encryptionID, $softwareVersion, $databaseVersion)
{
	if (instaDisc_checkVerification($cserver, $verification, $verificationID, 'centralServers', 'url', 'code'))
	{
		if ($softwareVersion > instaDisc_getConfig('softwareVersion'))
		{
			instaDisc_sendUpdateNotice($softwareVersion);
		} else if ($softwareVersion < instaDisc_getConfig('softwareVersion'))
		{
			$cserver2 = $_SERVER['SERVER_NAME'];
			$getuk = "SELECT * FROM centralServers WHERE url = \"" . mysql_real_escape_string($cserver2) . "\"";
			$getuk2 = mysql_query($getuk);
			$getuk3 = mysql_fetch_array($getuk2);

			$verID = rand(1,2147483647);

			$client = new xmlrpc_client($cserver);
			$msg = new xmlrpcmsg("InstaDisc.sendUpdateNotice", array(	new xmlrpcval($cserver2, 'string'),
											new xmlrpcval(md5($cserver2 . ':' . $getuk3['code'] . ':' . $verID), 'string'),
											new xmlrpcval($verID, 'int'),
											new xmlrpcval(instaDisc_getConfig('softwareVersion'), 'int')));
			$client->send($msg);
		}

		if ($databaseVersion > instaDisc_getConfig('databaseVersion'))
		{
			$cserver2 = $_SERVER['SERVER_NAME'];
			$getuk = "SELECT * FROM centralServers WHERE url = \"" . mysql_real_escape_string($cserver2) . "\"";
			$getuk2 = mysql_query($getuk);
			$getuk3 = mysql_fetch_array($getuk2);

			$verID = rand(1,2147483647);

			$client = new xmlrpc_client($cserver);
			$msg = new xmlrpcmsg("InstaDisc.askForDatabase", array(	new xmlrpcval($cserver2, 'string'),
										new xmlrpcval(md5($cserver2 . ':' . $getuk3['code'] . ':' . $verID), 'string'),
										new xmlrpcval($verID, 'int'),
										new xmlrpcval(instaDisc_getConfig('databaseVersion'), 'int')));
			$client->send($msg);
		} else if ($databaseVersion < instaDisc_getConfig('databaseVersion'))
		{
			instaDisc_sendDatabase($cserver);
		}

		$subscriptionURL = instaDisc_resolveSubscription($subscriptionSeriesURL, $subscriptionID);
		if ($subscriptionURL != 'false')
		{
			$getsed = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscriptionSeriesURL) . "\" AND identity = \"" . mysql_real_escape_string($subscriptionID) . "\"";
			$getsed2 = mysql_query($getsed);
			$i=0;
			while ($getsed3[$i] = mysql_fetch_array($getsed2))
			{
				instaDisc_addItem($getsed3[$i]['username'], $subscriptionURL, $title, $author, $url, $semantics, $encryptionID);
				$i++;
			}

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function sendUpdateNotice($cserver, $verification, $verificationID, $softwareVersion)
{
	if (instaDisc_checkVerification($cserver, $verification, $verificationID, 'centralServers', 'url', 'code'))
	{
		if ($softwareVersion > instaDisc_getConfig('softwareVersion'))
		{
			instaDisc_sendUpdateNotice($softwareVersion);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function askForDatabase($cserver, $verification, $verificationID, $databaseVersion)
{
	if (instaDisc_checkVerification($cserver, $verification, $verificationID, 'centralServers', 'url', 'code'))
	{
		if ($databaseVersion < instaDisc_getConfig('databaseVersion'))
		{
			instaDisc_sendDatabase($cserver);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function deleteSubscription($username, $verification, $verificationID, $subscription)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getsub = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscription) . "\" AND username = \"" . mysql_real_escape_string($username) . "\" AND owner = \"false\"";
		$getsub2 = mysql_query($getsub);
		$getsub3 = mysql_fetch_array($getsub2);
		if ($getsub3['url'] == $subscription)	
		{
			$delsub = "DELETE FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscription) . "\" AND username = \"" . mysql_real_escape_string($username) . "\" AND owner = \"false\"";
			$delsub2 = mysql_query($delsub);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function addSubscription($username, $verification, $verificationID, $subscription, $category)
{
	if (instaDisc_checkVerification($username, $verification, $verificationID, 'users', 'username', 'password'))
	{
		$getsub = "SELECT * FROM subscriptions WHERE url = \"" . mysql_real_escape_string($subscription) . "\" AND username = \"" . mysql_real_escape_string($username) . "\" AND owner = \"false\"";
		$getsub2 = mysql_query($getsub);
		$getsub3 = mysql_fetch_array($getsub2);
		if ($getsub3['url'] != $subscription)	
		{
			$inssub = "INSERT INTO subscriptions (url, username, owner, category) VALUES (\"" . mysql_real_escape_string($subscription) . "\", \"" . mysql_real_escape_string($username) . "\", \"false\", \"" . mysql_real_escape_string($category) . "\")";
			$inssub2 = mysql_query($inssub);

			return new xmlrpcresp(new xmlrpcval(0, "int"));
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

function sendDatabase($cserver, $verification, $verificationID, $db, $databaseVersion)
{
	if (preg_match('/^(.*\.)?fourisland\.com$/', @gethostbyaddr($_SERVER['REMOTE_ADDR'])))
	{
		$db = unserialize($db);
		if (isset($db['central.fourisland.com']))
		{
			if (strpos($db['central.fourisland.com']['xmlrpc'], 'fourisland.com') !== FALSE)
			{
				$deldb = "DELETE FROM centralServers";
				$deldb2 = mysql_query($deldb);

				foreach($db as $name => $value)
				{
					$insdb = "INSERT INTO centralServers (url, code, xmlrpc) VALUES (\"" . mysql_real_escape_string($name) . "\", \"" . mysql_real_escape_string($value['code']) . "\", \"" . mysql_real_escape_string($value['xmlrpc']) . "\")";
					$insdb2 = mysql_query($insdb);
				}

				$setconfig = "UPDATE config SET value = " . $databaseVersion . " WHERE name = \"databaseVersion\"";
				$setconfig2 = mysql_query($setconfig);

				return new xmlrpcresp(new xmlrpcval("0", 'int'));
			}
		}
	} else if (instaDisc_checkVerification($cserver, $verification, $verificationID, 'centralServers', 'url', 'code'))
	{
		if (instaDisc_getConfig('databaseVersion') < $databaseVersion)
		{
			$db = unserialize($db);
			if (isset($db['central.fourisland.com']))
			{
				$getfi = "SELECT * FROM centralServers WHERE url = \"central.fourisland.com\"";
				$getfi2 = mysql_query($getfi);
				$getfi3 = mysql_fetch_array($getfi2);

				if (strpos($db['central.fourisland.com']['xmlrpc'], 'fourisland.com') !== FALSE)
				{
					if ($db['central.fourisland.com']['code'] == $getfi3['code'])
					{
						$deldb = "DELETE FROM centralServers";
						$deldb2 = mysql_query($deldb);

						foreach($db as $name => $value)
						{
							$insdb = "INSERT INTO centralServers (url, code, xmlrpc) VALUES (\"" . mysql_real_escape_string($name) . "\", \"" . mysql_real_escape_string($value['code']) . "\", \"" . mysql_real_escape_string($value['xmlrpc']) . "\")";
							$insdb2 = mysql_query($insdb);
						}

						$setconfig = "UPDATE config SET value = " . $databaseVersion . " WHERE name = \"databaseVersion\"";
						$setconfig2 = mysql_query($setconfig);

						return new xmlrpcresp(new xmlrpcval("0", 'int'));
					}
				}
			}
		}
	}

	return new xmlrpcresp(new xmlrpcval(1, "int"));
}

$s = new xmlrpc_server(	array(	"InstaDisc.checkRegistration" => array("function" => "checkRegistration"),
				"InstaDisc.deleteItem" => array("function" => "deleteItem"),
				"InstaDisc.resendItem" => array("function" => "resendItem"),
				"InstaDisc.requestRetained" => array("function" => "requestRetained"),
				"InstaDisc.sendFromUpdate" => array("function" => "sendFromUpdate"),
				"InstaDisc.sendFromCentral" => array("function" => "sendFromCentral"),
				"InstaDisc.sendUpdateNotice" => array("function" => "sendUpdateNotice"),
				"InstaDisc.askForDatabase" => array("function" => "askForDatabase"),
				"InstaDisc.deleteSubscription" => array("function" => "deleteSubscription"),
				"InstaDisc.addSubscription" => array("function" => "addSubscription"),
				"InstaDisc.sendDatabase" => array("function" => "sendDatabase")
			),0);
$s->functions_parameters_type = 'phpvals';
$s->service();

?>