/** * * Get a url to run a job of BackWPup * * @param string $starttype Start types are 'runnow', 'runnowlink', 'cronrun', 'runext', 'restart', 'restartalt', 'test' * @param int $jobid The id of job to start else 0 * @return array|object [url] is the job url [header] for auth header or object form wp_remote_get() */ public static function get_jobrun_url($starttype, $jobid = 0) { $authentication = get_site_option('backwpup_cfg_authentication', array('method' => '', 'basic_user' => '', 'basic_password' => '', 'user_id' => 0, 'query_arg' => '')); $url = site_url('wp-cron.php'); $header = array(); $authurl = ''; $query_args = array('_nonce' => substr(wp_hash(wp_nonce_tick() . 'backwpup_job_run-' . $starttype, 'nonce'), -12, 10), 'doing_wp_cron' => sprintf('%.22F', microtime(true))); if (in_array($starttype, array('restart', 'runnow', 'cronrun', 'runext', 'test'))) { $query_args['backwpup_run'] = $starttype; } if (in_array($starttype, array('runnowlink', 'runnow', 'cronrun', 'runext')) && !empty($jobid)) { $query_args['jobid'] = $jobid; } if (!empty($authentication['basic_user']) && !empty($authentication['basic_password']) && $authentication['method'] == 'basic') { $header['Authorization'] = 'Basic ' . base64_encode($authentication['basic_user'] . ':' . BackWPup_Encryption::decrypt($authentication['basic_password'])); $authurl = urlencode($authentication['basic_user']) . ':' . urlencode(BackWPup_Encryption::decrypt($authentication['basic_password'])) . '@'; } if (!empty($authentication['query_arg']) && $authentication['method'] == 'query_arg') { $url .= '?' . $authentication['query_arg']; } if ($starttype == 'runext') { $query_args['_nonce'] = get_site_option('backwpup_cfg_jobrunauthkey'); $query_args['doing_wp_cron'] = NULL; if (!empty($authurl)) { $url = str_replace('https://', 'https://' . $authurl, $url); $url = str_replace('http://', 'http://' . $authurl, $url); } } if ($starttype == 'runnowlink' && (!defined('ALTERNATE_WP_CRON') || !ALTERNATE_WP_CRON)) { $url = wp_nonce_url(network_admin_url('admin.php'), 'backwpup_job_run-' . $starttype); $query_args['page'] = 'backwpupjobs'; $query_args['action'] = 'runnow'; $query_args['doing_wp_cron'] = NULL; unset($query_args['_nonce']); } if ($starttype == 'runnowlink' && defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) { $query_args['backwpup_run'] = 'runnowalt'; $query_args['_nonce'] = substr(wp_hash(wp_nonce_tick() . 'backwpup_job_run-runnowalt', 'nonce'), -12, 10); $query_args['doing_wp_cron'] = NULL; } if ($starttype == 'restartalt' && defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) { $query_args['backwpup_run'] = 'restart'; $query_args['_nonce'] = substr(wp_hash(wp_nonce_tick() . 'backwpup_job_run-restart', 'nonce'), -12, 10); } if (!empty($authentication['user_id']) && $authentication['method'] == 'user') { //cache cookies for auth some $cookies = get_site_transient('backwpup_cookies'); if (empty($cookies)) { $wp_admin_user = get_users(array('role' => 'administrator', 'number' => 1)); if (empty($wp_admin_user)) { $wp_admin_user = get_users(array('role' => 'backwpup_admin', 'number' => 1)); } if (!empty($wp_admin_user[0]->ID)) { $expiration = time() + 356 * DAY_IN_SECONDS; $manager = WP_Session_Tokens::get_instance($wp_admin_user[0]->ID); $token = $manager->create($expiration); $cookies[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($wp_admin_user[0]->ID, $expiration, 'logged_in', $token); } set_site_transient('backwpup_cookies', $cookies, 3600 - 30); } } else { $cookies = ''; } $cron_request = array('url' => add_query_arg($query_args, $url), 'key' => $query_args['doing_wp_cron'], 'args' => array('blocking' => FALSE, 'sslverify' => apply_filters('https_local_ssl_verify', true), 'timeout' => 0.01, 'headers' => $header, 'user-agent' => BackWpup::get_plugin_data('User-Agent'))); if (!empty($cookies)) { foreach ($cookies as $name => $value) { $cron_request['args']['cookies'][] = new WP_Http_Cookie(array('name' => $name, 'value' => $value)); } } $cron_request = apply_filters('cron_request', $cron_request); if ($starttype == 'test') { $cron_request['args']['timeout'] = 15; $cron_request['args']['blocking'] = TRUE; } if (!in_array($starttype, array('runnowlink', 'runext', 'restartalt'))) { set_transient('doing_cron', $query_args['doing_wp_cron']); return wp_remote_post($cron_request['url'], $cron_request['args']); } return $cron_request; }
/** * * Get a url to run a job of BackWPup * * @param string $starttype Start types are 'runnow', 'runnowlink', 'cronrun', 'runext', 'restart', 'test' * @param int $jobid The id of job to start else 0 * @return array|object [url] is the job url [header] for auth header or object form wp_remote_get() */ public static function get_jobrun_url($starttype, $jobid = 0) { $wp_admin_user = get_users(array('role' => 'backwpup_admin', 'number' => 1)); //get a user for cookie auth $url = site_url('wp-cron.php'); $header = array(); $authurl = ''; $query_args = array('_nonce' => substr(wp_hash(wp_nonce_tick() . 'backwpup_job_run-' . $starttype, 'nonce'), -12, 10), 'doing_wp_cron' => sprintf('%.22F', microtime(true))); if (in_array($starttype, array('restart', 'runnow', 'cronrun', 'runext', 'test'))) { $query_args['backwpup_run'] = $starttype; } if (in_array($starttype, array('runnowlink', 'runnow', 'cronrun', 'runext')) && !empty($jobid)) { $query_args['jobid'] = $jobid; } if (get_site_option('backwpup_cfg_httpauthuser') && get_site_option('backwpup_cfg_httpauthpassword')) { $header['Authorization'] = 'Basic ' . base64_encode(get_site_option('backwpup_cfg_httpauthuser') . ':' . BackWPup_Encryption::decrypt(get_site_option('backwpup_cfg_httpauthpassword'))); $authurl = get_site_option('backwpup_cfg_httpauthuser') . ':' . BackWPup_Encryption::decrypt(get_site_option('backwpup_cfg_httpauthpassword')) . '@'; } if ($starttype == 'runext') { $query_args['_nonce'] = get_site_option('backwpup_cfg_jobrunauthkey'); $query_args['doing_wp_cron'] = NULL; if (!empty($authurl)) { $url = str_replace('https://', 'https://' . $authurl, $url); $url = str_replace('http://', 'http://' . $authurl, $url); } } if ($starttype == 'runnowlink' && (!defined('ALTERNATE_WP_CRON') || !ALTERNATE_WP_CRON)) { $url = wp_nonce_url(network_admin_url('admin.php'), 'backwpup_job_run-' . $starttype); $query_args['page'] = 'backwpupjobs'; $query_args['action'] = 'runnow'; $query_args['doing_wp_cron'] = NULL; unset($query_args['_nonce']); } if ($starttype == 'runnowlink' && defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) { $query_args['backwpup_run'] = 'runnowalt'; $query_args['_nonce'] = substr(wp_hash(wp_nonce_tick() . 'backwpup_job_run-runnowalt', 'nonce'), -12, 10); $query_args['doing_wp_cron'] = NULL; } //Extra for WP-Cron control if (class_exists('WP_Cron_Control') && ($starttype == 'runext' || $starttype == 'runnow' || $starttype == 'restart')) { $wp_cron_control_settings = get_option('wpcroncontrol_settings', array()); if (empty($wp_cron_control_settings['secret_string']) && file_exists(WP_PLUGIN_DIR . '/wp-cron-control/wp-cron-control.php')) { $wp_cron_control_settings['secret_string'] = md5(realpath(WP_PLUGIN_DIR . '/wp-cron-control/wp-cron-control.php') . get_current_blog_id()); $wp_cron_control_settings['enable'] = 1; } if (isset($wp_cron_control_settings['enable']) && $wp_cron_control_settings['enable'] == 1) { if (defined('WP_CRON_CONTROL_SECRET')) { $wp_cron_control_settings['secret_string'] = WP_CRON_CONTROL_SECRET; } $query_args[$wp_cron_control_settings['secret_string']] = ''; $query_args['doing_wp_cron'] = NULL; } } $cron_request = apply_filters('cron_request', array('url' => add_query_arg($query_args, $url), 'key' => $query_args['doing_wp_cron'], 'args' => array('blocking' => FALSE, 'sslverify' => apply_filters('https_local_ssl_verify', true), 'timeout' => 0.01, 'headers' => $header, 'cookies' => array(new WP_Http_Cookie(array('name' => AUTH_COOKIE, 'value' => wp_generate_auth_cookie($wp_admin_user[0]->ID, time() + 300, 'auth'))), new WP_Http_Cookie(array('name' => LOGGED_IN_COOKIE, 'value' => wp_generate_auth_cookie($wp_admin_user[0]->ID, time() + 300, 'logged_in')))), 'user-agent' => BackWpup::get_plugin_data('User-Agent')))); if ($starttype == 'test') { $cron_request['args']['timeout'] = 15; $cron_request['args']['blocking'] = TRUE; } if (!in_array($starttype, array('runnowlink', 'runext'))) { set_transient('doing_cron', $query_args['doing_wp_cron']); return wp_remote_post($cron_request['url'], $cron_request['args']); } return $cron_request; }