Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WeRockStar/2abe0ac086fae5bf8f58df1314233ac5 to your computer and use it in GitHub Desktop.
Save WeRockStar/2abe0ac086fae5bf8f58df1314233ac5 to your computer and use it in GitHub Desktop.
Creation of a Moya provider with SSL pinning
// 1 - provider creation
let provider = MoyaProvider<MyRouter>(
manager: AlamofireSessionManagerBuilder().build()
)
// 2 - session manager builder
class AlamofireSessionManagerBuilder {
var policies: [String: ServerTrustPolicy]?
var configuration = URLSessionConfiguration.default
// 3 - builder initializer
init(includeSSLPinning: Bool = true) {
if includeSSLPinning {
let allPublicKeys = ServerTrustPolicy.pinPublicKeys(
publicKeys: ServerTrustPolicy.publicKeys(),
validateCertificateChain: true,
validateHost: true
)
self.policies = [
"firstsubdomain.mycompany.com": allPublicKeys,
"secondsubdomain.mycompany.com": allPublicKeys
]
}
}
//4 - Example function that configures alamofire's session manager
//to increase timeout interval, useful for upload requests.
func prepareForFileUpload() -> Self {
configuration.timeoutIntervalForRequest = 300
configuration.timeoutIntervalForResource = 300
return self
}
// 5 - session manager creator
func build() -> Manager {
var serverTrustPolicyManager: ServerTrustPolicyManager?
if let policies = self.policies { serverTrustPolicyManager = ServerTrustPolicyManager(policies: policies) }
let manager = Manager(configuration: configuration,
serverTrustPolicyManager: serverTrustPolicyManager)
manager.startRequestsImmediately = false
return manager
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment