mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
refactor(provider/vk): перенести vkauth/captcha/browserprofile/namegen под provider/vk/internal
Переносит VK-specific пакеты под internal/provider/vk/internal/* — теперь недоступны для импорта извне provider/vk (Go internal/ rule). ish остался в internal/client/ish — не VK-specific. vk.SetCaptchaLoggers удалён: логгеры captcha/manual подключаются внутри vk.New, debug-флаг передаётся через новое поле Config.Debug. cmd/client/main.go больше не импортирует captcha-пакеты. Документация обновлена.
This commit is contained in:
+1
-1
@@ -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{
|
||||
|
||||
+2
-2
@@ -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.
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
+1
-1
@@ -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"
|
||||
)
|
||||
|
||||
+2
-2
@@ -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 проксируемого
|
||||
+2
-2
@@ -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"
|
||||
)
|
||||
@@ -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"
|
||||
)
|
||||
@@ -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"
|
||||
+1
-1
@@ -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"
|
||||
)
|
||||
+2
-2
@@ -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"
|
||||
)
|
||||
+1
-1
@@ -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"
|
||||
)
|
||||
+1
-1
@@ -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"
|
||||
)
|
||||
+1
-1
@@ -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"
|
||||
+13
-14
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user