feat(api): implement REST API routes for licensing system #341

Closed
opened 2026-05-31 15:07:16 +00:00 by jmiller · 1 comment
Owner

Context

The licensing data models exist in models/licenses/ (5 files: license_key.go, license_key_usage.go, license_package.go, master_key.go, update_stream_config.go) but no API routes expose them.

moko-platform now has a license CLI tool (cli/license_manage.php) that expects these endpoints.

Required API Endpoints

Package Management

  • GET /api/v1/orgs/{org}/license-packages — List packages
  • POST /api/v1/orgs/{org}/license-packages — Create package
  • PATCH /api/v1/orgs/{org}/license-packages/{id} — Update package
  • DELETE /api/v1/orgs/{org}/license-packages/{id} — Delete package

Key Management

  • GET /api/v1/orgs/{org}/license-keys — List all keys for org
  • GET /api/v1/orgs/{org}/license-packages/{id}/keys — List keys for package
  • POST /api/v1/orgs/{org}/license-keys — Issue new key
  • PATCH /api/v1/orgs/{org}/license-keys/{id} — Update key (activate/revoke)
  • POST /api/v1/orgs/{org}/license-keys/{id}/renew — Renew key expiration
  • POST /api/v1/orgs/{org}/license-keys/master — Ensure master key

Validation

  • POST /api/v1/license-keys/validate — Validate raw key + domain

Usage Analytics

  • GET /api/v1/orgs/{org}/license-keys/{id}/usage — View usage logs

Auth

All org endpoints require org admin or owner token. The validate endpoint should be public or require only the license key itself.

Models Reference

  • models/licenses/license_key.go — Key generation (MOKO-XXXX format), SHA-256 hashing, domain restriction, heartbeat
  • models/licenses/license_package.go — Subscription tiers with duration, max sites, repo scope
  • models/licenses/license_key_usage.go — Update check activity tracking
  • models/licenses/master_key.go — Internal unlimited key per org
  • models/licenses/update_stream_config.go — Stream config with licensing toggle

Related

  • moko-platform cli/license_manage.php — CLI consumer of these endpoints
## Context The licensing data models exist in `models/licenses/` (5 files: license_key.go, license_key_usage.go, license_package.go, master_key.go, update_stream_config.go) but no API routes expose them. moko-platform now has a `license` CLI tool (`cli/license_manage.php`) that expects these endpoints. ## Required API Endpoints ### Package Management - `GET /api/v1/orgs/{org}/license-packages` — List packages - `POST /api/v1/orgs/{org}/license-packages` — Create package - `PATCH /api/v1/orgs/{org}/license-packages/{id}` — Update package - `DELETE /api/v1/orgs/{org}/license-packages/{id}` — Delete package ### Key Management - `GET /api/v1/orgs/{org}/license-keys` — List all keys for org - `GET /api/v1/orgs/{org}/license-packages/{id}/keys` — List keys for package - `POST /api/v1/orgs/{org}/license-keys` — Issue new key - `PATCH /api/v1/orgs/{org}/license-keys/{id}` — Update key (activate/revoke) - `POST /api/v1/orgs/{org}/license-keys/{id}/renew` — Renew key expiration - `POST /api/v1/orgs/{org}/license-keys/master` — Ensure master key ### Validation - `POST /api/v1/license-keys/validate` — Validate raw key + domain ### Usage Analytics - `GET /api/v1/orgs/{org}/license-keys/{id}/usage` — View usage logs ## Auth All org endpoints require org admin or owner token. The validate endpoint should be public or require only the license key itself. ## Models Reference - `models/licenses/license_key.go` — Key generation (MOKO-XXXX format), SHA-256 hashing, domain restriction, heartbeat - `models/licenses/license_package.go` — Subscription tiers with duration, max sites, repo scope - `models/licenses/license_key_usage.go` — Update check activity tracking - `models/licenses/master_key.go` — Internal unlimited key per org - `models/licenses/update_stream_config.go` — Stream config with licensing toggle ## Related - moko-platform `cli/license_manage.php` — CLI consumer of these endpoints
Author
Owner

Covered by #387 (API renew), #388 (API package CRUD), and #349 (settings API). All REST API routes are now implemented.

?? Generated with Claude Code

Covered by #387 (API renew), #388 (API package CRUD), and #349 (settings API). All REST API routes are now implemented. ?? Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoGitea#341