/// Logins user and saves credentials
///
/// - Returns: true if login was successfull; error in other cases
func login() -> Observable<Bool> {
return Observable<Bool>.create { (observer) -> Disposable in
let params = ["username": self.nameText.value,
"password": self.passwordText.value]
self.inProgress.value = true
Alamofire.request(APPURL.Login,
method: .post,
parameters: params)
.responseJSON(completionHandler: { (dataResponse) in
self.inProgress.value = false
switch dataResponse.result {
case .success(let value):
guard let jsonDictionary = value as? Dictionary<String, Any> else {
let userInfo: [String : Any] =
[NSLocalizedDescriptionKey : "Unable to login with the provided credentials"]
let error = NSError(domain:"", code:0, userInfo:userInfo)
return observer.onError(error)
}
guard let authToken = jsonDictionary["auth_token"] as? String else {
let userInfo: [String : Any] =
[NSLocalizedDescriptionKey : "Unable to login with the provided credentials"]
let error = NSError(domain:"", code:0, userInfo:userInfo)
return observer.onError(error)
}
self.saveAuthToken(authToken)
observer.onNext(true)
observer.onCompleted()
case .failure(let error):
print("Could not login due to \(error)")
observer.onError(error)
}
})
return Disposables.create()
}
}
/// Loads profile
///
/// - Returns: profile object if success, otherwise error
func loadProfile() -> Observable<Profile> {
return Observable<Profile>.create({ (observer) -> Disposable in
self.inProgress.value = true
ProfileService.shared.getProfile {
self.inProgress.value = false
guard let profile = ProfileService.shared.profile else {
let userInfo: [String : Any] =
[NSLocalizedDescriptionKey : "Unable to load profile"]
let error = NSError(domain:"", code:0, userInfo:userInfo)
return observer.onError(error)
}
observer.onNext(profile)
observer.onCompleted()
}
return Disposables.create()
})
}