Режим разработки: служебные разделы, робот НРД и имитации — только по признаку из ключа лицензии

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-17 18:15:18 +03:00
parent 698956092b
commit 627dbca6af
22 changed files with 157 additions and 38 deletions
+21 -1
View File
@@ -24,7 +24,8 @@ type LicenseStatus struct {
ContractUntil time.Time
DaysLeft int
AllowsUpdates bool
Features []string // признаки (модули), разрешённые ключом
Features []string // признаки (модули), разрешённые ключом
DevUntil time.Time // режим разработки до (выдаёт сервер лицензий; нулевое — выключен)
Message string
}
@@ -71,6 +72,22 @@ func modulesAllowed(rc *RuntimeConfig) map[string]bool {
return m
}
// devModeForced — режим разработки в тестах пакета.
var devModeForced bool
// devMode — режим разработки: сервер лицензий временно открыл разработчикам bj тестовые разделы и
// служебные инструменты на этой установке. Без него у клиента их нет (адреса отвечают 404).
func devMode(rc *RuntimeConfig) bool {
if devModeForced {
return true
}
if rc == nil {
return false
}
st := licenseStatus(rc)
return st.Valid && time.Now().Before(st.DevUntil)
}
// moduleAllowed — разрешён ли модуль (лицензионный признак). План enterprise — все модули.
func moduleAllowed(rc *RuntimeConfig, feature string) bool {
st := licenseStatus(rc)
@@ -127,6 +144,9 @@ func licenseStatus(rc *RuntimeConfig) LicenseStatus {
st.DaysLeft = lic.DaysLeft(now)
st.AllowsUpdates = lic.AllowsUpdates()
st.Features = lic.Features
if lic.DevUntil != nil {
st.DevUntil = *lic.DevUntil
}
st.Online = lic.InstallID != ""
if lic.Product != "" && lic.Product != "bj-server" {
st.Message = "ключ выпущен для другого продукта (" + lic.Product + ")"