feat(license): Lizenz-System mit Ed25519-Verify gegen license.netcell-it.com
Portiert mail-gateway/internal/license (Verify, Cache, Trial, Signature) + DB-Mirror (internal/services/license) + REST-Handler (status/verify/key/clear) + UI-Page /license (Activate, Status, Limits, Features, Re-verify) + <LicenseBanner /> neben UpdateBanner (trial-expiring, expired, verify-failed) + Scheduler: täglich Re-verify (24h-Tick) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
"ntp": "Time (NTP)",
|
||||
"firewall": "Firewall",
|
||||
"cluster": "Cluster",
|
||||
"license": "License",
|
||||
"settings": "Settings",
|
||||
"section": {
|
||||
"overview": "Overview",
|
||||
@@ -551,5 +552,42 @@
|
||||
"download": "Download",
|
||||
"copy": "Copy",
|
||||
"copied": "Copied"
|
||||
},
|
||||
"license": {
|
||||
"title": "License",
|
||||
"status": "Status",
|
||||
"product": "Product",
|
||||
"key": "License key",
|
||||
"noKey": "No key configured",
|
||||
"validUntil": "Valid until",
|
||||
"expired": "Expired",
|
||||
"daysLeft": "{{days}} days left",
|
||||
"lastVerifiedAt": "Last verified",
|
||||
"verifiedBy": "Verified by",
|
||||
"limits": "Limits",
|
||||
"unlimited": "Unlimited",
|
||||
"features": "Features",
|
||||
"reverify": "Re-verify",
|
||||
"reverified": "License re-verified successfully",
|
||||
"enterKey": "Enter key",
|
||||
"replaceKey": "Replace key",
|
||||
"enterKeyHint": "Paste your license key from the self-service portal at license.netcell-it.com.",
|
||||
"activate": "Activate",
|
||||
"saved": "License saved and verified",
|
||||
"savedButVerifyFailed": "Key saved but server-verify failed",
|
||||
"clearKey": "Remove key",
|
||||
"cleared": "License removed — system falls back to trial",
|
||||
"confirmClear": "Really remove the license key?",
|
||||
"confirmClearHint": "The system will fall back to trial-mode once the key is deleted.",
|
||||
"lastVerifyFailed": "Last server verify failed",
|
||||
"trialExpiring": "Trial expires in {{days}} day(s)",
|
||||
"trialExpiringHint": "Activate a license before the trial period ends."
|
||||
},
|
||||
"licenseBanner": {
|
||||
"expired": "License expired or invalid.",
|
||||
"trialExpiring": "Trial expires in {{days}} day(s).",
|
||||
"verifyFailed": "License verification failed",
|
||||
"cta": "Activate now →",
|
||||
"openPage": "Open license page →"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user