From cdaa78ecee18b38c7fd62303ef322e8a207f4fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 1 Jul 2026 16:29:04 +0400 Subject: [PATCH] fix: User-Agent on all direct HTTP calls + domain_collision, bump 5.0.75 --- universal_rebuild/internal/core/client.go | 16 +++++++++++++--- .../internal/resources_core/domain_collision.go | 1 + universal_rebuild/main.go | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/universal_rebuild/internal/core/client.go b/universal_rebuild/internal/core/client.go index 7ef4e78..84c6a72 100644 --- a/universal_rebuild/internal/core/client.go +++ b/universal_rebuild/internal/core/client.go @@ -34,6 +34,10 @@ type ctxKeyLogLevelType struct{} var ctxKeyLogLevel = ctxKeyLogLevelType{} +// userAgent — браузерный, чтобы пройти DDoS-Guard. +// Go-http-client по умолчанию блокируется фильтром ddos-guard. +const userAgent = "Mozilla/5.0" + // CtxWithLogLevel возвращает ctx с переопределённым уровнем логирования. func CtxWithLogLevel(ctx context.Context, level string) context.Context { return context.WithValue(ctx, ctxKeyLogLevel, level) @@ -513,6 +517,7 @@ func (c *UniversalClient) FindInstanceByDisplayName(ctx context.Context, service if err != nil { return nil, err } + req.Header.Set("User-Agent", userAgent) if c.ApiToken != "" { req.Header.Set("Authorization", "Bearer "+c.ApiToken) } @@ -587,6 +592,7 @@ func (c *UniversalClient) GetInstanceState(ctx context.Context, instanceUid stri if err != nil { return nil, err } + req.Header.Set("User-Agent", userAgent) if c.ApiToken != "" { req.Header.Set("Authorization", "Bearer "+c.ApiToken) } @@ -633,6 +639,7 @@ func (c *UniversalClient) GetInstanceStateRaw(ctx context.Context, instanceUid s if err != nil { return nil, err } + req.Header.Set("User-Agent", userAgent) if c.ApiToken != "" { req.Header.Set("Authorization", "Bearer "+c.ApiToken) } @@ -805,7 +812,6 @@ func (c *UniversalClient) waitForInstanceIdle(ctx context.Context, instanceUid s func (c *UniversalClient) doRequest(ctx context.Context, method, path string, payload interface{}) ([]byte, http.Header, error) { // User-Agent: браузерный, чтобы пройти DDoS-Guard (см. docs/ops/API_TOKENS.md). // Go-http-client по умолчанию блокируется фильтром ddos-guard. - const userAgent = "Mozilla/5.0" const maxRetries = 3 baseDelay := 2 * time.Second @@ -865,9 +871,13 @@ func (c *UniversalClient) doRequest(ctx context.Context, method, path string, pa fmt.Fprintf(os.Stderr, "\n>>> REQ %s %s\n%s\n", method, path, dump) } - // DEBUG + // DEBUG в файл if os.Getenv("NUBES_DEBUG_HTTP") == "1" { - fmt.Fprintf(os.Stderr, ">>> %s %s\n", method, req.URL.String()) + f, _ := os.OpenFile("/tmp/nubes_debug.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if f != nil { + fmt.Fprintf(f, ">>> %s %s\n", method, req.URL.String()) + f.Close() + } } resp, err := c.HttpClient.Do(req) if err != nil { diff --git a/universal_rebuild/internal/resources_core/domain_collision.go b/universal_rebuild/internal/resources_core/domain_collision.go index 1303799..ddf6347 100644 --- a/universal_rebuild/internal/resources_core/domain_collision.go +++ b/universal_rebuild/internal/resources_core/domain_collision.go @@ -96,6 +96,7 @@ func collectDomainOwners(ctx context.Context, client *core.UniversalClient, allo if err != nil { return nil, err } + req.Header.Set("User-Agent", "Mozilla/5.0") if client.ApiToken != "" { req.Header.Set("Authorization", "Bearer "+client.ApiToken) } diff --git a/universal_rebuild/main.go b/universal_rebuild/main.go index fb47bc9..f6f8673 100644 --- a/universal_rebuild/main.go +++ b/universal_rebuild/main.go @@ -10,7 +10,7 @@ import ( ) var ( - version string = "5.0.74" + version string = "5.0.75" ) func main() {