2026-05-02 07:09:31 +00:00

2.1 KiB

Central License Manager

This folder is a standalone multi-app activation manager that lives separately from the legacy license_manager/ code.

What it includes

  • index.php — landing page + JSON API endpoints
  • manage.php — admin dashboard for apps, licenses, and activations
  • install.php — schema check / auto-install page
  • config.php — local config and move-to-another-server settings
  • bootstrap.php — shared DB, schema, and helper logic

Tables it manages

  • clm_apps
  • clm_licenses
  • clm_activations

API endpoints

Use the folder base URL as the app setting:

LICENSE_API_URL=https://your-domain.example/central_license_manager

Then the client will call:

  • index.php?action=activate
  • index.php?action=verify
  • index.php?action=deactivate
  • index.php?action=health

Admin/owner endpoints require the secret:

  • index.php?action=issue
  • index.php?action=list
  • index.php?action=apps
  • index.php?action=update

Moving this folder later

  1. Copy the whole central_license_manager/ directory to the new server.
  2. Set CLM_DB_HOST, CLM_DB_NAME, CLM_DB_USER, CLM_DB_PASS.
  3. Set CLM_API_SECRET and CLM_ADMIN_PASSWORD.
  4. Open install.php once to auto-create the tables.
  5. Point each client app to the new base URL.

Compatibility note

The API currently returns both:

  • max_activations
  • allowed_activations

That keeps older client code working while you gradually upgrade each app to send a dedicated app_slug.

Current repo integration

This repo's lib/LicenseService.php now auto-detects this folder when LICENSE_API_URL is not set and uses it as the activation authority.

Default client values in this app:

  • LICENSE_APP_SLUG=bilingual-accounting
  • LICENSE_APP_NAME=Bilingual Accounting

You can override them per app with environment variables:

  • LICENSE_API_URL
  • LICENSE_API_SECRET
  • LICENSE_APP_SLUG
  • LICENSE_APP_NAME
  • LICENSE_PRODUCT_NAME
  • LICENSE_PRODUCT_VERSION

So when you move central_license_manager/ to another server later, you only need to point each app to the new base URL and set the right app slug/name.