| @@ -9,9 +9,9 @@ | ||
| 9 | 9 | public $siteinfo; |
| 10 | 10 | public $bvinfo; |
| 11 | 11 | public $bvapi; |
| 12 | 12 | |
| 13 | - const INFO_WING_VERSION = 1.9; | |
| 13 | + const INFO_WING_VERSION = 2.7; | |
| 14 | 14 | |
| 15 | 15 | public function __construct($callback_handler) { |
| 16 | 16 | $this->db = $callback_handler->db; |
| 17 | 17 | $this->siteinfo = $callback_handler->siteinfo; |
| @@ -50,8 +50,16 @@ | ||
| 50 | 50 | case "woocommerce/woocommerce.php": |
| 51 | 51 | $pdata['current_db_version'] = $this->settings->getOption('woocommerce_db_version'); |
| 52 | 52 | $pdata['latest_db_version'] = $this->bvinfo->getLatestWooCommerceDBVersion(); |
| 53 | 53 | break; |
| 54 | + case "elementor/elementor.php": | |
| 55 | + $pdata['current_db_version'] = $this->settings->getOption('elementor_version'); | |
| 56 | + $pdata['latest_db_version'] = $this->bvinfo->getLatestElementorDBVersion($plugin_file); | |
| 57 | + break; | |
| 58 | + case "elementor-pro/elementor-pro.php": | |
| 59 | + $pdata['current_db_version'] = $this->settings->getOption('elementor_pro_version'); | |
| 60 | + $pdata['latest_db_version'] = $this->bvinfo->getLatestElementorDBVersion($plugin_file); | |
| 61 | + break; | |
| 54 | 62 | } |
| 55 | 63 | |
| 56 | 64 | return $pdata; |
| 57 | 65 | } |
| @@ -67,9 +75,13 @@ | ||
| 67 | 75 | 'file' => $plugin_file, |
| 68 | 76 | 'title' => $plugin_data['Title'], |
| 69 | 77 | 'version' => $plugin_data['Version'], |
| 70 | 78 | 'active' => is_plugin_active($plugin_file), |
| 71 | - 'network' => $plugin_data['Network'] | |
| 79 | + 'network' => $plugin_data['Network'], | |
| 80 | + "plugin_uri" => $plugin_data["PluginURI"], | |
| 81 | + "update_uri" => $plugin_data["UpdateURI"], | |
| 82 | + "author_uri" => $plugin_data["AuthorURI"], | |
| 83 | + "author" => $plugin_data["AuthorName"], | |
| 72 | 84 | ); |
| 73 | 85 | $pdata = $this->addDBInfoToPlugin($pdata, $plugin_file); |
| 74 | 86 | $result["plugins"][] = $pdata; |
| 75 | 87 | } |
| @@ -82,9 +94,13 @@ | ||
| 82 | 94 | 'name' => $theme->Name, |
| 83 | 95 | 'title' => $theme->Title, |
| 84 | 96 | 'stylesheet' => $theme->get_stylesheet(), |
| 85 | 97 | 'template' => $theme->Template, |
| 86 | - 'version' => $theme->Version | |
| 98 | + 'version' => $theme->Version, | |
| 99 | + 'theme_uri' => $theme->get('ThemeURI'), | |
| 100 | + 'author' => $theme->get('Author'), | |
| 101 | + 'author_uri' => $theme->get('AuthorURI'), | |
| 102 | + 'update_uri' => $theme->get('UpdateURI'), | |
| 87 | 103 | ); |
| 88 | 104 | } else { |
| 89 | 105 | $pdata = array( |
| 90 | 106 | 'name' => $theme["Name"], |
| @@ -90,9 +106,11 @@ | ||
| 90 | 106 | 'name' => $theme["Name"], |
| 91 | 107 | 'title' => $theme["Title"], |
| 92 | 108 | 'stylesheet' => $theme["Stylesheet"], |
| 93 | 109 | 'template' => $theme["Template"], |
| 94 | - 'version' => $theme["Version"] | |
| 110 | + 'version' => $theme["Version"], | |
| 111 | + 'author' => $theme['Author'], | |
| 112 | + 'author_uri' => $theme['Author URI'], | |
| 95 | 113 | ); |
| 96 | 114 | } |
| 97 | 115 | return $pdata; |
| 98 | 116 | } |
| @@ -98,15 +116,14 @@ | ||
| 98 | 116 | } |
| 99 | 117 | |
| 100 | 118 | public function getThemes() { |
| 101 | 119 | $result = array(); |
| 102 | - $themes = function_exists('wp_get_themes') ? wp_get_themes() : get_themes(); | |
| 120 | + $themes = wp_get_themes(); | |
| 103 | 121 | foreach($themes as $theme) { |
| 104 | 122 | $pdata = $this->themeToArray($theme); |
| 105 | 123 | $result["themes"][] = $pdata; |
| 106 | 124 | } |
| 107 | - $theme = function_exists('wp_get_theme') ? wp_get_theme() : get_current_theme(); | |
| 108 | - $pdata = $this->themeToArray($theme); | |
| 125 | + $pdata = $this->themeToArray(wp_get_theme()); | |
| 109 | 126 | $result["currenttheme"] = $pdata; |
| 110 | 127 | return $result; |
| 111 | 128 | } |
| 112 | 129 | |
| @@ -111,14 +128,14 @@ | ||
| 111 | 128 | } |
| 112 | 129 | |
| 113 | 130 | public function getSystemInfo() { |
| 114 | 131 | $sys_info = array( |
| 115 | - 'host' => $_SERVER['HTTP_HOST'], | |
| 132 | + 'host' => WPRHelper::getRawParam('SERVER', 'HTTP_HOST'), | |
| 116 | 133 | 'phpversion' => phpversion(), |
| 117 | 134 | 'AF_INET6' => defined('AF_INET6') |
| 118 | 135 | ); |
| 119 | 136 | if (array_key_exists('SERVER_ADDR', $_SERVER)) { |
| 120 | - $sys_info['serverip'] = $_SERVER['SERVER_ADDR']; | |
| 137 | + $sys_info['serverip'] = WPRHelper::getRawParam('SERVER', 'SERVER_ADDR'); | |
| 121 | 138 | } |
| 122 | 139 | if (function_exists('get_current_user')) { |
| 123 | 140 | $sys_info['user'] = get_current_user(); |
| 124 | 141 | } |
| @@ -159,8 +176,10 @@ | ||
| 159 | 176 | 'uploaddir' => wp_upload_dir(), |
| 160 | 177 | 'contentdir' => defined('WP_CONTENT_DIR') ? WP_CONTENT_DIR : null, |
| 161 | 178 | 'contenturl' => defined('WP_CONTENT_URL') ? WP_CONTENT_URL : null, |
| 162 | 179 | 'plugindir' => defined('WP_PLUGIN_DIR') ? WP_PLUGIN_DIR : null, |
| 180 | + 'themedir' => get_stylesheet_directory(), | |
| 181 | + 'templatedir' => get_template_directory(), | |
| 163 | 182 | 'dbcharset' => defined('DB_CHARSET') ? DB_CHARSET : null, |
| 164 | 183 | 'disallow_file_edit' => defined('DISALLOW_FILE_EDIT'), |
| 165 | 184 | 'disallow_file_mods' => defined('DISALLOW_FILE_MODS'), |
| 166 | 185 | 'custom_users' => defined('CUSTOM_USER_TABLE') ? CUSTOM_USER_TABLE : null, |
| @@ -166,9 +185,11 @@ | ||
| 166 | 185 | 'custom_users' => defined('CUSTOM_USER_TABLE') ? CUSTOM_USER_TABLE : null, |
| 167 | 186 | 'custom_usermeta' => defined('CUSTOM_USERMETA_TABLE') ? CUSTOM_USERMETA_TABLE : null, |
| 168 | 187 | 'locale' => get_locale(), |
| 169 | 188 | 'wp_local_string' => $wp_local_package, |
| 170 | - 'charset_collate' => $db->getCharsetCollate() | |
| 189 | + 'charset_collate' => $db->getCharsetCollate(), | |
| 190 | + 'allowed_paths' => ini_get('open_basedir'), | |
| 191 | + 'path_seprator' => PATH_SEPARATOR | |
| 171 | 192 | ); |
| 172 | 193 | return $wp_info; |
| 173 | 194 | } |
| 174 | 195 | |
| @@ -207,8 +228,14 @@ | ||
| 207 | 228 | } |
| 208 | 229 | if (function_exists('openssl_public_decrypt')) { |
| 209 | 230 | $info['openssl_public_decrypt'] = "1"; |
| 210 | 231 | } |
| 232 | + if (function_exists('openssl_encrypt')) { | |
| 233 | + $info['openssl_encrypt'] = "1"; | |
| 234 | + } | |
| 235 | + if (function_exists('openssl_decrypt')) { | |
| 236 | + $info['openssl_decrypt'] = "1"; | |
| 237 | + } | |
| 211 | 238 | $info['sha1'] = "1"; |
| 212 | 239 | $info['apissl'] = "1"; |
| 213 | 240 | if (function_exists('base64_encode')) { |
| 214 | 241 | $info['b64encode'] = true; |
| @@ -255,9 +282,16 @@ | ||
| 255 | 282 | } |
| 256 | 283 | |
| 257 | 284 | public function getHostInfo() { |
| 258 | 285 | $host_info = $_SERVER; |
| 259 | - $host_info['PHP_SERVER_NAME'] = php_uname('\n'); | |
| 286 | + if (function_exists('php_uname')) { | |
| 287 | + $host_info['PHP_SERVER_NAME'] = php_uname(); | |
| 288 | + } | |
| 289 | + | |
| 290 | + if (isset($_SERVER['SERVER_ADDR']) && function_exists('gethostbyaddr')) { | |
| 291 | + $host_info['HOST_FROM_IP'] = gethostbyaddr(WPRHelper::getRawParam('SERVER', 'SERVER_ADDR')); | |
| 292 | + } | |
| 293 | + | |
| 260 | 294 | if (array_key_exists('IS_PRESSABLE', get_defined_constants())) { |
| 261 | 295 | $host_info['IS_PRESSABLE'] = true; |
| 262 | 296 | } |
| 263 | 297 | |
| @@ -268,14 +302,18 @@ | ||
| 268 | 302 | if (defined('WPE_APIKEY')) { |
| 269 | 303 | $host_info['WPE_APIKEY'] = WPE_APIKEY; |
| 270 | 304 | } |
| 271 | 305 | |
| 306 | + if (defined('IS_ATOMIC')) { | |
| 307 | + $host_info['IS_ATOMIC'] = IS_ATOMIC; | |
| 308 | + } | |
| 309 | + | |
| 272 | 310 | return $host_info; |
| 273 | 311 | } |
| 274 | 312 | |
| 275 | 313 | public function serverConfig() { |
| 276 | 314 | return array( |
| 277 | - 'software' => $_SERVER['SERVER_SOFTWARE'], | |
| 315 | + 'software' => WPRHelper::getRawParam('SERVER', 'SERVER_SOFTWARE'), | |
| 278 | 316 | 'sapi' => (function_exists('php_sapi_name')) ? php_sapi_name() : false, |
| 279 | 317 | 'has_apache_get_modules' => function_exists('apache_get_modules'), |
| 280 | 318 | 'posix_getuid' => (function_exists('posix_getuid')) ? posix_getuid() : null, |
| 281 | 319 | 'uid' => (function_exists('getmyuid')) ? getmyuid() : null, |
| @@ -468,8 +506,31 @@ | ||
| 468 | 506 | |
| 469 | 507 | return $result; |
| 470 | 508 | } |
| 471 | 509 | |
| 510 | + function getPluginFileData($plugin_file) { | |
| 511 | + $result = array(); | |
| 512 | + | |
| 513 | + if (!function_exists('get_plugin_data')) { | |
| 514 | + require_once ABSPATH . 'wp-admin/includes/plugin.php'; | |
| 515 | + } | |
| 516 | + $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file); | |
| 517 | + if ($plugin_data && isset($plugin_data['Version'])) { | |
| 518 | + $result['version'] = $plugin_data['Version']; | |
| 519 | + } | |
| 520 | + | |
| 521 | + return $result; | |
| 522 | + } | |
| 523 | + | |
| 524 | + function fetchPluginApiData($slug, $action) { | |
| 525 | + $args = array('slug' => wp_unslash($slug)); | |
| 526 | + $args = (object) $args; | |
| 527 | + $args = apply_filters('plugins_api_args', $args, $action); | |
| 528 | + $data = apply_filters('plugins_api', false, $action, $args); | |
| 529 | + | |
| 530 | + return $data; | |
| 531 | + } | |
| 532 | + | |
| 472 | 533 | public function process($request) { |
| 473 | 534 | $db = $this->db; |
| 474 | 535 | $params = $request->params; |
| 475 | 536 | switch ($request->method) { |
| @@ -525,16 +586,22 @@ | ||
| 525 | 586 | break; |
| 526 | 587 | case "gthost": |
| 527 | 588 | $resp = array('host_info' => $this->getHostInfo()); |
| 528 | 589 | break; |
| 590 | + case "gtplsinfo": | |
| 591 | + $resp = array("plugins_info" => array()); | |
| 592 | + $file_by_slug = $params["file_by_slug"]; | |
| 593 | + foreach ($params['slugs'] as $slug) { | |
| 594 | + $data = $this->fetchPluginApiData($slug, $params['action']); | |
| 595 | + if (is_object($data) && !property_exists($data, 'version') && isset($file_by_slug[$slug])) { | |
| 596 | + $plugin_data = $this->getPluginFileData($file_by_slug[$slug]); | |
| 597 | + $data->version = $plugin_data['version']; | |
| 598 | + } | |
| 599 | + $resp['plugins_info'][$slug] = $data; | |
| 600 | + } | |
| 601 | + break; | |
| 529 | 602 | case "gtplinfo": |
| 530 | - $args = array( | |
| 531 | - 'slug' => wp_unslash($params['slug']) | |
| 532 | - ); | |
| 533 | - $action = $params['action']; | |
| 534 | - $args = (object) $args; | |
| 535 | - $args = apply_filters('plugins_api_args', $args, $action); | |
| 536 | - $data = apply_filters('plugins_api', false, $action, $args); | |
| 603 | + $data = $this->fetchPluginApiData($params['slug'], $params['action']); | |
| 537 | 604 | $resp = array("plugins_info" => $data); |
| 538 | 605 | break; |
| 539 | 606 | case "gtpostactinfo": |
| 540 | 607 | $resp = $this->getPostActivateInfo($params); |