diff --git a/src/Extension/MokoWaaS.php b/src/Extension/MokoWaaS.php index 14396242..8d441927 100644 --- a/src/Extension/MokoWaaS.php +++ b/src/Extension/MokoWaaS.php @@ -38,7 +38,6 @@ use Joomla\CMS\Router\Route; use Joomla\CMS\Language\Language; use Joomla\CMS\Uri\Uri; use Joomla\CMS\User\UserHelper; -use Joomla\Http\HttpFactory; /** * MokoWaaS Brand System Plugin @@ -87,7 +86,6 @@ class MokoWaaS extends CMSPlugin $this->enforceMasterUser(); $this->enforceLoginSupportUrls(); $this->enforceAdminSessionTimeout(); - $this->checkLicense(); $this->enforceUploadRestrictions(); } @@ -802,22 +800,6 @@ class MokoWaaS extends CMSPlugin return true; } - /** - * Send heartbeat telemetry after the page is fully rendered. - * - * @return void - * - * @since 02.00.00 - */ - public function onAfterRender() - { - if (!$this->app->isClient('administrator')) - { - return; - } - - $this->sendHeartbeat(); - } // ------------------------------------------------------------------ // HTTPS / Session / License (called from onAfterInitialise) @@ -894,105 +876,6 @@ class MokoWaaS extends CMSPlugin $session->set('mokowaas.last_activity', $now); } - /** - * Check license status with remote WaaS dashboard. - * - * @return void - * - * @since 02.00.00 - */ - protected function checkLicense() - { - $url = $this->params->get('license_check_url', ''); - - if (empty($url)) - { - return; - } - - $interval = (int) $this->params->get('license_check_interval', 24); - $cacheFile = JPATH_CACHE . '/mokowaas_license.json'; - - // Check if interval has elapsed - if (file_exists($cacheFile)) - { - $cache = json_decode(file_get_contents($cacheFile), true); - $lastCheck = $cache['timestamp'] ?? 0; - - if ((time() - $lastCheck) < ($interval * 3600)) - { - // Use cached result - if (($cache['status'] ?? 'valid') !== 'valid') - { - $this->handleLicenseFailure(); - } - - return; - } - } - - // Time to check - try - { - $http = HttpFactory::getHttp(); - $key = $this->params->get('license_key', ''); - $checkUrl = $url . '?key=' . urlencode($key) - . '&domain=' . urlencode(Uri::root()); - - $response = $http->get($checkUrl, [], 3); - $body = json_decode($response->body, true); - $status = ($body['status'] ?? '') === 'valid' - ? 'valid' : 'invalid'; - - file_put_contents($cacheFile, json_encode([ - 'timestamp' => time(), - 'status' => $status, - ])); - - if ($status !== 'valid') - { - $this->handleLicenseFailure(); - } - } - catch (\Exception $e) - { - // Network failure — don't break the site - Log::add( - 'License check failed: ' . $e->getMessage(), - Log::WARNING, - 'mokowaas' - ); - } - } - - /** - * Handle a failed or expired license check. - * - * @return void - * - * @since 02.00.00 - */ - protected function handleLicenseFailure() - { - $action = $this->params->get('license_action', 'warn'); - - if ($action === 'lockout' && !$this->isMasterUser()) - { - $this->app->enqueueMessage( - 'Site license has expired. Contact your administrator.', - 'error' - ); - $this->app->logout(); - $this->app->redirect(Route::_('index.php', false)); - - return; - } - - $this->app->enqueueMessage( - 'Site license requires attention. Check Operations settings.', - 'warning' - ); - } /** * Override Joomla upload restrictions at runtime. @@ -1361,90 +1244,4 @@ class MokoWaaS extends CMSPlugin $doc->addStyleDeclaration($css); } - // ------------------------------------------------------------------ - // Heartbeat Telemetry (called from onAfterRender) - // ------------------------------------------------------------------ - - /** - * Send site health data to the WaaS dashboard. - * - * @return void - * - * @since 02.00.00 - */ - protected function sendHeartbeat() - { - $url = $this->params->get('heartbeat_url', ''); - - if (empty($url)) - { - return; - } - - $interval = (int) $this->params->get('heartbeat_interval', 24); - $cacheFile = JPATH_CACHE . '/mokowaas_heartbeat.txt'; - - if (file_exists($cacheFile) - && (time() - filemtime($cacheFile)) < ($interval * 3600)) - { - return; - } - - try - { - $db = Factory::getDbo(); - $data = [ - 'domain' => Uri::root(), - 'joomla_version' => JVERSION, - 'php_version' => PHP_VERSION, - 'plugin_version' => '02.00.00', - 'article_count' => $this->getTableCount('#__content'), - 'user_count' => $this->getTableCount('#__users'), - 'timestamp' => date('c'), - ]; - - $token = $this->params->get('heartbeat_token', ''); - $headers = ['Content-Type' => 'application/json']; - - if (!empty($token)) - { - $headers['Authorization'] = 'Bearer ' . $token; - } - - $http = HttpFactory::getHttp(); - $http->post($url, json_encode($data), $headers, 3); - - // Update cache timestamp - file_put_contents($cacheFile, date('c')); - } - catch (\Exception $e) - { - Log::add( - 'Heartbeat failed: ' . $e->getMessage(), - Log::WARNING, - 'mokowaas' - ); - } - } - - /** - * Get the row count of a database table. - * - * @param string $table Table name with #__ prefix - * - * @return int - * - * @since 02.00.00 - */ - protected function getTableCount($table) - { - $db = Factory::getDbo(); - $db->setQuery( - $db->getQuery(true) - ->select('COUNT(*)') - ->from($db->quoteName($table)) - ); - - return (int) $db->loadResult(); - } } diff --git a/src/language/en-GB/plg_system_mokowaas.ini b/src/language/en-GB/plg_system_mokowaas.ini index 15706292..58f0a0ff 100644 --- a/src/language/en-GB/plg_system_mokowaas.ini +++ b/src/language/en-GB/plg_system_mokowaas.ini @@ -109,20 +109,3 @@ PLG_SYSTEM_MOKOWAAS_UPLOAD_TYPES_LABEL="Allowed Upload Types" PLG_SYSTEM_MOKOWAAS_UPLOAD_TYPES_DESC="Comma-separated list of allowed file extensions for media uploads." PLG_SYSTEM_MOKOWAAS_UPLOAD_SIZE_LABEL="Max Upload Size (MB)" PLG_SYSTEM_MOKOWAAS_UPLOAD_SIZE_DESC="Maximum file upload size in megabytes." - -; ===== Operational fieldset ===== -PLG_SYSTEM_MOKOWAAS_FIELDSET_OPS_LABEL="Operations" -PLG_SYSTEM_MOKOWAAS_FIELDSET_OPS_DESC="Heartbeat telemetry, license checking, and WaaS platform integration." - -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_URL_LABEL="Heartbeat URL" -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_URL_DESC="URL to POST site health data to your WaaS dashboard. Leave empty to disable." -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_INTERVAL_LABEL="Heartbeat Interval (Hours)" -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_TOKEN_LABEL="Heartbeat Token" -PLG_SYSTEM_MOKOWAAS_LICENSE_URL_LABEL="License Check URL" -PLG_SYSTEM_MOKOWAAS_LICENSE_URL_DESC="URL to verify site license/subscription status. Leave empty to disable." -PLG_SYSTEM_MOKOWAAS_LICENSE_KEY_LABEL="License Key" -PLG_SYSTEM_MOKOWAAS_LICENSE_INTERVAL_LABEL="License Check Interval (Hours)" -PLG_SYSTEM_MOKOWAAS_LICENSE_ACTION_LABEL="License Expiry Action" -PLG_SYSTEM_MOKOWAAS_LICENSE_ACTION_DESC="What to do when the license check fails or expires." -PLG_SYSTEM_MOKOWAAS_LICENSE_WARN="Show Warning" -PLG_SYSTEM_MOKOWAAS_LICENSE_LOCKOUT="Lock Out Non-Master Users" diff --git a/src/language/en-US/plg_system_mokowaas.ini b/src/language/en-US/plg_system_mokowaas.ini index 15706292..58f0a0ff 100644 --- a/src/language/en-US/plg_system_mokowaas.ini +++ b/src/language/en-US/plg_system_mokowaas.ini @@ -109,20 +109,3 @@ PLG_SYSTEM_MOKOWAAS_UPLOAD_TYPES_LABEL="Allowed Upload Types" PLG_SYSTEM_MOKOWAAS_UPLOAD_TYPES_DESC="Comma-separated list of allowed file extensions for media uploads." PLG_SYSTEM_MOKOWAAS_UPLOAD_SIZE_LABEL="Max Upload Size (MB)" PLG_SYSTEM_MOKOWAAS_UPLOAD_SIZE_DESC="Maximum file upload size in megabytes." - -; ===== Operational fieldset ===== -PLG_SYSTEM_MOKOWAAS_FIELDSET_OPS_LABEL="Operations" -PLG_SYSTEM_MOKOWAAS_FIELDSET_OPS_DESC="Heartbeat telemetry, license checking, and WaaS platform integration." - -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_URL_LABEL="Heartbeat URL" -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_URL_DESC="URL to POST site health data to your WaaS dashboard. Leave empty to disable." -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_INTERVAL_LABEL="Heartbeat Interval (Hours)" -PLG_SYSTEM_MOKOWAAS_HEARTBEAT_TOKEN_LABEL="Heartbeat Token" -PLG_SYSTEM_MOKOWAAS_LICENSE_URL_LABEL="License Check URL" -PLG_SYSTEM_MOKOWAAS_LICENSE_URL_DESC="URL to verify site license/subscription status. Leave empty to disable." -PLG_SYSTEM_MOKOWAAS_LICENSE_KEY_LABEL="License Key" -PLG_SYSTEM_MOKOWAAS_LICENSE_INTERVAL_LABEL="License Check Interval (Hours)" -PLG_SYSTEM_MOKOWAAS_LICENSE_ACTION_LABEL="License Expiry Action" -PLG_SYSTEM_MOKOWAAS_LICENSE_ACTION_DESC="What to do when the license check fails or expires." -PLG_SYSTEM_MOKOWAAS_LICENSE_WARN="Show Warning" -PLG_SYSTEM_MOKOWAAS_LICENSE_LOCKOUT="Lock Out Non-Master Users" diff --git a/src/mokowaas.xml b/src/mokowaas.xml index b654bc49..741f2db7 100644 --- a/src/mokowaas.xml +++ b/src/mokowaas.xml @@ -300,38 +300,6 @@ description="PLG_SYSTEM_MOKOWAAS_UPLOAD_SIZE_DESC" default="10" /> -
- - - - - - - - - - -