79 lines
2.8 KiB
Swift
79 lines
2.8 KiB
Swift
//
|
|
// WebAuthenticationSessionManager.swift
|
|
// flutter_inappwebview
|
|
//
|
|
// Created by Lorenzo Pichilli on 08/05/22.
|
|
//
|
|
|
|
import FlutterMacOS
|
|
import AppKit
|
|
import WebKit
|
|
import Foundation
|
|
import AVFoundation
|
|
import SafariServices
|
|
|
|
public class WebAuthenticationSessionManager: ChannelDelegate {
|
|
static let METHOD_CHANNEL_NAME = "com.pichillilorenzo/flutter_webauthenticationsession"
|
|
var plugin: InAppWebViewFlutterPlugin?
|
|
var sessions: [String: WebAuthenticationSession?] = [:]
|
|
|
|
init(plugin: InAppWebViewFlutterPlugin) {
|
|
super.init(channel: FlutterMethodChannel(name: WebAuthenticationSessionManager.METHOD_CHANNEL_NAME, binaryMessenger: plugin.registrar!.messenger))
|
|
self.plugin = plugin
|
|
}
|
|
|
|
public override func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
let arguments = call.arguments as? NSDictionary
|
|
|
|
switch call.method {
|
|
case "create":
|
|
let id = arguments!["id"] as! String
|
|
let url = arguments!["url"] as! String
|
|
let callbackURLScheme = arguments!["callbackURLScheme"] as? String
|
|
let initialSettings = arguments!["initialSettings"] as! [String: Any?]
|
|
create(id: id, url: url, callbackURLScheme: callbackURLScheme, settings: initialSettings, result: result)
|
|
break
|
|
case "isAvailable":
|
|
if #available(macOS 10.15, *) {
|
|
result(true)
|
|
} else {
|
|
result(false)
|
|
}
|
|
break
|
|
default:
|
|
result(FlutterMethodNotImplemented)
|
|
break
|
|
}
|
|
}
|
|
|
|
public func create(id: String, url: String, callbackURLScheme: String?, settings: [String: Any?], result: @escaping FlutterResult) {
|
|
if #available(macOS 10.15, *), let plugin = plugin {
|
|
let sessionUrl = URL(string: url) ?? URL(string: "about:blank")!
|
|
let initialSettings = WebAuthenticationSessionSettings()
|
|
let _ = initialSettings.parse(settings: settings)
|
|
let session = WebAuthenticationSession(plugin: plugin, id: id, url: sessionUrl, callbackURLScheme: callbackURLScheme, settings: initialSettings)
|
|
session.prepare()
|
|
sessions[id] = session
|
|
result(true)
|
|
return
|
|
}
|
|
|
|
result(FlutterError.init(code: "WebAuthenticationSessionManager", message: "WebAuthenticationSession is not available!", details: nil))
|
|
}
|
|
|
|
public override func dispose() {
|
|
super.dispose()
|
|
let sessionValues = sessions.values
|
|
sessionValues.forEach { (session: WebAuthenticationSession?) in
|
|
session?.cancel()
|
|
session?.dispose()
|
|
}
|
|
sessions.removeAll()
|
|
plugin = nil
|
|
}
|
|
|
|
deinit {
|
|
dispose()
|
|
}
|
|
}
|