// Package nsdadapter реализует транспорт к НРД: // REST-клиент Интеграционного шлюза (основной канал) и резервный // WS ONYX. На M1 — REST-клиент + маршрутизация типов пакетов; // onyx остаётся скелетом до получения КриптоПро JCP (PR-6). package nsdadapter import ( "fmt" "time" ) // Profile — преднастроенный набор параметров подключения к ИШ НРД. type Profile struct { Name string IGWBaseURL string Channel string KeyContainer string RequestTimeout time.Duration RetryMax int RetryBackoff time.Duration } // Известные профили: пары среда (guest/test3/prod) x алгоритм (gost/rsa). var profiles = map[string]Profile{ "guest-gost": { Name: "guest-gost", IGWBaseURL: "http://localhost:8080", Channel: "GUEST", KeyContainer: "GUEST_GOST_CONTAINER", RequestTimeout: 30 * time.Second, RetryMax: 3, RetryBackoff: time.Second, }, "guest-rsa": { Name: "guest-rsa", IGWBaseURL: "http://localhost:8080", Channel: "GUEST", KeyContainer: "GUEST_RSA_CONTAINER", RequestTimeout: 30 * time.Second, RetryMax: 3, RetryBackoff: time.Second, }, "test3-gost": { Name: "test3-gost", IGWBaseURL: "http://localhost:8080", Channel: "TEST3", KeyContainer: "TEST3_GOST_CONTAINER", RequestTimeout: 30 * time.Second, RetryMax: 3, RetryBackoff: time.Second, }, "test3-rsa": { Name: "test3-rsa", IGWBaseURL: "http://localhost:8080", Channel: "TEST3", KeyContainer: "TEST3_RSA_CONTAINER", RequestTimeout: 30 * time.Second, RetryMax: 3, RetryBackoff: time.Second, }, "prod-gost": { Name: "prod-gost", IGWBaseURL: "http://localhost:8080", Channel: "PROD", KeyContainer: "PROD_GOST_CONTAINER", RequestTimeout: 60 * time.Second, RetryMax: 5, RetryBackoff: 2 * time.Second, }, "prod-rsa": { Name: "prod-rsa", IGWBaseURL: "http://localhost:8080", Channel: "PROD", KeyContainer: "PROD_RSA_CONTAINER", RequestTimeout: 60 * time.Second, RetryMax: 5, RetryBackoff: 2 * time.Second, }, } // LookupProfile находит профиль по имени. func LookupProfile(name string) (Profile, error) { p, ok := profiles[name] if !ok { return Profile{}, fmt.Errorf("nsdadapter: неизвестный профиль %q", name) } return p, nil } // AvailableProfiles возвращает имена всех известных профилей. func AvailableProfiles() []string { out := make([]string, 0, len(profiles)) for name := range profiles { out = append(out, name) } return out }