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 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 }
PitayaManager+NSURLSessionDelegate.swift:33 extension URLSessionDelegate {