in IoT-Sample/Swift/IoTSampleSwift/ConnectionViewController.swift [189:235]
func createCertificateIdAndStoreinNSUserDefaults(onSuccess: @escaping (String)->Void,
onFailure: @escaping (Error) -> Void) {
let defaults = UserDefaults.standard
// Now create and store the certificate ID in NSUserDefaults
let csrDictionary = [ "commonName": CertificateSigningRequestCommonName,
"countryName": CertificateSigningRequestCountryName,
"organizationName": CertificateSigningRequestOrganizationName,
"organizationalUnitName": CertificateSigningRequestOrganizationalUnitName]
self.iotManager.createKeysAndCertificate(fromCsr: csrDictionary) { (response) -> Void in
guard let response = response else {
DispatchQueue.main.async {
self.connectButton.isEnabled = true
self.activityIndicatorView.stopAnimating()
self.logTextView.text = "Unable to create keys and/or certificate, check values in Constants.swift"
}
onFailure(NSError(domain: "No response on iotManager.createKeysAndCertificate", code: -2, userInfo: nil))
return
}
defaults.set(response.certificateId, forKey:"certificateId")
defaults.set(response.certificateArn, forKey:"certificateArn")
let certificateId = response.certificateId
print("response: [\(String(describing: response))]")
let attachPrincipalPolicyRequest = AWSIoTAttachPrincipalPolicyRequest()
attachPrincipalPolicyRequest?.policyName = POLICY_NAME
attachPrincipalPolicyRequest?.principal = response.certificateArn
// Attach the policy to the certificate
self.iot.attachPrincipalPolicy(attachPrincipalPolicyRequest!).continueWith (block: { (task) -> AnyObject? in
if let error = task.error {
print("Failed: [\(error)]")
onFailure(error)
} else {
print("result: [\(String(describing: task.result))]")
DispatchQueue.main.asyncAfter(deadline: .now()+2, execute: {
if let certificateId = certificateId {
onSuccess(certificateId)
} else {
onFailure(NSError(domain: "Unable to generate certificate id", code: -1, userInfo: nil))
}
})
}
return nil
})
}
}