fix(license): Rejection-Reason anzeigen + Placeholder NETC- korrigieren
Wenn der License-Server valid:false zurückgibt, wird payload.reason jetzt als roter Alert angezeigt — bisher war der Grund nicht sichtbar und der Operator sah nur "Abgelaufen" ohne Erklärung. Formular-Placeholder NMG-XXXX → NETC-XXXX (mail-gateway copy-paste). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -60,7 +60,7 @@ import (
|
|||||||
usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users"
|
usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users"
|
||||||
)
|
)
|
||||||
|
|
||||||
var version = "1.1.129"
|
var version = "1.1.130"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
addr := os.Getenv("EDGEGUARD_API_ADDR")
|
addr := os.Getenv("EDGEGUARD_API_ADDR")
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
"git.netcell-it.de/projekte/edgeguard-native/internal/services/setup"
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/setup"
|
||||||
)
|
)
|
||||||
|
|
||||||
var version = "1.1.129"
|
var version = "1.1.130"
|
||||||
|
|
||||||
const usage = `edgeguard-ctl — EdgeGuard CLI
|
const usage = `edgeguard-ctl — EdgeGuard CLI
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import (
|
|||||||
"git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts"
|
"git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts"
|
||||||
)
|
)
|
||||||
|
|
||||||
var version = "1.1.129"
|
var version = "1.1.130"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// renewTickInterval — how often we re-evaluate expiring certs.
|
// renewTickInterval — how often we re-evaluate expiring certs.
|
||||||
|
|||||||
@@ -1071,6 +1071,7 @@
|
|||||||
"confirmClear": "Lizenz-Schlüssel wirklich entfernen?",
|
"confirmClear": "Lizenz-Schlüssel wirklich entfernen?",
|
||||||
"confirmClearHint": "System fällt auf Trial-Modus zurück, sobald der Schlüssel gelöscht wird.",
|
"confirmClearHint": "System fällt auf Trial-Modus zurück, sobald der Schlüssel gelöscht wird.",
|
||||||
"lastVerifyFailed": "Letzte Server-Verifizierung fehlgeschlagen",
|
"lastVerifyFailed": "Letzte Server-Verifizierung fehlgeschlagen",
|
||||||
|
"serverRejected": "Lizenz vom Server abgelehnt",
|
||||||
"trialExpiring": "Trial läuft in {{days}} Tag(en) ab",
|
"trialExpiring": "Trial läuft in {{days}} Tag(en) ab",
|
||||||
"trialExpiringHint": "Lizenz aktivieren, bevor die Trial-Periode endet.",
|
"trialExpiringHint": "Lizenz aktivieren, bevor die Trial-Periode endet.",
|
||||||
"tagActive": "Aktiv",
|
"tagActive": "Aktiv",
|
||||||
|
|||||||
@@ -1071,6 +1071,7 @@
|
|||||||
"confirmClear": "Really remove the license key?",
|
"confirmClear": "Really remove the license key?",
|
||||||
"confirmClearHint": "The system will fall back to trial-mode once the key is deleted.",
|
"confirmClearHint": "The system will fall back to trial-mode once the key is deleted.",
|
||||||
"lastVerifyFailed": "Last server verify failed",
|
"lastVerifyFailed": "Last server verify failed",
|
||||||
|
"serverRejected": "License rejected by server",
|
||||||
"trialExpiring": "Trial expires in {{days}} day(s)",
|
"trialExpiring": "Trial expires in {{days}} day(s)",
|
||||||
"trialExpiringHint": "Activate a license before the trial period ends.",
|
"trialExpiringHint": "Activate a license before the trial period ends.",
|
||||||
"tagActive": "Active",
|
"tagActive": "Active",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ interface LicenseStatus {
|
|||||||
payload?: {
|
payload?: {
|
||||||
product?: string
|
product?: string
|
||||||
type?: string
|
type?: string
|
||||||
|
reason?: string
|
||||||
limits?: Record<string, number>
|
limits?: Record<string, number>
|
||||||
features?: Record<string, boolean>
|
features?: Record<string, boolean>
|
||||||
}
|
}
|
||||||
@@ -130,6 +131,16 @@ export default function LicensePage() {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{status?.status !== 'active' && status?.payload?.reason && (
|
||||||
|
<Alert
|
||||||
|
type="error"
|
||||||
|
showIcon
|
||||||
|
message={t('license.serverRejected')}
|
||||||
|
description={status.payload.reason}
|
||||||
|
className="mb-16"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
{isTrial && days !== null && days <= 14 && (
|
{isTrial && days !== null && days <= 14 && (
|
||||||
<Alert
|
<Alert
|
||||||
type={days <= 3 ? 'error' : 'warning'}
|
type={days <= 3 ? 'error' : 'warning'}
|
||||||
@@ -226,7 +237,7 @@ export default function LicensePage() {
|
|||||||
<Paragraph type="secondary">{t('license.enterKeyHint')}</Paragraph>
|
<Paragraph type="secondary">{t('license.enterKeyHint')}</Paragraph>
|
||||||
<Form form={form} layout="vertical" onFinish={(v) => setKey.mutate(v.license_key.trim())}>
|
<Form form={form} layout="vertical" onFinish={(v) => setKey.mutate(v.license_key.trim())}>
|
||||||
<Form.Item name="license_key" label={t('license.key')} rules={[{ required: true }]}>
|
<Form.Item name="license_key" label={t('license.key')} rules={[{ required: true }]}>
|
||||||
<Input.TextArea rows={3} placeholder="NMG-XXXX-XXXX-XXXX-XXXX" />
|
<Input.TextArea rows={3} placeholder="NETC-XXXX-XXXX-XXXX-XXXX" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|||||||
Reference in New Issue
Block a user