syncbased: Read permissions from flags. If no flag exists, give the
local principal all permissions (Read, Write, Admin, Debug, Resolve).
Change-Id: Id483011ac540b7a5d38400c495c5b31535660ea6
diff --git a/services/syncbase/syncbased/main.go b/services/syncbase/syncbased/main.go
index 38ab2de..35f935a 100644
--- a/services/syncbase/syncbased/main.go
+++ b/services/syncbase/syncbased/main.go
@@ -12,10 +12,12 @@
"flag"
"v.io/v23"
+ "v.io/v23/security"
"v.io/v23/security/access"
"v.io/x/lib/vlog"
"v.io/syncbase/x/ref/services/syncbase/server"
+ "v.io/x/ref/lib/security/securityflag"
"v.io/x/ref/lib/signals"
_ "v.io/x/ref/runtime/factories/generic"
)
@@ -25,6 +27,18 @@
name = flag.String("name", "", "Name to mount at.")
)
+// defaultPerms returns a permissions object that grants all permissions to the
+// provided blessing patterns.
+func defaultPerms(blessingPatterns []security.BlessingPattern) access.Permissions {
+ perms := access.Permissions{}
+ for _, tag := range access.AllTypicalTags() {
+ for _, bp := range blessingPatterns {
+ perms.Add(bp, string(tag))
+ }
+ }
+ return perms
+}
+
func main() {
ctx, shutdown := v23.Init()
defer shutdown()
@@ -37,8 +51,19 @@
vlog.Fatal("s.Listen() failed: ", err)
}
- // TODO(sadovsky): Use a real Permissions.
- service, err := server.NewService(nil, nil, access.Permissions{})
+ perms, err := securityflag.PermissionsFromFlag()
+ if err != nil {
+ vlog.Fatal("securityflag.PermissionsFromFlag() failed: ", err)
+ }
+
+ if perms != nil {
+ vlog.Info("Using permissions from command line flag.")
+ } else {
+ vlog.Info("No permissions flag provided. Giving local principal all permissions.")
+ perms = defaultPerms(security.DefaultBlessingPatterns(v23.GetPrincipal(ctx)))
+ }
+
+ service, err := server.NewService(nil, nil, perms)
if err != nil {
vlog.Fatal("server.NewService() failed: ", err)
}