cc709a0231
Joomla: Repo Health / Access control (push) Has been cancelled
Joomla: Update Server / Update updates.xml (push) Has been cancelled
Joomla: Repo Health / Release configuration (push) Has been cancelled
Joomla: Repo Health / Scripts governance (push) Has been cancelled
Joomla: Repo Health / Repository health (push) Has been cancelled
Moved isMasterUser() check to top of enforceAdminRestrictions() so master user is never blocked by any restriction including install from URL, global config, sysinfo, installer, and template editing. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
16 KiB
16 KiB
Changelog
All notable changes to the MokoWaaS plugin will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Planned
- License/subscription check
- System email template branding (DB approach)
[02.06.00] - 2026-05-25
Added
- Alias offline bypass: aliases with offline=No override Joomla's global offline setting, allowing access via alias domain while main site is down
- Block non-master users from viewing or editing MokoWaaS plugin settings
- Master user bypasses ALL tenant restrictions (install from URL, global config, sysinfo, installer, templates)
Fixed
- Install API endpoint: extract ZIP to temp directory before passing to Joomla Installer (was passing ZIP path directly)
- Clean up extracted temp directory on success or failure
Changed
- CI: auto-release uses stream tag
stableinstead of version tagvXX
[02.05.00] - 2026-05-24
Added
- Joomla
protected=1flag on all MokoWaaS extensions (framework-level disable/uninstall prevention) - Self-healing protected flag — restored each admin session if cleared
- Block non-master disable via plugin list toggle (
plugins.publish) - Package script sets
protected=1, locked=0on every install/update - Legacy plugin entry in updates.xml for sites upgrading from standalone plugin
Fixed
- CI: auto-release workflow
pkg_pkg_duplication in release names, ZIP filenames, and SHA256 paths - CI: auto-release now strips existing type prefix and uses
<packagename>for packages - CI:
updates_xml_buildwas cascading entries for all lower channels on stable release — now writes only current channel - CI:
targetplatformregex((5.[0-9])|(6.[0-9]))caused Gitea 500 on XML render — simplified to(5|6)\..* - updates.xml stable entry now has correct
<tag>stable</tag>and download URL - README slimmed to overview, detailed content moved to wiki
[02.03.10] - 2026-05-24
Added
- Canonical URL injection for alias domains (prevents SEO duplication)
- Primary Domain config field in Site Aliases tab
- Heartbeat registration for alias domains (each alias gets Grafana datasource)
- Plugin protection: hidden from non-master users, disable/uninstall blocked
- Dynamic plugin version read from manifest XML (no more hardcoded strings)
- Package structure:
pkg_mokowaaswith system plugin, webservices plugin, and component
Changed
- Alias offline mode uses Joomla's native template offline.php (not custom HTML)
- Alias detection simplified: direct lookup in aliases list (no primary host comparison)
- handleSiteAlias() moved to onAfterRoute (client type resolved at that point)
- Package script.php enables plugins on every install/update and sends heartbeat
Fixed
- Alias domain matching: strip trailing slashes, handle Joomla subform stdClass format
- Backend redirect: use primary_domain setting instead of Uri::root() (returned alias domain on mirrors)
- CI: version_bump reads manifest XML with priority over README.md VERSION header
- CI: version bump occurs after release build, not before
- CI: pipefail disabled during element detection (SIGPIPE on find|head)
- CI: pkg_pkg_ prefix duplication in zip names and updates.xml URLs
- CI: updates_xml_build preserves existing channel entries (stable not wiped by dev releases)
Removed
- deploy-manual.yml workflow — using Joomla update server for distribution
- Accidentally committed profile.ps1 and TODO.md
[02.01.43] - 2026-05-23
Added
- Site Aliases tab with Joomla subform repeatable-table UI
- Per-alias offline toggle with custom maintenance message (503 response)
- Per-alias robots meta directive (index/noindex/follow/nofollow/none)
- Per-alias backend redirect (admin panel redirects to primary domain)
- 6 MokoWaaS API endpoints: health, install, update, cache, backup, info
- Remote plugin install via
/?mokowaas=installendpoint - Remote update trigger via
/?mokowaas=updateendpoint - Remote cache clear via
/?mokowaas=cacheendpoint (site + admin + opcache) - Remote Akeeba Backup trigger via
/?mokowaas=backupendpoint - Compact site info via
/?mokowaas=infoendpoint
Changed
- Site aliases moved from comma-separated text field to structured subform
- Each alias now stores domain, offline, offline_message, robots, redirect_backend
- Heartbeat provisioning updated for subform alias format
- Grafana datasource names use domain-only (removed "MokoWaaS - " prefix)
Fixed
- Heartbeat receiver accepts any 200 status (registered/updated/ok)
- script.php uses heartbeat receiver instead of Grafana API (fixes 403 RBAC)
[02.01.37] - 2026-05-23
Added
- Health check endpoint at
/?mokowaas=healthwith 16 diagnostic checks (#54) - Core checks: database latency, filesystem writability/size, cache, extensions
- Backup checks: Akeeba Backup last backup date/status/size, days since, frequency
- Security checks: Admin Tools WAF status, blocked requests 24h/7d
- SSL certificate: expiry date, days left, issuer (degraded <30d, error <7d)
- Scheduled tasks: Joomla task scheduler status, failed tasks 24h
- Error log: PHP error log size, recent errors, last error message
- Database size: total MB, table count, top 5 largest tables
- Content stats: articles, categories, menu items, modules
- User activity: total users, active sessions, failed logins 24h, last login
- Mail system: mailer type, from address, SMTP host, queue count
- SEO health: robots.txt, sitemap, htaccess, SEF status
- Template info: site/admin template names, override count
- Configuration drift: debug mode, error reporting, force SSL, caching
- Human-readable
reasonfield explaining degraded/error status - Site size reporting (images, media, tmp, cache, logs directories)
- Heartbeat provisioning via receiver at bench.mokoconsulting.tech
- Grafana datasource auto-provisioning via YAML (no API token needed)
- ntfy notifications on heartbeat registration (mokowaas-heartbeat topic)
- Grafana dashboard with 9 rows covering all 16 health checks
- Auto-generated health API token (separate from Joomla user tokens)
Changed
- Health endpoint always enabled — no config toggle needed
- Grafana provisioning uses heartbeat receiver pattern (replaces direct API)
- Removed config fields: enable_health_endpoint, grafana_url, grafana_api_key
- Migrated .gitea/ to .mokogitea/ directory standard
- Updated all references from MokoStandards to moko-platform
- Renamed Gitea references to MokoGitea in docs
Fixed
- SSL verification disabled for Grafana cURL calls (shared hosting)
- cURL follow redirects enabled
- updates.xml download URL uses correct
developmenttag
Security
- Plugin hidden from plugin list for non-master users
- Plugin settings restricted to master user only
- Self-healing lock (enforceLocked) runs every page load
- Uninstall blocked in preflight
- Health endpoint requires HTTPS + bearer token
- Heartbeat shared secret for receiver authentication
[02.01.08] - 2026-04-07
Added
- Template-based language overrides with
{{BRAND_NAME}},{{COMPANY_NAME}},{{SUPPORT_URL}}placeholders - Configurable brand name, company name, and support URL via plugin params
- Sentinel-block merge pattern that preserves existing site overrides
- Install respects user-defined overrides (non-overwrite)
- ~50 override keys across admin and frontend
- Powered by links with anchor tag to support URL
- Login support URL enforcement (mokoconsulting.tech/support, /kb, /news)
- Atum template branding via params (logoBrandLarge, logoBrandSmall, loginLogo)
- Shipped media assets: logo.png, favicon.ico, favicon.svg, favicon_256.png
- Favicon injection (SVG + ICO + Apple touch icon)
- Admin color scheme via Atum template style params (hue, link-color, special-color)
- Custom CSS textarea injection
- Master user enforcement (persistent super admin — "Webmaster")
- Emergency access (DB password + file verification two-factor)
- IP whitelist via configuration.php (empty blocks access)
- IP whitelist display in plugin config (shows current IPs + your IP)
- All emergency access attempts logged to Joomla Action Logs
- Email notification on successful emergency login
- Tenant restrictions: Extension Installer, System Info, Global Configuration, Template code editor
- Dynamic admin menu hiding via onPreprocessMenuItems
- Disable install-from-URL for all users
- Force HTTPS redirect (supports reverse proxy)
- Admin session idle timeout (default 60 min, master user exempt)
- Password policy (min length, uppercase, number, special character)
- Upload type and size restrictions (default 100MB)
- Maintenance actions: reset all hits, delete all versions
- Auto-enable plugin on first install
- Action log extension registration in #__action_logs_extensions and #__action_log_config
- Custom AllowedIpsField form field for IP whitelist display
- Joomla 5.x and 6.x compatibility
Fixed
- Column heading overrides removed (broke module/plugin list views)
- RegularLabs Position column workaround
- Nested
<a>tags in login support overrides - Emergency access moved from onUserAuthenticate to onAfterInitialise (Joomla uses isolated auth dispatcher)
- Session created directly for emergency login (bypasses auth dispatcher)
- Auto-complete emergency login after verify file deletion (no re-entering credentials)
Changed
- Version bumped to 02.01.08 across all files
- Configuration guide fully rewritten with all fieldsets documented
- Testing guide with 17 test suites
- README updated with Usage section, new features, Joomla 5/6 badges
[01.04.00] - 2026-02-22
Added
- Complete Joomla 5.x system plugin implementation with modern architecture
- Main plugin class (
src/mokowaas.php) with event handlers:onAfterInitialiseevent hook for framework initializationonAfterRouteevent hook for routing integration
- Plugin manifest (
src/mokowaas.xml) with Joomla 5.x namespace support- Namespace:
Moko\Plugin\System\MokoWaaS - Configuration parameter for enabling/disabling branding
- Namespace:
- Dependency injection service provider (
src/services/provider.php)- DI container registration for Joomla 5.x compatibility
- Plugin language files in
src/language/en-GB/:plg_system_mokowaas.ini- Plugin UI stringsplg_system_mokowaas.sys.ini- System/installation strings
- Enhanced language overrides (57+ strings):
- Installation sample data branding
- Site name labels
- Admin-specific UI elements
- Version and About sections
- Security
index.htmlfiles throughout directory structure - Comprehensive README.md with:
- Badges for version, license, Joomla, and PHP compatibility
- Table of contents with 12+ major sections
- Detailed installation instructions (2 methods)
- Technical implementation documentation
- Repository structure overview
- Development and build instructions
Changed
- Updated all documentation to version 01.04.00
- Enhanced language overrides with more comprehensive coverage
- Improved plugin configuration options
Fixed
- Typo in language override: "ERROR OCCURED" → "ERROR OCCURRED"
- Repository references updated from placeholders to actual GitHub URLs
Technical
- Integrates with Joomla's native language override system
- No programmatic string loading (performance optimization)
- Event-driven architecture for minimal overhead
- PSR-4 autoloading through service provider
[01.03.00] - 2025-12-11
Changed
- General cleanup and code organization
- Documentation structure improvements
[01.02.01] - 2025-12-11
Changed
- Version bump for release alignment
[01.02.00] - 2025-12-11
Added
- Documentation directory (
/docs/) with comprehensive guides:- Installation guide
- Configuration guide
- Build guide
- Operations guide
- Troubleshooting guide
- Upgrade and versioning guide
- Rollback and recovery guide
- GitHub workflow for automated builds (
.github/workflows/build.yml) - Image and favicon replacement feature for complete branding
Changed
- Improved documentation structure and organization
[01.01.05] - 2025-12-11
Changed
- Version bump for release coordination
[01.01.04] - 2025-12-11
Fixed
- Plugin manifest corrections and validation fixes
[01.01.03] - 2025-12-11
Fixed
- Administrator language file location corrected
- Language override path alignment with Joomla standards
[01.01.02] - 2025-12-11
Changed
- Moved plugin code to
/src/directory for better organization - Aligned repository structure with release deployment pipeline
- Improved packaging workflow
Added
- Release deployment pipeline integration
- Automated build and validation scripts
[1.0.0] - 2025-12-11
Added
- Initial release of MokoWaaS plugin
- Basic language override system for Joomla rebranding
- Frontend language overrides (en-GB, en-US)
- Administrator language overrides (en-GB, en-US)
- Core branding replacements:
- Footer "Powered by" text
- Control panel welcome messages
- Help and documentation links
- Generic Joomla→MokoWaaS replacements
- Basic plugin structure and manifest
- License (GPL-3.0-or-later)
- Contributing guidelines
- Code of conduct
Technical Details
- Joomla 5.x compatible
- PHP 8.1+ requirement
- Language override mechanism using Joomla's native system
Version History Summary
| Version | Date | Type | Summary |
|---|---|---|---|
| 01.04.00 | 2026-02-22 | Major | Complete plugin implementation & enhanced docs |
| 01.03.00 | 2025-12-11 | Minor | Cleanup and organization |
| 01.02.01 | 2025-12-11 | Patch | Version alignment |
| 01.02.00 | 2025-12-11 | Minor | Documentation and build system |
| 01.01.05 | 2025-12-11 | Patch | Version coordination |
| 01.01.04 | 2025-12-11 | Patch | Manifest fixes |
| 01.01.03 | 2025-12-11 | Patch | Language location fix |
| 01.01.02 | 2025-12-11 | Patch | Repository restructuring |
| 1.0.0 | 2025-12-11 | Major | Initial release |
Upgrade Notes
Upgrading to 01.04.00
Breaking Changes: None
New Features:
- Complete Joomla 5.x plugin implementation
- Dependency injection support
- Enhanced language overrides (14+ new strings)
Installation:
- Backup your current installation
- Download the latest release package
- Install via Joomla Extension Manager
- Clear Joomla cache
- Verify branding appears correctly
Upgrading to 01.02.00
New Features:
- Comprehensive documentation in
/docs/ - Automated build workflows
Notes:
- Review new documentation for operational guidance
- Check GitHub workflows for automated builds
Contributing
Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
When adding entries to this changelog:
- Add new changes under
[Unreleased]section - Use categories: Added, Changed, Deprecated, Removed, Fixed, Security
- Include clear, concise descriptions
- Reference issue numbers where applicable
- Move items from Unreleased to versioned section upon release
Links
- MokoStandards - Coding and documentation standards
- Keep a Changelog - Changelog format specification
- Semantic Versioning - Version numbering specification
- Repository - Project repository
Note: For detailed technical documentation, see the /docs/ directory and README.md.