Skip to content

Instantly share code, notes, and snippets.

@starsite
Last active September 25, 2018 12:02
Show Gist options
  • Save starsite/8c3d3c7a96a691801796ad2988e099ff to your computer and use it in GitHub Desktop.
Save starsite/8c3d3c7a96a691801796ad2988e099ff to your computer and use it in GitHub Desktop.
Data API Token Refresh
// refresh token -> (token, expiry, error)
class func refreshToken(for auth: String, completion: @escaping (String, Date, String) -> Void) {
guard let path = UserDefaults.standard.string(forKey: "fm-db-path"),
let baseURL = URL(string: path) else { return }
let url = baseURL.appendingPathComponent("/sessions")
let expiry = Date(timeIntervalSinceNow: 900) // 15 minutes
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Basic \(auth)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
URLSession.shared.dataTask(with: request) { data, _, error in
guard let data = data, error == nil,
let json = try? JSONSerialization.jsonObject(with: data) as! [String: Any],
let response = json["response"] as? [String: Any],
let messages = json["messages"] as? [[String: Any]],
let code = messages[0]["code"] as? String else { return }
guard let token = response["token"] as? String else {
print(messages)
return
}
UserDefaults.standard.set(token, forKey: "fm-token")
UserDefaults.standard.set(expiry, forKey: "fm-token-expiry")
completion(token, expiry, code)
}.resume()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment