added iOS source code
[wl-app.git] / iOS / WolneLektury / Screens / Authorization / AuthorizationWebViewController.swift
1 //
2 //  AuthorizationWebViewController.swift
3 //  WolneLektury
4 //
5 //  Created by Pawel Dabrowski on 14/07/2018.
6 //  Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
7 //
8
9 import UIKit
10 import OAuthSwift
11 typealias WebView = UIWebView // WKWebView
12
13 class AuthorizationWebViewController: OAuthWebViewController {
14     
15     var targetURL: URL?
16     let webView: WebView = WebView()
17     
18     override func viewDidLoad() {
19         super.viewDidLoad()
20         
21         self.webView.frame = UIScreen.main.bounds
22         self.webView.scalesPageToFit = true
23         self.webView.delegate = self
24         self.view.addSubview(self.webView)
25         loadAddressURL()
26     }
27     
28     override func handle(_ url: URL) {
29         targetURL = url
30         super.handle(url)
31         self.loadAddressURL()
32     }
33     
34     func loadAddressURL() {
35         guard let url = targetURL else {
36             return
37         }
38         let req = URLRequest(url: url)
39         self.webView.loadRequest(req)
40     }
41     
42     open override func doHandle(_ url: URL) {
43         let completion: () -> Void = { [unowned self] in
44             self.delegate?.oauthWebViewControllerDidPresent()
45         }
46         appDelegate.mainNavigator.setRootViewController(controller: self)        
47     }
48 }
49
50 // MARK: delegate
51 extension AuthorizationWebViewController: UIWebViewDelegate {
52     func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
53         if let url = request.url, url.scheme == "oauth-swift" {
54             // Call here AppDelegate.sharedInstance.applicationHandleOpenURL(url) if necessary ie. if AppDelegate not configured to handle URL scheme
55             // compare the url with your own custom provided one in `authorizeWithCallbackURL`
56             self.dismissWebViewController()
57         }
58         return true
59     }
60 }