Skip to content

Instantly share code, notes, and snippets.

@nezhyborets
Created September 14, 2016 14:19
Show Gist options
  • Save nezhyborets/8c339b8a66167bc7f3a664e1fde52513 to your computer and use it in GitHub Desktop.
Save nezhyborets/8c339b8a66167bc7f3a664e1fde52513 to your computer and use it in GitHub Desktop.
static func login(completion: (Result<(User, Bool)>) -> ()) {
let digits = Digits.sharedInstance()
let oauthSigning = DGTOAuthSigning(authConfig:digits.authConfig, authSession:digits.session())
let authHeaders = oauthSigning.OAuthEchoHeadersToVerifyCredentials()
print(authHeaders)
UIPasteboard.generalPasteboard().string = authHeaders.description
guard let urlString = authHeaders[TWTROAuthEchoRequestURLStringKey] as? String else {
let error = ErrorGenerator.customErrorWithMessage("TWTROAuthEchoRequestURLStringKey not found in auth headers")
completion(.Error(error))
return
}
guard let authorizationHeader = authHeaders[TWTROAuthEchoAuthorizationHeaderKey] as? String else {
let error = ErrorGenerator.customErrorWithMessage("TWTROAuthEchoAuthorizationHeaderKey not found in auth headers")
completion(.Error(error))
return
}
let request = LoginRequest(oAuthURL: urlString, oAuthURLHeaderKey: TWTROAuthEchoRequestURLStringKey, oAuthHeader: authorizationHeader, oAuthHeaderKey: TWTROAuthEchoAuthorizationHeaderKey)
request.completionBlock = { (responseObject, error) in
guard error == nil else {
completion(.Error(error!))
return
}
if let json = responseObject as? [String : AnyObject], let errorMessage = ErrorHelper.anyErrorStringFromJson(json) {
let customError = ErrorGenerator.getAndHandleErrorWithMessage(errorMessage, additionalInfo: json.description)
completion(.Error(customError))
return
}
guard let token = responseObject?["auth_token"] as? String else {
let customError = ErrorGenerator.customErrorWithMessage("Login - token not found in response \(responseObject)")
completion(.Error(customError))
return
}
guard let json = responseObject as? [String : AnyObject], let user = AppUser(json: json) else {
let customError = ErrorGenerator.getAndHandleErrorWithMessage("Login - user not parsed", additionalInfo: "response \(responseObject)")
completion(.Error(customError))
return
}
ServerManager.setAuthToken(token)
Session.shared.setBackendUser(user)
PushManager.manager.updatePushesWithLatestToken()
let newUser = user.firstName() == nil
if newUser {
Analytics.setCurrentUser(user)
} else {
Analytics.setCurrentUserFirstLogin(user)
}
let tuple = (user as User, newUser)
completion(.Success(tuple))
}
ServerManager().runRequest(request)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment