/** * Get cached request results * * @param $server_url * @param $action * @param $args * @return bool */ public function getCachedApiRequest($server_url, $action, $args) { $cache_action = $this->checkAction($action); if (!$cache_action) { $msg = sprintf("Cacher action: %s, cache_action: %s", $action, $cache_action ? 'YES' : 'NO'); WPRC_Functions::log($msg, 'api', 'api.log'); return false; } $foo = $this->model->getCachedRequest($server_url, $action, $args); $msg = sprintf("Cacher model get: %s", $foo == false ? 'NO' : 'YES'); WPRC_Functions::log($msg, 'api', 'api.log'); return $foo; }
public static function wprc_update_themes() { global $wp_version; $WP_UPDATE_THEMES_URL = WPRC_WP_THEMES_UPDATE_REPO; //include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version if (defined('WP_INSTALLING')) { return false; } //if ( !function_exists( 'get_themes' ) ) //require_once( ABSPATH . 'wp-includes/theme.php' ); //$installed_themes = get_themes( ); $last_update = get_site_transient('update_themes'); if (!is_object($last_update)) { $last_update = new stdClass(); } // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours. $timeout = in_array(current_filter(), array('load-themes.php', 'load-update.php', 'load-update-core.php')) ? 3600 : 43200; $time_not_changed = isset($last_update->last_checked) && $timeout > time() - $last_update->last_checked; //$themes = array(); $checked = array(); $exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot'); // Put slug of current theme into request. //$themes['current_theme'] = get_option( 'stylesheet' ); // get themes data from the DB $extensions_model = WPRC_Loader::getModel('extensions'); $extensions = $extensions_model->getFullExtensionsTree(); $installed_themes = $extensions['themes']; // arrange themes according to repository (if enabled) $repos = array(); $current_theme = get_option('stylesheet'); foreach ($installed_themes as $key => $theme) { $checked[$theme['Stylesheet']] = $theme['Version']; $rkey = $theme['repository_endpoint_url'] === null ? WPRC_WP_THEMES_REPO : $theme['repository_endpoint_url']; $sendtheme = $theme; // remove unwanted fields from the theme that is going to be sent unset($sendtheme['repository_endpoint_url']); unset($sendtheme['repository_id']); unset($sendtheme['repository_user']); unset($sendtheme['repository_pass']); unset($sendtheme['repository_salt']); unset($sendtheme['repository_name']); unset($sendtheme['repository_enabled']); unset($sendtheme['repository_deleted']); unset($sendtheme['extension_was_installed']); unset($sendtheme['type_name']); unset($sendtheme['extension_slug']); foreach ((array) $theme as $key2 => $value) { if (in_array($key2, $exclude_fields)) { unset($sendtheme[$key2]); } } if (!isset($repos[$rkey])) { $repos[$rkey] = array('id' => $theme['repository_id'], 'url' => $rkey, 'user' => $theme['repository_user'], 'pass' => $theme['repository_pass'], 'salt' => $theme['repository_salt'], 'name' => $theme['repository_name'], 'themes' => array('current_theme' => $current_theme, $sendtheme['Stylesheet'] => $sendtheme)); // Wordpress uses different install repository URL from Update Repository URL so hardcode it if ($rkey === WPRC_WP_THEMES_REPO) { $repos[$rkey]['url'] = $WP_UPDATE_THEMES_URL; } } else { $repos[$rkey]['themes'][$sendtheme['Stylesheet']] = $sendtheme; } } $theme_changed = false; foreach ($checked as $slug => $v) { $update_request->checked[$slug] = $v; if (!isset($last_update->checked[$slug]) || strval($last_update->checked[$slug]) !== strval($v)) { $theme_changed = true; } } if (isset($last_update->response) && is_array($last_update->response)) { foreach ($last_update->response as $slug => $update_details) { if (!isset($checked[$slug])) { $theme_changed = true; break; } } } if ($time_not_changed && !$theme_changed) { return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); set_site_transient('update_themes', $last_update); $allresponses = array(); //WPRC_Loader::includeSecurity(); foreach ($repos as $repo) { $to_send = $repo['themes']; $server_url = $repo['url']; $repository_username = $repo['user']; $repository_password = $repo['pass']; $repository_salt = $repo['salt']; // action is themes-update by default $body_array = array('action' => 'themes_update'); // add authorization if needed if ($repository_username != '' && $repository_username != null && $repository_password != '' && $repository_password != null) { //$sendpassword=WPRC_Security::encrypt($repository_salt,$repository_password); $body_array['auth'] = array('user' => $repository_username, 'pass' => $repository_password, 'salt' => $repository_salt); } else { unset($body_array['auth']); } $body_array['themes'] = serialize($to_send); if ($server_url === $WP_UPDATE_THEMES_URL) { unset($body_array['action']); } $options = array('timeout' => defined('DOING_CRON') && DOING_CRON ? 30 : 3, 'body' => $body_array, 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo('url')); // debug log $reqargs = $body_array; if (isset($reqargs['auth'])) { $reqargs['auth'] = 'AUTH info'; } $msg = sprintf("THEME UPDATE API Request to %s, timeout: %d, wpversion: %s, request args: %s", $server_url, $options['timeout'], $wp_version, print_r($reqargs, true)); WPRC_Functions::log($msg, 'api', 'api.log'); unset($reqargs); // send request $raw_response = wp_remote_post($server_url, $options); // log $msg = sprintf("THEME UPDATE API Request to %s, response: %s", $server_url, print_r($raw_response, true)); WPRC_Functions::log($msg, 'api', 'api.log'); if (is_wp_error($raw_response) || 200 != wp_remote_retrieve_response_code($raw_response)) { // log if (is_wp_error($raw_response)) { $msg = sprintf("THEME UPDATE API Request to %s, response error: %s", $server_url, print_r($raw_response->get_error_message(), true)); WPRC_Functions::log($msg, 'api', 'api.log'); } continue; //return false; } $response = @unserialize(wp_remote_retrieve_body($raw_response)); // merge with other results if (false === $response) { // log $msg = sprintf("THEME UPDATE API Request to %s, response unserialize failed: %s", $server_url, print_r(wp_remote_retrieve_body($raw_response), true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { if (is_object($response) && isset($response->error)) { $response = new WP_Error('extensions_api_failed', $response->error, wp_remote_retrieve_body($raw_response)); // log $msg = sprintf("THEME UPDATE API Request to %s, action not implemented error: %s", $server_url, print_r($response, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { if (is_array($response) && isset($response['error'])) { $response = new WP_Error('extensions_api_failed', $response['error'], wp_remote_retrieve_body($raw_response)); // log $msg = sprintf("THEME UPDATE API Request to %s, action not implemented error: %s", $server_url, print_r($response, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { // add some info about repository id etc.. foreach ($response as $key => $them) { if (is_object($response[$key])) { $response[$key]->repository_id = $repo['id']; $response[$key]->repository_salt = $repo['salt']; } else { if (is_array($response[$key])) { $response[$key]['repository_id'] = $repo['id']; $response[$key]['repository_salt'] = $repo['salt']; } } $response[$key] = (array) $response[$key]; } $allresponses = array_merge($allresponses, $response); } } } } // update transients for themes $new_update = new stdClass(); $new_update->last_checked = time(); $new_update->checked = $checked; $new_update->response = $allresponses; set_site_transient('update_themes', $new_update); }
/** * Send request to any file * * @param string method * @param string url to send * @param mixed arguments to send */ public function sendRequest($method, $url, $args, $timeout = 15) { WPRC_Loader::includeWordpressHttp(); if (isset($args['request'])) { $body_array = array('action' => $args['action'], 'request' => serialize($args['request'])); } else { $body_array = array('action' => $args['action']); } // log $debug_msg = sprintf('SERVER REQUEST, method: %s, timeout: %d, uri: %s, args: %s', $method, $timeout, $url, print_r($args, true)); WPRC_Functions::log($debug_msg, 'server', 'server.log'); switch ($method) { case 'post': $request = wp_remote_post($url, array('timeout' => $timeout, 'body' => $body_array)); // log $debug_msg = sprintf('SERVER REQUEST, response: %s', print_r($request, true)); WPRC_Functions::log($debug_msg, 'server', 'server.log'); if (is_wp_error($request) || 200 != wp_remote_retrieve_response_code($request)) { // log if (is_wp_error($request)) { $debug_msg = sprintf('SERVER REQUEST, response error: %s', print_r($request->get_error_message(), true)); } else { $debug_msg = sprintf('SERVER REQUEST, response error code: %s', print_r(wp_remote_retrieve_response_code($request), true)); } WPRC_Functions::log($debug_msg, 'server', 'server.log'); // connection failed return false; } $res = @unserialize(wp_remote_retrieve_body($request)); if (false === $res) { $res = new WP_Error('repository_connector_error', __('An unknown error occurred.', 'installer'), wp_remote_retrieve_body($request)); // log $debug_msg = sprintf('SERVER REQUEST, response unknown error: %s', print_r(wp_remote_retrieve_body($request), true)); WPRC_Functions::log($debug_msg, 'server', 'server.log'); } break; } return $res; }
public function updateExtensionMap($get, $post) { if (isset($get['update_extension_map'])) { $msg = sprintf('Extension maps update entered'); WPRC_Functions::log($msg, 'controller', 'controller.log'); // clear cache delete_transient('wprc_update_extensions_maps'); $result = WPRC_Installer::wprc_update_extensions_maps(); echo json_encode(array('result' => $result)); $msg = sprintf('Extension maps update complete'); WPRC_Functions::log($msg, 'controller', 'controller.log'); exit; } exit; }
public function checkCompatibility($get, $post) { $msg = sprintf('Repository Reporter check compatibility enter'); WPRC_Functions::log($msg, 'controller', 'controller.log'); $reporter = WPRC_Loader::getRequester('compatibility-reporter'); $check_extension_type = $get['extension_type_singular']; $check_extension_name = $get['extension_name']; $check_extension_repository_url = $get['repository_url']; $check_extension_version = $get['extension_version']; $check_extension_slug = isset($get['extension_slug']) ? $get['extension_slug'] : ''; $parameters = array('check_extension_name' => $check_extension_name, 'check_extension_type' => $check_extension_type, 'check_extension_repository_url' => $check_extension_repository_url, 'check_extension_version' => $check_extension_version, 'check_extension_slug' => $check_extension_slug); $report = $reporter->prepareRequest($parameters); // send request only once even if it fails $response = $reporter->sendRequest($report, true); // layout if (isset($response) && isset($response->body) && is_array($response->body) && array_key_exists('left_extensions', $response->body)) { $left_extensions = $response->body['left_extensions']; $right_extensions = array(); if (is_array($left_extensions) && count($left_extensions) > 0) { $left_extension = array_shift($left_extensions); $right_extensions = $left_extension['compatibility_info']; } $no_compatibility_information = false; if (count($right_extensions) == 0) { $no_compatibility_information = true; } $version_found = $response->body['version_found']; } else { $no_compatibility_information = true; } // Additional attributes to show later the table in a right way $report_extensions = $report['request']['right_extensions']; $new_right_extensions = array(); if (isset($right_extensions) && is_array($right_extensions)) { foreach ($report_extensions as $report_key => $report_extension) { $name = $report_extension['name']; $version = $report_extension['version']; $extension_counts = 0; $last_key = ''; $first_key = ''; $works = 0; $broken = 0; $score = 0; foreach ($right_extensions as $key => $right_extension) { if ($extension_counts == 0) { $first_key = $key; } if ($right_extension['name'] == $name) { $extension_counts++; $last_key = $key; $works += $right_extensions[$key]['works']; $broken += $right_extensions[$key]['broken']; $score += $right_extensions[$key]['score']; } } if ($extension_counts == 1) { $new_right_extensions[$last_key] = $right_extensions[$last_key]; } elseif ($extension_counts > 1) { $right_extensions[$first_key]['hide'] = false; $right_extensions[$first_key]['link'] = true; $new_right_extensions[$first_key] = $right_extensions[$first_key]; $new_right_extensions[$report_key . '_total'] = $right_extensions[$last_key]; $new_right_extensions[$report_key . '_total']['works'] = $works; $new_right_extensions[$report_key . '_total']['broken'] = $broken; $new_right_extensions[$report_key . '_total']['score'] = number_format($works * 100 / ($works + $broken), 0); $new_right_extensions[$report_key . '_total']['total'] = true; unset($new_right_extensions[$report_key . '_total']['version']); } } } require_once WPRC_TEMPLATES_DIR . '/extension-compatibility-information.tpl.php'; //WPRC_Loader::includePage('check-compatibility'); $msg = sprintf('Repository Reporter check compatibility complete'); WPRC_Functions::log($msg, 'controller', 'controller.log'); }
/** * Search plugins in multiple repositories * This method replaces 'plugins_api' and 'themes_api' function */ public function extensionsApi($state, $action, $args, $extension_type) { // default wp behaviour for tabs other than search //if ($action=='hot_tags') return false; if (isset($_GET['tab'])) { if ($_GET['tab'] != 'dashboard' && $_GET['tab'] != 'search' && $_GET['tab'] != 'plugin-information' && $_GET['tab'] != 'theme-information') { return false; } } $rauth = true; $rpass = ''; $ruser = ''; if (isset($_GET['repository_id']) && isset($_GET['user']) && isset($_GET['pass']) && ($action == 'plugin_information' || $action == 'theme_information')) { $rm = WPRC_Loader::getModel('repositories'); $rid = $_GET['repository_id']; $repository = $rm->getRepository($rid); $ruser = rawurldecode($_GET['user']); $rsalt = $repository->repository_authsalt; $rpass = rawurldecode($_GET['pass']); //WPRC_Security::decrypt($repository->repository_authsalt,rawurldecode($_GET['pass'])); $login = $rm->testLogin($rid, $ruser, $rpass); if ($login != false && empty($login['error'])) { $rauth = true; } else { $rauth = false; } } $repositories_ids = array(); if (isset($args->repositories)) { $repositories_ids = $args->repositories; unset($args->repositories); } $rm = WPRC_Loader::getModel('repositories'); $repos = $rm->getRepositoriesByIds($repositories_ids); $results = array(); // Remade per_page parameters in order to get consistent pagination $per_page = 0; $repos_number = count($repos); if ($action == 'query_plugins') { $per_page = WPRC_PLUGINS_API_QUERY_PLUGINS_PER_PAGE; } elseif ($action == 'query_themes') { $per_page = WPRC_THEMES_API_QUERY_THEMES_PER_PAGE; } $results_per_repo = array(); for ($i = 0; $i < $repos_number; $i++) { $res = false; $server_url = $repos[$i]->repository_endpoint_url; $repository_name = $repos[$i]->repository_name; $repository_username = $repos[$i]->repository_username; $repository_password = $repos[$i]->repository_password; $salt = $repos[$i]->repository_authsalt; $rid = $repos[$i]->id; $body_array = array('action' => $action); if ($repository_username != '' && $repository_password != '') { /*$args->username = $repository_username; $args->password = $repository_password;*/ //$send_password=WPRC_Security::encrypt($salt,$repository_password); $body_array['auth'] = array('user' => $repository_username, 'pass' => $repository_password, 'salt' => $salt); //$body_array['auth'] = array('user'=>$repository_username,'pass'=>$repository_password,'salt'=>$salt); } else { unset($args->username); unset($args->password); } $request_array = $args; $request_array->per_page = $per_page; $body_array['request'] = serialize($args); if (isset($args->slug)) { $body_array['slug'] = $args->slug; } // debug log $reqargs = $body_array; if (isset($reqargs['auth'])) { $reqargs['auth'] = 'AUTH info'; } $msg = sprintf("API Request to %s, request args: %s", $server_url, print_r($reqargs, true)); WPRC_Functions::log($msg, 'api', 'api.log'); unset($reqargs); $cached_request_results = apply_filters('wprc_extensions_api_before_each_repository', $server_url, $action, $args); if ($cached_request_results) { $results[$server_url] = $cached_request_results; // log $msg = sprintf("API Request to %s, using cached results", $server_url); WPRC_Functions::log($msg, 'api', 'api.log'); continue; } $request = wp_remote_post($server_url, array('timeout' => 15, 'body' => $body_array)); // log $msg = sprintf("API Request to %s, timeout: %d, response: %s", $server_url, 15, print_r($request, true)); WPRC_Functions::log($msg, 'api', 'api.log'); if (is_wp_error($request)) { $res = new WP_Error('extensions_api_failed', __('An unexpected HTTP Error occurred during the API request.', 'installer'), $request->get_error_message()); // log $msg = sprintf("API Request to %s, response error: %s", $server_url, print_r($request->get_error_message(), true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { $request_body = wp_remote_retrieve_body($request); if (is_serialized($request_body)) { $res = @unserialize($request_body); } if (false === $res) { $res = new WP_Error('extensions_api_failed', __('An unknown error occurred.', 'installer'), wp_remote_retrieve_body($request)); // log $msg = sprintf("API Request to %s, unknown error in response body: %s", $server_url, print_r($request_body, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { if (is_object($res) && isset($res->error)) { $res = new WP_Error('extensions_api_failed', $res->error, wp_remote_retrieve_body($request)); // log $msg = sprintf("API Request to %s, action not implemented error: %s", $server_url, print_r($res, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { if (is_array($res) && isset($res['error'])) { $res = new WP_Error('extensions_api_failed', $res['error'], wp_remote_retrieve_body($request)); // log $msg = sprintf("API Request to %s, action not implemented error: %s", $server_url, print_r($res, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { // add some custom info onto the results (like repository salt etc..) if ($action == 'query_plugins') { foreach ($res->plugins as $key => $extension) { $res->plugins[$key]->salt = $salt; $res->plugins[$key]->repository_id = $rid; // strip non-serializable characters $res->plugins[$key]->description = preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x80-\\xFF]/u', '', $res->plugins[$key]->description); } } elseif ($action == 'query_themes') { foreach ($res->themes as $key => $extension) { $res->themes[$key]->salt = $salt; $res->themes[$key]->repository_id = $rid; // strip non-serializable characters $res->themes[$key]->description = preg_replace('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x80-\\xFF]/u', '', $res->themes[$key]->description); } } elseif ($action == 'plugin_information' || $action == 'theme_information') { if (is_object($res)) { $res->rauth = $rauth; $res->pass = $rpass; $res->user = $ruser; $res->salt = $salt; $res->repository_id = $rid; } } } } } } $cached_them = apply_filters('wprc_extensions_api_after_each_repository', $server_url, $action, $args, $res); // log $msg = sprintf("API Request to %s, results cached: %s", $server_url, $cached_them == false ? 'NO' : 'YES'); WPRC_Functions::log($msg, 'api', 'api.log'); // set source $results[$server_url] = $res; } $general_results = new stdClass(); $general_results->results = $results; return $general_results; }
public static function wprc_update_plugins() { global $wp_version; $WP_UPDATE_PLUGINS_URL = WPRC_WP_PLUGINS_UPDATE_REPO; //include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version if (defined('WP_INSTALLING')) { return false; } // If running blog-side, bail unless we've not checked in the last 12 hours //if ( !function_exists( 'get_plugins' ) ) //require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); //$plugins = get_plugins(); $active = get_option('active_plugins', array()); $current = get_site_transient('update_plugins'); if (!is_object($current)) { $current = new stdClass(); } $new_option = new stdClass(); $new_option->last_checked = time(); // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours. $timeout = in_array(current_filter(), array('load-plugins.php', 'load-update.php', 'load-update-core.php')) ? 3600 : 43200; $time_not_changed = isset($current->last_checked) && $timeout > time() - $current->last_checked; // get plugin data from the DB $extensions_model = WPRC_Loader::getModel('extensions'); $extensions = $extensions_model->getFullExtensionsTree(); $plugins = $extensions['plugins']; // arrange plugins according to repository (if enabled) $repos = array(); $plugin_changed = false; foreach ($plugins as $key => $plugin) { $new_option->checked[$key] = $plugin['Version']; if (!isset($current->checked[$key]) || strval($current->checked[$key]) !== strval($plugin['Version'])) { $plugin_changed = true; } $rkey = $plugin['repository_endpoint_url'] === null ? WPRC_WP_PLUGINS_REPO : $plugin['repository_endpoint_url']; $sendplugin = $plugin; $sendplugin['slug'] = $sendplugin['extension_slug']; // remove unwanted fields from the plugin that is going to be sent unset($sendplugin['repository_endpoint_url']); unset($sendplugin['repository_id']); unset($sendplugin['repository_user']); unset($sendplugin['repository_pass']); unset($sendplugin['repository_salt']); unset($sendplugin['repository_name']); unset($sendplugin['repository_enabled']); unset($sendplugin['repository_deleted']); unset($sendplugin['extension_was_installed']); unset($sendplugin['type_name']); unset($sendplugin['extension_slug']); if (!isset($repos[$rkey])) { $repos[$rkey] = array('id' => $plugin['repository_id'], 'url' => $rkey, 'user' => $plugin['repository_user'], 'pass' => $plugin['repository_pass'], 'name' => $plugin['repository_name'], 'salt' => $plugin['repository_salt'], 'plugins' => array($key => $sendplugin)); // Wordpress uses different install repository URL from Update Repository URL so hardcode it if ($rkey == WPRC_WP_PLUGINS_REPO) { $repos[$rkey]['url'] = $WP_UPDATE_PLUGINS_URL; } } else { $repos[$rkey]['plugins'][$key] = $sendplugin; } } if (isset($current->response) && is_array($current->response)) { foreach ($current->response as $plugin_file => $update_details) { if (!isset($plugins[$plugin_file])) { $plugin_changed = true; break; } } } // Bail if we've checked in the last 12 hours and if nothing has changed if ($time_not_changed && !$plugin_changed) { return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient('update_plugins', $current); $allresponses = array(); //WPRC_Loader::includeSecurity(); foreach ($repos as $repo) { $plugins = $repo['plugins']; $to_send = (object) compact('plugins', 'active'); $server_url = $repo['url']; $repository_username = $repo['user']; $repository_password = $repo['pass']; $repository_salt = $repo['salt']; // action is plugins-update by default $body_array = array('action' => 'plugins_update'); // add authorization if needed if ($repository_username != '' && $repository_username != null && $repository_password != '' && $repository_password != null) { //$sendpassword=WPRC_Security::encrypt($repository_salt,$repository_password); $body_array['auth'] = array('user' => $repository_username, 'pass' => $repository_password, 'salt' => $repository_salt); } else { unset($body_array['auth']); } $body_array['plugins'] = serialize($to_send); if ($server_url === $WP_UPDATE_PLUGINS_URL) { unset($body_array['action']); } $options = array('timeout' => defined('DOING_CRON') && DOING_CRON ? 30 : 3, 'body' => $body_array, 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo('url')); // debug log $reqargs = $body_array; if (isset($reqargs['auth'])) { $reqargs['auth'] = 'AUTH info'; } $msg = sprintf("PLUGIN UPDATE API Request to %s, timeout: %d, wpversion: %s, request args: %s", $server_url, $options['timeout'], $wp_version, print_r($reqargs, true)); WPRC_Functions::log($msg, 'api', 'api.log'); unset($reqargs); // send request $raw_response = wp_remote_post($server_url, $options); // log $msg = sprintf("PLUGIN UPDATE API Request to %s, response: %s", $server_url, print_r($raw_response, true)); WPRC_Functions::log($msg, 'api', 'api.log'); if (is_wp_error($raw_response) || 200 != wp_remote_retrieve_response_code($raw_response)) { // log if (is_wp_error($raw_response)) { $msg = sprintf("PLUGIN UPDATE API Request to %s, response error: %s", $server_url, print_r($raw_response->get_error_message(), true)); WPRC_Functions::log($msg, 'api', 'api.log'); } continue; //return false; } $response = @unserialize(wp_remote_retrieve_body($raw_response)); // merge with other results if (false == $response) { // log $msg = sprintf("PLUGIN UPDATE API Request to %s, response unserialize failed: %s", $server_url, print_r(wp_remote_retrieve_body($raw_response), true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { if (is_object($response) && isset($response->error)) { $response = new WP_Error('extensions_api_failed', $response->error, wp_remote_retrieve_body($raw_response)); // log $msg = sprintf("PLUGIN UPDATE API Request to %s, action not implemented error: %s", $server_url, print_r($response, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { if (is_array($response) && isset($response['error'])) { $response = new WP_Error('extensions_api_failed', $response['error'], wp_remote_retrieve_body($raw_response)); // log $msg = sprintf("PLUGIN UPDATE API Request to %s, action not implemented error: %s", $server_url, print_r($response, true)); WPRC_Functions::log($msg, 'api', 'api.log'); } else { // add some info about repository id etc.. foreach ($response as $key => $plug) { $response[$key]->repository_id = $repo['id']; $response[$key]->repository_salt = $repo['salt']; } $allresponses = array_merge($allresponses, $response); } } } } // update the options for plugins $new_option->response = $allresponses; set_site_transient('update_plugins', $new_option); }
function testLogin($repository_id, $username, $password, $plain = false) { //$rm = $this->repo_model;//WPRC_Loader::getModel('repositories'); $repo = $this->getRepositoryByField('id', $repository_id); $body_array = array('action' => 'repository_login'); $salt = $repo->repository_authsalt; //WPRC_Loader::includeSecurity(); //$body_array['auth'] = array('user'=>$username,'pass'=>WPRC_Security::encrypt($salt,$password),'salt'=>$salt); $body_array['auth'] = array('user' => $username, 'pass' => $password, 'salt' => $salt); if ($plain) { $body_array['auth']['_plain'] = 'true'; } // log if (!$plain) { $msg = sprintf('Repository Login to %s with auth, timeout: %d, action: %s', $repo->repository_endpoint_url, 5, $body_array['action']); } else { $msg = sprintf('Repository Login to %s with auth plain, timeout: %d, action: %s', $repo->repository_endpoint_url, 5, $body_array['action']); } WPRC_Functions::log($msg, 'controller', 'controller.log'); $request = wp_remote_post($repo->repository_endpoint_url, array('timeout' => 15, 'body' => $body_array)); // log $msg = sprintf('Repository Login to %s with auth, response: %s', $repo->repository_endpoint_url, print_r($request, true)); WPRC_Functions::log($msg, 'controller', 'controller.log'); if (is_wp_error($request)) { $res = new WP_Error('repository_login_failed', __('An unexpected HTTP Error occurred during the API request.', 'installer'), $request->get_error_message()); // log $msg = sprintf('Repository Login to %s with auth, response error: %s', $repo->repository_endpoint_url, print_r($request->get_error_message())); WPRC_Functions::log($msg, 'controller', 'controller.log'); } else { $request_body = wp_remote_retrieve_body($request); if (is_serialized($request_body)) { $res = @unserialize($request_body); } } if (!isset($res) || $res == false || is_wp_error($res)) { // log $msg = sprintf('Repository Login to %s with auth, response unserialize error: %s', $repo->repository_endpoint_url, print_r(wp_remote_retrieve_body($request))); WPRC_Functions::log($msg, 'controller', 'controller.log'); return false; } if (isset($res->error) && !isset($res->success)) { $response = array('error' => 1, 'message' => $res->error); } else { $response = array('error' => 0, 'message' => $res->success); $doupdate = false; if ($plain && isset($res->pass) && $res->pass != '') { $password = $res->pass; $doupdate = true; } if (!$plain) { $doupdate = true; } if ($doupdate) { $this->updateRepositoryAuth($repository_id, $username, $password); // clear cache $rmcache = WPRC_Loader::getModel('cached-requests'); $rmcache->cleanCache(); // clear update data delete_site_transient('update_plugins'); delete_site_transient('update_themes'); } } return $response; }