Advertisement
Guest User

Untitled

a guest
Oct 29th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.24 KB | None | 0 0
  1. //
  2. // ViewController.swift
  3. //
  4.  
  5.  
  6. import UIKit
  7.  
  8. class ViewController: UIViewController {
  9.  
  10. @IBOutlet weak var signinBackgroundView: UIView!
  11. @IBOutlet weak var signupBackgroundView: UIView!
  12. @IBOutlet weak var signinEmailTextField: UITextField!
  13. @IBOutlet weak var signinPasswordTextField: UITextField!
  14. @IBOutlet weak var signupNameTextField: UITextField!
  15. @IBOutlet weak var signupEmailTextField: UITextField!
  16. @IBOutlet weak var signupPasswordTextField: UITextField!
  17. @IBOutlet weak var activityIndicatorView: UIView!
  18. @IBOutlet weak var passwordRevealBtn: UIButton!
  19.  
  20. let httpHelper = HTTPHelper()
  21.  
  22. override func viewDidLoad() {
  23. super.viewDidLoad()
  24. // Do any additional setup after loading the view, typically from a nib.
  25.  
  26. self.activityIndicatorView.layer.cornerRadius = 10
  27. }
  28.  
  29. override func didReceiveMemoryWarning() {
  30. super.didReceiveMemoryWarning()
  31. // Dispose of any resources that can be recreated.
  32. }
  33.  
  34. @IBAction func passwordRevealBtnTapped(sender: AnyObject) {
  35. self.passwordRevealBtn.selected = !self.passwordRevealBtn.selected
  36.  
  37. if self.passwordRevealBtn.selected {
  38. self.signupPasswordTextField.secureTextEntry = false
  39. } else {
  40. self.signupPasswordTextField.secureTextEntry = true
  41. }
  42. }
  43.  
  44. func displaSigninView () {
  45. self.signinEmailTextField.text = nil
  46. self.signinPasswordTextField.text = nil
  47.  
  48. if self.signupNameTextField.isFirstResponder() {
  49. self.signupNameTextField.resignFirstResponder()
  50. }
  51.  
  52. if self.signupEmailTextField.isFirstResponder() {
  53. self.signupEmailTextField.resignFirstResponder()
  54. }
  55.  
  56. if self.signupPasswordTextField.isFirstResponder() {
  57. self.signupPasswordTextField.resignFirstResponder()
  58. }
  59.  
  60. if self.signinBackgroundView.frame.origin.x != 0 {
  61. UIView.animateWithDuration(0.8, animations: { () -> Void in
  62. self.signupBackgroundView.frame = CGRectMake(320, 134, 320, 284)
  63. self.signinBackgroundView.alpha = 0.3
  64.  
  65. self.signinBackgroundView.frame = CGRectMake(0, -40, 320, 284)
  66. self.signinBackgroundView.alpha = 1.0
  67. }, completion: nil)
  68. }
  69. }
  70.  
  71. func displaySignupView () {
  72. self.signupNameTextField.text = nil
  73. self.signupEmailTextField.text = nil
  74. self.signupPasswordTextField.text = nil
  75.  
  76. if self.signinEmailTextField.isFirstResponder() {
  77. self.signinEmailTextField.resignFirstResponder()
  78. }
  79.  
  80. if self.signinPasswordTextField.isFirstResponder() {
  81. self.signinPasswordTextField.resignFirstResponder()
  82. }
  83.  
  84. if self.signupBackgroundView.frame.origin.x != 0 {
  85. UIView.animateWithDuration(0.8, animations: { () -> Void in
  86. self.signinBackgroundView.frame = CGRectMake(-320, 134, 320, 284)
  87. self.signinBackgroundView.alpha = 0.3;
  88.  
  89. self.signupBackgroundView.frame = CGRectMake(0, 134, 320, 284)
  90. self.signupBackgroundView.alpha = 1.0
  91.  
  92. }, completion: nil)
  93. }
  94. }
  95.  
  96. func displayAlertMessage(alertTitle:String, alertDescription:String) -> Void {
  97. // hide activityIndicator view and display alert message
  98. self.activityIndicatorView.hidden = true
  99. let errorAlert = UIAlertView(title:alertTitle, message:alertDescription, delegate:nil, cancelButtonTitle:"OK")
  100. errorAlert.show()
  101. }
  102.  
  103. @IBAction func createAccountBtnTapped(sender: AnyObject) {
  104. self.displaySignupView()
  105. }
  106.  
  107. @IBAction func cancelBtnTapped(sender: AnyObject) {
  108. self.displaSigninView()
  109. }
  110.  
  111.  
  112. @IBAction func signupBtnTapped(sender: AnyObject) {
  113. // Code to hide the keyboards for text fields
  114. if self.signupNameTextField.isFirstResponder() {
  115. self.signupNameTextField.resignFirstResponder()
  116. }
  117.  
  118. if self.signupEmailTextField.isFirstResponder() {
  119. self.signupEmailTextField.resignFirstResponder()
  120. }
  121.  
  122. if self.signupPasswordTextField.isFirstResponder() {
  123. self.signupPasswordTextField.resignFirstResponder()
  124. }
  125.  
  126. // start activity indicator
  127. self.activityIndicatorView.hidden = false
  128.  
  129. // validate presence of all required parameters
  130. if self.signupNameTextField.text != "" && self.signupEmailTextField.text != "" && self.signupPasswordTextField.text != "" {
  131. makeSignUpRequest(self.signupNameTextField.text!, userEmail: self.signupEmailTextField.text!, userPassword: self.signupPasswordTextField.text!)
  132. } else {
  133. self.displayAlertMessage("Parameters Required", alertDescription: "Some of the required parameters are missing")
  134. }
  135. }
  136.  
  137.  
  138.  
  139. @IBAction func signinBtnTapped(sender: AnyObject) {
  140. // resign the keyboard for text fields
  141. if self.signinEmailTextField.isFirstResponder() {
  142. self.signinEmailTextField.resignFirstResponder()
  143. }
  144.  
  145. if self.signinPasswordTextField.isFirstResponder() {
  146. self.signinPasswordTextField.resignFirstResponder()
  147. }
  148.  
  149. // display activity indicator
  150. self.activityIndicatorView.hidden = false
  151.  
  152. // validate presense of required parameters
  153. if self.signinEmailTextField.text != "" &&
  154. self.signinPasswordTextField.text != "" {
  155. makeSignInRequest(self.signinEmailTextField.text!, userPassword: self.signinPasswordTextField.text!)
  156. } else {
  157. self.displayAlertMessage("Parameters Required",
  158. alertDescription: "Some of the required parameters are missing")
  159. }
  160. }
  161.  
  162. func updateUserLoggedInFlag() {
  163. // Update the NSUserDefaults flag
  164. let defaults = NSUserDefaults.standardUserDefaults()
  165. defaults.setObject("loggedIn", forKey: "userLoggedIn")
  166. defaults.synchronize()
  167. }
  168.  
  169. func saveApiTokenInKeychain(tokenDict:NSDictionary) {
  170. // Store API AuthToken and AuthToken expiry date in KeyChain
  171. tokenDict.enumerateKeysAndObjectsUsingBlock({ (dictKey, dictObj, stopBool) -> Void in
  172. let myKey = dictKey as! String
  173. let myObj = dictObj as! String
  174.  
  175. if myKey == "api_authtoken" {
  176. KeychainAccess.setPassword(myObj, account: "Auth_Token", service: "KeyChainService")
  177. }
  178.  
  179. if myKey == "authtoken_expiry" {
  180. KeychainAccess.setPassword(myObj, account: "Auth_Token_Expiry", service: "KeyChainService")
  181. }
  182. })
  183.  
  184. self.dismissViewControllerAnimated(true, completion: nil)
  185. }
  186.  
  187.  
  188. func makeSignUpRequest(userName:String, userEmail:String, userPassword:String) {
  189. // 1. Create HTTP request and set request header
  190. let httpRequest = httpHelper.buildRequest("signup", method: "POST",
  191. authType: HTTPRequestAuthType.HTTPBasicAuth)
  192.  
  193. // 2. Password is encrypted with the API key
  194. let encrypted_password = AESCrypt.encrypt(userPassword, password: HTTPHelper.API_AUTH_PASSWORD)
  195.  
  196. // 3. Send the request Body
  197. httpRequest.HTTPBody = "{"full_name":"(userName)","email":"(userEmail)","password":"(encrypted_password)"}".dataUsingEncoding(NSUTF8StringEncoding)
  198.  
  199. // 4. Send the request
  200. httpHelper.sendRequest(httpRequest, completion: {(data:NSData!, error:NSError!) in
  201. if error != nil {
  202. let errorMessage = self.httpHelper.getErrorMessage(error)
  203. self.displayAlertMessage("Error", alertDescription: errorMessage as String)
  204.  
  205. return
  206. }
  207.  
  208. self.displaSigninView()
  209. self.displayAlertMessage("Success", alertDescription: "Account has been created")
  210. })
  211. }
  212.  
  213. func makeSignInRequest(userEmail:String, userPassword:String) {
  214. // Create HTTP request and set request Body
  215. let httpRequest = httpHelper.buildRequest("signin", method: "POST",
  216. authType: HTTPRequestAuthType.HTTPBasicAuth)
  217. let encrypted_password = AESCrypt.encrypt(userPassword, password: HTTPHelper.API_AUTH_PASSWORD)
  218.  
  219. httpRequest.HTTPBody = "{"email":"(self.signinEmailTextField.text!)","password":"(encrypted_password)"}".dataUsingEncoding(NSUTF8StringEncoding);
  220.  
  221. httpHelper.sendRequest(httpRequest, completion: {(data:NSData!, error:NSError!) in
  222. // Display error
  223. if error != nil {
  224. let errorMessage = self.httpHelper.getErrorMessage(error)
  225. self.displayAlertMessage("Error", alertDescription: errorMessage as String)
  226.  
  227. return
  228. }
  229.  
  230. // hide activity indicator and update userLoggedInFlag
  231. self.activityIndicatorView.hidden = true
  232. self.updateUserLoggedInFlag()
  233.  
  234. do {
  235.  
  236. let responseDict = try NSJSONSerialization.JSONObjectWithData(data,
  237. options: NSJSONReadingOptions.AllowFragments) as! NSDictionary
  238. //var stopBool : Bool
  239.  
  240. // save API AuthToken and ExpiryDate in Keychain
  241. self.saveApiTokenInKeychain(responseDict)
  242. }
  243. catch let error as NSError {
  244. print(error.localizedDescription)
  245. }
  246.  
  247.  
  248. })
  249. }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement