feat(licenses): UI/UX cleanup, permissions system, and key management improvements #305
Reference in New Issue
Block a user
Delete Branch "fix/admin-delete-only"
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?
Summary
Test plan
Resolves: #304
Generated with Claude Code
Add key editing, domain enforcement, purchase webhooks, public validation API, channels multiselect, Joomla downloadkey element, licensing feature toggle, unified update system, release tag enforcement, heartbeat tracking, and improved settings UX. Phase 1: Full key display with AbsoluteShort dates, master package protection (hide edit/delete in UI, reject in handlers). Phase 2: Key edit page with template, handlers, and routes for both repo and org levels. Master keys redirect away. Phase 3: Domain restriction checking against CSV allowlist, MaxSites enforcement via CountUniqueDomainsByKey and IsDomainKnownForKey, dlid query param support for Joomla. Phase 4: Purchase webhook (POST /license-keys/purchase) with PaymentRef idempotency. Public validation endpoint (POST /license-keys/validate) outside auth middleware. PATCH /license-keys/{id} for API key editing. Phase 5: Channels multiselect using org UpdateStreamConfig streams rendered as checkboxes, stored as JSON arrays. Additional: downloadkey XML element, LicensingEnabled toggle on UpdateStreamConfig, Dolibarr endpoint unified with key validation, release tag suffix enforcement, LastHeartbeatUnix field with TouchHeartbeat, and cleaned-up settings pages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>Post-Deploy Verification
Production:
v1.26.1-moko.05.05.00-dev-rc.306-2-gbfa9043bc8— healthyDev: Same image, healthy after fixing s6/openssh crash loop
Automated Tests
link-action+data-modal-confirm(hidden for unauth = correct)data-clipboard-targetelements present in authenticated viewui small labelwith count renders on org pageocticon-keySVG in navbaractive_help_package/active_help_keydeployednone_desclocale keyui compact tableconfirmedorange labelconfirmed on pageUnitMaxAccess()grants admin to admin-level teams{"valid":false,"message":"invalid license key"}Dev Instance Fix
The
dev-latestimage had broken s6/openssh — openssh failed with exit code 256 causing infinite restart. Fixed by pinning to same image as production.Claude Opus 4.6 (1M context) noreply@anthropic.com