· 8 years ago · Apr 26, 2017, 05:52 PM
1 func uploadImageToAWSS3AndRegisterUserOnTTS(){
2
3 RappleActivityIndicatorView.startAnimating()
4
5 var localFileName:String?
6 var result:String = ""
7
8 if let imageToUploadUrl = selectedImageUrl
9 {
10 if let phResult = PHAsset.fetchAssets(withALAssetURLs: [imageToUploadUrl as URL], options: nil).firstObject! as? PHAsset {
11
12 PHImageManager.default().requestImageData(for: phResult, options: nil, resultHandler: { _, _, _, info in
13
14 if let fileName = (info?["PHImageFileURLKey"] as? NSURL)?.lastPathComponent {
15
16 localFileName = fileName
17
18 // Configure AWS Credentials
19 let accessKey = "AKIAIQKFLS6OHX7MZ2YQ"
20 let secretKey = "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"
21 let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey)
22 let configuration = AWSServiceConfiguration(region:AWSRegionType.usEast1, credentialsProvider:credentialsProvider)
23
24 AWSServiceManager.default().defaultServiceConfiguration = configuration
25
26 // Set up AWS Transfer Manager Request
27 let S3BucketName = "tts-user-avatars"
28 let remoteName:String = TTSUtils.parseDateToMMddYYHHmmssString(Date()) + "_" + localFileName!
29 //let remoteName:String = (TTSCore.sharedInstance().user?.familyName)! + "_" + TTSUtils.parseDateToMMddYYHHmmssString(Date())
30
31 let uploadRequest = AWSS3TransferManagerUploadRequest()!
32 uploadRequest.body = self.generateImageUrl(fileName: remoteName) as URL!
33 uploadRequest.key = remoteName
34 uploadRequest.bucket = S3BucketName
35 uploadRequest.contentType = "image/jpeg"
36 uploadRequest.acl = .publicRead
37
38 // Perform file upload
39 let transferManager = AWSS3TransferManager.default()
40 transferManager?.upload(uploadRequest).continue({ [weak self] (task: AWSTask<AnyObject>) -> Any? in
41
42 DispatchQueue.main.async {
43 //Acá hacer algo asincrónico, como "Stop Animating", etc
44 }
45
46 if let error = task.error {
47 print("Upload failed with error: (\(error.localizedDescription))")
48 }
49 if let exception = task.exception {
50 print("Upload failed with exception (\(exception))")
51 }
52
53 if task.result != nil {
54 let url = AWSS3.default().configuration.endpoint.url
55 let publicURL = url?.appendingPathComponent(uploadRequest.bucket!).appendingPathComponent(uploadRequest.key!)
56 print("Uploaded to:\(publicURL)")
57 result = (publicURL?.absoluteString)!
58 }
59
60 //NOTA: Si está todo bien con la imagen, "Result" contendrá la URL a AWS, y sino, "Result" estará vacio. Pero se creará el Usuario.
61
62 self?.registerUserOnTTS(awsImageURL: result)
63
64 return nil
65 })
66
67
68 }
69 })
70 }
71
72 }else{
73 //NOTA: Si el usuario decide no subir una imagen, directamente se crea el usuario, sin URL de imagen.
74
75 self.registerUserOnTTS(awsImageURL: result)
76 }
77 }
78
79
80 func registerUserOnTTS(awsImageURL:String){
81 TTSNetwork.sharedInstance().signUpTTS(
82 self.nameField.text!,
83 apellido: self.familyNameField.text!,
84 email: TTSUtils.encodeBase64(stringToEncode: self.emailField.text!)!,
85 password: TTSUtils.encodeBase64(stringToEncode: self.passwordField.text!)!,
86 foto: TTSUtils.encodeBase64(stringToEncode: awsImageURL)!,
87 callback: { (respuesta:String?, error:NSError?) in
88
89 if error == nil {
90
91 //** WS Call: loginTTS
92 TTSNetwork.sharedInstance().loginTTS(
93 TTSUtils.encodeBase64(stringToEncode: self.emailField.text!)!,
94 password: TTSUtils.encodeBase64(stringToEncode: self.passwordField.text!)!,
95 latitud: 0.000,
96 longitud: 0.000,
97 callback: { (respuesta:TTSUser?, error:NSError?) in
98 RappleActivityIndicatorView.stopAnimating()
99
100 if error != nil {
101 RappleActivityIndicatorView.stopAnimating()
102
103 let alerta = UIAlertController(title: "Autenticación", message: error?.localizedDescription, preferredStyle: .alert)
104 alerta.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
105 self.present(alerta, animated: true, completion: nil)
106 return
107 }
108
109 print("Nombre: " + (respuesta?.firstName)! + " " + (respuesta?.familyName)!)
110
111 TTSCore.sharedInstance().user = respuesta
112 let token:String = respuesta!.token
113 let imageURL:String = respuesta!.imagenURL
114
115 //** WS Call: getContactDataByClip
116 TTSNetwork.sharedInstance().getContactDataByClip(token, callback: { (respuesta:TTSUser?, error:NSError?) in
117 TTSCore.sharedInstance().user = respuesta
118 TTSCore.sharedInstance().user?.email = self.emailField.text!
119 TTSCore.sharedInstance().user?.token = token
120 TTSCore.sharedInstance().user?.imagenURL = imageURL
121 self.loginDelegate?.loginDidFinishWithSuccess(true)
122 RappleActivityIndicatorView.stopAnimating()
123
124 TTSUtils.saveUserDataForAutoLoginTTS(userBase64: TTSUtils.encodeBase64(stringToEncode:self.emailField.text!)!,
125 passBase64: TTSUtils.encodeBase64(stringToEncode:self.passwordField.text!)!,
126 token: token)
127
128 })
129 })
130 }else{
131 let alerta = UIAlertController(title: "Autenticación", message: error?.localizedDescription, preferredStyle: .alert)
132 alerta.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
133 self.present(alerta, animated: true, completion: nil)
134 return
135 }
136 })
137 }