Files
free-turn-proxy/mobile/captcha.go
T

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) }