blob: 8def540b02c5fffe866335a72914ea0d92564e16 [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 -07005package main
6
Adam Sadovskyb85e3532015-04-08 20:38:27 -07007import (
8 "flag"
9
Adam Sadovskyb5f88922015-07-26 17:41:37 -070010 "v.io/syncbase/x/ref/services/syncbase/server"
Adam Sadovskyb85e3532015-04-08 20:38:27 -070011 "v.io/v23"
Adam Sadovskyd8584572015-07-31 20:04:00 -070012 "v.io/v23/context"
Adam Sadovsky9fb308f2015-08-10 19:12:34 -070013 "v.io/v23/rpc"
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070014 "v.io/v23/security"
Adam Sadovskyb85e3532015-04-08 20:38:27 -070015 "v.io/v23/security/access"
16 "v.io/x/lib/vlog"
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070017 "v.io/x/ref/lib/security/securityflag"
Adam Sadovsky398d6aa2015-06-29 14:47:55 -070018 _ "v.io/x/ref/runtime/factories/roaming"
Adam Sadovskyb85e3532015-04-08 20:38:27 -070019)
20
Adam Sadovskyb85e3532015-04-08 20:38:27 -070021var (
Adam Sadovsky232c3662015-06-04 15:00:09 -070022 name = flag.String("name", "", "Name to mount at.")
23 rootDir = flag.String("root-dir", "/var/lib/syncbase", "Root dir for storage engines and other data")
Sergey Rogulenko4a8aadf2015-06-10 18:59:06 -070024 engine = flag.String("engine", "leveldb", "Storage engine to use. Currently supported: memstore and leveldb.")
Adam Sadovskyb85e3532015-04-08 20:38:27 -070025)
26
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070027// defaultPerms returns a permissions object that grants all permissions to the
28// provided blessing patterns.
29func defaultPerms(blessingPatterns []security.BlessingPattern) access.Permissions {
30 perms := access.Permissions{}
31 for _, tag := range access.AllTypicalTags() {
32 for _, bp := range blessingPatterns {
33 perms.Add(bp, string(tag))
34 }
35 }
36 return perms
37}
38
Adam Sadovsky9fb308f2015-08-10 19:12:34 -070039// TODO(sadovsky): We return rpc.Server and rpc.Dispatcher as a quick hack to
40// support Mojo.
41func Serve(ctx *context.T) (rpc.Server, rpc.Dispatcher) {
Himabindu Puchad964ef02015-06-30 01:10:47 -070042 s, err := v23.NewServer(ctx)
43 if err != nil {
44 vlog.Fatal("v23.NewServer() failed: ", err)
45 }
46 if _, err := s.Listen(v23.GetListenSpec(ctx)); err != nil {
47 vlog.Fatal("s.Listen() failed: ", err)
48 }
49
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070050 perms, err := securityflag.PermissionsFromFlag()
51 if err != nil {
52 vlog.Fatal("securityflag.PermissionsFromFlag() failed: ", err)
53 }
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070054 if perms != nil {
Adam Sadovsky6275c272015-06-24 12:56:11 -070055 vlog.Info("Using perms from command line flag.")
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070056 } else {
Adam Sadovsky6275c272015-06-24 12:56:11 -070057 vlog.Info("Perms flag not set. Giving local principal all perms.")
Nicolas Lacasseb67f2a52015-05-19 10:20:32 -070058 perms = defaultPerms(security.DefaultBlessingPatterns(v23.GetPrincipal(ctx)))
59 }
Adam Sadovsky6275c272015-06-24 12:56:11 -070060 vlog.Infof("Perms: %v", perms)
Himabindu Pucha03ef3932015-06-26 17:56:09 -070061 service, err := server.NewService(ctx, nil, server.ServiceOptions{
Adam Sadovsky232c3662015-06-04 15:00:09 -070062 Perms: perms,
63 RootDir: *rootDir,
64 Engine: *engine,
Himabindu Puchad964ef02015-06-30 01:10:47 -070065 Server: s,
Adam Sadovsky232c3662015-06-04 15:00:09 -070066 })
Adam Sadovskyf3b7abc2015-05-04 15:33:22 -070067 if err != nil {
68 vlog.Fatal("server.NewService() failed: ", err)
Adam Sadovskyb85e3532015-04-08 20:38:27 -070069 }
70 d := server.NewDispatcher(service)
71
Himabindu Puchad964ef02015-06-30 01:10:47 -070072 // Publish the service in the mount table.
73 if err := s.ServeDispatcher(*name, d); err != nil {
74 vlog.Fatal("s.ServeDispatcher() failed: ", err)
Adam Sadovskyb85e3532015-04-08 20:38:27 -070075 }
Adam Sadovsky398d6aa2015-06-29 14:47:55 -070076 if *name != "" {
77 vlog.Info("Mounted at: ", *name)
78 }
Adam Sadovskyb85e3532015-04-08 20:38:27 -070079
Adam Sadovsky9fb308f2015-08-10 19:12:34 -070080 return s, d
Adam Sadovskyb85e3532015-04-08 20:38:27 -070081}