Mixonomer-iOS/Music Tools/Controller/LoginController.swift

97 lines
2.8 KiB
Swift
Raw Normal View History

//
// LoginController.swift
// Music Tools
//
// Created by Ellie McCarthy on 19/02/2020.
// Copyright © 2020 Sarsoo. All rights reserved.
//
import UIKit
import SwiftUI
import KeychainAccess
class LoginController: UIViewController, UITextFieldDelegate {
// MARK: Properties
@IBOutlet weak var usernameField: UITextField!
@IBOutlet weak var passwordField: UITextField!
@IBOutlet weak var goButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
// MARK: Actions
@IBSegueAction func returnUIView(_ coder: NSCoder) -> UIViewController? {
// TODO add right username
let liveUser = LiveUser(playlists: [], tags: [], username: "")
return UIHostingController(coder: coder, rootView: RootView().environmentObject(liveUser))
}
var isLoggedIn: Bool? = nil {
didSet {
if self.isLoggedIn == true {
self.performSegue(withIdentifier: "loginToMain", sender: self)
} else if self.isLoggedIn == false {
debugPrint("false logged in")
self.isLoggedIn = nil
} else {
debugPrint("nil state")
}
}
}
@IBAction func doLogin(_ sender: Any) {
let keychain = Keychain(service: "xyz.sarsoo.music.login")
keychain["username"] = usernameField.text
keychain["password"] = passwordField.text
let api = UserApi.getUser
RequestBuilder.buildRequest(apiRequest: api).responseJSON{ response in
switch response.result {
case .success:
self.isLoggedIn = true
break
case .failure(let error):
debugPrint("error: \(error)")
self.isLoggedIn = false
do {
try keychain.remove("username")
try keychain.remove("password")
} catch let error {
debugPrint("Could not clear keychain, \(error)")
}
break
}
}
}
// block initial segue from button presson
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { return false }
// MARK: UITextFieldDelegate
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}