feat(update): обновления с сервера лицензий по лицензии установки
- по умолчанию https://lic.zetit.ru/updates; клиент артефактории передаёт лицензионный токен установки (Authorization: Bearer), сервер отдаёт модули по признакам лицензии - компоненты получили признак лицензии (ядро и криптосервис — updates, ЛК — web-cabinet, НПР — npr, экспорт QUIK — quik-export) - в bj зашит открытый ключ подписи релизов (закрытый хранится вне сервера лицензий) - проверено сквозной установкой bj-lk 0.2.0 из канала beta Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -27,13 +27,16 @@ import (
|
||||
var BuildVersion = "0.1.0"
|
||||
|
||||
// DefaultUpdatePublicKey — публичный ключ артефактории, зашитый в релиз.
|
||||
// Пустой в исходниках; подставляется при официальной сборке. Если задан в
|
||||
// Открытая часть ключа подписи релизов. Если задан в
|
||||
// настройках (UpdateSettings.PublicKey) — приоритет у настроек (для проверки
|
||||
// в bj; root-установщик верит только /etc/bj/update.pub).
|
||||
var DefaultUpdatePublicKey = ""
|
||||
var DefaultUpdatePublicKey = "GHC/gJdQOAEVuBmq8pRpfG+CoIwtcjpNlSf6bPFtr/Y=" // ~/keys/release-signing.pub (закрытый ключ хранится вне сервера лицензий)
|
||||
|
||||
const updateStagingDir = "/var/lib/bj/update-staging"
|
||||
|
||||
// DefaultUpdateURL — сервер обновлений по умолчанию (встроен в сервер лицензий).
|
||||
const DefaultUpdateURL = "https://lic.zetit.ru/updates"
|
||||
|
||||
type Updater struct{ rc *RuntimeConfig }
|
||||
|
||||
func NewUpdater(rc *RuntimeConfig) *Updater { return &Updater{rc: rc} }
|
||||
@@ -55,14 +58,23 @@ func (u *Updater) updateClient() (*release.Client, error) {
|
||||
if pub == "" {
|
||||
pub = DefaultUpdatePublicKey
|
||||
}
|
||||
if cfg.BaseURL == "" || pub == "" {
|
||||
return nil, fmt.Errorf("обновления не настроены (нужны URL артефактории и публичный ключ)")
|
||||
base := cfg.BaseURL
|
||||
if base == "" {
|
||||
base = DefaultUpdateURL
|
||||
}
|
||||
if pub == "" {
|
||||
return nil, fmt.Errorf("обновления не настроены: в этой сборке нет открытого ключа подписи релизов")
|
||||
}
|
||||
channel := cfg.Channel
|
||||
if channel == "" {
|
||||
channel = "stable"
|
||||
}
|
||||
return release.NewClient(cfg.BaseURL, channel, pub)
|
||||
cl, err := release.NewClient(base, channel, pub)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cl.Token = strings.TrimSpace(u.rc.Snapshot().License.Key) // лицензионный токен установки
|
||||
return cl, nil
|
||||
}
|
||||
|
||||
// CheckForUpdate — манифест и состояние каждого компонента.
|
||||
|
||||
Reference in New Issue
Block a user