Compare commits
No commits in common. "master" and "fix/execute" have entirely different histories.
master
...
fix/execut
2
Cartfile
2
Cartfile
|
|
@ -1 +1 @@
|
||||||
binary "https://raw.github.com/TouchInstinct/CarthageBinaries/master/RxSwift/RxSwift.json"
|
github "ReactiveX/RxSwift" ~> 4.3
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
binary "https://raw.github.com/TouchInstinct/CarthageBinaries/master/RxSwift/RxSwift.json" "4.5.0"
|
github "ReactiveX/RxSwift" "4.4.0"
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,6 @@ import WebKit
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class ReCaptcha {
|
public class ReCaptcha {
|
||||||
public typealias BoolParameterClosure = (Bool) -> ()
|
|
||||||
|
|
||||||
fileprivate struct Constants {
|
fileprivate struct Constants {
|
||||||
struct InfoDictKeys {
|
struct InfoDictKeys {
|
||||||
static let APIKey = "ReCaptchaKey"
|
static let APIKey = "ReCaptchaKey"
|
||||||
|
|
@ -103,12 +101,6 @@ public class ReCaptcha {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Callback for WebView loading state changing
|
|
||||||
public var onLoadingChanged: BoolParameterClosure? {
|
|
||||||
get { return manager.onLoadingChanged }
|
|
||||||
set { manager.onLoadingChanged = newValue }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The worker that handles webview events and communication
|
/// The worker that handles webview events and communication
|
||||||
let manager: ReCaptchaWebViewManager
|
let manager: ReCaptchaWebViewManager
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,9 +44,6 @@ internal class ReCaptchaWebViewManager {
|
||||||
public var shouldSkipForTests = false
|
public var shouldSkipForTests = false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Callback for loading state changing
|
|
||||||
var onLoadingChanged: ReCaptcha.BoolParameterClosure?
|
|
||||||
|
|
||||||
/// Sends the result message
|
/// Sends the result message
|
||||||
var completion: ((ReCaptchaResult) -> Void)?
|
var completion: ((ReCaptchaResult) -> Void)?
|
||||||
|
|
||||||
|
|
@ -109,7 +106,6 @@ internal class ReCaptchaWebViewManager {
|
||||||
*/
|
*/
|
||||||
init(html: String, apiKey: String, baseURL: URL, endpoint: String) {
|
init(html: String, apiKey: String, baseURL: URL, endpoint: String) {
|
||||||
self.endpoint = endpoint
|
self.endpoint = endpoint
|
||||||
|
|
||||||
self.decoder = ReCaptchaDecoder { [weak self] result in
|
self.decoder = ReCaptchaDecoder { [weak self] result in
|
||||||
self?.handle(result: result)
|
self?.handle(result: result)
|
||||||
}
|
}
|
||||||
|
|
@ -137,7 +133,6 @@ internal class ReCaptchaWebViewManager {
|
||||||
Starts the challenge validation
|
Starts the challenge validation
|
||||||
*/
|
*/
|
||||||
func validate(on view: UIView) {
|
func validate(on view: UIView) {
|
||||||
onLoadingChanged?(true)
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
guard !shouldSkipForTests else {
|
guard !shouldSkipForTests else {
|
||||||
completion?(.token(""))
|
completion?(.token(""))
|
||||||
|
|
@ -199,7 +194,6 @@ fileprivate extension ReCaptchaWebViewManager {
|
||||||
webView.evaluateJavaScript(Constants.NumberOfDivsCommand) { [weak self] (result, error) -> Void in
|
webView.evaluateJavaScript(Constants.NumberOfDivsCommand) { [weak self] (result, error) -> Void in
|
||||||
if let error = error {
|
if let error = error {
|
||||||
self?.decoder.send(error: .unexpected(error))
|
self?.decoder.send(error: .unexpected(error))
|
||||||
self?.onLoadingChanged?(false)
|
|
||||||
} else {
|
} else {
|
||||||
self?.handleNumberOfDivs(result: result, count: count)
|
self?.handleNumberOfDivs(result: result, count: count)
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +227,6 @@ fileprivate extension ReCaptchaWebViewManager {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
decoder.send(error: .htmlLoadError)
|
decoder.send(error: .htmlLoadError)
|
||||||
onLoadingChanged?(false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,7 +238,6 @@ fileprivate extension ReCaptchaWebViewManager {
|
||||||
if let error = error {
|
if let error = error {
|
||||||
self?.decoder.send(error: .unexpected(error))
|
self?.decoder.send(error: .unexpected(error))
|
||||||
}
|
}
|
||||||
self?.onLoadingChanged?(false)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,6 @@
|
||||||
import RxSwift
|
import RxSwift
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
public enum ReCaptchaRxError: Error {
|
|
||||||
case baseWasReleased
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Makes ReCaptcha compatible with RxSwift extensions
|
/// Makes ReCaptcha compatible with RxSwift extensions
|
||||||
extension ReCaptcha: ReactiveCompatible {}
|
extension ReCaptcha: ReactiveCompatible {}
|
||||||
|
|
||||||
|
|
@ -68,20 +64,4 @@ public extension Reactive where Base: ReCaptcha {
|
||||||
base?.reset()
|
base?.reset()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Observable of loading state
|
|
||||||
(will not work if someone changes onLoadingChanged variable; current onLodinglChanged will not work after subscription)
|
|
||||||
*/
|
|
||||||
var loadingObservable: Observable<Bool> {
|
|
||||||
return .create { [weak base] observer -> Disposable in
|
|
||||||
guard let base = base else {
|
|
||||||
observer.onError(ReCaptchaRxError.baseWasReleased)
|
|
||||||
return Disposables.create()
|
|
||||||
}
|
|
||||||
|
|
||||||
base.onLoadingChanged = { observer.onNext($0) }
|
|
||||||
return Disposables.create { [weak base] in base?.onLoadingChanged = nil }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue