Browse Source

Update Datastore sample to use auth-library-swift to get OAuth tokens.

Tim Burks 8 years ago
parent
commit
1a0145aa36

+ 2 - 1
Examples/Datastore/PackageManager/Package.swift

@@ -17,7 +17,8 @@ import PackageDescription
 let package = Package (
     name: "Datastore",
     dependencies: [
-        .Package(url: "https://github.com/grpc/grpc-swift.git", Version(0,1,12)),
+        .Package(url: "https://github.com/grpc/grpc-swift.git", Version(0,1,13)),
         .Package(url: "https://github.com/apple/swift-protobuf.git", Version(0,9,901)),
+	.Package(url: "https://github.com/google/auth-library-swift.git", Version(0,2,0)),
     ]
 )

+ 31 - 6
Examples/Datastore/PackageManager/Sources/main.swift

@@ -15,18 +15,40 @@
  */
 import Foundation
 import gRPC
+import OAuth2
+
+let CREDENTIALS = "google.yaml" // in $HOME/.credentials
+let TOKEN = "google.json" // local auth token storage
+
+#if os(OSX)
+// On OS X, we use the local browser to help the user get a token.
+let tokenProvider = try BrowserTokenProvider(credentials:CREDENTIALS, token:TOKEN)
+if tokenProvider.token == nil {
+  try tokenProvider.signIn(scopes:["profile",
+                                   "https://www.googleapis.com/auth/contacts.readonly",
+                                   "https://www.googleapis.com/auth/cloud-platform"])
+  try tokenProvider.saveToken(TOKEN)
+}
+#else
+// On Linux, we can get a token if we are running in Google Cloud Shell
+// or in some other Google Cloud instance (GAE, GKE, GCE, etc).
+let tokenProvider = try GoogleTokenProvider()
+#endif
 
 gRPC.initialize()
 
-let authToken = "<YOUR AUTH TOKEN>"
+guard let authToken = tokenProvider.token?.accessToken else {
+  print("ERROR: No OAuth token is avaiable.")
+  exit(-1)
+}
 
 let projectID = "<YOUR PROJECT ID>"
 
 let certificateURL = URL(fileURLWithPath:"roots.pem")
 let certificates = try! String(contentsOf: certificateURL)
 let service = Google_Datastore_V1_DatastoreService(address:"datastore.googleapis.com",
-                               certificates:certificates,
-                               host:nil)
+                                                   certificates:certificates,
+                                                   host:nil)
 
 service.metadata = Metadata(["authorization":"Bearer " + authToken])
 
@@ -40,6 +62,9 @@ request.gqlQuery = query
 
 print("\(request)")
 
-let result = try service.runquery(request)
-
-print("\(result)")
+do {
+  let result = try service.runquery(request)
+  print("\(result)")
+} catch (let error) {
+  print("ERROR: \(error)")
+}