mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
44 lines
1.6 KiB
Go
44 lines
1.6 KiB
Go
package mobile
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// CaptchaPresenter связывает ручное решение captcha с UI приложения.
|
|
//
|
|
// - Show(url): открыть WebView на локальном прокси-адресе url, где пользователь
|
|
// решает captcha. Метод блокирующим быть не обязан.
|
|
// - Hide(): captcha решена или отменена - закрыть окно.
|
|
type CaptchaPresenter interface {
|
|
Show(url string)
|
|
Hide()
|
|
}
|
|
|
|
var (
|
|
captchaMu sync.RWMutex
|
|
captchaPresenter CaptchaPresenter
|
|
)
|
|
|
|
// SetCaptchaPresenter регистрирует UI-презентер ручной captcha. Передайте nil,
|
|
// чтобы отключить ручной fallback - тогда при провале auto-captcha поток
|
|
// упадёт, как раньше. Вызывать один раз при старте приложения, до Start.
|
|
func SetCaptchaPresenter(p CaptchaPresenter) {
|
|
captchaMu.Lock()
|
|
captchaPresenter = p
|
|
captchaMu.Unlock()
|
|
}
|
|
|
|
func currentCaptchaPresenter() CaptchaPresenter {
|
|
captchaMu.RLock()
|
|
defer captchaMu.RUnlock()
|
|
return captchaPresenter
|
|
}
|
|
|
|
var manualCaptchaOnly atomic.Bool
|
|
|
|
// SetManualCaptcha включает/выключает режим "всегда решать captcha вручную".
|
|
// Применяется при следующем Start (или переподключении). Требует
|
|
// зарегистрированного презентера, иначе ручной путь недоступен.
|
|
func SetManualCaptcha(on bool) { manualCaptchaOnly.Store(on) }
|