mirror of
https://github.com/confirmedcode/Lockdown-iOS.git
synced 2025-12-21 12:14:02 +01:00
107 lines
3.8 KiB
Swift
107 lines
3.8 KiB
Swift
//
|
|
// EmailSignInViewController.swift
|
|
// Lockdown
|
|
//
|
|
// Created by Johnny Lin on 12/12/19.
|
|
// Copyright © 2019 Confirmed Inc. All rights reserved.
|
|
//
|
|
// https://medium.com/jen-hamilton/swift-4-password-validation-helper-methods-f98a7ea5dcbb
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import PopupDialog
|
|
import PromiseKit
|
|
import CocoaLumberjackSwift
|
|
|
|
class EmailSignInViewController: BaseViewController, UITextFieldDelegate, Loadable {
|
|
|
|
@IBOutlet weak var emailField: UITextField!
|
|
@IBOutlet weak var passwordField: UITextField!
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
emailField.delegate = self
|
|
passwordField.delegate = self
|
|
setupToHideKeyboardOnTapOnView()
|
|
}
|
|
|
|
func setupToHideKeyboardOnTapOnView()
|
|
{
|
|
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
|
|
target: self,
|
|
action: #selector(self.dismissKeyboard))
|
|
tap.cancelsTouchesInView = false
|
|
view.addGestureRecognizer(tap)
|
|
}
|
|
|
|
@objc func dismissKeyboard()
|
|
{
|
|
view.endEditing(true)
|
|
}
|
|
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
if (textField == emailField) {
|
|
passwordField.becomeFirstResponder()
|
|
}
|
|
else if (textField == passwordField) {
|
|
textField.resignFirstResponder()
|
|
signIn()
|
|
}
|
|
return false
|
|
}
|
|
|
|
@IBAction func signIn() {
|
|
guard let email = emailField.text, let password = passwordField.text else {
|
|
showPopupDialog(title: "Check Fields", message: "Email and password must not be empty", acceptButton: "Okay")
|
|
return
|
|
}
|
|
|
|
showLoadingView()
|
|
firstly {
|
|
try Client.signInWithEmail(email: email, password: password)
|
|
}
|
|
.done { (signin: SignIn) in
|
|
try setAPICredentials(email: email, password: password)
|
|
setAPICredentialsConfirmed(confirmed: true)
|
|
self.hideLoadingView()
|
|
NotificationCenter.default.post(name: AccountUI.accountStateDidChange, object: self)
|
|
self.showPopupDialog(title: "Success! 🎉", message: "You've successfully signed in.", acceptButton: "Okay") {
|
|
self.presentingViewController?.dismiss(animated: true, completion: {
|
|
// logged in and confirmed - update this email with the receipt and refresh VPN credentials
|
|
firstly { () -> Promise<SubscriptionEvent> in
|
|
try Client.subscriptionEvent()
|
|
}
|
|
.then { (result: SubscriptionEvent) -> Promise<GetKey> in
|
|
try Client.getKey()
|
|
}
|
|
.done { (getKey: GetKey) in
|
|
try setVPNCredentials(id: getKey.id, keyBase64: getKey.b64)
|
|
if (getUserWantsVPNEnabled() == true) {
|
|
VPNController.shared.restart()
|
|
}
|
|
}
|
|
.catch { error in
|
|
// it's okay for this to error out with "no subscription in receipt"
|
|
DDLogError("HomeViewController ConfirmEmail subscriptionevent error (ok for it to be \"no subscription in receipt\"): \(error)")
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|
|
.catch { error in
|
|
self.hideLoadingView()
|
|
var errorMessage = error.localizedDescription
|
|
if let apiError = error as? ApiError {
|
|
errorMessage = apiError.message
|
|
}
|
|
self.showPopupDialog(title: "Error Signing In", message: errorMessage, acceptButton: "Okay") {
|
|
}
|
|
}
|
|
}
|
|
|
|
@IBAction func cancelTapped(_ sender: Any) {
|
|
self.dismiss(animated: true, completion: nil)
|
|
}
|
|
|
|
}
|