added iOS source code
[wl-app.git] / iOS / Pods / OAuthSwift / Sources / OAuthSwift.swift
diff --git a/iOS/Pods/OAuthSwift/Sources/OAuthSwift.swift b/iOS/Pods/OAuthSwift/Sources/OAuthSwift.swift
new file mode 100644 (file)
index 0000000..b0c379a
--- /dev/null
@@ -0,0 +1,110 @@
+//
+//  OAuthSwift.swift
+//  OAuthSwift
+//
+//  Created by phimage on 04/12/15.
+//  Copyright © 2015 Dongri Jin. All rights reserved.
+//
+
+import Foundation
+
+open class OAuthSwift: NSObject, OAuthSwiftRequestHandle {
+
+    // MARK: Properties
+
+    /// Client to make signed request
+    open var client: OAuthSwiftClient
+    /// Version of the protocol
+    open var version: OAuthSwiftCredential.Version { return self.client.credential.version }
+
+    /// Handle the authorize url into a web view or browser
+    open var authorizeURLHandler: OAuthSwiftURLHandlerType = OAuthSwiftOpenURLExternally.sharedInstance
+
+    fileprivate var currentRequests: [String: OAuthSwiftRequestHandle] = [:]
+
+    // MARK: init
+    init(consumerKey: String, consumerSecret: String) {
+        self.client = OAuthSwiftClient(consumerKey: consumerKey, consumerSecret: consumerSecret)
+    }
+
+    // MARK: callback notification
+    struct CallbackNotification {
+        @available(*, deprecated: 0.5, message: "Use Notification.Name.OAuthSwiftHandleCallbackURL")
+        static let notificationName = Notification.Name(rawValue: "OAuthSwiftCallbackNotificationName")
+        static let optionsURLKey = "OAuthSwiftCallbackNotificationOptionsURLKey"
+    }
+
+    /// Handle callback url which contains now token information
+    open class func handle(url: URL) {
+        let notification = Notification(name: NSNotification.Name.OAuthSwiftHandleCallbackURL, object: nil,
+            userInfo: [CallbackNotification.optionsURLKey: url])
+        notificationCenter.post(notification)
+    }
+
+    var observer: NSObjectProtocol?
+    open class var notificationCenter: NotificationCenter {
+        return NotificationCenter.default
+    }
+    open class var notificationQueue: OperationQueue {
+        return OperationQueue.main
+    }
+
+    func observeCallback(_ block: @escaping (_ url: URL) -> Void) {
+        self.observer = OAuthSwift.notificationCenter.addObserver(forName: NSNotification.Name.OAuthSwiftHandleCallbackURL, object: nil, queue: OperationQueue.main) { [weak self] notification in
+            self?.removeCallbackNotificationObserver()
+
+            if let urlFromUserInfo = notification.userInfo?[CallbackNotification.optionsURLKey] as? URL {
+                block(urlFromUserInfo)
+            } else {
+                // Internal error
+                assertionFailure()
+            }
+        }
+    }
+
+    /// Remove internal observer on authentification
+    public func removeCallbackNotificationObserver() {
+        if let observer = self.observer {
+            OAuthSwift.notificationCenter.removeObserver(observer)
+        }
+    }
+
+    /// Function to call when web view is dismissed without authentification
+    public func cancel() {
+        self.removeCallbackNotificationObserver()
+        for (_, request) in self.currentRequests {
+            request.cancel()
+        }
+        self.currentRequests = [:]
+    }
+
+    func putHandle(_ handle: OAuthSwiftRequestHandle, withKey key: String) {
+        // self.currentRequests[withKey] = handle
+        // TODO before storing handle, find a way to remove it when network request end (ie. all failure and success ie. complete)
+    }
+
+    /// Run block in main thread
+    static func main(block: @escaping () -> Void) {
+        if Thread.isMainThread {
+            block()
+        } else {
+            DispatchQueue.main.async {
+                block()
+            }
+        }
+    }
+
+}
+
+// MARK: - alias
+extension OAuthSwift {
+
+    public typealias Parameters = [String: Any]
+    public typealias Headers = [String: String]
+    public typealias ConfigParameters = [String: String]
+    /// MARK: callback alias
+    public typealias TokenSuccess = (credential: OAuthSwiftCredential, response: OAuthSwiftResponse?, parameters: Parameters)
+    public typealias TokenSuccessHandler = (_ credential: OAuthSwiftCredential, _ response: OAuthSwiftResponse?, _ parameters: Parameters) -> Void
+    public typealias FailureHandler = (_ error: OAuthSwiftError) -> Void
+    public typealias TokenRenewedHandler = (_ credential: OAuthSwiftCredential) -> Void
+}