| @@ -9,9 +9,9 @@ | ||
| 9 | 9 | public $siteinfo; |
| 10 | 10 | public $bvinfo; |
| 11 | 11 | public $bvapi; |
| 12 | 12 | |
| 13 | - const INFO_WING_VERSION = 2.0; | |
| 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; |
| @@ -75,9 +75,13 @@ | ||
| 75 | 75 | 'file' => $plugin_file, |
| 76 | 76 | 'title' => $plugin_data['Title'], |
| 77 | 77 | 'version' => $plugin_data['Version'], |
| 78 | 78 | 'active' => is_plugin_active($plugin_file), |
| 79 | - '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"], | |
| 80 | 84 | ); |
| 81 | 85 | $pdata = $this->addDBInfoToPlugin($pdata, $plugin_file); |
| 82 | 86 | $result["plugins"][] = $pdata; |
| 83 | 87 | } |
| @@ -90,9 +94,13 @@ | ||
| 90 | 94 | 'name' => $theme->Name, |
| 91 | 95 | 'title' => $theme->Title, |
| 92 | 96 | 'stylesheet' => $theme->get_stylesheet(), |
| 93 | 97 | 'template' => $theme->Template, |
| 94 | - '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'), | |
| 95 | 103 | ); |
| 96 | 104 | } else { |
| 97 | 105 | $pdata = array( |
| 98 | 106 | 'name' => $theme["Name"], |
| @@ -98,9 +106,11 @@ | ||
| 98 | 106 | 'name' => $theme["Name"], |
| 99 | 107 | 'title' => $theme["Title"], |
| 100 | 108 | 'stylesheet' => $theme["Stylesheet"], |
| 101 | 109 | 'template' => $theme["Template"], |
| 102 | - 'version' => $theme["Version"] | |
| 110 | + 'version' => $theme["Version"], | |
| 111 | + 'author' => $theme['Author'], | |
| 112 | + 'author_uri' => $theme['Author URI'], | |
| 103 | 113 | ); |
| 104 | 114 | } |
| 105 | 115 | return $pdata; |
| 106 | 116 | } |
| @@ -106,15 +116,14 @@ | ||
| 106 | 116 | } |
| 107 | 117 | |
| 108 | 118 | public function getThemes() { |
| 109 | 119 | $result = array(); |
| 110 | - $themes = function_exists('wp_get_themes') ? wp_get_themes() : get_themes(); | |
| 120 | + $themes = wp_get_themes(); | |
| 111 | 121 | foreach($themes as $theme) { |
| 112 | 122 | $pdata = $this->themeToArray($theme); |
| 113 | 123 | $result["themes"][] = $pdata; |
| 114 | 124 | } |
| 115 | - $theme = function_exists('wp_get_theme') ? wp_get_theme() : get_current_theme(); | |
| 116 | - $pdata = $this->themeToArray($theme); | |
| 125 | + $pdata = $this->themeToArray(wp_get_theme()); | |
| 117 | 126 | $result["currenttheme"] = $pdata; |
| 118 | 127 | return $result; |
| 119 | 128 | } |
| 120 | 129 | |
| @@ -119,14 +128,14 @@ | ||
| 119 | 128 | } |
| 120 | 129 | |
| 121 | 130 | public function getSystemInfo() { |
| 122 | 131 | $sys_info = array( |
| 123 | - 'host' => $_SERVER['HTTP_HOST'], | |
| 132 | + 'host' => WPRHelper::getRawParam('SERVER', 'HTTP_HOST'), | |
| 124 | 133 | 'phpversion' => phpversion(), |
| 125 | 134 | 'AF_INET6' => defined('AF_INET6') |
| 126 | 135 | ); |
| 127 | 136 | if (array_key_exists('SERVER_ADDR', $_SERVER)) { |
| 128 | - $sys_info['serverip'] = $_SERVER['SERVER_ADDR']; | |
| 137 | + $sys_info['serverip'] = WPRHelper::getRawParam('SERVER', 'SERVER_ADDR'); | |
| 129 | 138 | } |
| 130 | 139 | if (function_exists('get_current_user')) { |
| 131 | 140 | $sys_info['user'] = get_current_user(); |
| 132 | 141 | } |
| @@ -167,8 +176,10 @@ | ||
| 167 | 176 | 'uploaddir' => wp_upload_dir(), |
| 168 | 177 | 'contentdir' => defined('WP_CONTENT_DIR') ? WP_CONTENT_DIR : null, |
| 169 | 178 | 'contenturl' => defined('WP_CONTENT_URL') ? WP_CONTENT_URL : null, |
| 170 | 179 | 'plugindir' => defined('WP_PLUGIN_DIR') ? WP_PLUGIN_DIR : null, |
| 180 | + 'themedir' => get_stylesheet_directory(), | |
| 181 | + 'templatedir' => get_template_directory(), | |
| 171 | 182 | 'dbcharset' => defined('DB_CHARSET') ? DB_CHARSET : null, |
| 172 | 183 | 'disallow_file_edit' => defined('DISALLOW_FILE_EDIT'), |
| 173 | 184 | 'disallow_file_mods' => defined('DISALLOW_FILE_MODS'), |
| 174 | 185 | 'custom_users' => defined('CUSTOM_USER_TABLE') ? CUSTOM_USER_TABLE : null, |
| @@ -174,9 +185,11 @@ | ||
| 174 | 185 | 'custom_users' => defined('CUSTOM_USER_TABLE') ? CUSTOM_USER_TABLE : null, |
| 175 | 186 | 'custom_usermeta' => defined('CUSTOM_USERMETA_TABLE') ? CUSTOM_USERMETA_TABLE : null, |
| 176 | 187 | 'locale' => get_locale(), |
| 177 | 188 | 'wp_local_string' => $wp_local_package, |
| 178 | - 'charset_collate' => $db->getCharsetCollate() | |
| 189 | + 'charset_collate' => $db->getCharsetCollate(), | |
| 190 | + 'allowed_paths' => ini_get('open_basedir'), | |
| 191 | + 'path_seprator' => PATH_SEPARATOR | |
| 179 | 192 | ); |
| 180 | 193 | return $wp_info; |
| 181 | 194 | } |
| 182 | 195 | |
| @@ -215,8 +228,14 @@ | ||
| 215 | 228 | } |
| 216 | 229 | if (function_exists('openssl_public_decrypt')) { |
| 217 | 230 | $info['openssl_public_decrypt'] = "1"; |
| 218 | 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 | + } | |
| 219 | 238 | $info['sha1'] = "1"; |
| 220 | 239 | $info['apissl'] = "1"; |
| 221 | 240 | if (function_exists('base64_encode')) { |
| 222 | 241 | $info['b64encode'] = true; |
| @@ -263,9 +282,16 @@ | ||
| 263 | 282 | } |
| 264 | 283 | |
| 265 | 284 | public function getHostInfo() { |
| 266 | 285 | $host_info = $_SERVER; |
| 267 | - $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 | + | |
| 268 | 294 | if (array_key_exists('IS_PRESSABLE', get_defined_constants())) { |
| 269 | 295 | $host_info['IS_PRESSABLE'] = true; |
| 270 | 296 | } |
| 271 | 297 | |
| @@ -276,14 +302,18 @@ | ||
| 276 | 302 | if (defined('WPE_APIKEY')) { |
| 277 | 303 | $host_info['WPE_APIKEY'] = WPE_APIKEY; |
| 278 | 304 | } |
| 279 | 305 | |
| 306 | + if (defined('IS_ATOMIC')) { | |
| 307 | + $host_info['IS_ATOMIC'] = IS_ATOMIC; | |
| 308 | + } | |
| 309 | + | |
| 280 | 310 | return $host_info; |
| 281 | 311 | } |
| 282 | 312 | |
| 283 | 313 | public function serverConfig() { |
| 284 | 314 | return array( |
| 285 | - 'software' => $_SERVER['SERVER_SOFTWARE'], | |
| 315 | + 'software' => WPRHelper::getRawParam('SERVER', 'SERVER_SOFTWARE'), | |
| 286 | 316 | 'sapi' => (function_exists('php_sapi_name')) ? php_sapi_name() : false, |
| 287 | 317 | 'has_apache_get_modules' => function_exists('apache_get_modules'), |
| 288 | 318 | 'posix_getuid' => (function_exists('posix_getuid')) ? posix_getuid() : null, |
| 289 | 319 | 'uid' => (function_exists('getmyuid')) ? getmyuid() : null, |
| @@ -476,8 +506,31 @@ | ||
| 476 | 506 | |
| 477 | 507 | return $result; |
| 478 | 508 | } |
| 479 | 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 | + | |
| 480 | 533 | public function process($request) { |
| 481 | 534 | $db = $this->db; |
| 482 | 535 | $params = $request->params; |
| 483 | 536 | switch ($request->method) { |
| @@ -533,16 +586,22 @@ | ||
| 533 | 586 | break; |
| 534 | 587 | case "gthost": |
| 535 | 588 | $resp = array('host_info' => $this->getHostInfo()); |
| 536 | 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; | |
| 537 | 602 | case "gtplinfo": |
| 538 | - $args = array( | |
| 539 | - 'slug' => wp_unslash($params['slug']) | |
| 540 | - ); | |
| 541 | - $action = $params['action']; | |
| 542 | - $args = (object) $args; | |
| 543 | - $args = apply_filters('plugins_api_args', $args, $action); | |
| 544 | - $data = apply_filters('plugins_api', false, $action, $args); | |
| 603 | + $data = $this->fetchPluginApiData($params['slug'], $params['action']); | |
| 545 | 604 | $resp = array("plugins_info" => $data); |
| 546 | 605 | break; |
| 547 | 606 | case "gtpostactinfo": |
| 548 | 607 | $resp = $this->getPostActivateInfo($params); |