diff --git a/.mokogitea/manifest.xml b/.mokogitea/manifest.xml deleted file mode 100644 index a2189b9..0000000 --- a/.mokogitea/manifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - MokoSuiteCross - Package - MokoSuiteCross - MokoConsulting - Cross-posting Joomla content to social media, email marketing, and chat platforms - 01.06.00 - GNU General Public License v3 - - - joomla - 05.00.00 - https://git.mokoconsulting.tech/MokoConsulting/mokoplatform - - - PHP - joomla-extension - source/ - - - true - true - https://git.mokoconsulting.tech/{org}/{repo}/updates.xml - - diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 75a6963..0e6ac4b 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: Gitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 01.00.00 +# VERSION: 01.06.08 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/.mokogitea/workflows/security-audit.yml b/.mokogitea/workflows/security-audit.yml deleted file mode 100644 index 789325a..0000000 --- a/.mokogitea/workflows/security-audit.yml +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (C) 2026 Moko Consulting -# -# SPDX-License-Identifier: GPL-3.0-or-later -# -# FILE INFORMATION -# DEFGROUP: Gitea.Workflow -# INGROUP: MokoStandards.Security -# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards -# PATH: /.gitea/workflows/security-audit.yml -# VERSION: 01.00.00 -# BRIEF: Dependency vulnerability scanning for composer and npm packages - -name: "Universal: Security Audit" - -on: - schedule: - - cron: '0 6 * * 1' # Weekly on Monday at 06:00 UTC - pull_request: - branches: - - main - paths: - - 'composer.json' - - 'composer.lock' - - 'package.json' - - 'package-lock.json' - workflow_dispatch: - -permissions: - contents: read - -env: - NTFY_URL: ${{ vars.NTFY_URL || 'https://ntfy.mokoconsulting.tech' }} - NTFY_TOPIC: ${{ vars.NTFY_TOPIC || 'gitea-security' }} - -jobs: - audit: - name: Dependency Audit - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Composer audit - if: hashFiles('composer.lock') != '' - run: | - echo "=== Composer Security Audit ===" - if ! command -v composer &> /dev/null; then - sudo apt-get update -qq - sudo apt-get install -y -qq php-cli composer >/dev/null 2>&1 - fi - composer audit --format=plain 2>&1 | tee /tmp/composer-audit.txt - RESULT=$? - if [ $RESULT -ne 0 ]; then - echo "::warning::Composer vulnerabilities found" - echo "composer_vulnerable=true" >> "$GITHUB_ENV" - else - echo "No known vulnerabilities in composer dependencies" - fi - - - name: NPM audit - if: hashFiles('package-lock.json') != '' - run: | - echo "=== NPM Security Audit ===" - npm audit --production 2>&1 | tee /tmp/npm-audit.txt || true - if npm audit --production 2>&1 | grep -q "found 0 vulnerabilities"; then - echo "No known vulnerabilities in npm dependencies" - else - echo "::warning::NPM vulnerabilities found" - echo "npm_vulnerable=true" >> "$GITHUB_ENV" - fi - - - name: Notify on vulnerabilities - if: env.composer_vulnerable == 'true' || env.npm_vulnerable == 'true' - run: | - REPO="${{ github.event.repository.name }}" - curl -sS \ - -H "Title: ${REPO} has vulnerable dependencies" \ - -H "Tags: lock,warning" \ - -H "Priority: high" \ - -d "Security audit found vulnerabilities. Review dependency updates." \ - "${NTFY_URL}/${NTFY_TOPIC}" || true diff --git a/CHANGELOG.md b/CHANGELOG.md index d7dfde6..396d960 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ # Changelog ## [Unreleased] -## [01.06.00] --- 2026-06-23 +### Added +- **Full ACL system**: 12 granular permissions in access.xml with permissions fieldset in config.xml +- **ACL enforcement**: All controllers and views check permissions before allowing actions +- **MokoSuiteCrossHelper::getActions()**: Centralized ACL helper for toolbar and view logic -## [01.06.00] --- 2026-06-23 +### Fixed +- **License warning**: Removed duplicate from system plugin (install script already shows it) ## [01.05.00] --- 2026-06-23 @@ -45,3 +49,19 @@ ## [01.04.01] --- 2026-06-21 + + +## [01.04.00] --- 2026-06-21 + +### Fixed +- **Package manifest**: Added missing `plg_system_mokosuitecross_events` and `plg_system_mokosuitecross_gallery` to `pkg_mokosuitecross.xml` — these system plugins were not installed with the package +- **Cleanup**: Removed old `src/` directory (pre-rename cruft with `mokojoomcross` files) + +## [01.03.00] --- 2026-06-21 + + + + +All notable changes to MokoSuiteCross will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). diff --git a/README.md b/README.md index 75a52cd..6c0f5c1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MokoSuiteCross - + Cross-posting Joomla content to social media, email marketing, and chat platforms for Joomla 5/6. diff --git a/source/packages/com_mokosuitecross/access.xml b/source/packages/com_mokosuitecross/access.xml index 67eec1c..1b80879 100644 --- a/source/packages/com_mokosuitecross/access.xml +++ b/source/packages/com_mokosuitecross/access.xml @@ -1,6 +1,7 @@
+ @@ -8,7 +9,18 @@ + + + + + + + + + + +
diff --git a/source/packages/com_mokosuitecross/config.xml b/source/packages/com_mokosuitecross/config.xml index 7cbbb36..0ee1c82 100644 --- a/source/packages/com_mokosuitecross/config.xml +++ b/source/packages/com_mokosuitecross/config.xml @@ -199,4 +199,19 @@ description="COM_MOKOSUITECROSS_CONFIG_CATEGORY_RULES_NOTE_DESC" /> + +
+ +
diff --git a/source/packages/com_mokosuitecross/language/en-GB/com_mokosuitecross.ini b/source/packages/com_mokosuitecross/language/en-GB/com_mokosuitecross.ini index 0a51e7a..f89350a 100644 --- a/source/packages/com_mokosuitecross/language/en-GB/com_mokosuitecross.ini +++ b/source/packages/com_mokosuitecross/language/en-GB/com_mokosuitecross.ini @@ -5,6 +5,20 @@ COM_MOKOSUITECROSS="MokoSuiteCross" COM_MOKOSUITECROSS_DESCRIPTION="Cross-posting Joomla content to social media, email marketing, and chat platforms" +; ACL Actions +COM_MOKOSUITECROSS_ACTION_CROSSPOST="Cross-Post Articles" +COM_MOKOSUITECROSS_ACTION_CROSSPOST_MANUAL="Manually Create Posts" +COM_MOKOSUITECROSS_ACTION_DELETE_REMOTE="Delete from Remote Platforms" +COM_MOKOSUITECROSS_ACTION_SERVICES_MANAGE="Manage Services" +COM_MOKOSUITECROSS_ACTION_SERVICES_CREDENTIALS="View Service Credentials" +COM_MOKOSUITECROSS_ACTION_TEMPLATES_MANAGE="Manage Templates" +COM_MOKOSUITECROSS_ACTION_LOGS_VIEW="View Activity Logs" +COM_MOKOSUITECROSS_ACTION_LOGS_PURGE="Purge Activity Logs" +COM_MOKOSUITECROSS_ACTION_QUEUE_MANAGE="Manage Post Queue" +COM_MOKOSUITECROSS_ACTION_QUEUE_EXPORT="Export Post Queue" +COM_MOKOSUITECROSS_ACTION_DISPATCH="Trigger API Dispatch" +COM_MOKOSUITECROSS_ACTION_MIGRATE="Run Migration" + ; Submenu COM_MOKOSUITECROSS_SUBMENU_DASHBOARD="Dashboard" COM_MOKOSUITECROSS_SUBMENU_POSTS="Post Queue" diff --git a/source/packages/com_mokosuitecross/mokosuitecross.xml b/source/packages/com_mokosuitecross/mokosuitecross.xml index 757d155..3525ebb 100644 --- a/source/packages/com_mokosuitecross/mokosuitecross.xml +++ b/source/packages/com_mokosuitecross/mokosuitecross.xml @@ -1,7 +1,7 @@ com_mokosuitecross - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitecross/src/Controller/DispatchController.php b/source/packages/com_mokosuitecross/src/Controller/DispatchController.php index 8f08367..4f3022c 100644 --- a/source/packages/com_mokosuitecross/src/Controller/DispatchController.php +++ b/source/packages/com_mokosuitecross/src/Controller/DispatchController.php @@ -56,7 +56,7 @@ class DispatchController extends BaseController } // ACL check — require core.manage on the component - if (!Factory::getApplication()->getIdentity()->authorise('core.manage', 'com_mokosuitecross')) { + if (!Factory::getApplication()->getIdentity()->authorise('mokosuitecross.dispatch', 'com_mokosuitecross')) { $this->sendJsonResponse(['error' => 'Forbidden'], 403); return; diff --git a/source/packages/com_mokosuitecross/src/Controller/DisplayController.php b/source/packages/com_mokosuitecross/src/Controller/DisplayController.php index 507992b..bf9acc8 100644 --- a/source/packages/com_mokosuitecross/src/Controller/DisplayController.php +++ b/source/packages/com_mokosuitecross/src/Controller/DisplayController.php @@ -13,6 +13,7 @@ namespace Joomla\Component\MokoSuiteCross\Administrator\Controller; defined('_JEXEC') or die; +use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\BaseController; class DisplayController extends BaseController @@ -23,4 +24,13 @@ class DisplayController extends BaseController * @var string */ protected $default_view = 'dashboard'; + + public function display($cachable = false, $urlparams = []) + { + if (!$this->app->getIdentity()->authorise('core.manage', 'com_mokosuitecross')) { + throw new \Joomla\CMS\Access\Exception\NotAllowed(Text::_('JERROR_ALERTNOAUTHOR'), 403); + } + + return parent::display($cachable, $urlparams); + } } diff --git a/source/packages/com_mokosuitecross/src/Controller/PostsController.php b/source/packages/com_mokosuitecross/src/Controller/PostsController.php index 9371c9d..8f049d5 100644 --- a/source/packages/com_mokosuitecross/src/Controller/PostsController.php +++ b/source/packages/com_mokosuitecross/src/Controller/PostsController.php @@ -161,7 +161,7 @@ class PostsController extends AdminController { $this->checkToken('get'); - if (!$this->app->getIdentity()->authorise('core.manage', 'com_mokosuitecross')) { + if (!$this->app->getIdentity()->authorise('mokosuitecross.queue.export', 'com_mokosuitecross')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } diff --git a/source/packages/com_mokosuitecross/src/Controller/ServiceController.php b/source/packages/com_mokosuitecross/src/Controller/ServiceController.php index ecdd833..f938eca 100644 --- a/source/packages/com_mokosuitecross/src/Controller/ServiceController.php +++ b/source/packages/com_mokosuitecross/src/Controller/ServiceController.php @@ -31,7 +31,7 @@ class ServiceController extends FormController { $this->checkToken(); - if (!$this->app->getIdentity()->authorise('core.manage', 'com_mokosuitecross')) { + if (!$this->app->getIdentity()->authorise('mokosuitecross.services.manage', 'com_mokosuitecross')) { throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403); } diff --git a/source/packages/com_mokosuitecross/src/Controller/ServicesController.php b/source/packages/com_mokosuitecross/src/Controller/ServicesController.php index 80d75eb..c6b3603 100644 --- a/source/packages/com_mokosuitecross/src/Controller/ServicesController.php +++ b/source/packages/com_mokosuitecross/src/Controller/ServicesController.php @@ -21,4 +21,22 @@ class ServicesController extends AdminController { return parent::getModel($name, $prefix, $config); } + + public function publish(): void + { + if (!$this->app->getIdentity()->authorise('core.edit.state', 'com_mokosuitecross')) { + throw new \Joomla\CMS\Access\Exception\NotAllowed(\Joomla\CMS\Language\Text::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 403); + } + + parent::publish(); + } + + public function delete(): void + { + if (!$this->app->getIdentity()->authorise('core.delete', 'com_mokosuitecross')) { + throw new \Joomla\CMS\Access\Exception\NotAllowed(\Joomla\CMS\Language\Text::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), 403); + } + + parent::delete(); + } } diff --git a/source/packages/com_mokosuitecross/src/Controller/TemplatesController.php b/source/packages/com_mokosuitecross/src/Controller/TemplatesController.php index 591a5a6..9701a9c 100644 --- a/source/packages/com_mokosuitecross/src/Controller/TemplatesController.php +++ b/source/packages/com_mokosuitecross/src/Controller/TemplatesController.php @@ -21,4 +21,22 @@ class TemplatesController extends AdminController { return parent::getModel($name, $prefix, $config); } + + public function publish(): void + { + if (!$this->app->getIdentity()->authorise('mokosuitecross.templates.manage', 'com_mokosuitecross')) { + throw new \Joomla\CMS\Access\Exception\NotAllowed(\Joomla\CMS\Language\Text::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'), 403); + } + + parent::publish(); + } + + public function delete(): void + { + if (!$this->app->getIdentity()->authorise('mokosuitecross.templates.manage', 'com_mokosuitecross')) { + throw new \Joomla\CMS\Access\Exception\NotAllowed(\Joomla\CMS\Language\Text::_('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED'), 403); + } + + parent::delete(); + } } diff --git a/source/packages/com_mokosuitecross/src/Helper/MokoSuiteCrossHelper.php b/source/packages/com_mokosuitecross/src/Helper/MokoSuiteCrossHelper.php index 2762fc1..04a2903 100644 --- a/source/packages/com_mokosuitecross/src/Helper/MokoSuiteCrossHelper.php +++ b/source/packages/com_mokosuitecross/src/Helper/MokoSuiteCrossHelper.php @@ -71,4 +71,26 @@ class MokoSuiteCrossHelper ); } } + + /** + * Get a list of ACL actions for the component. + * + * @return \Joomla\CMS\Object\CMSObject + */ + public static function getActions(): \Joomla\CMS\Object\CMSObject + { + $user = \Joomla\CMS\Factory::getApplication()->getIdentity(); + $result = new \Joomla\CMS\Object\CMSObject(); + + $actions = \Joomla\CMS\Access\Access::getActionsFromFile( + JPATH_ADMINISTRATOR . '/components/com_mokosuitecross/access.xml', + '/access/section[@name="component"]/' + ); + + foreach ($actions as $action) { + $result->set($action->name, $user->authorise($action->name, 'com_mokosuitecross')); + } + + return $result; + } } diff --git a/source/packages/com_mokosuitecross/src/View/Dashboard/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Dashboard/HtmlView.php index 172821d..671fc0d 100644 --- a/source/packages/com_mokosuitecross/src/View/Dashboard/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Dashboard/HtmlView.php @@ -65,7 +65,11 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { + $canDo = MokoSuiteCrossHelper::getActions(); + ToolbarHelper::title('MokoSuiteCross — Dashboard', 'share-alt'); - ToolbarHelper::preferences('com_mokosuitecross'); + if ($canDo->get('core.admin')) { + ToolbarHelper::preferences('com_mokosuitecross'); + } } } diff --git a/source/packages/com_mokosuitecross/src/View/Logs/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Logs/HtmlView.php index f71795d..76e1979 100644 --- a/source/packages/com_mokosuitecross/src/View/Logs/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Logs/HtmlView.php @@ -41,6 +41,8 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { + $canDo = MokoSuiteCrossHelper::getActions(); + ToolbarHelper::title('MokoSuiteCross — Activity Logs', 'share-alt'); ToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'logs.delete', 'JTOOLBAR_DELETE'); diff --git a/source/packages/com_mokosuitecross/src/View/Post/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Post/HtmlView.php index 07e4e7a..9a5a815 100644 --- a/source/packages/com_mokosuitecross/src/View/Post/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Post/HtmlView.php @@ -18,6 +18,7 @@ use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Router\Route; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; +use Joomla\Component\MokoSuiteCross\Administrator\Helper\MokoSuiteCrossHelper; class HtmlView extends BaseHtmlView { @@ -37,14 +38,17 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { $isNew = empty($this->item->id); + $canDo = MokoSuiteCrossHelper::getActions(); ToolbarHelper::title( 'MokoSuiteCross — ' . ($isNew ? Text::_('COM_MOKOSUITECROSS_NEW_POST') : Text::_('COM_MOKOSUITECROSS_EDIT_POST')), 'share-alt' ); - ToolbarHelper::apply('post.apply'); - ToolbarHelper::save('post.save'); + if ($canDo->get('mokosuitecross.queue.manage')) { + ToolbarHelper::apply('post.apply'); + ToolbarHelper::save('post.save'); + } $toolbar = Toolbar::getInstance('toolbar'); $toolbar->appendButton( diff --git a/source/packages/com_mokosuitecross/src/View/Posts/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Posts/HtmlView.php index a6b6dd9..044f3b5 100644 --- a/source/packages/com_mokosuitecross/src/View/Posts/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Posts/HtmlView.php @@ -43,6 +43,8 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { + $canDo = MokoSuiteCrossHelper::getActions(); + ToolbarHelper::title('MokoSuiteCross — Post Queue', 'share-alt'); ToolbarHelper::addNew('post.add'); diff --git a/source/packages/com_mokosuitecross/src/View/Service/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Service/HtmlView.php index 5112bf9..570922d 100644 --- a/source/packages/com_mokosuitecross/src/View/Service/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Service/HtmlView.php @@ -19,6 +19,7 @@ use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Router\Route; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; +use Joomla\Component\MokoSuiteCross\Administrator\Helper\MokoSuiteCrossHelper; class HtmlView extends BaseHtmlView { @@ -38,14 +39,17 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { $isNew = empty($this->item->id); + $canDo = MokoSuiteCrossHelper::getActions(); ToolbarHelper::title( 'MokoSuiteCross — ' . ($isNew ? Text::_('COM_MOKOSUITECROSS_NEW_SERVICE') : Text::_('COM_MOKOSUITECROSS_EDIT_SERVICE')), 'share-alt' ); - ToolbarHelper::apply('service.apply'); - ToolbarHelper::save('service.save'); + if ($canDo->get('mokosuitecross.services.manage')) { + ToolbarHelper::apply('service.apply'); + ToolbarHelper::save('service.save'); + } // Dashboard button in toolbar $toolbar = Toolbar::getInstance('toolbar'); diff --git a/source/packages/com_mokosuitecross/src/View/Services/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Services/HtmlView.php index 8618d1b..5f26532 100644 --- a/source/packages/com_mokosuitecross/src/View/Services/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Services/HtmlView.php @@ -41,6 +41,8 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { + $canDo = MokoSuiteCrossHelper::getActions(); + ToolbarHelper::title('MokoSuiteCross — Services', 'share-alt'); ToolbarHelper::addNew('service.add'); ToolbarHelper::editList('service.edit'); diff --git a/source/packages/com_mokosuitecross/src/View/Template/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Template/HtmlView.php index 70fa2e1..9c9a442 100644 --- a/source/packages/com_mokosuitecross/src/View/Template/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Template/HtmlView.php @@ -17,6 +17,7 @@ use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView; use Joomla\CMS\Router\Route; use Joomla\CMS\Toolbar\Toolbar; use Joomla\CMS\Toolbar\ToolbarHelper; +use Joomla\Component\MokoSuiteCross\Administrator\Helper\MokoSuiteCrossHelper; class HtmlView extends BaseHtmlView { @@ -36,13 +37,17 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { $isNew = empty($this->item->id); + $canDo = MokoSuiteCrossHelper::getActions(); ToolbarHelper::title( 'MokoSuiteCross — ' . ($isNew ? 'New Template' : 'Edit Template'), 'share-alt' ); - ToolbarHelper::apply('template.apply'); - ToolbarHelper::save('template.save'); + + if ($canDo->get('mokosuitecross.templates.manage')) { + ToolbarHelper::apply('template.apply'); + ToolbarHelper::save('template.save'); + } ToolbarHelper::cancel('template.cancel'); // Dashboard link in toolbar diff --git a/source/packages/com_mokosuitecross/src/View/Templates/HtmlView.php b/source/packages/com_mokosuitecross/src/View/Templates/HtmlView.php index efe75aa..e572088 100644 --- a/source/packages/com_mokosuitecross/src/View/Templates/HtmlView.php +++ b/source/packages/com_mokosuitecross/src/View/Templates/HtmlView.php @@ -41,6 +41,8 @@ class HtmlView extends BaseHtmlView protected function addToolbar(): void { + $canDo = MokoSuiteCrossHelper::getActions(); + ToolbarHelper::title('MokoSuiteCross — Message Templates', 'share-alt'); ToolbarHelper::addNew('template.add'); ToolbarHelper::editList('template.edit'); diff --git a/source/packages/plg_content_mokosuitecross/mokosuitecross.xml b/source/packages/plg_content_mokosuitecross/mokosuitecross.xml index f40a57b..7d0e672 100644 --- a/source/packages/plg_content_mokosuitecross/mokosuitecross.xml +++ b/source/packages/plg_content_mokosuitecross/mokosuitecross.xml @@ -1,7 +1,7 @@ Content - MokoSuiteCross - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_activitypub/activitypub.xml b/source/packages/plg_mokosuitecross_activitypub/activitypub.xml index 2b95896..712c687 100644 --- a/source/packages/plg_mokosuitecross_activitypub/activitypub.xml +++ b/source/packages/plg_mokosuitecross_activitypub/activitypub.xml @@ -1,7 +1,7 @@ MokoSuiteCross - ActivityPub (Fediverse) - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_blogger/blogger.xml b/source/packages/plg_mokosuitecross_blogger/blogger.xml index a31c212..198b18c 100644 --- a/source/packages/plg_mokosuitecross_blogger/blogger.xml +++ b/source/packages/plg_mokosuitecross_blogger/blogger.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Google Blogger - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_bluesky/bluesky.xml b/source/packages/plg_mokosuitecross_bluesky/bluesky.xml index d2af5ec..9c16048 100644 --- a/source/packages/plg_mokosuitecross_bluesky/bluesky.xml +++ b/source/packages/plg_mokosuitecross_bluesky/bluesky.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Bluesky - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_brevo/brevo.xml b/source/packages/plg_mokosuitecross_brevo/brevo.xml index f7d1c68..6d30d4c 100644 --- a/source/packages/plg_mokosuitecross_brevo/brevo.xml +++ b/source/packages/plg_mokosuitecross_brevo/brevo.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Brevo (Sendinblue) - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_constantcontact/constantcontact.xml b/source/packages/plg_mokosuitecross_constantcontact/constantcontact.xml index 226bebc..22a699d 100644 --- a/source/packages/plg_mokosuitecross_constantcontact/constantcontact.xml +++ b/source/packages/plg_mokosuitecross_constantcontact/constantcontact.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Constant Contact - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_convertkit/convertkit.xml b/source/packages/plg_mokosuitecross_convertkit/convertkit.xml index 805a7d4..d797245 100644 --- a/source/packages/plg_mokosuitecross_convertkit/convertkit.xml +++ b/source/packages/plg_mokosuitecross_convertkit/convertkit.xml @@ -1,7 +1,7 @@ MokoSuiteCross - ConvertKit - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_devto/devto.xml b/source/packages/plg_mokosuitecross_devto/devto.xml index de69c38..a308844 100644 --- a/source/packages/plg_mokosuitecross_devto/devto.xml +++ b/source/packages/plg_mokosuitecross_devto/devto.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Dev.to - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_discord/discord.xml b/source/packages/plg_mokosuitecross_discord/discord.xml index 52ed0eb..a6a9c51 100644 --- a/source/packages/plg_mokosuitecross_discord/discord.xml +++ b/source/packages/plg_mokosuitecross_discord/discord.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Discord - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_facebook/facebook.xml b/source/packages/plg_mokosuitecross_facebook/facebook.xml index 01e6456..0aa7b77 100644 --- a/source/packages/plg_mokosuitecross_facebook/facebook.xml +++ b/source/packages/plg_mokosuitecross_facebook/facebook.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Facebook / Meta - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_ghost/ghost.xml b/source/packages/plg_mokosuitecross_ghost/ghost.xml index 7a6afdf..7cd3389 100644 --- a/source/packages/plg_mokosuitecross_ghost/ghost.xml +++ b/source/packages/plg_mokosuitecross_ghost/ghost.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Ghost - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_googlebusiness/googlebusiness.xml b/source/packages/plg_mokosuitecross_googlebusiness/googlebusiness.xml index 315bbb5..b0e393c 100644 --- a/source/packages/plg_mokosuitecross_googlebusiness/googlebusiness.xml +++ b/source/packages/plg_mokosuitecross_googlebusiness/googlebusiness.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Google Business Profile - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_googlechat/googlechat.xml b/source/packages/plg_mokosuitecross_googlechat/googlechat.xml index 84d7918..4ea15f7 100644 --- a/source/packages/plg_mokosuitecross_googlechat/googlechat.xml +++ b/source/packages/plg_mokosuitecross_googlechat/googlechat.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Google Chat - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_hashnode/hashnode.xml b/source/packages/plg_mokosuitecross_hashnode/hashnode.xml index aaf65e6..4298d49 100644 --- a/source/packages/plg_mokosuitecross_hashnode/hashnode.xml +++ b/source/packages/plg_mokosuitecross_hashnode/hashnode.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Hashnode - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_instagram/instagram.xml b/source/packages/plg_mokosuitecross_instagram/instagram.xml index 8d2f09d..df8d340 100644 --- a/source/packages/plg_mokosuitecross_instagram/instagram.xml +++ b/source/packages/plg_mokosuitecross_instagram/instagram.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Instagram - 01.06.00 + 01.06.08 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_linkedin/linkedin.xml b/source/packages/plg_mokosuitecross_linkedin/linkedin.xml index 586ebaf..ee71182 100644 --- a/source/packages/plg_mokosuitecross_linkedin/linkedin.xml +++ b/source/packages/plg_mokosuitecross_linkedin/linkedin.xml @@ -1,7 +1,7 @@ MokoSuiteCross - LinkedIn - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_mailchimp/mailchimp.xml b/source/packages/plg_mokosuitecross_mailchimp/mailchimp.xml index 0e2dd8a..dd2f159 100644 --- a/source/packages/plg_mokosuitecross_mailchimp/mailchimp.xml +++ b/source/packages/plg_mokosuitecross_mailchimp/mailchimp.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Mailchimp - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_mastodon/mastodon.xml b/source/packages/plg_mokosuitecross_mastodon/mastodon.xml index 167cfa8..5893e5b 100644 --- a/source/packages/plg_mokosuitecross_mastodon/mastodon.xml +++ b/source/packages/plg_mokosuitecross_mastodon/mastodon.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Mastodon - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_matrix/matrix.xml b/source/packages/plg_mokosuitecross_matrix/matrix.xml index fa3c5ef..c4d54b4 100644 --- a/source/packages/plg_mokosuitecross_matrix/matrix.xml +++ b/source/packages/plg_mokosuitecross_matrix/matrix.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Matrix / Element - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_medium/medium.xml b/source/packages/plg_mokosuitecross_medium/medium.xml index 3db6608..6afeee4 100644 --- a/source/packages/plg_mokosuitecross_medium/medium.xml +++ b/source/packages/plg_mokosuitecross_medium/medium.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Medium - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_mokosuitecalendar/mokosuitecalendar.xml b/source/packages/plg_mokosuitecross_mokosuitecalendar/mokosuitecalendar.xml index 18e1ce8..04a908e 100644 --- a/source/packages/plg_mokosuitecross_mokosuitecalendar/mokosuitecalendar.xml +++ b/source/packages/plg_mokosuitecross_mokosuitecalendar/mokosuitecalendar.xml @@ -1,7 +1,7 @@ MokoSuiteCross - MokoSuiteCalendar Events - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_mokosuitegallery/mokosuitegallery.xml b/source/packages/plg_mokosuitecross_mokosuitegallery/mokosuitegallery.xml index 084a28b..47daeca 100644 --- a/source/packages/plg_mokosuitecross_mokosuitegallery/mokosuitegallery.xml +++ b/source/packages/plg_mokosuitecross_mokosuitegallery/mokosuitegallery.xml @@ -1,7 +1,7 @@ MokoSuiteCross - MokoSuiteGallery - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_nostr/nostr.xml b/source/packages/plg_mokosuitecross_nostr/nostr.xml index 68b1e7e..2a62c2a 100644 --- a/source/packages/plg_mokosuitecross_nostr/nostr.xml +++ b/source/packages/plg_mokosuitecross_nostr/nostr.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Nostr - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_ntfy/ntfy.xml b/source/packages/plg_mokosuitecross_ntfy/ntfy.xml index 85fec5a..05e8d84 100644 --- a/source/packages/plg_mokosuitecross_ntfy/ntfy.xml +++ b/source/packages/plg_mokosuitecross_ntfy/ntfy.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Ntfy Push Notifications - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_pinterest/pinterest.xml b/source/packages/plg_mokosuitecross_pinterest/pinterest.xml index 3cf0b73..65a4132 100644 --- a/source/packages/plg_mokosuitecross_pinterest/pinterest.xml +++ b/source/packages/plg_mokosuitecross_pinterest/pinterest.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Pinterest - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_reddit/reddit.xml b/source/packages/plg_mokosuitecross_reddit/reddit.xml index a3dde31..1760f49 100644 --- a/source/packages/plg_mokosuitecross_reddit/reddit.xml +++ b/source/packages/plg_mokosuitecross_reddit/reddit.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Reddit - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_rssfeed/rssfeed.xml b/source/packages/plg_mokosuitecross_rssfeed/rssfeed.xml index 05c4802..63b7916 100644 --- a/source/packages/plg_mokosuitecross_rssfeed/rssfeed.xml +++ b/source/packages/plg_mokosuitecross_rssfeed/rssfeed.xml @@ -1,7 +1,7 @@ MokoSuiteCross - RSS Feed - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_sendgrid/sendgrid.xml b/source/packages/plg_mokosuitecross_sendgrid/sendgrid.xml index 4743e16..0c2e78b 100644 --- a/source/packages/plg_mokosuitecross_sendgrid/sendgrid.xml +++ b/source/packages/plg_mokosuitecross_sendgrid/sendgrid.xml @@ -1,7 +1,7 @@ MokoSuiteCross - SendGrid - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_slack/slack.xml b/source/packages/plg_mokosuitecross_slack/slack.xml index 6d00572..ef824e9 100644 --- a/source/packages/plg_mokosuitecross_slack/slack.xml +++ b/source/packages/plg_mokosuitecross_slack/slack.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Slack - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_teams/teams.xml b/source/packages/plg_mokosuitecross_teams/teams.xml index b526a8e..0e8e644 100644 --- a/source/packages/plg_mokosuitecross_teams/teams.xml +++ b/source/packages/plg_mokosuitecross_teams/teams.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Microsoft Teams - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_telegram/telegram.xml b/source/packages/plg_mokosuitecross_telegram/telegram.xml index 5b40e6e..accdfb0 100644 --- a/source/packages/plg_mokosuitecross_telegram/telegram.xml +++ b/source/packages/plg_mokosuitecross_telegram/telegram.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Telegram - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_threads/threads.xml b/source/packages/plg_mokosuitecross_threads/threads.xml index ae32abf..be63639 100644 --- a/source/packages/plg_mokosuitecross_threads/threads.xml +++ b/source/packages/plg_mokosuitecross_threads/threads.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Threads (Meta) - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_tiktok/tiktok.xml b/source/packages/plg_mokosuitecross_tiktok/tiktok.xml index c350994..7b7106f 100644 --- a/source/packages/plg_mokosuitecross_tiktok/tiktok.xml +++ b/source/packages/plg_mokosuitecross_tiktok/tiktok.xml @@ -1,7 +1,7 @@ MokoSuiteCross - TikTok - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_tumblr/tumblr.xml b/source/packages/plg_mokosuitecross_tumblr/tumblr.xml index bbcbd3c..df6d637 100644 --- a/source/packages/plg_mokosuitecross_tumblr/tumblr.xml +++ b/source/packages/plg_mokosuitecross_tumblr/tumblr.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Tumblr - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_twitter/twitter.xml b/source/packages/plg_mokosuitecross_twitter/twitter.xml index 629eb1e..3683763 100644 --- a/source/packages/plg_mokosuitecross_twitter/twitter.xml +++ b/source/packages/plg_mokosuitecross_twitter/twitter.xml @@ -1,7 +1,7 @@ MokoSuiteCross - X / Twitter - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_webhook/webhook.xml b/source/packages/plg_mokosuitecross_webhook/webhook.xml index 406057b..fc3d65b 100644 --- a/source/packages/plg_mokosuitecross_webhook/webhook.xml +++ b/source/packages/plg_mokosuitecross_webhook/webhook.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Generic Webhook - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_whatsapp/whatsapp.xml b/source/packages/plg_mokosuitecross_whatsapp/whatsapp.xml index 656a134..2ff2305 100644 --- a/source/packages/plg_mokosuitecross_whatsapp/whatsapp.xml +++ b/source/packages/plg_mokosuitecross_whatsapp/whatsapp.xml @@ -1,7 +1,7 @@ MokoSuiteCross - WhatsApp Business - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_wordpress/wordpress.xml b/source/packages/plg_mokosuitecross_wordpress/wordpress.xml index cb25c90..65cadbb 100644 --- a/source/packages/plg_mokosuitecross_wordpress/wordpress.xml +++ b/source/packages/plg_mokosuitecross_wordpress/wordpress.xml @@ -1,7 +1,7 @@ MokoSuiteCross - WordPress - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_mokosuitecross_youtube/youtube.xml b/source/packages/plg_mokosuitecross_youtube/youtube.xml index 5aa6b68..0ce90dd 100644 --- a/source/packages/plg_mokosuitecross_youtube/youtube.xml +++ b/source/packages/plg_mokosuitecross_youtube/youtube.xml @@ -1,7 +1,7 @@ MokoSuiteCross - Youtube - 01.06.00 + 01.06.08 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitecross/mokosuitecross.xml b/source/packages/plg_system_mokosuitecross/mokosuitecross.xml index c7cd574..07797e1 100644 --- a/source/packages/plg_system_mokosuitecross/mokosuitecross.xml +++ b/source/packages/plg_system_mokosuitecross/mokosuitecross.xml @@ -1,7 +1,7 @@ System - MokoSuiteCross - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitecross_events/mokosuitecross_events.xml b/source/packages/plg_system_mokosuitecross_events/mokosuitecross_events.xml index 6ce5df9..738a0b5 100644 --- a/source/packages/plg_system_mokosuitecross_events/mokosuitecross_events.xml +++ b/source/packages/plg_system_mokosuitecross_events/mokosuitecross_events.xml @@ -1,7 +1,7 @@ System - MokoSuiteCross Events - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitecross_gallery/mokosuitecross_gallery.xml b/source/packages/plg_system_mokosuitecross_gallery/mokosuitecross_gallery.xml index 46aded5..73d3d37 100644 --- a/source/packages/plg_system_mokosuitecross_gallery/mokosuitecross_gallery.xml +++ b/source/packages/plg_system_mokosuitecross_gallery/mokosuitecross_gallery.xml @@ -1,7 +1,7 @@ System - MokoSuiteCross Gallery - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitecross/mokosuitecross.xml b/source/packages/plg_task_mokosuitecross/mokosuitecross.xml index 9ca864c..bfcdb8c 100644 --- a/source/packages/plg_task_mokosuitecross/mokosuitecross.xml +++ b/source/packages/plg_task_mokosuitecross/mokosuitecross.xml @@ -1,7 +1,7 @@ Task - MokoSuiteCross Queue Processor - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitecross/mokosuitecross.xml b/source/packages/plg_webservices_mokosuitecross/mokosuitecross.xml index 42f0057..60deca1 100644 --- a/source/packages/plg_webservices_mokosuitecross/mokosuitecross.xml +++ b/source/packages/plg_webservices_mokosuitecross/mokosuitecross.xml @@ -1,7 +1,7 @@ Web Services - MokoSuiteCross - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitecross.xml b/source/pkg_mokosuitecross.xml index 206ad82..07f70d4 100644 --- a/source/pkg_mokosuitecross.xml +++ b/source/pkg_mokosuitecross.xml @@ -2,7 +2,7 @@ MokoSuiteCross mokosuitecross - 01.06.00 + 01.06.08 2026-05-28 Moko Consulting hello@mokoconsulting.tech