mirror of
https://github.com/readest/readest.git
synced 2026-04-29 12:00:49 +00:00
refactor: rename plugin safari-auth to native-bridge (#749)
* fix: layout tweaks for mobile * refactor: rename plugin safari-auth to native-bridge
This commit is contained in:
parent
f90177713a
commit
a72c8f2391
46 changed files with 145 additions and 144 deletions
|
|
@ -0,0 +1,55 @@
|
|||
import AuthenticationServices
|
||||
import SwiftRs
|
||||
import Tauri
|
||||
import UIKit
|
||||
import WebKit
|
||||
|
||||
class SafariAuthRequestArgs: Decodable {
|
||||
let authUrl: String
|
||||
}
|
||||
|
||||
class NativeBridgePlugin: Plugin {
|
||||
private var authSession: ASWebAuthenticationSession?
|
||||
|
||||
@objc public func auth_with_safari(_ invoke: Invoke) throws {
|
||||
let args = try invoke.parseArgs(SafariAuthRequestArgs.self)
|
||||
let authUrl = URL(string: args.authUrl)!
|
||||
|
||||
authSession = ASWebAuthenticationSession(url: authUrl, callbackURLScheme: "readest") {
|
||||
[weak self] callbackURL, error in
|
||||
guard let strongSelf = self else { return }
|
||||
|
||||
if let error = error {
|
||||
Logger.error("Auth session error: \(error.localizedDescription)")
|
||||
invoke.reject(error.localizedDescription)
|
||||
return
|
||||
}
|
||||
|
||||
if let callbackURL = callbackURL {
|
||||
Logger.info("Auth session callback URL: \(callbackURL.absoluteString)")
|
||||
strongSelf.authSession?.cancel()
|
||||
strongSelf.authSession = nil
|
||||
invoke.resolve(["redirectUrl": callbackURL.absoluteString])
|
||||
}
|
||||
}
|
||||
|
||||
if #available(iOS 13.0, *) {
|
||||
authSession?.presentationContextProvider = self
|
||||
}
|
||||
|
||||
let started = authSession?.start() ?? false
|
||||
Logger.info("Auth session start result: \(started)")
|
||||
}
|
||||
}
|
||||
|
||||
@_cdecl("init_plugin_native_bridge")
|
||||
func initPlugin() -> Plugin {
|
||||
return NativeBridgePlugin()
|
||||
}
|
||||
|
||||
@available(iOS 13.0, *)
|
||||
extension NativeBridgePlugin: ASWebAuthenticationPresentationContextProviding {
|
||||
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
|
||||
return UIApplication.shared.windows.first ?? UIWindow()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue