Настройки: ключ кабинета показывается целиком — закрытый контур, нужен при переустановке кабинета
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -49,17 +49,10 @@ func lkNewAPIKey() (string, error) {
|
||||
return "lk-" + hex.EncodeToString(b), nil
|
||||
}
|
||||
|
||||
// lkKeyRevealUntil — до какого момента ключ на странице настроек показывается целиком:
|
||||
// сразу после создания администратору нужно переписать его в установщик кабинета.
|
||||
var lkKeyRevealUntil time.Time
|
||||
|
||||
// lkKeyForPage — ключ для страницы настроек: целиком сразу после создания, потом маска.
|
||||
func lkKeyForPage(key string) string {
|
||||
if key != "" && time.Now().Before(lkKeyRevealUntil) {
|
||||
return key
|
||||
}
|
||||
return maskSecret(key)
|
||||
}
|
||||
// lkKeyForPage — ключ для страницы настроек. Показывается целиком: настройки ядра —
|
||||
// закрытый контур, а при переустановке кабинета ключ нужно переписать в установщик;
|
||||
// маскированный пришлось бы пересоздавать и менять на всех кабинетах.
|
||||
func lkKeyForPage(key string) string { return key }
|
||||
|
||||
// maskSecret — показать ключ так, чтобы его нельзя было списать со скриншота,
|
||||
// но можно было сверить с тем, что стоит у кабинета.
|
||||
@@ -320,8 +313,7 @@ func (h *setupHandlers) lkSaveDist(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
s.APIKey = key
|
||||
lkKeyRevealUntil = time.Now().Add(10 * time.Minute) // показать целиком один раз, чтобы переписать в установщик
|
||||
msg = "Создан новый ключ доступа кабинета. Он показан целиком ниже в течение 10 минут — введите его в установщике кабинета (или в lk.env) и перезапустите службу кабинета, если она уже работала."
|
||||
msg = "Создан новый ключ доступа кабинета. Введите его в установщике кабинета (или в lk.env); если кабинет уже работал — удалите там lk.json и пройдите установщик заново либо впишите ключ в lk.env и перезапустите службу."
|
||||
case "clearkey":
|
||||
s.APIKey = ""
|
||||
msg = "Ключ удалён: кабинет больше не сможет обращаться к ядру."
|
||||
|
||||
@@ -19,7 +19,7 @@ func TestSetupPageLKUsersAndLink(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
render(rec, a.setup, SetupData{
|
||||
page: nowPage("Настройка", "setup"), Settings: s,
|
||||
LKKeyMask: maskSecret(s.LK.APIKey), LKAgent: lkAgentStatus(s),
|
||||
LKKeyMask: lkKeyForPage(s.LK.APIKey), LKAgent: lkAgentStatus(s),
|
||||
LKUsers: []LKUser{
|
||||
{ID: 1, Login: "manager", Contract: "ADMIN", FullName: "Сотрудник", Active: true, IsAdmin: true},
|
||||
{ID: 2, Login: "br859", Contract: "БР-859", Active: false},
|
||||
@@ -35,10 +35,7 @@ func TestSetupPageLKUsersAndLink(t *testing.T) {
|
||||
t.Errorf("в странице нет %q", want)
|
||||
}
|
||||
}
|
||||
if strings.Contains(body, s.LK.APIKey) {
|
||||
t.Error("ключ кабинета показан целиком без создания")
|
||||
}
|
||||
if !strings.Contains(body, "lk-0123") {
|
||||
t.Error("маска ключа не показана")
|
||||
if !strings.Contains(body, s.LK.APIKey) {
|
||||
t.Error("ключ кабинета должен быть показан целиком: понадобится при переустановке")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<p class="muted">Речь о нашем модуле <code>bj-lk</code> — кабинете, который клиенты открывают в браузере. Он ставится отдельно от ядра: на веб-сервер депозитария или на обычный хостинг с выделенным именем. Своей базы у кабинета нет, данные клиентов он не хранит — берёт у ядра на время запроса.</p>
|
||||
|
||||
<h3>Шаг 1. Ключ и архив</h3>
|
||||
<p>Настройки → «Личный кабинет» → «Кабинет клиента на своём сервере»: создайте ключ доступа (сразу после создания он показан целиком 10 минут — перепишите его для установщика) и скачайте архив. В архиве — исполняемый файл, служба systemd, файл настроек службы, установщик и README. Ключа в архиве нет.</p>
|
||||
<p>Настройки → «Личный кабинет» → «Кабинет клиента на своём сервере»: создайте ключ доступа (он показан на странице целиком — его нужно ввести в установщике) и скачайте архив. В архиве — исполняемый файл, служба systemd, файл настроек службы, установщик и README. Ключа в архиве нет.</p>
|
||||
|
||||
<h3>Шаг 2. Файлы на сервер и запуск</h3>
|
||||
<pre>tar xzf bj-lk-ГГГГ-ММ-ДД.tar.gz
|
||||
|
||||
@@ -617,7 +617,7 @@ function hbBind(inp,box,list,onPick){
|
||||
<button type="submit" name="op" value="newkey" class="btn btn-secondary">{{if .Settings.LK.APIKey}}Сменить ключ{{else}}Создать ключ{{end}}</button>
|
||||
{{if .Settings.LK.APIKey}}<button type="submit" name="op" value="clearkey" class="btn btn-secondary" onclick="return confirm('Удалить ключ? Кабинет перестанет получать данные, пока не впишете новый.')">Удалить</button>{{end}}
|
||||
</div>
|
||||
<span class="muted" style="font-size:12px">Ключ показан не полностью. В архив он не попадает: его вводят в установщике кабинета (или вписывают в <code>lk.env</code> при установке без браузера). Целиком ключ виден один раз — сразу после создания.</span>
|
||||
<span class="muted" style="font-size:12px">В архив ключ не попадает: его вводят в установщике кабинета (или вписывают в <code>lk.env</code> при установке без браузера). Здесь он показан целиком — понадобится при переустановке кабинета.</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user