/** * Get updates from b2evolution.net * * @return boolean True if there have been updates. */ function b2evonet_get_updates() { global $DB, $debug, $evonetsrv_host, $evonetsrv_port, $evonetsrv_uri, $servertimenow, $evo_charset; global $Messages, $Settings, $baseurl, $instance_name, $app_name, $app_version, $app_date; $update_every = 3600 * 12; // 12 hours $attempt_every = 3600 * 4; // 4 hours /* DEBUG: * $update_every = 10; $attempt_every = 5; */ $servertime_last_update = $Settings->get('evonet_last_update'); if ($servertime_last_update > $servertimenow - $update_every) { // The previous update was less than 12 hours ago, skip this // echo 'recent update'; return false; } $servertime_last_attempt = $Settings->get('evonet_last_attempt'); if ($servertime_last_attempt > $servertimenow - $attempt_every) { // The previous update attempt was less than 4 hours ago, skip this // This is so all b2evo's don't go crazy if the server ever is down // echo 'recent attempt'; return false; } if ($debug) { $Messages->add(T_('Getting updates from ') . $evonetsrv_host, 'notes'); } $Settings->set('evonet_last_attempt', $servertimenow); $Settings->dbupdate(); // Construct XML-RPC client: load_funcs('xmlrpc/model/_xmlrpc.funcs.php'); $client = new xmlrpc_client($evonetsrv_uri, $evonetsrv_host, $evonetsrv_port); // $client->debug = $debug; // Run system checks: load_funcs('tools/model/_system.funcs.php'); list($mediadir_status) = system_check_media_dir(); list($uid, $uname) = system_check_process_user(); list($gid, $gname) = system_check_process_group(); // Construct XML-RPC message: $message = new xmlrpcmsg('b2evo.getupdates', array(new xmlrpcval($baseurl, 'string'), new xmlrpcval($instance_name, 'string'), new xmlrpcval($app_name, 'string'), new xmlrpcval($app_version, 'string'), new xmlrpcval($app_date, 'string'), new xmlrpcval(array('this_update' => new xmlrpcval($servertimenow, 'string'), 'last_update' => new xmlrpcval($servertime_last_update, 'string'), 'db_version' => new xmlrpcval($DB->get_version(), 'string'), 'db_utf8' => new xmlrpcval(system_check_db_utf8() ? 1 : 0, 'int'), 'evo_charset' => new xmlrpcval($evo_charset, 'string'), 'php_version' => new xmlrpcval(PHP_VERSION, 'string'), 'php_xml' => new xmlrpcval(extension_loaded('xml') ? 1 : 0, 'int'), 'php_mbstring' => new xmlrpcval(extension_loaded('mbstring') ? 1 : 0, 'int'), 'php_memory' => new xmlrpcval(system_check_memory_limit(), 'int'), 'php_upload_max' => new xmlrpcval(system_check_upload_max_filesize(), 'int'), 'php_post_max' => new xmlrpcval(system_check_post_max_size(), 'int'), 'mediadir_status' => new xmlrpcval($mediadir_status, 'string'), 'install_removed' => new xmlrpcval(system_check_install_removed() ? 1 : 0, 'int'), 'php_uid' => new xmlrpcval($uid, 'int'), 'php_uname' => new xmlrpcval($uname, 'string'), 'php_gid' => new xmlrpcval($gid, 'int'), 'php_gname' => new xmlrpcval($gname, 'string'), 'php_reg_globals' => new xmlrpcval(ini_get('register_globals') ? 1 : 0, 'int'), 'gd_version' => new xmlrpcval(system_check_gd_version(), 'string')), 'struct'))); $result = $client->send($message); if ($ret = xmlrpc_logresult($result, $Messages, false)) { // Response is not an error, let's process it: $response = $result->value(); if ($response->kindOf() == 'struct') { // Decode struct: $response = xmlrpc_decode_recurse($response); /** * @var AbstractSettings */ global $global_Cache; if (isset($response['evo_links'])) { // Extract evo links into its own var: $evo_links = $response['evo_links']; unset($response['evo_links']); if (is_array($evo_links)) { // Save creds: $global_Cache->set('evo_links', serialize($evo_links)); } } if (isset($response['creds'])) { // Extract creds into its own var: $creds = $response['creds']; unset($response['creds']); if (is_array($creds)) { // Save creds: $global_Cache->set('creds', serialize($creds)); } } // Save other info: $global_Cache->set('evonet_updates', serialize($response)); $global_Cache->dbupdate(); $Settings->set('evonet_last_update', $servertimenow); $Settings->dbupdate(); return true; } else { $Messages->add(T_('Invalid updates received'), 'error'); } } return false; }
/** * Request abuse list from central blacklist. * * @return boolean true = success, false = error */ function antispam_poll_abuse() { global $Messages, $Settings, $baseurl, $debug, $antispamsrv_host, $antispamsrv_port, $antispamsrv_uri; // Construct XML-RPC client: load_funcs('xmlrpc/model/_xmlrpc.funcs.php'); $client = new xmlrpc_client($antispamsrv_uri, $antispamsrv_host, $antispamsrv_port); $client->debug = $debug; // Get datetime from last update, because we only want newer stuff... $last_update = $Settings->get('antispam_last_update'); // Encode it in the XML-RPC format $Messages->add(T_('Latest update timestamp') . ': ' . $last_update, 'note'); $startat = mysql2date('Ymd\\TH:i:s', $last_update); //$startat = iso8601_encode( mktime(substr($m,11,2),substr($m,14,2),substr($m,17,2),substr($m,5,2),substr($m,8,2),substr($m,0,4)) ); // Construct XML-RPC message: $message = new xmlrpcmsg('b2evo.pollabuse', array(new xmlrpcval(0, 'int'), new xmlrpcval('annonymous', 'string'), new xmlrpcval('nopassrequired', 'string'), new xmlrpcval($startat, 'dateTime.iso8601'), new xmlrpcval(0, 'int'))); $Messages->add(sprintf(T_('Requesting abuse list from %s...'), $antispamsrv_host), 'note'); $result = $client->send($message); if ($ret = xmlrpc_logresult($result, $Messages)) { // Response is not an error, let's process it: $response = $result->value(); if ($response->kindOf() == 'struct') { // Decode struct: $response = xmlrpc_decode_recurse($response); if (!isset($response['strings']) || !isset($response['lasttimestamp'])) { $Messages->add(T_('Incomplete reponse.'), 'error'); $ret = false; } else { // Start registering strings: $value = $response['strings']; if (count($value) == 0) { $Messages->add(T_('No new blacklisted strings are available.'), 'note'); } else { // We got an array of strings: $Messages->add(T_('Adding strings to local blacklist:'), 'note'); foreach ($value as $banned_string) { if (antispam_create($banned_string, 'central')) { // Creation successed $Messages->add(T_('Adding:') . ' «' . $banned_string . '»: ' . T_('OK.'), 'note'); } else { // Was already handled $Messages->add(T_('Adding:') . ' «' . $banned_string . '»: ' . T_('Not necessary! (Already handled)'), 'note'); antispam_update_source($banned_string, 'central'); } } // Store latest timestamp: $endedat = date('Y-m-d H:i:s', iso8601_decode($response['lasttimestamp'])); $Messages->add(T_('New latest update timestamp') . ': ' . $endedat, 'note'); $Settings->set('antispam_last_update', $endedat); $Settings->dbupdate(); } $Messages->add(T_('Done.'), 'success'); } } else { $Messages->add(T_('Invalid reponse.'), 'error'); $ret = false; } } return $ret; }
/** * Get updates from b2evolution.net * * @param boolean useful when trying to upgrade to a release that has just been published (in the last 12 hours) * @return NULL|boolean True if there have been updates, false on error, * NULL if the user has turned off updates. */ function b2evonet_get_updates($force_short_delay = false) { global $allow_evo_stats; // Possible values: true, false, 'anonymous' global $DB, $debug, $evonetsrv_host, $evonetsrv_port, $evonetsrv_uri, $servertimenow, $evo_charset; global $Messages, $Settings, $baseurl, $instance_name, $app_name, $app_version, $app_date; global $Debuglog; global $Timer; if (!isset($allow_evo_stats)) { // Set default value: $allow_evo_stats = true; // allow (non-anonymous) stats } if ($allow_evo_stats === false) { // Get outta here: return NULL; } if ($debug == 2) { $update_every = 8; $attempt_every = 3; } elseif ($force_short_delay) { $update_every = 180; // 3 minutes $attempt_every = 60; // 1 minute } else { $update_every = 3600 * 12; // 12 hours $attempt_every = 3600 * 4; // 4 hours } // Note: do not put $baseurl in here since it would cause too frequently updates, when you have the same install with different $baseurls. // Everytime this method gets called on another baseurl, there's a new check for updates! $version_id = $instance_name . ' ' . $app_name . ' ' . $app_version . ' ' . $app_date; // This is the last version we checked against the server: $last_version_checked = $Settings->get('evonet_last_version_checked'); $servertime_last_update = $Settings->get('evonet_last_update'); $servertime_last_attempt = $Settings->get('evonet_last_attempt'); if ($last_version_checked == $version_id) { // Current version has already been checked, don't check too often: if ($servertime_last_update > $servertimenow - $update_every) { // The previous update was less than 12 hours ago, skip this // echo 'recent update'; return false; } if ($servertime_last_attempt > $servertimenow - $attempt_every) { // The previous update attempt was less than 4 hours ago, skip this // This is so all b2evo's don't go crazy if the server ever is down // echo 'recent attempt'; return false; } } $Timer->resume('evonet: check for updates'); $Debuglog->add(sprintf('Getting updates from %s.', $evonetsrv_host), 'evonet'); if ($debug) { $Messages->add(sprintf(T_('Getting updates from %s.'), $evonetsrv_host), 'note'); } $Settings->set('evonet_last_attempt', $servertimenow); $Settings->dbupdate(); // Construct XML-RPC client: load_funcs('xmlrpc/model/_xmlrpc.funcs.php'); $client = new xmlrpc_client($evonetsrv_uri, $evonetsrv_host, $evonetsrv_port); if ($debug > 1) { $client->debug = 1; } // Run system checks: load_funcs('tools/model/_system.funcs.php'); // Get system stats to display: $system_stats = get_system_stats(); // Construct XML-RPC message: $message = new xmlrpcmsg('b2evo.getupdates', array(new xmlrpcval($allow_evo_stats === 'anonymous' ? md5($baseurl) : $baseurl, 'string'), new xmlrpcval($instance_name, 'string'), new xmlrpcval($app_name, 'string'), new xmlrpcval($app_version, 'string'), new xmlrpcval($app_date, 'string'), new xmlrpcval(array('this_update' => new xmlrpcval($servertimenow, 'string'), 'last_update' => new xmlrpcval($servertime_last_update, 'string'), 'mediadir_status' => new xmlrpcval($system_stats['mediadir_status'], 'int'), 'install_removed' => new xmlrpcval($system_stats['install_removed'] == 'ok' ? 1 : 0, 'int'), 'evo_charset' => new xmlrpcval($system_stats['evo_charset'], 'string'), 'evo_blog_count' => new xmlrpcval($system_stats['evo_blog_count'], 'int'), 'cachedir_status' => new xmlrpcval($system_stats['cachedir_status'], 'int'), 'cachedir_size' => new xmlrpcval($system_stats['cachedir_size'], 'int'), 'general_pagecache_enabled' => new xmlrpcval($system_stats['general_pagecache_enabled'] ? 1 : 0, 'int'), 'blog_pagecaches_enabled' => new xmlrpcval($system_stats['blog_pagecaches_enabled'], 'int'), 'db_version' => new xmlrpcval($system_stats['db_version'], 'string'), 'db_utf8' => new xmlrpcval($system_stats['db_utf8'] ? 1 : 0, 'int'), 'php_uid' => new xmlrpcval($system_stats['php_uid'], 'int'), 'php_uname' => new xmlrpcval($system_stats['php_uname'], 'string'), 'php_gid' => new xmlrpcval($system_stats['php_gid'], 'int'), 'php_gname' => new xmlrpcval($system_stats['php_gname'], 'string'), 'php_version' => new xmlrpcval($system_stats['php_version'], 'string'), 'php_reg_globals' => new xmlrpcval($system_stats['php_reg_globals'] ? 1 : 0, 'int'), 'php_allow_url_include' => new xmlrpcval($system_stats['php_allow_url_include'] ? 1 : 0, 'int'), 'php_allow_url_fopen' => new xmlrpcval($system_stats['php_allow_url_fopen'] ? 1 : 0, 'int'), 'php_upload_max' => new xmlrpcval($system_stats['php_upload_max'], 'int'), 'php_post_max' => new xmlrpcval($system_stats['php_post_max'], 'int'), 'php_memory' => new xmlrpcval($system_stats['php_memory'], 'int'), 'php_mbstring' => new xmlrpcval($system_stats['php_mbstring'] ? 1 : 0, 'int'), 'php_xml' => new xmlrpcval($system_stats['php_xml'] ? 1 : 0, 'int'), 'php_imap' => new xmlrpcval($system_stats['php_imap'] ? 1 : 0, 'int'), 'php_opcode_cache' => new xmlrpcval($system_stats['php_opcode_cache'], 'string'), 'gd_version' => new xmlrpcval($system_stats['gd_version'], 'string')), 'struct'))); $result = $client->send($message); if ($ret = xmlrpc_logresult($result, $Messages, false)) { // Response is not an error, let's process it: $response = $result->value(); if ($response->kindOf() == 'struct') { // Decode struct: $response = xmlrpc_decode_recurse($response); /** * @var AbstractSettings */ global $global_Cache; foreach ($response as $key => $data) { $global_Cache->set($key, serialize($data)); } $global_Cache->delete('evonet_updates'); // Cleanup $global_Cache->dbupdate(); $Settings->set('evonet_last_update', $servertimenow); $Settings->set('evonet_last_version_checked', $version_id); $Settings->dbupdate(); $Debuglog->add('Updates saved', 'evonet'); $Timer->pause('evonet: check for updates'); return true; } else { $Debuglog->add('Invalid updates received', 'evonet'); $Messages->add(T_('Invalid updates received'), 'error'); } } $Timer->pause('evonet: check for updates'); return false; }