Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 2
0
/**
 * 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;
}
Ejemplo n.º 3
0
/**
 * 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;
}