feat(updates): license key system and Dolibarr endpoint (Phase 2-3) #247

Merged
jmiller merged 1 commits from feat/update-server-phase2-3 into dev 2026-05-30 18:10:21 +00:00
Owner

Summary

  • License key data model: packages (tiers), keys (SHA-256 hashed), usage tracking
  • Dolibarr JSON endpoint at /{owner}/{repo}/updates/dolibarr.json
  • License key validation on update endpoints via ?key= query param
  • Channel filtering: packages restrict which update streams keys can access
  • Org-level master keys with IsInternal flag
  • DB migration v335 creates license_package, license_key, license_key_usage tables
  • MOKO-XXXX-XXXX-XXXX-XXXX key format

Ref #239

@MokoBot (Claude Opus 4.6)

## Summary - License key data model: packages (tiers), keys (SHA-256 hashed), usage tracking - Dolibarr JSON endpoint at /{owner}/{repo}/updates/dolibarr.json - License key validation on update endpoints via ?key= query param - Channel filtering: packages restrict which update streams keys can access - Org-level master keys with IsInternal flag - DB migration v335 creates license_package, license_key, license_key_usage tables - MOKO-XXXX-XXXX-XXXX-XXXX key format Ref #239 @MokoBot (Claude Opus 4.6)
jmiller added 1 commit 2026-05-30 18:10:16 +00:00
feat(updates): license key system and Dolibarr endpoint (Phase 2-3)
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
PR RC Release / Build RC Release (pull_request) Successful in 3s
Universal: PR Check / Validate PR (pull_request) Failing after 5s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || 'development' }}) (pull_request) Successful in 54s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
627a22ee53
Add license key data model and Dolibarr update feed endpoint:

License key system:
- license_package table: subscription tiers with duration, max sites,
  repo scope (org-wide or specific repos), and allowed update channels
- license_key table: individual keys with SHA-256 hashed storage,
  domain restriction, custom start/end dates, internal/master key flag
- license_key_usage table: tracks update check activity per key
- DB migration v335 creates all three tables

Update server enhancements:
- Dolibarr JSON endpoint at /{owner}/{repo}/updates/dolibarr.json
- License key validation on update endpoints via ?key=MOKO-XXXX param
- Channel filtering: packages restrict which update streams keys access
- Invalid keys get empty XML response (Joomla-compatible "no updates")
- Usage tracking records domain, IP, user agent, version on each check

Key design decisions:
- Org-level master keys: IsInternal=true, package RepoScope="all"
- Keys stored as SHA-256 hashes, raw key only shown at creation
- Packages define allowed channels (e.g. ["stable","rc"] for Pro tier)
- MOKO-XXXX-XXXX-XXXX-XXXX format for license keys

Ref #239

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller merged commit 6e78d49e5a into dev 2026-05-30 18:10:21 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoGitea#247