diff --git a/cmd/client/main.go b/cmd/client/main.go index f23ed5a..b672394 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -39,7 +39,6 @@ func main() { logger := logx.New(cfg.Log.Debug) logger.Infof("btp client version=%s", version) - vk.SetCaptchaLoggers(logger, cfg.Log.Debug) dnsdial.SetLogger(logger) ctx, cancel := context.WithCancel(context.Background()) @@ -160,6 +159,7 @@ func buildProvider(cfg *config.Client, dialer net.Dialer, connected *atomic.Int3 StreamsPerCache: cfg.VK.StreamsPerCred, StreamsAlive: connected.Load, Log: logger, + Debug: cfg.Log.Debug, }, vk.DefaultManualSolver) case config.ProviderStatic: return static.New(static.Config{ diff --git a/docs/glossary.md b/docs/glossary.md index 5f9b0cf..e955ee9 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -93,8 +93,8 @@ Linux user-mode environment для iOS (через usermode x86 emulation). Па ### captcha (auto / manual) Один домен, два пути: -- **auto** (`internal/client/captcha`): VK slider-puzzle решается программно. -- **manual** (`internal/client/captcha/manual`): HTTP-сервер на 127.0.0.1:8765, запуск браузера, gzip-rewrite VK-страниц. +- **auto** (`internal/provider/vk/internal/captcha`): VK slider-puzzle решается программно. +- **manual** (`internal/provider/vk/internal/captcha/manual`): HTTP-сервер на 127.0.0.1:8765, запуск браузера, gzip-rewrite VK-страниц. Переключение: `vkauth.Client` пробует auto, при провале → manual fallback. Флаг `-manual-captcha` сразу идёт в manual. diff --git a/docs/providers.md b/docs/providers.md index 63eb7a1..e25b4bf 100644 --- a/docs/providers.md +++ b/docs/providers.md @@ -68,4 +68,3 @@ VK Calls API. Перебирает встроенные `app_id/app_secret`, п 1. **Per-process один провайдер** — нет fallback chain (VK → static). Можно добавить wrapper-провайдер позже. 2. **`StreamsAlive` callback** — VK-провайдер использует для решения fatal-vs-throttle. Другие провайдеры могут игнорировать (поле `Config.StreamsAlive` nil-safe). -3. **Файл captcha-логгеров** в `vk.SetCaptchaLoggers` — VK-специфичная утечка в `cmd/client`. Будет инкапсулирована при физическом переносе `internal/client/captcha` → `internal/provider/vk/internal/captcha`. diff --git a/internal/client/browserprofile/profile.go b/internal/provider/vk/internal/browserprofile/profile.go similarity index 100% rename from internal/client/browserprofile/profile.go rename to internal/provider/vk/internal/browserprofile/profile.go diff --git a/internal/client/captcha/captcha.go b/internal/provider/vk/internal/captcha/captcha.go similarity index 99% rename from internal/client/captcha/captcha.go rename to internal/provider/vk/internal/captcha/captcha.go index 83dc958..6e5479c 100644 --- a/internal/client/captcha/captcha.go +++ b/internal/provider/vk/internal/captcha/captcha.go @@ -20,8 +20,8 @@ import ( fhttp "github.com/bogdanfinn/fhttp" tlsclient "github.com/bogdanfinn/tls-client" - "github.com/samosvalishe/btp/internal/client/browserprofile" "github.com/samosvalishe/btp/internal/logx" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" "github.com/samosvalishe/btp/internal/randx" ) diff --git a/internal/client/captcha/errors.go b/internal/provider/vk/internal/captcha/errors.go similarity index 100% rename from internal/client/captcha/errors.go rename to internal/provider/vk/internal/captcha/errors.go diff --git a/internal/client/captcha/manual/manual.go b/internal/provider/vk/internal/captcha/manual/manual.go similarity index 99% rename from internal/client/captcha/manual/manual.go rename to internal/provider/vk/internal/captcha/manual/manual.go index 310e87d..39f9b59 100644 --- a/internal/client/captcha/manual/manual.go +++ b/internal/provider/vk/internal/captcha/manual/manual.go @@ -1,5 +1,5 @@ // Package manual реализует ручное решение CAPTCHA — fallback, когда автосолвер -// (internal/client/captcha) не справился или пользователь дал -manual-captcha. +// (internal/provider/vk/internal/captcha) не справился или пользователь дал -manual-captcha. // Поднимает локальный HTTP-сервер 127.0.0.1:8765, проксирующий страницу VK // CAPTCHA (с переписыванием абсолютных URL и gzip), открывает её в браузере и // ждёт токен/ключ после решения пользователем. @@ -24,9 +24,9 @@ import ( "strings" "time" - "github.com/samosvalishe/btp/internal/client/browserprofile" "github.com/samosvalishe/btp/internal/client/ish" "github.com/samosvalishe/btp/internal/logx" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" ) // Debug включает подробное логирование request/response проксируемого diff --git a/internal/client/captcha/manual/manual_test.go b/internal/provider/vk/internal/captcha/manual/manual_test.go similarity index 100% rename from internal/client/captcha/manual/manual_test.go rename to internal/provider/vk/internal/captcha/manual/manual_test.go diff --git a/internal/client/captcha/slider.go b/internal/provider/vk/internal/captcha/slider.go similarity index 100% rename from internal/client/captcha/slider.go rename to internal/provider/vk/internal/captcha/slider.go diff --git a/internal/client/namegen/data/first_names_female.txt b/internal/provider/vk/internal/namegen/data/first_names_female.txt similarity index 100% rename from internal/client/namegen/data/first_names_female.txt rename to internal/provider/vk/internal/namegen/data/first_names_female.txt diff --git a/internal/client/namegen/data/first_names_male.txt b/internal/provider/vk/internal/namegen/data/first_names_male.txt similarity index 100% rename from internal/client/namegen/data/first_names_male.txt rename to internal/provider/vk/internal/namegen/data/first_names_male.txt diff --git a/internal/client/namegen/data/last_names.txt b/internal/provider/vk/internal/namegen/data/last_names.txt similarity index 100% rename from internal/client/namegen/data/last_names.txt rename to internal/provider/vk/internal/namegen/data/last_names.txt diff --git a/internal/client/namegen/namegen.go b/internal/provider/vk/internal/namegen/namegen.go similarity index 100% rename from internal/client/namegen/namegen.go rename to internal/provider/vk/internal/namegen/namegen.go diff --git a/internal/client/namegen/namegen_test.go b/internal/provider/vk/internal/namegen/namegen_test.go similarity index 100% rename from internal/client/namegen/namegen_test.go rename to internal/provider/vk/internal/namegen/namegen_test.go diff --git a/internal/client/vkauth/auto_solver.go b/internal/provider/vk/internal/vkauth/auto_solver.go similarity index 90% rename from internal/client/vkauth/auto_solver.go rename to internal/provider/vk/internal/vkauth/auto_solver.go index bc1e56d..a654523 100644 --- a/internal/client/vkauth/auto_solver.go +++ b/internal/provider/vk/internal/vkauth/auto_solver.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/samosvalishe/btp/internal/client/browserprofile" - "github.com/samosvalishe/btp/internal/client/captcha" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/captcha" tlsclient "github.com/bogdanfinn/tls-client" ) diff --git a/internal/client/vkauth/cache.go b/internal/provider/vk/internal/vkauth/cache.go similarity index 100% rename from internal/client/vkauth/cache.go rename to internal/provider/vk/internal/vkauth/cache.go diff --git a/internal/client/vkauth/client.go b/internal/provider/vk/internal/vkauth/client.go similarity index 100% rename from internal/client/vkauth/client.go rename to internal/provider/vk/internal/vkauth/client.go diff --git a/internal/client/vkauth/client_test.go b/internal/provider/vk/internal/vkauth/client_test.go similarity index 100% rename from internal/client/vkauth/client_test.go rename to internal/provider/vk/internal/vkauth/client_test.go diff --git a/internal/client/vkauth/solver.go b/internal/provider/vk/internal/vkauth/solver.go similarity index 92% rename from internal/client/vkauth/solver.go rename to internal/provider/vk/internal/vkauth/solver.go index 7f4ee62..0bdb765 100644 --- a/internal/client/vkauth/solver.go +++ b/internal/provider/vk/internal/vkauth/solver.go @@ -4,8 +4,8 @@ import ( "context" "net" - "github.com/samosvalishe/btp/internal/client/browserprofile" - "github.com/samosvalishe/btp/internal/client/captcha" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/captcha" tlsclient "github.com/bogdanfinn/tls-client" ) diff --git a/internal/client/vkauth/solver_test.go b/internal/provider/vk/internal/vkauth/solver_test.go similarity index 100% rename from internal/client/vkauth/solver_test.go rename to internal/provider/vk/internal/vkauth/solver_test.go diff --git a/internal/client/vkauth/token.go b/internal/provider/vk/internal/vkauth/token.go similarity index 95% rename from internal/client/vkauth/token.go rename to internal/provider/vk/internal/vkauth/token.go index 5fabe74..06ab2da 100644 --- a/internal/client/vkauth/token.go +++ b/internal/provider/vk/internal/vkauth/token.go @@ -5,8 +5,8 @@ import ( "fmt" neturl "net/url" - "github.com/samosvalishe/btp/internal/client/browserprofile" - "github.com/samosvalishe/btp/internal/client/namegen" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/namegen" tlsclient "github.com/bogdanfinn/tls-client" "github.com/bogdanfinn/tls-client/profiles" diff --git a/internal/client/vkauth/token_anon.go b/internal/provider/vk/internal/vkauth/token_anon.go similarity index 92% rename from internal/client/vkauth/token_anon.go rename to internal/provider/vk/internal/vkauth/token_anon.go index e119ec6..f71af48 100644 --- a/internal/client/vkauth/token_anon.go +++ b/internal/provider/vk/internal/vkauth/token_anon.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/samosvalishe/btp/internal/client/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" tlsclient "github.com/bogdanfinn/tls-client" ) diff --git a/internal/client/vkauth/token_call.go b/internal/provider/vk/internal/vkauth/token_call.go similarity index 97% rename from internal/client/vkauth/token_call.go rename to internal/provider/vk/internal/vkauth/token_call.go index 7b4a104..d9d73d0 100644 --- a/internal/client/vkauth/token_call.go +++ b/internal/provider/vk/internal/vkauth/token_call.go @@ -7,8 +7,8 @@ import ( neturl "net/url" "time" - "github.com/samosvalishe/btp/internal/client/browserprofile" - "github.com/samosvalishe/btp/internal/client/captcha" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/captcha" tlsclient "github.com/bogdanfinn/tls-client" ) diff --git a/internal/client/vkauth/token_creds.go b/internal/provider/vk/internal/vkauth/token_creds.go similarity index 96% rename from internal/client/vkauth/token_creds.go rename to internal/provider/vk/internal/vkauth/token_creds.go index f09f58a..e495c0a 100644 --- a/internal/client/vkauth/token_creds.go +++ b/internal/provider/vk/internal/vkauth/token_creds.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/samosvalishe/btp/internal/client/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" tlsclient "github.com/bogdanfinn/tls-client" ) diff --git a/internal/client/vkauth/token_oksession.go b/internal/provider/vk/internal/vkauth/token_oksession.go similarity index 92% rename from internal/client/vkauth/token_oksession.go rename to internal/provider/vk/internal/vkauth/token_oksession.go index 36191c4..bce3a18 100644 --- a/internal/client/vkauth/token_oksession.go +++ b/internal/provider/vk/internal/vkauth/token_oksession.go @@ -6,7 +6,7 @@ import ( neturl "net/url" "github.com/google/uuid" - "github.com/samosvalishe/btp/internal/client/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" tlsclient "github.com/bogdanfinn/tls-client" ) diff --git a/internal/client/vkauth/token_request.go b/internal/provider/vk/internal/vkauth/token_request.go similarity index 95% rename from internal/client/vkauth/token_request.go rename to internal/provider/vk/internal/vkauth/token_request.go index f9dd07c..3f82ca0 100644 --- a/internal/client/vkauth/token_request.go +++ b/internal/provider/vk/internal/vkauth/token_request.go @@ -8,7 +8,7 @@ import ( "io" neturl "net/url" - "github.com/samosvalishe/btp/internal/client/browserprofile" + "github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile" fhttp "github.com/bogdanfinn/fhttp" tlsclient "github.com/bogdanfinn/tls-client" diff --git a/internal/client/vkauth/types.go b/internal/provider/vk/internal/vkauth/types.go similarity index 100% rename from internal/client/vkauth/types.go rename to internal/provider/vk/internal/vkauth/types.go diff --git a/internal/provider/vk/vk.go b/internal/provider/vk/vk.go index 16d09ce..e30c293 100644 --- a/internal/provider/vk/vk.go +++ b/internal/provider/vk/vk.go @@ -1,6 +1,6 @@ // Package vk — провайдер TURN-реквизитов через VK Calls API. // -// Фасад над internal/client/vkauth: добавляет фиксированный link (адрес +// Фасад над internal/provider/vk/internal/vkauth: добавляет фиксированный link (адрес // VK callroom) и адаптирует сигнатуру GetCredentials к provider.Provider. // // vk.Provider удовлетворяет provider.Provider и используется через generic @@ -12,11 +12,11 @@ import ( "fmt" "net" - "github.com/samosvalishe/btp/internal/client/captcha" - manualcaptcha "github.com/samosvalishe/btp/internal/client/captcha/manual" - "github.com/samosvalishe/btp/internal/client/vkauth" "github.com/samosvalishe/btp/internal/logx" "github.com/samosvalishe/btp/internal/provider" + "github.com/samosvalishe/btp/internal/provider/vk/internal/captcha" + manualcaptcha "github.com/samosvalishe/btp/internal/provider/vk/internal/captcha/manual" + "github.com/samosvalishe/btp/internal/provider/vk/internal/vkauth" ) // Config — параметры VK-провайдера. @@ -43,6 +43,9 @@ type Config struct { // Log — уровневый логгер. nil → no-op. Log logx.Logger + + // Debug включает debug-вывод в manual-captcha (HTTP-сервер). + Debug bool } // ManualSolverFunc — кастомный решатель captcha. Если nil, vkauth не пытается @@ -61,6 +64,11 @@ func New(cfg Config, solver ManualSolverFunc) (*Provider, error) { if cfg.Link == "" { return nil, fmt.Errorf("vk: empty Link") } + // captcha-пакеты — internal/ для provider/vk, поэтому подключаем + // логгер здесь, а не в cmd/client. + captcha.SetLogger(cfg.Log) + manualcaptcha.SetLogger(cfg.Log) + manualcaptcha.Debug = cfg.Debug auth := vkauth.New(vkauth.Config{ Credentials: cfg.Credentials, Dialer: cfg.Dialer, @@ -97,17 +105,8 @@ func (p *Provider) BackoffUntilUnix() int64 { return p.auth.BackoffUntilUnix() } // Name реализует provider.Provider. func (*Provider) Name() string { return "vk" } -// SetCaptchaLoggers подключает logger в общие captcha-пакеты. Удобный шорткат -// для cmd/client/main.go, чтобы не импортировать captcha/manualcaptcha напрямую -// после полного перехода на provider/vk. -func SetCaptchaLoggers(log logx.Logger, debug bool) { - captcha.SetLogger(log) - manualcaptcha.SetLogger(log) - manualcaptcha.Debug = debug -} - // DefaultManualSolver — стандартный manual-captcha solver, использует -// internal/client/captcha/manual (HTTP-сервер 127.0.0.1:8765 + браузер). +// internal/provider/vk/internal/captcha/manual (HTTP-сервер 127.0.0.1:8765 + браузер). func DefaultManualSolver(ctx context.Context, e *captcha.Error, d net.Dialer) (string, string, error) { if e.RedirectURI != "" { t, err := manualcaptcha.SolveViaProxy(ctx, e.RedirectURI, d)