Лицензия: ответ сервера «сервер отключён от лицензии» / «лицензия отозвана» — ключ удаляется сразу, оповещение
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -106,6 +106,25 @@ func licenseCall(ctx context.Context, path string, body map[string]string) (*lic
|
||||
return &r, nil
|
||||
}
|
||||
|
||||
// licenseDeactivate — сервер отключён от лицензии в портале клиента (или лицензия отозвана): ключ
|
||||
// удаляется сразу, не дожидаясь его срока, — модули и обновления отключаются. Вернуть: ввести ключ
|
||||
// продукта заново (если в лицензии есть свободное место).
|
||||
func licenseDeactivate(rc *RuntimeConfig, reason string) {
|
||||
s := rc.Snapshot().License
|
||||
if s.Key == "" {
|
||||
return
|
||||
}
|
||||
s.Key = ""
|
||||
s.LastAttempt, s.LastOK, s.LastMsg = time.Now(), false, "лицензия отключена: "+reason
|
||||
if err := rc.SaveLicense(s); err != nil {
|
||||
log.Printf("lk-gateway: отключение лицензии: %v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("lk-gateway: лицензия на этом сервере отключена: %s", reason)
|
||||
raiseSystemAlert(rc, "Лицензия на этом сервере отключена",
|
||||
"Причина: "+reason+". Модули по лицензии и обновления отключены. Если это ошибка — введите ключ продукта заново в «Настройка → Лицензия» (нужно свободное место в лицензии) или обратитесь в ZETIT.")
|
||||
}
|
||||
|
||||
// licenseRecord — итог обращения к серверу лицензий (для карточки); token != "" — новый ключ.
|
||||
func licenseRecord(rc *RuntimeConfig, token, msg string, ok bool) error {
|
||||
s := rc.Snapshot().License
|
||||
@@ -161,6 +180,10 @@ func LicenseRenew(ctx context.Context, rc *RuntimeConfig) error {
|
||||
if err != nil {
|
||||
_ = licenseRecord(rc, "", "продление не удалось: "+err.Error(), false)
|
||||
var ae *licenseAPIError
|
||||
if errors.As(err, &ae) && (ae.Code == "install_released" || ae.Code == "revoked") {
|
||||
licenseDeactivate(rc, ae.Message)
|
||||
return err
|
||||
}
|
||||
if errors.As(err, &ae) && time.Since(licenseAlertAt) > 12*time.Hour {
|
||||
licenseAlertAt = time.Now()
|
||||
raiseSystemAlert(rc, "Лицензия: сервер лицензий отказал в продлении",
|
||||
|
||||
Reference in New Issue
Block a user