swift: Remove defaultBlessingStringPrefix

Removes defaultBlessingStringPrefix from the required
Syncbase.configure parameters, preferring to get it from the validated
app blessing at runtime.

This CL also removes todos defaults in Syncbase framework for
mountPoints and adminUserId.

Closes: vanadium/issues#1402

Change-Id: Ib93f5601eeae54c6aeeddd36ad9553fb010b47e1
diff --git a/Syncbase/Example/Dice Roller/AppDelegate.swift b/Syncbase/Example/Dice Roller/AppDelegate.swift
index f7a84bb..3fdcdcc 100644
--- a/Syncbase/Example/Dice Roller/AppDelegate.swift
+++ b/Syncbase/Example/Dice Roller/AppDelegate.swift
@@ -16,20 +16,16 @@
     return true
   }
 
-  static var googleSignInClientID: String {
+  static func configureGoogleSignIn() {
     let infoPath = NSBundle.mainBundle().pathForResource("GoogleService-Info", ofType: "plist")!
     let info = NSDictionary(contentsOfFile: infoPath)!
-    return info["CLIENT_ID"] as! String
-  }
-
-  static func configureGoogleSignIn() {
-    GIDSignIn.sharedInstance().clientID = AppDelegate.googleSignInClientID
+    let googleSignInClientID = info["CLIENT_ID"] as! String
+    GIDSignIn.sharedInstance().clientID = googleSignInClientID
   }
 
   static func configureSyncbase() {
-    try! Syncbase.configure(adminUserId: "zinman@google.com",
-      // Craft a blessing prefix using google sign-in and the dev.v.io blessings provider.
-      defaultBlessingStringPrefix: "dev.v.io:o:\(AppDelegate.googleSignInClientID):",
+    try! Syncbase.configure(
+      adminUserId: "zinman@google.com",
       // Cloud mount-point.
       mountPoints: ["/ns.dev.v.io:8101/tmp/ios/diceroller/users/"])
   }
diff --git a/Syncbase/Source/AccessList.swift b/Syncbase/Source/AccessList.swift
index 6fe248d..5cb2032 100644
--- a/Syncbase/Source/AccessList.swift
+++ b/Syncbase/Source/AccessList.swift
@@ -74,10 +74,10 @@
   }
 
   /// Applies delta to perms, returning the updates permissions.
-  static func applyDelta(permissions: Permissions, delta: AccessList) -> Permissions {
+  static func applyDelta(permissions: Permissions, delta: AccessList) throws -> Permissions {
     var perms = permissions
     for (userId, level) in delta.users {
-      let bp = blessingPatternFromAlias(userId)
+      let bp = try blessingPatternFromAlias(userId)
       switch level {
       case .INTERNAL_ONLY_REMOVE:
         perms[Tags.Resolve.rawValue] = perms[Tags.Resolve.rawValue]?.removeFromAllowed(bp)
diff --git a/Syncbase/Source/Blessing.swift b/Syncbase/Source/Blessing.swift
index 1a05607..28f3cb0 100644
--- a/Syncbase/Source/Blessing.swift
+++ b/Syncbase/Source/Blessing.swift
@@ -20,12 +20,12 @@
   return parts[parts.count - 1]
 }
 
-private func blessingStringFromAlias(alias: String) -> String {
-  return Syncbase.defaultBlessingStringPrefix + alias
+private func blessingStringFromAlias(alias: String) throws -> String {
+  return try Principal.appBlessing() + ":" + alias
 }
 
-func blessingPatternFromAlias(alias: String) -> BlessingPattern {
-  return BlessingPattern(blessingStringFromAlias(alias))
+func blessingPatternFromAlias(alias: String) throws -> BlessingPattern {
+  return BlessingPattern(try blessingStringFromAlias(alias))
 }
 
 func personalBlessingString() throws -> String {
diff --git a/Syncbase/Source/Collection.swift b/Syncbase/Source/Collection.swift
index ba0f82a..121738d 100644
--- a/Syncbase/Source/Collection.swift
+++ b/Syncbase/Source/Collection.swift
@@ -92,7 +92,7 @@
       try SyncbaseError.wrap {
         let vCx = try db.collection(self.collectionId).coreCollection
         let perms = try vCx.getPermissions()
-        AccessList.applyDelta(perms, delta: delta)
+        try AccessList.applyDelta(perms, delta: delta)
         try vCx.setPermissions(perms)
       }
     }
diff --git a/Syncbase/Source/Syncbase.swift b/Syncbase/Source/Syncbase.swift
index 68e8da9..17dc497 100644
--- a/Syncbase/Source/Syncbase.swift
+++ b/Syncbase/Source/Syncbase.swift
@@ -21,8 +21,7 @@
   // The userdata collection, created post-login.
   static var userdataCollection: Collection?
   // Options for opening a database.
-  static var adminUserId = "alexfandrianto@google.com"
-  static var defaultBlessingStringPrefix = "dev.v.io:o:608941808256-43vtfndets79kf5hac8ieujto8837660.apps.googleusercontent.com:"
+  static var adminUserId = ""
   static var disableSyncgroupPublishing = false
   static var disableUserdataSyncgroup = false
   static var mountPoints = ["/ns.dev.v.io:8101/tmp/todos/users/"]
@@ -66,7 +65,6 @@
   /// - parameter adminUserId:                 The email address for the administrator user.
   /// - parameter rootDir:                     Where data should be persisted.
   /// - parameter mountPoints:                 // TODO(zinman): Get appropriate documentation on mountPoints
-  /// - parameter defaultBlessingStringPrefix: // TODO(zinman): Figure out what this should default to.
   /// - parameter disableSyncgroupPublishing:  **FOR ADVANCED USERS**. If true, syncgroups will not be published to the cloud peer.
   /// - parameter disableUserdataSyncgroup:    **FOR ADVANCED USERS**. If true, the user's data will not be synced across their devices.
   /// - parameter callback:                    Called on `Syncbase.queue` with either `Database` if successful, or an error if unsuccessful.
@@ -74,8 +72,7 @@
     adminUserId adminUserId: String,
     // Default to Application Support/Syncbase.
     rootDir: String = defaultRootDir,
-    mountPoints: [String] = ["/ns.dev.v.io:8101/tmp/todos/users/"],
-    defaultBlessingStringPrefix: String = "dev.v.io:o:608941808256-43vtfndets79kf5hac8ieujto8837660.apps.googleusercontent.com:",
+    mountPoints: [String],
     disableSyncgroupPublishing: Bool = false,
     disableUserdataSyncgroup: Bool = false,
     queue: dispatch_queue_t = dispatch_get_main_queue()) throws {
@@ -84,7 +81,6 @@
       }
       Syncbase.adminUserId = adminUserId
       Syncbase.mountPoints = mountPoints
-      Syncbase.defaultBlessingStringPrefix = defaultBlessingStringPrefix
       Syncbase.disableSyncgroupPublishing = disableSyncgroupPublishing
       Syncbase.disableUserdataSyncgroup = disableUserdataSyncgroup
       Syncbase.didPostLogin = false
@@ -306,7 +302,7 @@
   /// - parameter usersWhoCanSee: The set of users who are allowed to find this user. If empty
   /// then everyone can see the advertisement.
   public static func startAdvertisingPresenceInNeighborhood(usersWhoCanSee: [User] = []) throws {
-    let visibility = usersWhoCanSee.map { return blessingPatternFromAlias($0.alias) }
+    let visibility = try usersWhoCanSee.map { return try blessingPatternFromAlias($0.alias) }
     try SyncbaseError.wrap {
       try Neighborhood.startAdvertising(visibility)
     }
diff --git a/Syncbase/Source/Syncgroup.swift b/Syncbase/Source/Syncgroup.swift
index 78c4483..a7b1838 100644
--- a/Syncbase/Source/Syncgroup.swift
+++ b/Syncbase/Source/Syncgroup.swift
@@ -112,7 +112,7 @@
     try SyncbaseError.wrap {
       // TODO(sadovsky): Make it so SyncgroupSpec can be updated as part of a batch?
       let versionedSpec = try self.coreSyncgroup.getSpec()
-      let permissions = AccessList.applyDelta(versionedSpec.spec.permissions, delta: delta)
+      let permissions = try AccessList.applyDelta(versionedSpec.spec.permissions, delta: delta)
       let oldSpec = versionedSpec.spec
       try self.coreSyncgroup.setSpec(VersionedSpec(
         spec: SyncgroupSpec(description: oldSpec.description,
diff --git a/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift b/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift
index 0bf11e6..a27d9ea 100644
--- a/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift
+++ b/SyncbaseTodosApp/SyncbaseTodos/AppDelegate.swift
@@ -19,8 +19,6 @@
 
     // Configure Syncbase
     try! Syncbase.configure(adminUserId: "zinman@google.com",
-      // Craft a blessing prefix using google sign-in and the dev.v.io blessings provider.
-      defaultBlessingStringPrefix: "dev.v.io:o:\(clientID):",
       // Cloud mount-point.
       // TODO(mrschmidt): Remove the ios-specific portion of mountpoint when VOM is implemented.
       mountPoints: ["/ns.dev.v.io:8101/tmp/ios/todos/users/"])