License file verification (Ed25519, offline) #24
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/Cairn#24
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ARCHITECTURE §8.1. A license is a signed file: JSON claims (customer, tier, max users, expiry) + Ed25519 signature, verified locally against a public key embedded in the binary. Fully offline-capable.
Licensing plumbing (kept in v0.4 with the product; public launch materials moved to v0.5).
Scope expanded (Nikola, 2026-07-26) — full enforcement model:
Free tier: ≤50 users, no license, no phone-home ever. The 50-user boundary is the only trigger.
Seat counting: distinct authenticated usernames. Local mode: config
userscount. OIDC/LDAP: distinct usernames ever seen, persisted in a small JSON on/data(same pattern as app-passwords) — no DB.Over 50 without a valid license:
With a license (Ed25519-signed license file, verified offline — this issue's core):
Admin UI (Settings → License, admin-gated): paste the license key, show status (licensed org, seats used/max, expiry, last successful check-in, grace-window countdown if failing).
Related: server side in cairn-license-server (repo created, #25), purchase/account flow on the landing page (cairn-site repo, #26). Still blocked on the signing keypair (M1).