Commit Graph

870 Commits

Author SHA1 Message Date
Jonathan Miller a92c1ce772 feat: site aliases tab with per-alias offline, robots, and backend redirect
Move site aliases from a comma-separated text field in Diagnostics to its
own tab using Joomla's subform repeatable-table layout. Each alias entry
now supports: domain, offline toggle with custom message, robots meta
directive, and backend redirect to primary domain. Frontend stays on the
alias domain while admin requests can be redirected to the primary.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 18:11:07 -05:00
gitea-actions[bot] 14e94518ba chore: update development channel 02.01.42 [skip ci] 2026-05-23 22:58:03 +00:00
gitea-actions[bot] b32d91c446 chore(version): bump to 02.01.42 [skip ci] 2026-05-23 22:58:02 +00:00
Jonathan Miller 03e0b6d13b fix: accept any 200 status from heartbeat (registered/updated/ok)
The receiver returns 'updated' when re-registering an existing site,
but the code only accepted 'registered', causing false 'HTTP 200 — Unknown' warnings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 17:30:52 -05:00
jmiller d2700f96fe chore: stable 02.01.42 [skip ci] 2026-05-23 22:25:01 +00:00
jmiller b1b21e79d8 chore: sync updates.xml 02.01.42 from main [skip ci] 2026-05-23 22:22:55 +00:00
gitea-actions[bot] 4bc23ae54f chore: update development channel 02.01.41 [skip ci] 2026-05-23 21:56:34 +00:00
gitea-actions[bot] 8843f721e5 chore(version): bump to 02.01.41 [skip ci] 2026-05-23 21:56:33 +00:00
Jonathan Miller 0a6744644d fix: script.php uses heartbeat receiver instead of Grafana API
The postflight still had the old Grafana API code with obfuscated tokens,
causing 403 RBAC errors on install/update. Now uses the heartbeat receiver
at bench.mokoconsulting.tech/api/waas-heartbeat/register.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 16:55:58 -05:00
gitea-actions[bot] b30e6813fe chore: update development channel 02.01.40 [skip ci] 2026-05-23 21:52:54 +00:00
gitea-actions[bot] f61e8e53b5 chore(version): bump to 02.01.40 [skip ci] 2026-05-23 21:52:53 +00:00
Jonathan Miller dff7d73009 feat: MokoWaaS API — 6 endpoints for remote management
New API endpoints (all token-authenticated, HTTPS-only):
  ?mokowaas=health  — 16 diagnostic checks (GET)
  ?mokowaas=install — install extension from URL (POST)
  ?mokowaas=update  — trigger Joomla update check (POST)
  ?mokowaas=cache   — clear all caches + opcache (POST)
  ?mokowaas=backup  — trigger Akeeba Backup (POST)
  ?mokowaas=info    — compact site summary (GET)

Also adds:
  - Centralized API router with shared token auth
  - site_aliases config field for multi-domain support
  - Each alias registers its own Grafana datasource

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 16:51:32 -05:00
gitea-actions[bot] 35ac2aaed2 chore: update development channel 02.01.39 [skip ci] 2026-05-23 21:16:19 +00:00
gitea-actions[bot] d825621502 chore(version): bump to 02.01.39 [skip ci] 2026-05-23 21:16:18 +00:00
Jonathan Miller 1aa1a8282f feat: rebuild with heartbeat receiver, 16 checks, multi-domain support
Reconstructed from git history after cascade revert wiped dev:
- 16 health checks (database, filesystem, cache, extensions, backup,
  security, SSL, cron, errors, db_size, content, users, mail, SEO,
  template, config)
- Heartbeat receiver provisioning (replaces Grafana API)
- Multi-domain support via site_aliases config field
- Each alias domain registers its own Grafana datasource
- Human-readable reason field for degraded status

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 16:15:45 -05:00
jmiller 6ca75bfbe7 chore: stable 02.01.39 [skip ci] 2026-05-23 20:51:38 +00:00
jmiller 6400bc9243 chore: sync updates.xml 02.01.39 from main [skip ci] 2026-05-23 20:45:17 +00:00
jmiller 943a19934e fix: sync README to 02.01.38 [skip ci] 2026-05-23 20:44:32 +00:00
jmiller dd57c23716 fix: sync manifest to 02.01.38 [skip ci] 2026-05-23 20:44:32 +00:00
jmiller 25c4d81e58 chore: sync updates.xml 02.01.38 from main [skip ci] 2026-05-23 20:27:28 +00:00
jmiller 640114e00c fix: sync manifest version to 02.01.37 [skip ci] 2026-05-23 20:26:29 +00:00
jmiller b82c8c4ba0 fix: sync version to 02.01.37 [skip ci] 2026-05-23 20:26:29 +00:00
jmiller 66183a6ec0 chore: sync updates.xml 02.01.36 from main [skip ci] 2026-05-23 20:24:29 +00:00
jmiller 6140b38662 chore: sync stable 02.01.37 to dev [skip ci] 2026-05-23 19:56:11 +00:00
jmiller 7f90b83992 Merge pull request 'chore: cascade main → dev (5164eda) [skip ci]' (#24) from main into dev
chore: cascade main → dev [skip ci]
2026-05-23 19:49:43 +00:00
jmiller 5164edaf7f Merge pull request 'feat: health endpoint with 16 diagnostic checks (#54)' (#23) from dev into main
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
2026-05-23 19:49:39 +00:00
jmiller 665582b913 fix(ci): add branch output to auto-release [skip ci] 2026-05-23 19:47:53 +00:00
Jonathan Miller f2e1dfe114 docs: update CHANGELOG and README for 02.01.37 release
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 3s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 3s
Universal: PR Check / Validate PR (pull_request) Failing after 4s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 4s
Universal: PR Check / Changelog Updated (pull_request) Successful in 4s
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been skipped
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been skipped
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been skipped
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 02:09:01 -05:00
jmiller 0357364908 Merge pull request 'chore: cascade main → dev (e7de6e4) [skip ci]' (#22) from main into dev
chore: cascade main → dev [skip ci]
2026-05-23 05:09:28 +00:00
Jonathan Miller e7de6e4c9a Revert "Merge remote-tracking branch 'origin/dev'"
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 3s
This reverts commit b27ef3aee3, reversing
changes made to c4d8381828.
2026-05-23 00:09:22 -05:00
jmiller c08efa81fe chore: sync updates.xml 02.01.37 from main [skip ci] 2026-05-23 05:02:16 +00:00
gitea-actions[bot] ea16fd92d7 chore: update release-candidate channel 02.01.37 [skip ci] 2026-05-23 05:02:15 +00:00
gitea-actions[bot] 0f446709b8 chore(version): bump to 02.01.37 [skip ci] 2026-05-23 05:02:15 +00:00
jmiller 3817d7ed13 Merge pull request 'chore: cascade main → dev (b27ef3a) [skip ci]' (#21) from main into dev
chore: cascade main → dev [skip ci]
2026-05-23 04:57:00 +00:00
Jonathan Miller b27ef3aee3 Merge remote-tracking branch 'origin/dev'
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
2026-05-22 23:56:45 -05:00
gitea-actions[bot] 030423a16d chore: update development channel 02.01.36 [skip ci] 2026-05-23 04:42:48 +00:00
jmiller c4d8381828 chore: sync updates.xml 02.01.36 from dev [skip ci] 2026-05-23 04:42:48 +00:00
gitea-actions[bot] 590e1eb385 chore(version): bump to 02.01.36 [skip ci] 2026-05-23 04:42:46 +00:00
Jonathan Miller f1f2785f0f feat: add 10 new health checks — SSL, cron, errors, DB size, content, users, mail, SEO, template, config
New checks:
- ssl: certificate expiry, days left, issuer
- cron: scheduled tasks, failed count, last run
- errors: PHP error log size, recent errors
- db_size: total MB, table count, largest tables
- content: articles, categories, menu items, modules
- users: total, active sessions, failed logins, last login
- mail: mailer type, from address, queue count
- seo: robots.txt, sitemap, htaccess, SEF
- template: site/admin template, override count
- config: debug mode, error reporting, force SSL, caching

Degraded reasons for SSL expiry, failed cron tasks, config drift.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 23:23:19 -05:00
Jonathan Miller 138af226d1 feat: add site size and total disk to filesystem health check
Reports total_disk_mb and site_size_mb (images, media, tmp, cache, logs).
Shows in Infrastructure table on Grafana dashboard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 23:13:20 -05:00
Jonathan Miller 17eaaf2347 feat: add Akeeba Backup and Admin Tools checks to health endpoint
New health checks:
- backup: last backup date/status/size, days since, total count, 7d count
- security: Admin Tools WAF status, blocked requests 24h/7d

Degraded reasons:
- No backups found
- Last backup older than 7 days
- Last backup failed/incomplete

Dashboard updated with Backup and Security rows.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 22:43:41 -05:00
Jonathan Miller 21020027d0 feat: add human-readable reason field to health endpoint
Status 'degraded' now includes reason like '3 extension updates available'
or 'Low disk space: 45 MB free'. Shows in dashboard Site Info table.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 22:00:33 -05:00
jmiller fa4622c0ca Merge pull request 'chore: cascade main → dev (a45a6cb) [skip ci]' (#20) from main into dev
chore: cascade main → dev [skip ci]
2026-05-23 01:15:04 +00:00
Jonathan Miller 0d280717f1 Revert "Merge pull request 'chore: merge dev to main' (#19) from dev into main"
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
This reverts commit a45a6cb59c, reversing
changes made to 018b197147.
2026-05-22 20:12:46 -05:00
jmiller a45a6cb59c Merge pull request 'chore: merge dev to main' (#19) from dev into main
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
2026-05-23 01:10:42 +00:00
gitea-actions[bot] 8edced75d3 chore: update development channel 02.01.39 [skip ci]
Universal: Build & Release / Build & Release Pipeline (pull_request) Failing after 25s
2026-05-23 01:08:12 +00:00
jmiller 018b197147 chore: sync updates.xml 02.01.39 from dev [skip ci] 2026-05-23 01:08:12 +00:00
gitea-actions[bot] 142ee2387e chore(version): bump to 02.01.39 [skip ci] 2026-05-23 01:08:10 +00:00
Jonathan Miller ea66ad4b4a security: hide MokoWaaS from plugin list for non-master users
Injects JS on com_plugins that removes the MokoWaaS row from the
plugin table. Combined with the edit/save block, non-master users
cannot see, edit, or save the plugin settings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 05:53:14 -05:00
Jonathan Miller 48cb040505 security: restrict plugin settings to master user + rename Gitea to MokoGitea
- Non-master users blocked from editing MokoWaaS plugin config
- isOurPlugin() helper checks extension_id against our plugin
- Blocks both edit view and save task for non-master users
- Renamed bare 'Gitea' references to 'MokoGitea' in docs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-22 05:51:20 -05:00