<?php
$base_path=dirname(__FILE__);
include("{$base_path}/config.php");
$username=$openinviter_settings['username'];
$private_key=$openinviter_settings['private_key'];
$transport=$openinviter_settings['transport'];
function talk_to_server($signature,$xml)
{
global $transport,$username;
if ($transport=='curl')
{
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, "http://update.openinviter.com/updater/auto_updater.php");
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,Array("Content-Type:application/xml","X-Username: {$username}","X-Signature: {$signature}"));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{$xml}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result=curl_exec($ch);
curl_close($ch);
return $result;
}
elseif ($transport=='wget')
{
$string_wget=" --timeout=5";
$string_wget.=" --no-check-certificate";
$string_wget.=" --header=\"Content-Type:application/xml\"";
$string_wget.=" --header=\"X-Username: {$username}\"";
$string_wget.=" --header=\"X-Signature: {$signature}\"";
$url=escapeshellcmd($url);
$string_wget.=" --post-data=\"{$xml}\"";
$string_wget.=" --quiet --output-document=-";
$command="wget {$string_wget} http://update.openinviter.com/updater/auto_updater.php";
ob_start(); passthru($command,$return_var); $buffer = ob_get_contents(); ob_end_clean();
if((strlen($buffer)==0)or($return_var!=0)) return(false);
else return $buffer;
}
}
function log_action($message,$type='error')
{
global $base_path;
$log_path="{$base_path}/log_{$type}.log";
$log_file=fopen($log_path,'a');
$final_message='['.date("Y-m-d H:i:s")."] {$message}\n";
if ($log_file)
{
fwrite($log_file,$final_message);
fclose($log_file);
}
}
$openinviter_md5=md5(file_get_contents("{$base_path}/openinviter.php"));
$openinviter_base_md5=md5(file_get_contents("{$base_path}/openinviter_base.php"));
include("{$base_path}/openinviter.php");
$inviter=new OpenInviter();
$plugins=$inviter->getPlugins();
$plugin_md5s=array();
foreach ($plugins as $plugin=>$dummy)
$plugin_md5s[$plugin]=md5(file_get_contents("{$base_path}/plugins/{$plugin}.php"));
$xml="<openinviter_updater operation='file_check'>
<file path='openinviter.php' checksum='{$openinviter_md5}'></file>
<file path='openinviter_base.php' checksum='{$openinviter_base_md5}'></file>\n";
foreach ($plugin_md5s as $plugin=>$md5)
$xml.="<file path='plugins/{$plugin}.php' checksum='{$md5}'></file>\n";
$xml.="</openinviter_updater>";
$signature = md5(md5($xml.$private_key).$private_key);
$file_check=talk_to_server($signature,$xml);
if (!$file_check)
{
log_action("AutoUpdater - Unable to connect to update server.");
exit;
}
echo $file_check;exit;
libxml_use_internal_errors(true);
$parsed_xml=simplexml_load_string($file_check);
libxml_use_internal_errors(false);
if (!$parsed_xml)
{
log_action("AutoUpdater - Incomplete server response.");
exit;
}
if (empty($parsed_xml->error))
{
log_action("AutoUpdater - Incomplete server response.");
exit;
}
if ($parsed_xml->error['code']!=0)
{
log_action("AutoUpdater - ".$parsed_xml->error);
exit;
}
if (empty($parsed_xml->update_status))
{
log_action("AutoUpdater - Incomplete server response.");
exit;
}
if ($parsed_xml->update_status['code']==0)
exit;
if (!isset($parsed_xml->file))
{
log_action("AutoUpdater - Incomplete server response.");
exit;
}
$must_update=array();
foreach ($parsed_xml->file as $file)
$must_update[(string)$file['path']]=(string)$file['type'];
foreach ($must_update as $file=>$type)
{
$xml="<openinviter_updater operation='get_file'><file path='{$file}'></file></openinviter_updater>";
$signature = md5(md5($xml.$private_key).$private_key);
$file_contents=talk_to_server($signature,$xml);
// if (!$file_contents)
// log_action("AutoUpdater - Failed to update {$file}");
// else
// {
// file_put_contents("{$base_path}/{$file}",$file_contents);
// log_action("AutoUpdater - Updated {$file}",'info');
// }
echo $file_contents."<BR><BR><BR><BR><BR>";
}
?>
|