0001    // The MIT License (MIT)
0002    
0003    // Copyright (c) 2015 JohnLui <wenhanlv@gmail.com> https://github.com/johnlui
0004    
0005    // Permission is hereby granted, free of charge, to any person obtaining a copy
0006    // of this software and associated documentation files (the "Software"), to deal
0007    // in the Software without restriction, including without limitation the rights
0008    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
0009    // copies of the Software, and to permit persons to whom the Software is
0010    // furnished to do so, subject to the following conditions:
0011    
0012    // The above copyright notice and this permission notice shall be included in all
0013    // copies or substantial portions of the Software.
0014    
0015    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0016    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0017    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
0018    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0019    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
0020    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
0021    // SOFTWARE.
0022    //
0023    //  PitayaManager+NSURLSessionDelegate.swift
0024    //  Pitaya
0025    //
0026    //  Created by 吕文翰 on 15/10/8.
0027    //
0028    
0029    import Foundation
0030    
0031    private typealias URLSessionDelegate
PitayaManager+NSURLSessionDelegate.swift:33
extension URLSessionDelegate {
= PitayaManager 0032 0033 extension URLSessionDelegate { 0034 /** 0035 a delegate method to check whether the remote cartification is the same with given certification. 0036 0037 - parameter session: NSURLSession 0038 - parameter challenge: NSURLAuthenticationChallenge 0039 - parameter completionHandler: the completionHandler closure 0040 */ 0041 @objc func URLSession(session: NSURLSession, didReceiveChallenge challenge: NSURLAuthenticationChallenge, completionHandler: (NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void) { 0042 if let localCertificateData = self.localCertData { 0043 if let serverTrust = challenge.protectionSpace.serverTrust, 0044 certificate = SecTrustGetCertificateAtIndex(serverTrust, 0), 0045 remoteCertificateData: NSData = SecCertificateCopyData(certificate) { 0046 if localCertificateData.isEqualToData(remoteCertificateData) { 0047 let credential = NSURLCredential(forTrust: serverTrust) 0048 challenge.sender?.useCredential(credential, forAuthenticationChallenge: challenge) 0049 completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, credential) 0050 } else { 0051 challenge.sender?.cancelAuthenticationChallenge(challenge) 0052 completionHandler(NSURLSessionAuthChallengeDisposition.CancelAuthenticationChallenge, nil) 0053 self.sSLValidateErrorCallBack?() 0054 } 0055 } else { 0056 // could not tested 0057 NSLog("Pitaya: Get RemoteCertificateData or LocalCertificateData error!") 0058 } 0059 } else { 0060 completionHandler(NSURLSessionAuthChallengeDisposition.UseCredential, nil) 0061 } 0062 } 0063 }