|
|
@@ -32,22 +32,24 @@
|
|
|
*/
|
|
|
import Foundation
|
|
|
|
|
|
-
|
|
|
func escape(_ string : String) -> String {
|
|
|
-
|
|
|
- let dashes = CharacterSet(charactersIn: "-._")
|
|
|
- let acceptable = dashes.union(.alphanumerics)
|
|
|
- return string.addingPercentEncoding(withAllowedCharacters: acceptable)!
|
|
|
+ let dotsAndDashes = CharacterSet(charactersIn: "-._")
|
|
|
+ let allowedCharacters = dotsAndDashes.union(.alphanumerics)
|
|
|
+ if let escapedString = string.addingPercentEncoding(withAllowedCharacters: allowedCharacters) {
|
|
|
+ return escapedString
|
|
|
+ } else {
|
|
|
+ return string
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class OAuthClient {
|
|
|
- var clientID : String = ""
|
|
|
- var clientSecret : String = ""
|
|
|
- var redirectURIs : [String] = []
|
|
|
- var authURI : String = ""
|
|
|
- var tokenURI : String = ""
|
|
|
+ private var clientID : String = ""
|
|
|
+ private var clientSecret : String = ""
|
|
|
+ private var redirectURIs : [String] = []
|
|
|
+ private var authURI : String = ""
|
|
|
+ private var tokenURI : String = ""
|
|
|
|
|
|
- var token : String? = nil
|
|
|
+ public var token : String? = nil
|
|
|
|
|
|
init () {
|
|
|
clientID = "885917370891-n3r74v6miibn2969estdofr68ggqa1sn.apps.googleusercontent.com"
|
|
|
@@ -60,38 +62,28 @@ class OAuthClient {
|
|
|
let scope = "https://www.googleapis.com/auth/datastore"
|
|
|
|
|
|
func authCodeURL(state : String) -> URL? {
|
|
|
-
|
|
|
var path = authURI
|
|
|
path = path + "?response_type=" + "code"
|
|
|
path = path + "&client_id=" + clientID
|
|
|
path = path + "&redirect_uri=" + escape(redirectURIs[0])
|
|
|
path = path + "&scope=" + escape(scope)
|
|
|
path = path + "&state=" + state
|
|
|
-
|
|
|
- print("PATH " + path)
|
|
|
-
|
|
|
return URL(string:path)
|
|
|
}
|
|
|
|
|
|
func exchangeCode(code: String) {
|
|
|
let path = tokenURI
|
|
|
- var body = ""
|
|
|
- body = body + "client_id=" + clientID
|
|
|
+ var body = "client_id=" + clientID
|
|
|
body = body + "&client_secret=" + clientSecret
|
|
|
body = body + "&code=" + escape(code)
|
|
|
body = body + "&grant_type=" + "authorization_code"
|
|
|
body = body + "&redirect_uri=" + escape(redirectURIs[0])
|
|
|
|
|
|
- print("path: \(path)")
|
|
|
- print("body: \(body)")
|
|
|
-
|
|
|
let url = URL(string:path)!
|
|
|
var request = URLRequest(url:url)
|
|
|
request.httpMethod = "POST"
|
|
|
request.httpBody = body.data(using:.utf8)
|
|
|
- request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
|
|
|
|
|
|
- print("headers: \(request.allHTTPHeaderFields)")
|
|
|
let task = URLSession.shared.dataTask(with:request) { (data, response, error) in
|
|
|
var json: [String:Any]!
|
|
|
do {
|
|
|
@@ -99,10 +91,7 @@ class OAuthClient {
|
|
|
} catch {
|
|
|
print(error)
|
|
|
}
|
|
|
- print(json)
|
|
|
self.token = json["access_token"] as! String?
|
|
|
- print(self.token)
|
|
|
-
|
|
|
}
|
|
|
task.resume()
|
|
|
}
|