Conversation
Contributor
fupelaqu
commented
Apr 5, 2026
- Closed Issue Feature & Quota Extensions #62
- Closed Issue JWT License Key Validation (Ed25519) #63
- Closed Issue License Configuration & Resolution Priority #64
- Closed Issue API Key Client & JWT Fetch #65
- Closed Issue Disk Cache & Offline Fallback #66
- Closed Issue Expiry Grace Period & Degradation #67
- Closed Issue License Manager SPI Architecture (Phase 1) #71
…and update quotas Closed Issue #62
Implements Story 5.2: JwtLicenseManager validates JWT license keys offline using Ed25519 (EdDSA) signatures via nimbus-jose-jwt. Includes LicenseKeyVerifier for classpath JWK public key loading, licensingTestkit module with JwtTestHelper for cross-project test reuse, and 40 unit tests on Scala 2.12 + 2.13. Closed Issue #63 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add LicenseConfig (HOCON + env var loading), LicenseResolver (4-step priority: static JWT → API key fetch → disk cache → Community), grace period support in JwtLicenseManager, and LicenseKey.Community constant. Closed Issue #64 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements automated JWT provisioning via API key (POST /api/v1/licenses/token), persistent instance ID, API key format validation, and directional tier change logging in LicenseResolver. Closed Issue #65 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
LicenseCache provides atomic write (temp+rename), symlink/size guards, and defensive error handling. LicenseResolver gains cacheWriter (Step 2) and cacheInvalidator (Step 3) callbacks for write-on-fetch and delete-on-stale semantics. Closed Issue #66 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement 14-day configurable grace period after JWT expiry with two phases (EarlyGrace/MidGrace), per-request warnings, restoration detection after degradation, and POSIX file permissions for cache files. Closed Issue #67 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ServiceLoader-based SPI architecture for pluggable license managers. Core licensing module is now lightweight (no crypto deps). JWT implementation moved to softclient4es-extensions. CommunityLicenseManager is the fallback when no extensions JAR is present. Key changes: - LicenseManagerSpi trait with priority-based discovery - LicenseMode (LongRunning/Driver) for runtime context - CommunityLicenseManager replaces DefaultLicenseManager (deprecated alias kept) - ExtensionApi uses lazy val with SPI resolution and error fallback - refresh() method on LicenseManager trait (RefreshNotSupported for Community) - licensingTestkit subproject removed (moved to extensions) Closed Issue #71 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.