{"id":280545,"date":"2026-03-05T10:52:49","date_gmt":"2026-03-05T10:52:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/udista-maintenance-worker\/"},"modified":"2026-03-23T09:26:13","modified_gmt":"2026-03-23T09:26:13","slug":"lock-my-site","status":"publish","type":"plugin","link":"https:\/\/tah.wordpress.org\/plugins\/lock-my-site\/","author":1459245,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.5.9","stable_tag":"1.5.9","tested":"6.9.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Lock My Site","header_author":"Juanma Evaristo","header_description":"Lightweight worker plugin for remote WordPress maintenance and management via secure REST API.","assets_banners_color":"326be0","last_updated":"2026-03-23 09:26:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/udista.com","rating":5,"author_block_rating":0,"active_installs":10,"downloads":229,"num_ratings":4,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.5":{"tag":"1.5.5","author":"juaevpa","date":"2026-03-05 12:58:36"},"1.5.9":{"tag":"1.5.9","author":"juaevpa","date":"2026-03-23 09:26:13"}},"upgrade_notice":{"1.5.6":"<p>Fix bulk plugin update reliability. Prevents transient cache issues during batch updates.<\/p>","1.5.5":"<p>WordPress.org approved release. Final compliance fixes.<\/p>","1.5.4":"<p>WordPress.org review fixes: proper path functions, sanitization, remote management documentation.<\/p>","1.5.3":"<p>Code quality improvements for WordPress.org compliance. No breaking changes.<\/p>","1.0.0":"<p>Initial release of Lock My Site.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":4},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3475648,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3475648,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3475648,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3475648,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.5","1.5.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3475648,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3475648,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3475648,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3475657,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3475657,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3475657,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3475657,"resolution":"7","location":"assets","locale":""}},"screenshots":{"1":"Plugin settings page with API key and security configuration","2":"Activity log showing recent API calls","3":"IP whitelist and HMAC signature configuration","4":"Security audit report - cover page with risk score and findings summary","5":"Monthly maintenance report - cover page with KPIs (updates, uptime, security, performance)","6":"Security audit detail - executive summary with categorized findings","7":"Maintenance report detail - site configuration and technical parameters"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1556,732,2156,14512,2550],"plugin_category":[52],"plugin_contributors":[257170],"plugin_business_model":[],"class_list":["post-280545","plugin","type-plugin","status-publish","hentry","plugin_tags-api","plugin_tags-maintenance","plugin_tags-management","plugin_tags-remote","plugin_tags-updates","plugin_category-performance","plugin_contributors-juaevpa","plugin_committers-juaevpa"],"banners":{"banner":"https:\/\/ps.w.org\/lock-my-site\/assets\/banner-772x250.png?rev=3475648","banner_2x":"https:\/\/ps.w.org\/lock-my-site\/assets\/banner-1544x500.png?rev=3475648","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/lock-my-site\/assets\/icon-128x128.png?rev=3475648","icon_2x":"https:\/\/ps.w.org\/lock-my-site\/assets\/icon-256x256.png?rev=3475648","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-1.png?rev=3475648","caption":"Plugin settings page with API key and security configuration"},{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-2.png?rev=3475648","caption":"Activity log showing recent API calls"},{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-3.png?rev=3475648","caption":"IP whitelist and HMAC signature configuration"},{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-4.png?rev=3475657","caption":"Security audit report - cover page with risk score and findings summary"},{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-5.png?rev=3475657","caption":"Monthly maintenance report - cover page with KPIs (updates, uptime, security, performance)"},{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-6.png?rev=3475657","caption":"Security audit detail - executive summary with categorized findings"},{"src":"https:\/\/ps.w.org\/lock-my-site\/assets\/screenshot-7.png?rev=3475657","caption":"Maintenance report detail - site configuration and technical parameters"}],"raw_content":"<!--section=description-->\n<p>Lock My Site is a lightweight plugin that enables remote management of your WordPress site through a secure REST API. Perfect for agencies, freelancers, and anyone managing multiple WordPress sites.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Complete Health Check<\/strong> - Monitor site status, PHP version, memory usage, and more<\/li>\n<li><strong>Update Management<\/strong> - Manage plugins, themes, core, and translations updates remotely<\/li>\n<li><strong>Plugin Management<\/strong> - Activate, deactivate, and get detailed plugin information<\/li>\n<li><strong>Theme Management<\/strong> - Switch themes and manage theme updates<\/li>\n<li><strong>Database Optimization<\/strong> - Clean up and optimize database tables<\/li>\n<li><strong>Security Audit<\/strong> - Basic security checks and recommendations<\/li>\n<li><strong>Error Logs<\/strong> - Access PHP error logs remotely<\/li>\n<li><strong>User Management<\/strong> - List users and roles<\/li>\n<\/ul>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>API Key authentication<\/li>\n<li>Optional HMAC signature verification<\/li>\n<li>Optional IP whitelist<\/li>\n<li>Rate limiting protection<\/li>\n<li>Automatic lockout after failed attempts<\/li>\n<li>API key expiration (90 days)<\/li>\n<li>Email alerts for suspicious activity<\/li>\n<li>Activity logging<\/li>\n<\/ul>\n\n<h4>Available Endpoints<\/h4>\n\n<p><strong>Status &amp; Health<\/strong>\n* <code>GET \/ping<\/code> - Connection check\n* <code>GET \/health<\/code> - Complete site health status<\/p>\n\n<p><strong>Updates<\/strong>\n* <code>GET \/updates<\/code> - Available updates (plugins, themes, core, translations)\n* <code>POST \/update\/plugin<\/code> - Update a specific plugin\n* <code>POST \/update\/theme<\/code> - Update a specific theme\n* <code>POST \/update\/core<\/code> - Update WordPress core\n* <code>POST \/update\/all-plugins<\/code> - Update all plugins\n* <code>POST \/update\/all-themes<\/code> - Update all themes\n* <code>POST \/update\/translations<\/code> - Update all translations<\/p>\n\n<p><strong>Plugins<\/strong>\n* <code>GET \/plugins<\/code> - List all plugins\n* <code>GET \/plugins\/{plugin}<\/code> - Get plugin details\n* <code>POST \/plugins\/activate<\/code> - Activate a plugin\n* <code>POST \/plugins\/deactivate<\/code> - Deactivate a plugin\n* <code>GET \/plugins\/ignored<\/code> - List ignored plugins\n* <code>POST \/plugins\/ignore<\/code> - Ignore a plugin from bulk updates\n* <code>POST \/plugins\/unignore<\/code> - Remove plugin from ignored list<\/p>\n\n<p><strong>Themes<\/strong>\n* <code>GET \/themes<\/code> - List all themes\n* <code>POST \/themes\/activate<\/code> - Activate a theme<\/p>\n\n<p><strong>Database<\/strong>\n* <code>GET \/database\/stats<\/code> - Database statistics\n* <code>POST \/database\/cleanup<\/code> - Clean database (revisions, drafts, spam, etc.)\n* <code>POST \/database\/optimize<\/code> - Optimize database tables<\/p>\n\n<p><strong>Logs<\/strong>\n* <code>GET \/logs\/php<\/code> - PHP error log\n* <code>GET \/logs\/activity<\/code> - Plugin activity log<\/p>\n\n<p><strong>Users<\/strong>\n* <code>GET \/users<\/code> - List WordPress users<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following external services:<\/p>\n\n<h4>1. WordPress.org Checksums API<\/h4>\n\n<ul>\n<li><strong>Service URL:<\/strong> <code>https:\/\/api.wordpress.org\/core\/checksums\/1.0\/<\/code><\/li>\n<li><strong>What it does:<\/strong> Retrieves the official MD5 checksums for all WordPress core files so the plugin can verify that no core file has been modified or tampered with.<\/li>\n<li><strong>When data is sent:<\/strong> Only when a core integrity check is explicitly triggered by the site administrator via the authenticated REST API endpoint <code>\/security\/core-integrity<\/code>.<\/li>\n<li><strong>What data is sent:<\/strong> The installed WordPress version number and the site locale (e.g. <code>en_US<\/code>). No personal data is sent.<\/li>\n<li><strong>Service provider:<\/strong> WordPress.org (Automattic Inc.)<\/li>\n<li><strong>Terms of use:<\/strong> <a href=\"https:\/\/wordpress.org\/about\/domains\/\">WordPress.org Terms of Service<\/a><\/li>\n<li><strong>Privacy policy:<\/strong> <a href=\"https:\/\/wordpress.org\/about\/privacy\/\">WordPress.org Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>2. WordPress.org Translations API<\/h4>\n\n<ul>\n<li><strong>Service URL:<\/strong> <code>https:\/\/api.wordpress.org\/translations\/plugins\/1.0\/<\/code>, <code>https:\/\/api.wordpress.org\/translations\/themes\/1.0\/<\/code>, and <code>https:\/\/api.wordpress.org\/translations\/core\/1.0\/<\/code><\/li>\n<li><strong>What it does:<\/strong> Returns the latest available translation package versions for plugins, themes, and WordPress core in the site's locale, so the plugin can determine which translations need updating.<\/li>\n<li><strong>When data is sent:<\/strong> When translation updates are checked, either on demand or as part of a full updates check, explicitly triggered by the site administrator via the authenticated REST API.<\/li>\n<li><strong>What data is sent:<\/strong> Plugin\/theme slugs, their version numbers, and the site locale. No personal data is sent.<\/li>\n<li><strong>Service provider:<\/strong> WordPress.org (Automattic Inc.)<\/li>\n<li><strong>Terms of use:<\/strong> <a href=\"https:\/\/wordpress.org\/about\/domains\/\">WordPress.org Terms of Service<\/a><\/li>\n<li><strong>Privacy policy:<\/strong> <a href=\"https:\/\/wordpress.org\/about\/privacy\/\">WordPress.org Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p>These are the only two external services this plugin connects to. No other HTTP requests are made to any third-party service.<\/p>\n\n<h4>Important note about domain name references in the source code<\/h4>\n\n<p>The plugin's security scanner contains a hardcoded list of well-known, legitimate third-party domain names used as a <strong>local string-matching whitelist only<\/strong>. This list includes domains such as:<\/p>\n\n<ul>\n<li>google-analytics.com, googletagmanager.com, googleapis.com<\/li>\n<li>maps.google.com, maps.googleapis.com<\/li>\n<li>tawk.to, crisp.chat, intercom.io, zendesk.com<\/li>\n<li>cdn.jsdelivr.net, cdnjs.cloudflare.com, code.jquery.com, unpkg.com<\/li>\n<li>recaptcha.net, gstatic.com<\/li>\n<\/ul>\n\n<p><strong>These domains are NOT contacted, called, or connected to in any way by this plugin.<\/strong> No HTTP requests, API calls, or any form of network communication is made to any of these domains.<\/p>\n\n<p>The domain names appear as plain string constants in a PHP array. When the security scanner analyzes post and page content for potentially malicious script injections (e.g. <code>&lt;script src=\"...\"&gt;<\/code> tags), it compares the <code>src<\/code> attribute against this whitelist using local string matching. Scripts referencing whitelisted domains are recognized as legitimate and excluded from the scan results, reducing false positives. The entire comparison happens locally in PHP memory -- no data leaves the server.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>lock-my-site<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to Tools &gt; Lock My Site to get your API key<\/li>\n<li>Use the API key in your management dashboard<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20plugin%20secure%3F\"><h3>Is this plugin secure?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses API key authentication, supports HMAC signature verification, IP whitelisting, implements rate limiting, auto-lockout after failed attempts, and logs all API access. The API key is generated automatically and can be regenerated at any time.<\/p><\/dd>\n<dt id=\"how%20do%20i%20authenticate%3F\"><h3>How do I authenticate?<\/h3><\/dt>\n<dd><p>Include the <code>X-API-Key<\/code> header with your API key in each request.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20access%20by%20ip%3F\"><h3>Can I restrict access by IP?<\/h3><\/dt>\n<dd><p>Yes, you can configure an IP whitelist in the plugin settings page (Tools &gt; Lock My Site).<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20management%20dashboards%3F\"><h3>Does it work with management dashboards?<\/h3><\/dt>\n<dd><p>Yes, this plugin is designed to work with any management dashboard that implements the API. It's compatible with custom dashboards and management tools.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20someone%20gets%20my%20api%20key%3F\"><h3>What happens if someone gets my API key?<\/h3><\/dt>\n<dd><p>You can regenerate your API key at any time from the plugin settings. The old key will immediately stop working. You can also enable email alerts to be notified of suspicious access attempts.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multisite%3F\"><h3>Does it support multisite?<\/h3><\/dt>\n<dd><p>The plugin works on individual sites. For multisite networks, install it on each site you want to manage.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.9<\/h4>\n\n<ul>\n<li>Fix: Safe plugin reactivation after updates (catch activation failures to prevent site crash)<\/li>\n<\/ul>\n\n<h4>1.5.8<\/h4>\n\n<ul>\n<li>Fix: Obfuscate malware scanner signatures to prevent hosting false positives<\/li>\n<li>Fix: Delete stale transients before force refresh to prevent phantom updates<\/li>\n<li>Fix: Verify actual plugin version after update (detect silent successes)<\/li>\n<li>Fix: Object cache flush on force refresh for aggressive hosting caches<\/li>\n<\/ul>\n\n<h4>1.5.6<\/h4>\n\n<ul>\n<li>Fix: Bulk plugin updates - single transient refresh per site instead of per plugin<\/li>\n<li>Fix: Transient re-injection between updates to prevent data loss<\/li>\n<li>Fix: wp.org API fallback when transient is stale<\/li>\n<\/ul>\n\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>WordPress.org approved release<\/li>\n<li>Final compliance fixes for plugin review<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Replaced WP_CONTENT_DIR paths with wp_upload_dir(), get_theme_root(), WP_PLUGIN_DIR<\/li>\n<li>Replaced ABSPATH for error logs with get_home_path()<\/li>\n<li>Added prominent comments for remote management features (activate_plugin, switch_theme)<\/li>\n<li>Fixed JSON input sanitization with map_deep() after json_decode()<\/li>\n<li>Removed Polylang Pro integration code<\/li>\n<li>Improved external services documentation in readme.txt<\/li>\n<\/ul>\n\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Updated all internal prefixes to <code>lockmysi_<\/code> for WordPress.org compliance<\/li>\n<li>Replaced inline scripts with properly enqueued JavaScript<\/li>\n<li>Added wp_localize_script for passing data to admin scripts<\/li>\n<li>Improved input sanitization across all files<\/li>\n<li>Documented all external service connections in readme.txt<\/li>\n<li>Added function_exists checks for WordPress admin includes<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Complete health check system<\/li>\n<li>Plugin and theme management<\/li>\n<li>Update management (plugins, themes, core, translations)<\/li>\n<li>Database optimization and cleanup<\/li>\n<li>PHP error log access<\/li>\n<li>Activity logging<\/li>\n<li>API key authentication with HMAC support<\/li>\n<li>IP whitelist support<\/li>\n<li>Rate limiting<\/li>\n<\/ul>","raw_excerpt":"Lightweight worker plugin for remote WordPress maintenance and management via secure REST API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/280545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=280545"}],"author":[{"embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/juaevpa"}],"wp:attachment":[{"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=280545"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=280545"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=280545"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=280545"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=280545"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tah.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=280545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}