mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
3211ed9ad5
Персона строится детерминированно из FingerprintSeed (Client ID) и живёт между перезапусками; при отказе captcha сжигается, и цепочка проходится заново новой личностью с чистыми куками. Телеметрия captcha (internal/captcha/telemetry.go) собирает аналитику виджета: сэмплы сенсоров, connection-поля, курсор/тапы. Жест проживается в реальном времени, иначе тайминги массивов не сходятся. internal/personanet - TLS-клиент персоны (JA3 + split ClientHello), общий для VK-auth и ручной captcha; порядок заголовков задаёт browserprofile. BREAKING CHANGE: флаг -browser убран, семейство персоны всегда Chrome - только Chromium даёт NetworkInformation и Generic Sensors, без которых телеметрия captcha неполна. Класс устройства по-прежнему за -platform.
32 lines
956 B
Go
32 lines
956 B
Go
package vk
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net"
|
|
"sync"
|
|
|
|
"github.com/samosvalishe/free-turn-proxy/internal/provider/vk/internal/browserprofile"
|
|
"github.com/samosvalishe/free-turn-proxy/internal/provider/vk/internal/captcha"
|
|
manualcaptcha "github.com/samosvalishe/free-turn-proxy/internal/provider/vk/internal/captcha/manual"
|
|
)
|
|
|
|
var proxyManualMu sync.Mutex
|
|
|
|
// ProxyManualSolver показывает UI после запуска локального captcha-прокси.
|
|
func ProxyManualSolver(show func(url string), hide func()) ManualSolverFunc {
|
|
return func(ctx context.Context, e *captcha.Error, dialer net.Dialer, profile browserprofile.Profile) (string, error) {
|
|
if e.RedirectURI == "" {
|
|
return "", fmt.Errorf("manual captcha: no redirect_uri")
|
|
}
|
|
|
|
proxyManualMu.Lock()
|
|
defer proxyManualMu.Unlock()
|
|
if hide != nil {
|
|
defer hide()
|
|
}
|
|
|
|
return manualcaptcha.SolveViaProxyWithPresenter(ctx, e.RedirectURI, dialer, profile, show)
|
|
}
|
|
}
|