diff --git a/Makefile.am b/Makefile.am index ecb9a76..2dcb52c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -126,17 +126,14 @@ run: env CGO_ENABLED=1 $(GO) run $(GOFLAGS) ./cmd/mbased/... --daemon=false -distclean-local: clean - rm -rf autom4te.cache +distclean-local: + rm -rf tmp/ clean-local: - rm -f */*/*~ - rm -f */*~ - rm -f *~ + $(FIND) . -name "*~" | $(XARGS) rm -v rm -f cmd/mbaseadmin/mbaseadmin rm -f cmd/mbasectl/mbasectl rm -f cmd/mbased/mbased rm -f cmd/mbasedump/mbasedump rm -rf autom4te.cache - rm -rf tmp/ diff --git a/Makefile.in b/Makefile.in index aae2b74..3ba0627 100644 --- a/Makefile.in +++ b/Makefile.in @@ -225,6 +225,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ +FIND = @FIND@ GO = @GO@ HAVE_GO = @HAVE_GO@ INSTALL = @INSTALL@ @@ -921,19 +922,16 @@ run: test -z $(DESTDIR)$(SRV_DATADIR) || $(MKDIR_P) $(DESTDIR)$(SRV_DATADIR) env CGO_ENABLED=1 $(GO) run $(GOFLAGS) ./cmd/mbased/... --daemon=false -distclean-local: clean - rm -rf autom4te.cache +distclean-local: + rm -rf tmp/ clean-local: - rm -f */*/*~ - rm -f */*~ - rm -f *~ + $(FIND) . -name "*~" | $(XARGS) rm -v rm -f cmd/mbaseadmin/mbaseadmin rm -f cmd/mbasectl/mbasectl rm -f cmd/mbased/mbased rm -f cmd/mbasedump/mbasedump rm -rf autom4te.cache - rm -rf tmp/ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/app/config/config.go b/app/config/config.go index 6bb3b45..33eb558 100644 --- a/app/config/config.go +++ b/app/config/config.go @@ -20,32 +20,30 @@ const ( pidFilename = "mbased.pid" ) -var ( - buildVersion = "NONE" -) - type Networks struct { Enabled []string `json:"enabled" yaml:"enabled"` Disabled []string `json:"disabled" yaml:"disabled"` } -type ServiceConfig struct { +type Service struct { Portnum uint32 `json:"port" yaml:"port"` Address string `json:"address" yaml:"address"` Protocol string `json:"protocol" yaml:"protocol"` } type Config struct { - PackageVersion string `json:"packageVersion" yaml:"packageVersion"` - Service ServiceConfig `json:"service" yaml:"service"` - Networks Networks `json:"networks" yaml:"networks"` - Hostname string `json:"hostname" yaml:"hostname"` - Debug bool `json:"debug" yaml:"debug"` - Build string `json:"build" yaml:"build"` - LogPath string `json:"logfile" yaml:"logfile"` - RunPath string `json:"runfile" yaml:"runfile"` - DataDir string `json:"datadir" yaml:"datadir"` - Daemon bool `json:"daemon" yaml:"daemon"` + Version string `json:"version" yaml:"version"` + Service Service `json:"service" yaml:"service"` + Networks Networks `json:"networks" yaml:"networks"` + Hostname string `json:"hostname" yaml:"hostname"` + Debug bool `json:"debug" yaml:"debug"` + Build string `json:"build" yaml:"build"` + LogPath string `json:"logfile" yaml:"logfile"` + RunPath string `json:"runfile" yaml:"runfile"` + DataDir string `json:"datadir" yaml:"datadir"` + AsDaemon bool `json:"asDaemon" yaml:"asDaemon"` + RunUser string `json:"runUser" yaml:"runUser"` + LogLimit int64 `json:"logLimit" yaml:"logLimit"` } var ( @@ -54,28 +52,29 @@ var ( ) const ( - defaultServiceAddress = "0.0.0.0" + defaultServiceAddress = "[::]" defaultServiceProtocol = "tcp" ) func NewConfig() *Config { conf := &Config{ - Service: ServiceConfig{ + Service: Service{ Portnum: client.DefaultPort, Address: defaultServiceAddress, Protocol: defaultServiceProtocol, }, - DataDir: datadirPath, - Debug: false, - Hostname: defaultHostname, - Build: buildVersion, - Daemon: true, - PackageVersion: packageVersion, - Networks: Networks{ Enabled: defaultEnabledNetworks, Disabled: defaultDisabledNetworks, }, + DataDir: datadirPath, + Debug: false, + Hostname: defaultHostname, + Build: packageVersion, + AsDaemon: true, + Version: packageVersion, + LogLimit: 1024 * 1024 * 10, // 10 Mb + RunUser: "daemon", } conf.LogPath = filepath.Join(logdirPath, logFilename) conf.RunPath = filepath.Join(rundirPath, pidFilename) @@ -106,7 +105,7 @@ func (conf *Config) ReadOpts() error { exeName := filepath.Base(os.Args[0]) - flag.BoolVar(&conf.Daemon, "daemon", conf.Daemon, "run as daemon") + flag.BoolVar(&conf.AsDaemon, "asDaemon", conf.AsDaemon, "run as daemon") flag.BoolVar(&conf.Debug, "debug", conf.Debug, "on debug mode") help := func() { diff --git a/app/maindb/database.go b/app/maindb/database.go index 0fc1192..831bb82 100644 --- a/app/maindb/database.go +++ b/app/maindb/database.go @@ -10,34 +10,6 @@ import ( _ "github.com/mattn/go-sqlite3" ) -const schema = ` - --- DROP TABLE IF EXISTS account; - CREATE TABLE IF NOT EXISTS account ( - id TEXT NOT NULL, - username TEXT NOT NULL, - passhash TEXT NOT NULL, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - disabled BOOL - ); - CREATE UNIQUE INDEX IF NOT EXISTS account_index01 - ON account(id); - CREATE UNIQUE INDEX IF NOT EXISTS account_index02 - ON account(username); - - --- DROP TABLE IF EXISTS grant; - CREATE TABLE IF NOT EXISTS grant ( - id TEXT NOT NULL, - account_id TEXT NOT NULL, - operation TEXT NOT NULL, - created_at TEXT NOT NULL - ); - CREATE INDEX IF NOT EXISTS grant_index01 - ON grant(account_id); - CREATE UNIQUE INDEX IF NOT EXISTS grant_index02 - ON grant(account_id, operation); -` - type Database struct { datapath string db *sqlx.DB @@ -61,7 +33,6 @@ func (db *Database) OpenDatabase() error { if err != nil { return err } - err = db.db.Ping() if err != nil { return err diff --git a/app/maindb/grant.go b/app/maindb/grant.go index 1b33b9d..1a28be5 100644 --- a/app/maindb/grant.go +++ b/app/maindb/grant.go @@ -8,9 +8,9 @@ import ( func (db *Database) InsertGrant(ctx context.Context, grant *descr.Grant) error { var err error - request := `INSERT INTO grant(id, account_id, operation, created_at) + request := `INSERT INTO grant(id, account_id, grantname, created_at) VALUES ($1, $2, $3, $4)` - _, err = db.db.Exec(request, grant.ID, grant.AccountID, grant.Operation, grant.CreatedAt) + _, err = db.db.Exec(request, grant.ID, grant.AccountID, grant.Grantname, grant.CreatedAt) if err != nil { return err } @@ -39,12 +39,12 @@ func (db *Database) ListGrants(ctx context.Context) ([]descr.Grant, error) { return res, err } -func (db *Database) GetGrant(ctx context.Context, accountID, operation string) (bool, *descr.Grant, error) { +func (db *Database) GetGrant(ctx context.Context, accountID, grantname string) (bool, *descr.Grant, error) { var err error res := &descr.Grant{} - request := `SELECT * FROM grant WHERE account_id = $1 AND operation = $2 LIMIT 1` + request := `SELECT * FROM grant WHERE account_id = $1 AND grantname = $2 LIMIT 1` dbRes := make([]descr.Grant, 0) - err = db.db.Select(&dbRes, request, accountID, operation) + err = db.db.Select(&dbRes, request, accountID, grantname) if err != nil { return false, res, err } @@ -56,10 +56,10 @@ func (db *Database) GetGrant(ctx context.Context, accountID, operation string) ( return true, res, err } -func (db *Database) DeleteGrantByAccountID(ctx context.Context, grantID, operation string) error { +func (db *Database) DeleteGrantByAccountID(ctx context.Context, grantID, grantname string) error { var err error - request := `DELETE FROM grant WHERE account_id = $1 AND operation = $2` - _, err = db.db.Exec(request, grantID, operation) + request := `DELETE FROM grant WHERE account_id = $1 AND grantname = $2` + _, err = db.db.Exec(request, grantID, grantname) if err != nil { return err } diff --git a/app/maindb/schema.go b/app/maindb/schema.go new file mode 100644 index 0000000..006f50e --- /dev/null +++ b/app/maindb/schema.go @@ -0,0 +1,29 @@ +package maindb + +const schema = ` + --- DROP TABLE IF EXISTS account; + CREATE TABLE IF NOT EXISTS account ( + id TEXT NOT NULL, + username TEXT NOT NULL, + passhash TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + disabled BOOL + ); + CREATE UNIQUE INDEX IF NOT EXISTS account_index01 + ON account(id); + CREATE UNIQUE INDEX IF NOT EXISTS account_index02 + ON account(username); + + --- DROP TABLE IF EXISTS grant; + CREATE TABLE IF NOT EXISTS grant ( + id TEXT NOT NULL, + account_id TEXT NOT NULL, + grantname TEXT NOT NULL, + created_at TEXT NOT NULL + ); + CREATE INDEX IF NOT EXISTS grant_index01 + ON grant(account_id); + CREATE UNIQUE INDEX IF NOT EXISTS grant_index02 + ON grant(account_id, grantname); +` diff --git a/app/operator/account.go b/app/operator/account.go index 45beae0..a757c68 100644 --- a/app/operator/account.go +++ b/app/operator/account.go @@ -221,7 +221,7 @@ func (oper *Operator) ListAccounts(ctx context.Context, accountID string, params } for _, grantDescrs := range grantDescrs { grantShortDescrs := &mbctl.GrantShortDescr{ - Operation: grantDescrs.Operation, + Grantname: grantDescrs.Grantname, CreatedAt: grantDescrs.CreatedAt, } accountShortDescr.Grants = append(accountShortDescr.Grants, grantShortDescrs) diff --git a/app/operator/database.go b/app/operator/database.go index 78dd810..da3227b 100644 --- a/app/operator/database.go +++ b/app/operator/database.go @@ -54,7 +54,7 @@ func (oper *Operator) SeedAccount(ctx context.Context) (string, error) { for _, grantType := range grantTypes { grantDescr := &descr.Grant{ AccountID: accountDescr.ID, - Operation: grantType, + Grantname: grantType, CreatedAt: now, } err = oper.db.InsertGrant(ctx, grantDescr) diff --git a/app/operator/dump.go b/app/operator/dump.go index 3e24144..ea92709 100644 --- a/app/operator/dump.go +++ b/app/operator/dump.go @@ -96,7 +96,7 @@ func (oper *Operator) RestoreDump(ctx context.Context, accountID string, params } } for _, grant := range dump.Grants { - oper.log.Infof("Insert grant %s for account %d", grant.Operation, grant.AccountID) + oper.log.Infof("Insert grant %s for account %d", grant.Grantname, grant.AccountID) err = oper.db.InsertGrant(ctx, &grant) if err != nil { oper.log.Errorf("Insert account error: %v", err) diff --git a/app/operator/grants.go b/app/operator/grants.go index f206b86..6d581e6 100644 --- a/app/operator/grants.go +++ b/app/operator/grants.go @@ -31,7 +31,7 @@ func (oper *Operator) SetGrant(ctx context.Context, accountID string, params *mb } var grantOk bool for _, grantType := range grantTypes { - if grantType == params.Operation { + if grantType == params.Grantname { grantOk = true break } @@ -60,12 +60,12 @@ func (oper *Operator) SetGrant(ctx context.Context, accountID string, params *mb return res, err } - grantExists, _, err = oper.db.GetGrant(ctx, accountDescr.ID, params.Operation) + grantExists, _, err = oper.db.GetGrant(ctx, accountDescr.ID, params.Grantname) if err != nil { return res, err } if grantExists { - err := fmt.Errorf("Grant %s for the user already exists", params.Operation) + err := fmt.Errorf("Grant %s for the user already exists", params.Grantname) return res, err } now := time.Now().Format(time.RFC3339) @@ -73,7 +73,7 @@ func (oper *Operator) SetGrant(ctx context.Context, accountID string, params *mb ID: auxuuid.NewUUID(), AccountID: accountDescr.ID, CreatedAt: now, - Operation: params.Operation, + Grantname: params.Grantname, } err = oper.db.InsertGrant(ctx, grantDescr) if err != nil { @@ -103,7 +103,7 @@ func (oper *Operator) DeleteGrant(ctx context.Context, accountID string, params } var grantOk bool for _, grantType := range grantTypes { - if grantType == params.Operation { + if grantType == params.Grantname { grantOk = true break } @@ -132,7 +132,7 @@ func (oper *Operator) DeleteGrant(ctx context.Context, accountID string, params return res, err } - grantExists, _, err = oper.db.GetGrant(ctx, accountDescr.ID, params.Operation) + grantExists, _, err = oper.db.GetGrant(ctx, accountDescr.ID, params.Grantname) if err != nil { return res, err } @@ -140,7 +140,7 @@ func (oper *Operator) DeleteGrant(ctx context.Context, accountID string, params err := fmt.Errorf("Requested grant for the user not found") return res, err } - err = oper.db.DeleteGrantByAccountID(ctx, accountDescr.ID, params.Operation) + err = oper.db.DeleteGrantByAccountID(ctx, accountDescr.ID, params.Grantname) if err != nil { return res, err } diff --git a/app/server/server.go b/app/server/server.go index bd34570..8699ef7 100644 --- a/app/server/server.go +++ b/app/server/server.go @@ -1,6 +1,7 @@ package server import ( + "fmt" "io/ioutil" "os" "os/signal" @@ -37,6 +38,7 @@ type Server struct { x509key []byte state descr.Server sfile string + logf *os.File } func NewServer() (*Server, error) { @@ -117,26 +119,88 @@ func (srv *Server) Build() error { var err error srv.log.Infof("Build server") + currUser, err := user.Current() + if err != nil { + err = fmt.Errorf("Error getting current user: %v\n", err) + return err + } + cuid64, err := strconv.ParseInt(currUser.Uid, 10, 64) + if err != nil { + return err + } + cgid64, err := strconv.ParseInt(currUser.Gid, 10, 64) + if err != nil { + return err + } + euid := int(cuid64) + egid := int(cgid64) + + if cuid64 == 0 { + usr, err := user.Lookup(srv.conf.RunUser) + if err != nil { + return err + } + uid64, err := strconv.ParseInt(usr.Uid, 10, 64) + if err != nil { + return err + } + gid64, err := strconv.ParseInt(usr.Gid, 10, 64) + if err != nil { + return err + } + euid = int(uid64) + egid = int(gid64) + } + // Mkdir log and data dir - srv.log.Infof("Create %s dir", srv.conf.DataDir) + datadir := srv.conf.DataDir + srv.log.Infof("Create %s dir", datadir) err = os.MkdirAll(srv.conf.DataDir, 0750) if err != nil { return err } - if srv.conf.Daemon { - logDir := filepath.Dir(srv.conf.LogPath) - srv.log.Infof("Create %s dir", logDir) - err = os.MkdirAll(logDir, 0750) - if err != nil { - return err - } - runDir := filepath.Dir(srv.conf.RunPath) - srv.log.Infof("Create %s dir", runDir) - err = os.MkdirAll(runDir, 0750) - if err != nil { - return err - } + err = os.Chown(datadir, euid, egid) + if err != nil { + return err } + + if srv.conf.AsDaemon { + logdir := filepath.Dir(srv.conf.LogPath) + //srv.logg.Infof("Creating log directory %s", logdir) + err = os.MkdirAll(logdir, 0750) + if err != nil { + return err + } + err = os.Chown(logdir, euid, egid) + if err != nil { + return err + } + rundir := filepath.Dir(srv.conf.RunPath) + //srv.logg.Infof("Creating run directory %s", rundir) + err = os.MkdirAll(rundir, 0750) + if err != nil { + return err + } + err = os.Chown(rundir, euid, egid) + if err != nil { + return err + } + // Redirect stderr and stout + logFile, err := os.OpenFile(srv.conf.LogPath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0640) + if err != nil { + return err + } + err = syscall.Dup2(int(logFile.Fd()), int(os.Stdout.Fd())) + if err != nil { + return err + } + err = syscall.Dup2(int(logFile.Fd()), int(os.Stderr.Fd())) + if err != nil { + return err + } + srv.logf = logFile + } + // Create X509 certs srv.x509cert, srv.x509key, err = aux509.CreateX509SelfSignedCert(srv.conf.Hostname) if err != nil { @@ -305,13 +369,12 @@ func (srv *Server) PseudoFork() error { func (srv *Server) Daemonize() error { var err error - if srv.conf.Daemon { + if srv.conf.AsDaemon { // Restart process process err = srv.PseudoFork() if err != nil { return err } - // Redirect stdin nullFile, err := os.OpenFile("/dev/null", os.O_RDWR, 0) if err != nil { diff --git a/cmd/mbaseadmin/grant/delete.go b/cmd/mbaseadmin/grant/delete.go index c2143bf..cae673d 100644 --- a/cmd/mbaseadmin/grant/delete.go +++ b/cmd/mbaseadmin/grant/delete.go @@ -13,14 +13,14 @@ import ( func (util *Util) DeleteGrant(cmd *cobra.Command, args []string) { util.deleteGrantParams.Username = args[0] - util.deleteGrantParams.Operation = args[1] + util.deleteGrantParams.Grantname = args[1] res, err := util.deleteGrant(&util.deleteGrantParams) printResponse(res, err) } type DeleteGrantParams struct { Username string - Operation string + Grantname string } type DeleteGrantResult struct{} @@ -30,7 +30,7 @@ func (util *Util) deleteGrant(params *DeleteGrantParams) (*DeleteGrantResult, er ctx := context.Background() operParams := &mbctl.DeleteGrantParams{ Username: params.Username, - Operation: params.Operation, + Grantname: params.Grantname, } _, err = util.oper.DeleteGrant(ctx, util.operID, operParams) if err != nil { diff --git a/cmd/mbaseadmin/grant/set.go b/cmd/mbaseadmin/grant/set.go index 07d7c2b..8253e43 100644 --- a/cmd/mbaseadmin/grant/set.go +++ b/cmd/mbaseadmin/grant/set.go @@ -13,14 +13,14 @@ import ( func (util *Util) SetGrant(cmd *cobra.Command, args []string) { util.setGrantParams.Username = args[0] - util.setGrantParams.Operation = args[1] + util.setGrantParams.Grantname = args[1] res, err := util.setGrant(&util.setGrantParams) printResponse(res, err) } type SetGrantParams struct { Username string - Operation string + Grantname string } type SetGrantResult struct { GrantID string `json:"grantId"` @@ -32,7 +32,7 @@ func (util *Util) setGrant(params *SetGrantParams) (*SetGrantResult, error) { ctx := context.Background() operParams := &mbctl.SetGrantParams{ Username: params.Username, - Operation: params.Operation, + Grantname: params.Grantname, } operRes, err := util.oper.SetGrant(ctx, util.operID, operParams) if err != nil { diff --git a/cmd/mbaseadmin/util_test.go b/cmd/mbaseadmin/util_test.go new file mode 100644 index 0000000..a0c2fe6 --- /dev/null +++ b/cmd/mbaseadmin/util_test.go @@ -0,0 +1,19 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestCert(t *testing.T) { + var err error + util := NewUtil() + + err = util.Build() + require.NoError(t, err) + + args := []string{"seed"} + err = util.Exec(args) + require.NoError(t, err) +} diff --git a/cmd/mbasectl/grant/create.go b/cmd/mbasectl/grant/create.go deleted file mode 100644 index bc3445c..0000000 --- a/cmd/mbasectl/grant/create.go +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2026 Oleg Borodin - */ -package account - -import ( - "github.com/spf13/cobra" -) - -func (util *Util) CreateGrant(cmd *cobra.Command, args []string) { - //util.createGrantParams.Filename = args[0] - res, err := util.createGrant(util.createGrantParams) - printResponse(res, err) -} - -type createGrantParams struct{} -type createGrantResult struct{} - -func (util *Util) createGrant(params createGrantParams) (createGrantResult, error) { - var err error - res := createGrantResult{} - return res, err -} diff --git a/cmd/mbasectl/grant/delete.go b/cmd/mbasectl/grant/delete.go index f4a5db3..e1eb633 100644 --- a/cmd/mbasectl/grant/delete.go +++ b/cmd/mbasectl/grant/delete.go @@ -1,7 +1,7 @@ /* * Copyright 2026 Oleg Borodin */ -package account +package grant import ( "github.com/spf13/cobra" diff --git a/cmd/mbasectl/grant/printr.go b/cmd/mbasectl/grant/printr.go index 48d8e9e..245d7f8 100644 --- a/cmd/mbasectl/grant/printr.go +++ b/cmd/mbasectl/grant/printr.go @@ -1,7 +1,7 @@ /* * Copyright 2026 Oleg Borodin */ -package account +package grant import ( "fmt" diff --git a/cmd/mbasectl/grant/set.go b/cmd/mbasectl/grant/set.go new file mode 100644 index 0000000..08e8208 --- /dev/null +++ b/cmd/mbasectl/grant/set.go @@ -0,0 +1,50 @@ +/* + * Copyright 2026 Oleg Borodin + */ +package grant + +import ( + "context" + + "mbase/pkg/client" + "mbase/pkg/mbctl" + + "github.com/spf13/cobra" +) + +func (util *Util) SetGrant(cmd *cobra.Command, args []string) { + util.setGrantParams.Username = args[0] + util.setGrantParams.Grantname = args[1] + res, err := util.setGrant(util.setGrantParams) + printResponse(res, err) +} + +type SetGrantParams struct { + Username string + Grantname string +} +type SetGrantResult struct { + GrantID string +} + +func (util *Util) setGrant(params SetGrantParams) (SetGrantResult, error) { + var err error + res := SetGrantResult{} + + grpcConn, cli, err := client.NewClient(&util.access) + if err != nil { + return res, err + } + defer grpcConn.Close() + operParams := &mbctl.SetGrantParams{ + Username: params.Username, + Grantname: params.Grantname, + } + ctx := context.Background() + operRes, err := cli.SetGrant(ctx, operParams) + if err != nil { + return res, err + } + res.GrantID = operRes.GrantID + return res, err +} diff --git a/cmd/mbasectl/grant/util.go b/cmd/mbasectl/grant/util.go index 62cec53..284ea72 100644 --- a/cmd/mbasectl/grant/util.go +++ b/cmd/mbasectl/grant/util.go @@ -4,13 +4,24 @@ package grant import ( + "mbase/pkg/client" + "github.com/spf13/cobra" ) +type CommonParams struct { + Hostname string + Port uint32 + Username string + Password string +} + type Util struct { - rootCmd *cobra.Command - createGrantParams createGrantParams + rootCmd *cobra.Command + setGrantParams SetGrantParams deleteGrantParams deleteGrantParams + commonParams CommonParams + access client.Access } func NewUtil() *Util { @@ -29,13 +40,13 @@ func (util *Util) BuildCmds() *cobra.Command { } rootCmd.CompletionOptions.DisableDefaultCmd = true - var createGrantCmd = &cobra.Command{ - Use: "create name|id password", - Short: "Create grant", + var setGrantCmd = &cobra.Command{ + Use: "set name|id grant", + Short: "Set grant", Args: cobra.ExactArgs(2), - Run: util.CreateGrant, + Run: util.SetGrant, } - rootCmd.AddCommand(createGrantCmd) + rootCmd.AddCommand(setGrantCmd) var deleteGrantCmd = &cobra.Command{ Use: "delete name|id grant", @@ -49,3 +60,11 @@ func (util *Util) BuildCmds() *cobra.Command { return util.rootCmd } +func (util *Util) SetAccess(cmd *cobra.Command, args []string) { + util.access = client.Access{ + Hostname: util.commonParams.Hostname, + Port: util.commonParams.Port, + Username: util.commonParams.Username, + Password: util.commonParams.Password, + } +} diff --git a/cmd/mbasedump/util.go b/cmd/mbasedump/util.go index b750284..8967384 100644 --- a/cmd/mbasedump/util.go +++ b/cmd/mbasedump/util.go @@ -35,7 +35,7 @@ func (util *Util) Build() error { rootCmd.CompletionOptions.DisableDefaultCmd = true var dumpDatabaseCmd = &cobra.Command{ - Use: "dump [filename|-]", + Use: "dump filename|-", Short: "Dump application database", Args: cobra.ExactArgs(1), Run: util.DumpDatabase, @@ -43,7 +43,7 @@ func (util *Util) Build() error { rootCmd.AddCommand(dumpDatabaseCmd) var restoreDatabaseCmd = &cobra.Command{ - Use: "restore [] [filename|-]", + Use: "restore filename|-", Short: "Restore application database", Args: cobra.ExactArgs(1), Run: util.RestoreDatabase, diff --git a/configure b/configure index b9c5c56..7c676e9 100755 --- a/configure +++ b/configure @@ -662,6 +662,7 @@ build_os build_vendor build_cpu build +FIND XARGS CPIO PODMAN @@ -3646,6 +3647,57 @@ fi test -n "$XARGS" && break done +for ac_prog in find false +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_FIND+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_FIND="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +printf "%s\n" "$FIND" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$FIND" && break +done + for ac_prog in protoc false do # Extract the first word of "$ac_prog", so it can be a program name with args. diff --git a/configure.ac b/configure.ac index 85aedb1..696baf0 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,7 @@ AC_PATH_PROGS([PROTOC],[protoc true]) AC_PATH_PROGS([PODMAN],[podman true]) AC_PATH_PROGS([CPIO],[cpio false]) AC_PATH_PROGS([XARGS],[xargs false]) +AC_PATH_PROGS([FIND],[find false]) AC_PATH_PROGS([PROTOC],[protoc false]) diff --git a/pkg/aux509/x509cert_test.go b/pkg/aux509/x509cert_test.go index a4f8072..fc5a12f 100644 --- a/pkg/aux509/x509cert_test.go +++ b/pkg/aux509/x509cert_test.go @@ -8,12 +8,11 @@ import ( ) func TestCert(t *testing.T) { - { - //caCert, caKey, err := CreateX509SelfSignedCert("test1") - //require.NoError(t, err) - //fmt.Println(string(caCert)) - //fmt.Println(string(caKey)) + caCert, caKey, err := CreateX509SelfSignedCert("test1") + require.NoError(t, err) + fmt.Println(string(caCert)) + fmt.Println(string(caKey)) } { caCert, caKey, err := CreateX509CACert("test1") diff --git a/pkg/descr/descr.go b/pkg/descr/descr.go index bb525c6..0f51f11 100644 --- a/pkg/descr/descr.go +++ b/pkg/descr/descr.go @@ -23,7 +23,7 @@ type Account struct { type Grant struct { ID string `json:"id" yaml:"id" db:"id"` AccountID string `json:"accountID" yaml:"accountID" db:"account_id"` - Operation string `json:"operation" yaml:"operation" db:"operation"` + Grantname string `json:"grantname" yaml:"grantname" db:"grantname"` CreatedAt string `json:"createdAt" yaml:"createdAt" db:"created_at"` } diff --git a/pkg/mbctl/mbctl.pb.go b/pkg/mbctl/mbctl.pb.go index 36291a7..01b234d 100644 --- a/pkg/mbctl/mbctl.pb.go +++ b/pkg/mbctl/mbctl.pb.go @@ -193,7 +193,7 @@ type SetGrantParams struct { state protoimpl.MessageState `protogen:"open.v1"` Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` AccountID string `protobuf:"bytes,2,opt,name=accountID,proto3" json:"accountID,omitempty"` - Operation string `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"` + Grantname string `protobuf:"bytes,3,opt,name=grantname,proto3" json:"grantname,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -242,9 +242,9 @@ func (x *SetGrantParams) GetAccountID() string { return "" } -func (x *SetGrantParams) GetOperation() string { +func (x *SetGrantParams) GetGrantname() string { if x != nil { - return x.Operation + return x.Grantname } return "" } @@ -297,7 +297,7 @@ type DeleteGrantParams struct { state protoimpl.MessageState `protogen:"open.v1"` Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` AccountID string `protobuf:"bytes,2,opt,name=accountID,proto3" json:"accountID,omitempty"` - Operation string `protobuf:"bytes,3,opt,name=operation,proto3" json:"operation,omitempty"` + Grantname string `protobuf:"bytes,3,opt,name=grantname,proto3" json:"grantname,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -346,9 +346,9 @@ func (x *DeleteGrantParams) GetAccountID() string { return "" } -func (x *DeleteGrantParams) GetOperation() string { +func (x *DeleteGrantParams) GetGrantname() string { if x != nil { - return x.Operation + return x.Grantname } return "" } @@ -915,7 +915,7 @@ func (x *AccountShortDescr) GetGrants() []*GrantShortDescr { type GrantShortDescr struct { state protoimpl.MessageState `protogen:"open.v1"` - Operation string `protobuf:"bytes,1,opt,name=operation,proto3" json:"operation,omitempty"` + Grantname string `protobuf:"bytes,1,opt,name=grantname,proto3" json:"grantname,omitempty"` CreatedAt string `protobuf:"bytes,2,opt,name=createdAt,proto3" json:"createdAt,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -951,9 +951,9 @@ func (*GrantShortDescr) Descriptor() ([]byte, []int) { return file_mbctl_proto_rawDescGZIP(), []int{19} } -func (x *GrantShortDescr) GetOperation() string { +func (x *GrantShortDescr) GetGrantname() string { if x != nil { - return x.Operation + return x.Grantname } return "" } @@ -1064,9 +1064,9 @@ var file_mbctl_proto_rawDesc = string([]byte{ 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2a, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x22, 0x6b, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, @@ -1074,8 +1074,8 @@ var file_mbctl_proto_rawDesc = string([]byte{ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x44, - 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x13, + 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4d, 0x0a, 0x13, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, @@ -1127,8 +1127,8 @@ var file_mbctl_proto_rawDesc = string([]byte{ 0x6f, 0x6c, 0x2e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x4d, 0x0a, 0x0f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x12, 0x1c, 0x0a, - 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, + 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x67, diff --git a/proto/mbctl.proto b/proto/mbctl.proto index 7910faa..049acfa 100644 --- a/proto/mbctl.proto +++ b/proto/mbctl.proto @@ -35,7 +35,7 @@ message restoreDumpResult { message setGrantParams { string username = 1; string accountID = 2; - string operation = 3; + string grantname = 3; } message setGrantResult { string grantID = 1; @@ -44,7 +44,7 @@ message setGrantResult { message deleteGrantParams { string username = 1; string accountID = 2; - string operation = 3; + string grantname = 3; } message deleteGrantResult {} @@ -89,7 +89,7 @@ message accountShortDescr { } message grantShortDescr { - string operation = 1; + string grantname = 1; string createdAt = 2; }