Мастер: шапка на месте; домен — только логин и пароль; модуль «1С: база мидл-офиса» (тест)
- Шапка мастера: правый блок (шлюз НРД, пользователь, тема) снова справа — после правила [hidden] скрытое меню перестало его распирать. - Домен в шаге «Учётные записи»: bj сам находит домен и контроллеры (логин с @домен, домены поиска DNS, rootDSE DNS-серверов, SRV _ldap._tcp.dc._msdcs); адрес и домен — в расширенных настройках, открываются сами, если не нашлось. Контроллеры по очереди, LDAPS → LDAP+StartTLS. - Неудачная попытка ничего не теряет: введённое (и пароль) — черновиком, форма заполнена; причины словами (неизвестный ЦС, имя в сертификате, IP вместо имени, порт закрыт, нет в DNS). - Сертификат неизвестного центра: карточка «кем выдан, отпечаток (SHA-1 как в Windows и SHA-256)» и «Доверять и подключить»; после входа bj берёт из домена сертификат центра (AIA / Certification Authorities), подписавший сертификат контроллера, — подходят все контроллеры. То же в Настройка → Пользователи при «Проверить». - Лицензия: модуль onec-middle «1С: база мидл-офиса (тест)»; раздел настроек — адрес публикации, пользователь, пароль, проверка через OData $metadata; в мастере — в «Модулях». - ЛК (callback, API, готовность) — только при модуле «ЕСИА Финанс»; карточка режима QUIK и стили настроек как в мастере. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package lkgateway
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOneCBase(t *testing.T) {
|
||||
for in, want := range map[string]string{
|
||||
"http://1c/middle/": "http://1c/middle",
|
||||
"1c-server/middle": "http://1c-server/middle",
|
||||
"https://1c/mid/odata/standard.odata/$metadata": "https://1c/mid",
|
||||
" http://1c/mid/OData/standard.odata ": "http://1c/mid",
|
||||
} {
|
||||
if got := oneCBase(in); got != want {
|
||||
t.Errorf("oneCBase(%q) = %q, want %q", in, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestOneCCheck(t *testing.T) {
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
u, p, _ := r.BasicAuth()
|
||||
switch {
|
||||
case !strings.HasPrefix(r.URL.Path, "/mid/odata/standard.odata/$metadata"):
|
||||
http.NotFound(w, r)
|
||||
case u != "bj" || p != "секрет":
|
||||
w.WriteHeader(http.StatusUnauthorized)
|
||||
default:
|
||||
w.Write([]byte(`<edmx:Edmx><edmx:DataServices><Schema><EntityType Name="Catalog_Клиенты"/><EntityType Name="Document_Поручение"/></Schema></edmx:DataServices></edmx:Edmx>`))
|
||||
}
|
||||
}))
|
||||
defer srv.Close()
|
||||
ctx := context.Background()
|
||||
if ok, msg := oneCCheck(ctx, OneCSettings{URL: srv.URL + "/mid", User: "bj", Password: "секрет"}); !ok || !strings.Contains(msg, "объектов в OData — 2") {
|
||||
t.Fatalf("рабочее подключение: %v %q", ok, msg)
|
||||
}
|
||||
if ok, msg := oneCCheck(ctx, OneCSettings{URL: srv.URL + "/mid", User: "bj", Password: "не тот"}); ok || !strings.Contains(msg, "не пустила") {
|
||||
t.Fatalf("неверный пароль: %v %q", ok, msg)
|
||||
}
|
||||
if ok, msg := oneCCheck(ctx, OneCSettings{URL: srv.URL + "/other", User: "bj", Password: "секрет"}); ok || !strings.Contains(msg, "Публиковать стандартный интерфейс OData") {
|
||||
t.Fatalf("без OData: %v %q", ok, msg)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOneCModuleGate(t *testing.T) {
|
||||
if f := moduleForPath("/admin/setup/onec"); f != "onec-middle" {
|
||||
t.Fatalf("раздел 1С без модуля лицензии: %q", f)
|
||||
}
|
||||
if moduleTitle("onec-middle") == "onec-middle" {
|
||||
t.Fatal("нет названия модуля для лицензии")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user