diff --git a/accounts/pkg/command/add_account.go b/accounts/pkg/command/add_account.go index 386cb4864..4003c46ee 100644 --- a/accounts/pkg/command/add_account.go +++ b/accounts/pkg/command/add_account.go @@ -21,10 +21,6 @@ func AddAccount(cfg *config.Config) *cli.Command { Aliases: []string{"create", "a"}, Flags: flagset.AddAccountWithConfig(cfg, a), Before: func(c *cli.Context) error { - if err := ParseConfig(c, cfg); err != nil { - return err - } - // Write value of username to the flags beneath, as preferred name // and on-premises-sam-account-name is probably confusing for users. if username := c.String("username"); username != "" { diff --git a/accounts/pkg/command/inspect_account.go b/accounts/pkg/command/inspect_account.go index ece3932d5..baa3cb4b1 100644 --- a/accounts/pkg/command/inspect_account.go +++ b/accounts/pkg/command/inspect_account.go @@ -5,6 +5,8 @@ import ( "os" "strconv" + "github.com/owncloud/ocis/accounts/pkg/flagset" + "github.com/asim/go-micro/plugins/client/grpc/v4" tw "github.com/olekukonko/tablewriter" "github.com/owncloud/ocis/accounts/pkg/config" @@ -18,9 +20,7 @@ func InspectAccount(cfg *config.Config) *cli.Command { Name: "inspect", Usage: "Show detailed data on an existing account", ArgsUsage: "id", - Before: func(c *cli.Context) error { - return ParseConfig(c, cfg) - }, + Flags: flagset.Root(cfg), Action: func(c *cli.Context) error { accServiceID := cfg.GRPC.Namespace + "." + cfg.Server.Name if c.NArg() != 1 { diff --git a/accounts/pkg/command/list_accounts.go b/accounts/pkg/command/list_accounts.go index fedac44c4..de352367f 100644 --- a/accounts/pkg/command/list_accounts.go +++ b/accounts/pkg/command/list_accounts.go @@ -5,6 +5,8 @@ import ( "os" "strconv" + "github.com/owncloud/ocis/accounts/pkg/flagset" + "github.com/asim/go-micro/plugins/client/grpc/v4" tw "github.com/olekukonko/tablewriter" "github.com/owncloud/ocis/accounts/pkg/config" @@ -18,9 +20,7 @@ func ListAccounts(cfg *config.Config) *cli.Command { Name: "list", Usage: "List existing accounts", Aliases: []string{"ls"}, - Before: func(c *cli.Context) error { - return ParseConfig(c, cfg) - }, + Flags: flagset.Root(cfg), Action: func(c *cli.Context) error { accSvcID := cfg.GRPC.Namespace + "." + cfg.Server.Name accSvc := accounts.NewAccountsService(accSvcID, grpc.NewClient()) diff --git a/accounts/pkg/command/remove_account.go b/accounts/pkg/command/remove_account.go index 88a18110c..884244ed6 100644 --- a/accounts/pkg/command/remove_account.go +++ b/accounts/pkg/command/remove_account.go @@ -4,6 +4,8 @@ import ( "fmt" "os" + "github.com/owncloud/ocis/accounts/pkg/flagset" + "github.com/asim/go-micro/plugins/client/grpc/v4" "github.com/owncloud/ocis/accounts/pkg/config" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" @@ -17,6 +19,7 @@ func RemoveAccount(cfg *config.Config) *cli.Command { Usage: "Removes an existing account", ArgsUsage: "id", Aliases: []string{"rm"}, + Flags: flagset.Root(cfg), Before: func(c *cli.Context) error { return ParseConfig(c, cfg) }, diff --git a/accounts/pkg/command/update_account.go b/accounts/pkg/command/update_account.go index b3ed17f10..71f8c2c66 100644 --- a/accounts/pkg/command/update_account.go +++ b/accounts/pkg/command/update_account.go @@ -4,6 +4,8 @@ import ( "errors" "fmt" + "github.com/owncloud/ocis/accounts/pkg/flagset" + "github.com/asim/go-micro/plugins/client/grpc/v4" "github.com/owncloud/ocis/accounts/pkg/config" accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" @@ -20,10 +22,9 @@ func UpdateAccount(cfg *config.Config) *cli.Command { Name: "update", Usage: "Make changes to an existing account", ArgsUsage: "id", - //Flags: flagset.UpdateAccountWithConfig(cfg, a), + Flags: flagset.UpdateAccountWithConfig(cfg, a), Before: func(c *cli.Context) error { if len(c.StringSlice("password_policies")) > 0 { - // StringSliceFlag doesn't support Destination a.PasswordProfile.PasswordPolicies = c.StringSlice("password_policies") } diff --git a/accounts/pkg/flagset/flagset.go b/accounts/pkg/flagset/flagset.go index c633f1116..69b33a957 100644 --- a/accounts/pkg/flagset/flagset.go +++ b/accounts/pkg/flagset/flagset.go @@ -94,3 +94,107 @@ func AddAccountWithConfig(cfg *config.Config, a *accounts.Account) []cli.Flag { }, } } + +// UpdateAccountWithConfig applies update command flags to cfg +func UpdateAccountWithConfig(cfg *config.Config, a *accounts.Account) []cli.Flag { + if a.PasswordProfile == nil { + a.PasswordProfile = &accounts.PasswordProfile{} + } + + return []cli.Flag{ + &cli.StringFlag{ + Name: "grpc-namespace", + Value: flags.OverrideDefaultString(cfg.GRPC.Namespace, "com.owncloud.api"), + Usage: "Set the base namespace for the grpc namespace", + EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, + Destination: &cfg.GRPC.Namespace, + }, + &cli.StringFlag{ + Name: "name", + Value: flags.OverrideDefaultString(cfg.Server.Name, "accounts"), + Usage: "service name", + EnvVars: []string{"ACCOUNTS_NAME"}, + Destination: &cfg.Server.Name, + }, + &cli.BoolFlag{ + Name: "enabled", + Usage: "Enable the account", + Destination: &a.AccountEnabled, + }, + &cli.StringFlag{ + Name: "displayname", + Usage: "Set the displayname for the account", + Destination: &a.DisplayName, + }, + &cli.StringFlag{ + Name: "preferred-name", + Usage: "Set the preferred-name for the account", + Destination: &a.PreferredName, + }, + &cli.StringFlag{ + Name: "on-premises-sam-account-name", + Usage: "Set the on-premises-sam-account-name", + Destination: &a.OnPremisesSamAccountName, + }, + &cli.Int64Flag{ + Name: "uidnumber", + Usage: "Set the uidnumber for the account", + Destination: &a.UidNumber, + }, + &cli.Int64Flag{ + Name: "gidnumber", + Usage: "Set the gidnumber for the account", + Destination: &a.GidNumber, + }, + &cli.StringFlag{ + Name: "mail", + Usage: "Set the mail for the account", + Destination: &a.Mail, + }, + &cli.StringFlag{ + Name: "description", + Usage: "Set the description for the account", + Destination: &a.Description, + }, + &cli.StringFlag{ + Name: "password", + Usage: "Set the password for the account", + Destination: &a.PasswordProfile.Password, + // TODO read password from ENV? + }, + &cli.StringSliceFlag{ + Name: "password-policies", + Usage: "Possible policies: DisableStrongPassword, DisablePasswordExpiration", + }, + &cli.BoolFlag{ + Name: "force-password-change", + Usage: "Force password change on next sign-in", + Destination: &a.PasswordProfile.ForceChangePasswordNextSignIn, + }, + &cli.BoolFlag{ + Name: "force-password-change-mfa", + Usage: "Force password change on next sign-in with mfa", + Destination: &a.PasswordProfile.ForceChangePasswordNextSignInWithMfa, + }, + } +} + +// Root applies remove command flags to cfg +func Root(cfg *config.Config) []cli.Flag { + return []cli.Flag{ + &cli.StringFlag{ + Name: "grpc-namespace", + Value: flags.OverrideDefaultString(cfg.GRPC.Namespace, "com.owncloud.api"), + Usage: "Set the base namespace for the grpc namespace", + EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, + Destination: &cfg.GRPC.Namespace, + }, + &cli.StringFlag{ + Name: "name", + Value: flags.OverrideDefaultString(cfg.Server.Name, "accounts"), + Usage: "service name", + EnvVars: []string{"ACCOUNTS_NAME"}, + Destination: &cfg.Server.Name, + }, + } +}