blob: 729e386ee8099e94b61c3b54251c1b75acb4aba9 [file] [log] [blame]
Adam Sadovskyb85e3532015-04-08 20:38:27 -07001// Copyright 2015 The Vanadium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Adam Sadovskyb85e3532015-04-08 20:38:27 -07005// syncbased is a syncbase daemon.
6package main
7
8// Example invocation:
9// syncbased --veyron.tcp.address="127.0.0.1:0" --name=syncbased
10
11import (
12 "flag"
13
14 "v.io/v23"
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070015 "v.io/v23/security"
Adam Sadovskyb85e3532015-04-08 20:38:27 -070016 "v.io/v23/security/access"
17 "v.io/x/lib/vlog"
18
19 "v.io/syncbase/x/ref/services/syncbase/server"
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070020 "v.io/x/ref/lib/security/securityflag"
Adam Sadovskyb85e3532015-04-08 20:38:27 -070021 "v.io/x/ref/lib/signals"
Matt Rosencrantz4b033f42015-06-19 15:25:11 -070022 "v.io/x/ref/lib/xrpc"
Adam Sadovsky398d6aa2015-06-29 14:47:55 -070023 _ "v.io/x/ref/runtime/factories/roaming"
Adam Sadovskyb85e3532015-04-08 20:38:27 -070024)
25
Adam Sadovskyb85e3532015-04-08 20:38:27 -070026var (
Adam Sadovsky232c3662015-06-04 15:00:09 -070027 name = flag.String("name", "", "Name to mount at.")
28 rootDir = flag.String("root-dir", "/var/lib/syncbase", "Root dir for storage engines and other data")
Sergey Rogulenko4a8aadf2015-06-10 18:59:06 -070029 engine = flag.String("engine", "leveldb", "Storage engine to use. Currently supported: memstore and leveldb.")
Adam Sadovskyb85e3532015-04-08 20:38:27 -070030)
31
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070032// defaultPerms returns a permissions object that grants all permissions to the
33// provided blessing patterns.
34func defaultPerms(blessingPatterns []security.BlessingPattern) access.Permissions {
35 perms := access.Permissions{}
36 for _, tag := range access.AllTypicalTags() {
37 for _, bp := range blessingPatterns {
38 perms.Add(bp, string(tag))
39 }
40 }
41 return perms
42}
43
Adam Sadovskyb85e3532015-04-08 20:38:27 -070044func main() {
45 ctx, shutdown := v23.Init()
46 defer shutdown()
47
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070048 perms, err := securityflag.PermissionsFromFlag()
49 if err != nil {
50 vlog.Fatal("securityflag.PermissionsFromFlag() failed: ", err)
51 }
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070052 if perms != nil {
Adam Sadovsky6275c272015-06-24 12:56:11 -070053 vlog.Info("Using perms from command line flag.")
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070054 } else {
Adam Sadovsky6275c272015-06-24 12:56:11 -070055 vlog.Info("Perms flag not set. Giving local principal all perms.")
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070056 perms = defaultPerms(security.DefaultBlessingPatterns(v23.GetPrincipal(ctx)))
57 }
Adam Sadovsky6275c272015-06-24 12:56:11 -070058 vlog.Infof("Perms: %v", perms)
Himabindu Pucha03ef3932015-06-26 17:56:09 -070059 service, err := server.NewService(ctx, nil, server.ServiceOptions{
Adam Sadovsky232c3662015-06-04 15:00:09 -070060 Perms: perms,
61 RootDir: *rootDir,
62 Engine: *engine,
63 })
Adam Sadovskyf3b7abc2015-05-04 15:33:22 -070064 if err != nil {
65 vlog.Fatal("server.NewService() failed: ", err)
Adam Sadovskyb85e3532015-04-08 20:38:27 -070066 }
67 d := server.NewDispatcher(service)
68
Matt Rosencrantz4b033f42015-06-19 15:25:11 -070069 if _, err = xrpc.NewDispatchingServer(ctx, *name, d); err != nil {
70 vlog.Fatal("xrpc.NewDispatchingServer() failed: ", err)
Adam Sadovskyb85e3532015-04-08 20:38:27 -070071 }
Adam Sadovsky398d6aa2015-06-29 14:47:55 -070072 if *name != "" {
73 vlog.Info("Mounted at: ", *name)
74 }
Adam Sadovskyb85e3532015-04-08 20:38:27 -070075
76 // Wait forever.
77 <-signals.ShutdownOnSignals(ctx)
78}