Quellcode durchsuchen

New weblogin view

marinofaggiana vor 5 Jahren
Ursprung
Commit
4741b9615d

+ 1 - 0
iOSClient/Login/CCLogin.h

@@ -28,6 +28,7 @@
 #import "OCNetworking.h"
 
 @class CCLoginWeb;
+@class NCLoginWeb;
 @class NCLoginQRCode;
 
 @protocol CCLoginDelegate <NSObject>

+ 8 - 0
iOSClient/Login/CCLogin.m

@@ -190,12 +190,20 @@
             // Login Flow
             if (_user.hidden && _password.hidden && versionMajor >= k_flow_version_available) {
                 
+#ifdef DEBUG
+                NCLoginWeb *loginWeb = [[UIStoryboard storyboardWithName:@"CCLogin" bundle:nil] instantiateViewControllerWithIdentifier:@"NCLoginWeb"];
+                loginWeb.urlBase = self.baseUrl.text;
+                loginWeb.loginType = _loginType;
+                [self presentViewController:loginWeb animated:YES completion:nil];
+               
+#else
                 appDelegate.activeLoginWeb = [CCLoginWeb new];
                 appDelegate.activeLoginWeb.loginType = _loginType;
                 appDelegate.activeLoginWeb.delegate = self;
                 appDelegate.activeLoginWeb.urlBase = self.baseUrl.text;
                 
                 [appDelegate.activeLoginWeb open:self];
+#endif
             }
             
             // NO Login Flow available

+ 18 - 3
iOSClient/Login/CCLogin.storyboard

@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_5" orientation="portrait">
         <adaptation id="fullscreen"/>
     </device>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -191,12 +191,27 @@
             </objects>
             <point key="canvasLocation" x="3588.4057971014495" y="-1211.3839285714284"/>
         </scene>
+        <!--Login Web-->
+        <scene sceneID="3Rv-vf-u17">
+            <objects>
+                <viewController storyboardIdentifier="NCLoginWeb" id="yEb-Ky-35s" customClass="NCLoginWeb" customModule="Nextcloud" customModuleProvider="target" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="UX5-cJ-bY6">
+                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <viewLayoutGuide key="safeArea" id="vqz-4v-cZu"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="pz9-Hz-nT9" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="4511.594202898551" y="-1210.0446428571429"/>
+        </scene>
     </scenes>
     <resources>
         <image name="loginPassword" width="25" height="25"/>
         <image name="loginURL" width="25" height="25"/>
         <image name="loginUser" width="25" height="25"/>
-        <image name="qrcode" width="100" height="100"/>
+        <image name="qrcode" width="300" height="300"/>
         <image name="visiblePassword" width="25" height="25"/>
     </resources>
 </document>

+ 92 - 0
iOSClient/Login/NCLoginWeb.swift

@@ -0,0 +1,92 @@
+//
+//  NCLoginWeb.swift
+//  Nextcloud
+//
+//  Created by Marino Faggiana on 21/08/2019.
+//  Copyright © 2019 Marino Faggiana. All rights reserved.
+//
+//  Author Marino Faggiana <marino.faggiana@nextcloud.com>
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+
+
+import Foundation
+
+@objc protocol NCLoginDelegateWeb: class {
+    func loginSuccess(_: NSInteger)
+    @objc optional func webDismiss()
+}
+
+class NCLoginWeb: UIViewController {
+    
+    var webView: WKWebView?
+    @objc var urlBase = ""
+    @objc var loginType: Int = 0
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        webView = WKWebView(frame: CGRect.zero)
+        webView!.navigationDelegate = self
+        view.addSubview(webView!)
+        webView!.translatesAutoresizingMaskIntoConstraints = false
+        webView!.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
+        webView!.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 0).isActive = true
+        webView!.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
+        webView!.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
+        
+        // ADD k_flowEndpoint for Web Flow
+        if NCBrandOptions.sharedInstance.use_login_web_personalized == false && urlBase != NCBrandOptions.sharedInstance.linkloginPreferredProviders {
+            urlBase =  urlBase + k_flowEndpoint
+        }
+        
+        loadWebPage(webView: webView!, url: URL(string: urlBase)!)
+    }
+    
+    func loadWebPage(webView: WKWebView, url: URL)  {
+        
+        let language = NSLocale.preferredLanguages[0] as String
+        var request = URLRequest(url: url)
+        
+        request.setValue(CCUtility.getUserAgent(), forHTTPHeaderField: "User-Agent")
+        request.addValue("true", forHTTPHeaderField: "OCS-APIRequest")
+        request.addValue(language, forHTTPHeaderField: "Accept-Language")
+        
+        webView.load(request)
+    }
+}
+
+extension NCLoginWeb: WKNavigationDelegate {
+    
+    public func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
+        if let serverTrust = challenge.protectionSpace.serverTrust {
+            completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: serverTrust))
+        } else {
+            completionHandler(URLSession.AuthChallengeDisposition.useCredential, nil);
+        }
+    }
+    
+    public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
+        print("didStartProvisionalNavigation");
+    }
+    
+    public func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
+        print("didReceiveServerRedirectForProvisionalNavigation");
+    }
+    
+    public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
+        NCUtility.sharedInstance.stopActivityIndicator()
+    }
+}