Commit Graph

131 Commits

Author SHA1 Message Date
Jonathan Miller 5407b712f1 chore: move CLAUDE.md to .mokogitea/ directory
Relocate CLAUDE.md from repo root to .mokogitea/ per project convention.
Content updated with focused, repo-specific architecture and rules.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 09:30:50 -05:00
Jonathan Miller 75c34345f9 refactor: rename src/ to source/ per moko-platform standards
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Rename root source directory from src/ to source/ and update all
references in Makefile, manifest.xml, .gitignore, CI workflows,
and wiki documentation. Internal Joomla namespace paths (src/Extension)
are unchanged as they are plugin-internal structure.

CI workflows updated to check source/ first with src/ fallback for
backward compatibility across repos.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 08:11:29 -05:00
jmiller 48d49b3ee0 chore: sync .mokogitea/workflows/pre-release.yml from moko-platform [skip ci] 2026-06-06 12:32:21 +00:00
Jonathan Miller 3f63ec2e1d feat(licensing): add licensing block to manifest and pre-release step
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Add <licensing> section to manifest.xml with update-server URL
template and dlid flag. Add manifest_licensing.php step to
pre-release workflow to auto-ensure updateservers/dlid tags.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 07:18:05 -05:00
Jonathan Miller 1894abcf90 security: add CSRF and ACL checks (#104, #105)
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
- #104: Add checkToken('get') and core.manage ACL check to CSV export
- #105: Add checkToken() to migration action (ACL was already present)

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 06:40:19 -05:00
gitea-actions[bot] b6a15ae409 chore(version): pre-release bump to 01.00.27-dev [skip ci] 2026-06-06 11:31:14 +00:00
Jonathan Miller 62e6c80d28 feat: resolve 6 enhancement issues (#96, #97, #98, #99, #102, #103)
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
- #96: Move Facebook token from URL query string to Authorization
  header in both publish() and validateCredentials()
- #97: Cache Bluesky AT Protocol session tokens in static property
  with 90-minute TTL to avoid re-authenticating on every post
- #98: Add auto_send parameter to Mailchimp — calls campaign send
  endpoint after creation when enabled (default: off for safety)
- #99: Batch duplicate guard and template loading in
  CrossPostDispatcher — reduces N*M queries to 2 bulk queries
- #102: Remove duplicated renderTemplate() from DispatchController,
  delegate to CrossPostDispatcher::renderTemplate() (now public)
- #103: Replace deprecated Sidebar API with Joomla 5 toolbar submenu
  API, with legacy fallback for Joomla 4 compatibility

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 06:27:24 -05:00
Jonathan Miller 486a8ac38a fix: resolve 5 open bugs (#92, #94, #95, #100, #101)
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
- #92: Replace MySQL-only GET_LOCK with db-agnostic locking — adds
  PostgreSQL pg_advisory_lock and timestamp-based fallback
- #94: retryFailed() now includes permanently_failed and cancelled
  statuses, not just failed
- #95: Validate scheduled_at datetime via Factory::getDate() in both
  PostModel::prepareTable() and PostsController::schedule()
- #100: Add clarifying comment to update SQL for duplicate table def
- #101: Replace fragile LIKE query with JSON_EXTRACT() for evergreen
  article detection

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-06 06:04:38 -05:00
gitea-actions[bot] 0ea55601d2 chore(version): pre-release bump to 01.00.26-dev [skip ci] 2026-06-05 04:08:57 +00:00
Jonathan Miller f46a657534 fix(manifest): fix dlid and blockChildUninstall placement and indentation
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Move dlid and blockChildUninstall elements before updateservers and
fix tab indentation to match the 4-space convention used in the rest
of the manifest.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-04 23:07:34 -05:00
Jonathan Miller b37a7dd1be feat(license): warn admins when no download key is configured
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Adds onAfterRoute hook that checks the update site for a valid
MOKO-XXXX license key and shows a warning message once per session
if missing — directs users to System > Update Sites.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-04 23:04:18 -05:00
Jonathan Miller 0b3bd2bda6 chore(changelog): consolidate duplicate Added/Fixed sections
Merge duplicate ### Added and ### Fixed headings into single sections
and fix version format from 01.00.00 to 01.00.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-04 23:04:18 -05:00
gitea-actions[bot] 9d48a23e0b chore(version): pre-release bump to 01.00.25-dev [skip ci] 2026-06-05 03:11:46 +00:00
Jonathan Miller ca940c3b70 chore(ci): add pre-release.yml from moko-platform v05.01.00
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
Restores the pre-release workflow without update-stream steps —
updates.xml is now generated dynamically by the license server.

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-04 22:09:54 -05:00
jmiller dfd7dd1c9e chore: add dlid and blockChildUninstall to package manifest [skip ci] 2026-06-04 22:02:36 +00:00
jmiller 78a4fa1778 chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] 2026-06-04 15:56:52 +00:00
jmiller 47f6061b6f chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] 2026-06-04 15:39:20 +00:00
jmiller bf13bd5075 chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] 2026-06-04 15:30:27 +00:00
jmiller b2459dc6cd chore: remove updates.xml [skip ci] 2026-06-04 15:27:09 +00:00
jmiller 09211b6e3d chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] 2026-06-04 15:14:27 +00:00
jmiller 9f8ebaeb5c feat(update): migrate update server URL to Gitea Pages [skip ci] 2026-06-04 14:34:02 +00:00
jmiller 7cd81a8ae5 chore: sync .mokogitea/workflows/auto-release.yml from moko-platform [skip ci] 2026-06-04 14:21:16 +00:00
jmiller aebd01a5c4 chore: sync .mokogitea/workflows/repo-health.yml from moko-platform [skip ci] 2026-06-03 09:37:36 +00:00
jmiller 2b433fd569 chore: sync .mokogitea/workflows/repo-health.yml from moko-platform [skip ci] 2026-06-03 03:11:23 +00:00
jmiller b97c5bb8d4 chore: add .mokogitea/workflows/auto-release.yml from moko-platform [skip ci] 2026-06-02 23:48:01 +00:00
jmiller cff210ec96 chore: sync .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] 2026-06-02 21:52:14 +00:00
Moko Consulting c1a063be27 chore(ci): add CI issue reporter for auto-filing gate failures
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
2026-06-02 20:38:42 +00:00
Moko Consulting bd03dbab09 chore(ci): add CI issue reporter for auto-filing gate failures
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
2026-06-02 20:38:41 +00:00
Moko Consulting 0ac43185e5 chore(ci): add CI issue reporter for auto-filing gate failures
Generic: Repo Health / Site Health (push) Has been cancelled
Generic: Repo Health / Access control (push) Has been cancelled
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
2026-06-02 20:38:40 +00:00
gitea-actions[bot] 66704c9cee chore(ci): remove update-server.yml for update server migration [skip ci] 2026-05-31 03:46:56 +00:00
gitea-actions[bot] dc2497a513 chore(ci): remove cascade-dev.yml for update server migration [skip ci] 2026-05-31 03:46:55 +00:00
gitea-actions[bot] 38fba65a3d chore(ci): remove auto-bump.yml for update server migration [skip ci] 2026-05-31 03:46:53 +00:00
gitea-actions[bot] c00a658c0b chore(ci): remove pre-release.yml for update server migration [skip ci] 2026-05-31 03:46:51 +00:00
gitea-actions[bot] f47a928cd5 chore(ci): remove auto-release.yml for update server migration [skip ci] 2026-05-31 03:46:49 +00:00
jmiller 1ee8269b8e chore: sync .mokogitea/workflows/cascade-dev.yml from moko-platform [skip ci] 2026-05-31 01:46:12 +00:00
Jonathan Miller 2c480e8d31 chore(manifest): fix display-name structure and update CONTRIBUTING.md
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Standardize manifest.xml identity block: ensure <name> contains only
the machine identifier (PascalCase) and <display-name> contains the
human-readable label with Joomla extension type prefix. Remove duplicate
<version> tags where present. Update CONTRIBUTING.md from moko-platform
default.

Authored-by: Moko Consulting
2026-05-30 19:11:09 -05:00
jmiller 5d2c32422a chore: add .mokogitea/workflows/pr-check.yml from moko-platform [skip ci] 2026-05-30 16:03:58 +00:00
jmiller 49c0484061 chore: sync .mokogitea/workflows/auto-release.yml from moko-platform [skip ci] 2026-05-30 15:05:05 +00:00
jmiller 4708bb66fd chore: sync .mokogitea/workflows/auto-bump.yml from moko-platform [skip ci] 2026-05-30 15:02:30 +00:00
jmiller 17be4ff0f1 chore: sync .mokogitea/workflows/auto-release.yml from moko-platform [skip ci] 2026-05-30 01:17:13 +00:00
jmiller 0ad4963115 chore: sync .mokogitea/workflows/auto-bump.yml from moko-platform [skip ci] 2026-05-29 10:32:38 +00:00
gitea-actions[bot] f88c760c0f chore: update development channel 01.00.06-dev-dev [skip ci] 2026-05-29 05:29:02 +00:00
gitea-actions[bot] 40e540461e chore(version): auto-bump 01.00.06-dev-dev [skip ci] 2026-05-29 05:29:01 +00:00
Jonathan Miller 8dd6fdd926 fix: critical and high severity audit fixes
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Update Server / Update Server (push) Has been cancelled
C-1: CSRF nonce on OAuth authorize/callback flow
C-2: POST method enforcement on REST dispatch endpoint
C-5: Service credential fields now saved from form to JSON column
     (collect cred_* fields, strip prefix, JSON encode on save;
      expand back on load for editing)
H-1: Joomla 5 event ArrayAccess pattern for service plugin collection
     (reads from Event indices instead of broken by-reference)
H-4: ServiceTable::check() with alias generation, required validation
H-9: WebhookService credential keys match form XML field names,
     Bearer/Basic auth headers implemented correctly
M-4: XSS fix — escape $extraClass in ServiceIconHelper::renderIcon()
M-5: Article history HTML injection via setFieldAttribute() instead
     of double-escaped XML description attribute

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-29 00:28:36 -05:00
gitea-actions[bot] 353c037907 chore: update development channel 01.00.06-dev-dev [skip ci] 2026-05-29 05:13:42 +00:00
gitea-actions[bot] fcb332ea00 chore(version): auto-bump 01.00.06-dev-dev [skip ci] 2026-05-29 05:13:40 +00:00
Jonathan Miller 20ee39f54b feat: 5 final features — category routing, char counter, service icons, drill-down analytics, article history
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Update Server / Update Server (push) Has been cancelled
1. Category routing rules — new DB table #__mokojoomcross_category_rules
   maps Joomla categories to specific services (whitelist). Integrated
   into CrossPostDispatcher before per-article filters.
2. Character counter — live JS counter in template editor shows
   remaining chars per platform with color coding (green/yellow/red)
3. Service type icons — ServiceIconHelper maps 34 types to Bootstrap
   icons, used in services list, posts list, and dashboard
4. Per-service analytics drill-down — ServiceStats view with stats
   cards, daily trend chart, recent posts, top articles. Dashboard
   service rows are now clickable links.
5. Article editor cross-post history — read-only panel in the
   Cross-Posting fieldset showing last 10 post results with status
   badges, service names, and timestamps

Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-29 00:13:30 -05:00
gitea-actions[bot] 57f34f0fc7 chore: update development channel 01.00.06-dev-dev [skip ci] 2026-05-29 03:56:02 +00:00
gitea-actions[bot] 58a9641b94 chore(version): auto-bump 01.00.06-dev-dev [skip ci] 2026-05-29 03:56:01 +00:00
Jonathan Miller 16c068b4b0 feat: getSupportedMediaTypes() on all 36 service plugins
Universal: Auto Version Bump / Version Bump (push) Has been cancelled
Update Server / Update Server (push) Has been cancelled
Add media capability reporting to MokoJoomCrossServiceInterface.
Each plugin now returns its supported media types:
- image, video, gif, document (per platform capability)
- Empty array for text-only services (Nostr, Ntfy, ConvertKit)

Enables the dispatcher to skip media attachments for text-only
services and choose appropriate media types per platform.

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