From 4f5281bd85732616a3c43af45eef7a7cf53d734b Mon Sep 17 00:00:00 2001 From: Adrian Richter Date: Wed, 13 May 2026 15:14:34 +0200 Subject: [PATCH 1/3] Make --address, --password-file settable from env --- internal/manage/actions/action/action.go | 13 +++++++++++-- internal/manage/actions/createuser/createuser.go | 13 +++++++++++-- internal/manage/actions/initialdata/initialdata.go | 12 ++++++++++-- internal/manage/actions/migrations/migrations.go | 13 +++++++++++-- internal/manage/actions/set/set.go | 13 +++++++++++-- internal/manage/actions/setpassword/setpassword.go | 13 +++++++++++-- 6 files changed, 65 insertions(+), 12 deletions(-) diff --git a/internal/manage/actions/action/action.go b/internal/manage/actions/action/action.go index a7dcc9b..4f3eb00 100644 --- a/internal/manage/actions/action/action.go +++ b/internal/manage/actions/action/action.go @@ -3,6 +3,7 @@ package action import ( "encoding/json" "fmt" + "os" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" @@ -46,8 +47,16 @@ func Cmd() *cobra.Command { passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") payloadFile := cmd.Flags().StringP("file", "f", "", "JSON file with the payload, or - for stdin") - _ = cmd.MarkFlagRequired("address") - _ = cmd.MarkFlagRequired("password-file") + if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { + address = &addressEnv + } else { + _ = cmd.MarkFlagRequired("address") + } + if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { + passwordFile = &passwordFileEnv + } else { + _ = cmd.MarkFlagRequired("password-file") + } cmd.RunE = func(cmd *cobra.Command, args []string) error { logger.Info("=== ACTION ===") diff --git a/internal/manage/actions/createuser/createuser.go b/internal/manage/actions/createuser/createuser.go index c2668c8..43fdb5b 100644 --- a/internal/manage/actions/createuser/createuser.go +++ b/internal/manage/actions/createuser/createuser.go @@ -3,6 +3,7 @@ package createuser import ( "encoding/json" "fmt" + "os" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" @@ -46,8 +47,16 @@ func Cmd() *cobra.Command { passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") userFile := cmd.Flags().StringP("file", "f", "", "JSON file with user data, or - for stdin") - _ = cmd.MarkFlagRequired("address") - _ = cmd.MarkFlagRequired("password-file") + if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { + address = &addressEnv + } else { + _ = cmd.MarkFlagRequired("address") + } + if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { + passwordFile = &passwordFileEnv + } else { + _ = cmd.MarkFlagRequired("password-file") + } cmd.RunE = func(cmd *cobra.Command, args []string) error { logger.Info("=== CREATE USER ===") diff --git a/internal/manage/actions/initialdata/initialdata.go b/internal/manage/actions/initialdata/initialdata.go index 62e2cab..09248b6 100644 --- a/internal/manage/actions/initialdata/initialdata.go +++ b/internal/manage/actions/initialdata/initialdata.go @@ -50,8 +50,16 @@ func Cmd() *cobra.Command { superadminPasswordFile := cmd.Flags().String("superadmin-password-file", "", "file with superadmin password (required)") dataFile := cmd.Flags().StringP("file", "f", "", "JSON file with initial data, or - for stdin") - _ = cmd.MarkFlagRequired("address") - _ = cmd.MarkFlagRequired("password-file") + if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { + address = &addressEnv + } else { + _ = cmd.MarkFlagRequired("address") + } + if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { + passwordFile = &passwordFileEnv + } else { + _ = cmd.MarkFlagRequired("password-file") + } _ = cmd.MarkFlagRequired("superadmin-password-file") cmd.RunE = func(cmd *cobra.Command, args []string) error { diff --git a/internal/manage/actions/migrations/migrations.go b/internal/manage/actions/migrations/migrations.go index d4773ef..98afc8e 100644 --- a/internal/manage/actions/migrations/migrations.go +++ b/internal/manage/actions/migrations/migrations.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "os" "strings" "time" @@ -115,8 +116,16 @@ func createMigrationCmd(name, description string, withProgressTracking bool) *co address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") - _ = cmd.MarkFlagRequired("address") - _ = cmd.MarkFlagRequired("password-file") + if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { + address = &addressEnv + } else { + _ = cmd.MarkFlagRequired("address") + } + if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { + passwordFile = &passwordFileEnv + } else { + _ = cmd.MarkFlagRequired("password-file") + } var progressInterval *time.Duration if withProgressTracking { diff --git a/internal/manage/actions/set/set.go b/internal/manage/actions/set/set.go index fde5945..2ca1e3f 100644 --- a/internal/manage/actions/set/set.go +++ b/internal/manage/actions/set/set.go @@ -3,6 +3,7 @@ package set import ( "encoding/json" "fmt" + "os" "sort" "strings" @@ -62,8 +63,16 @@ func Cmd() *cobra.Command { passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") payloadFile := cmd.Flags().StringP("file", "f", "", "JSON file with the payload, or - for stdin") - _ = cmd.MarkFlagRequired("address") - _ = cmd.MarkFlagRequired("password-file") + if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { + address = &addressEnv + } else { + _ = cmd.MarkFlagRequired("address") + } + if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { + passwordFile = &passwordFileEnv + } else { + _ = cmd.MarkFlagRequired("password-file") + } cmd.RunE = func(cmd *cobra.Command, args []string) error { logger.Info("=== SET ACTION ===") diff --git a/internal/manage/actions/setpassword/setpassword.go b/internal/manage/actions/setpassword/setpassword.go index 848d97c..4f105c4 100644 --- a/internal/manage/actions/setpassword/setpassword.go +++ b/internal/manage/actions/setpassword/setpassword.go @@ -3,6 +3,7 @@ package setpassword import ( "encoding/json" "fmt" + "os" "strings" "github.com/OpenSlides/openslides-cli/internal/logger" @@ -30,8 +31,16 @@ func Cmd() *cobra.Command { password := cmd.Flags().StringP("password", "p", "", "new password of the user (required)") userID := cmd.Flags().Int64P("user_id", "u", 0, "ID of the user account (required)") - _ = cmd.MarkFlagRequired("address") - _ = cmd.MarkFlagRequired("password-file") + if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { + address = &addressEnv + } else { + _ = cmd.MarkFlagRequired("address") + } + if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { + passwordFile = &passwordFileEnv + } else { + _ = cmd.MarkFlagRequired("password-file") + } _ = cmd.MarkFlagRequired("user_id") _ = cmd.MarkFlagRequired("password") From ebf5069e6af3605884d93ed0f711d1d302287241 Mon Sep 17 00:00:00 2001 From: Adrian Richter Date: Fri, 15 May 2026 15:56:35 +0200 Subject: [PATCH 2/3] Analogous change for --postgres-* flags --- internal/manage/actions/get/get.go | 32 ++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/internal/manage/actions/get/get.go b/internal/manage/actions/get/get.go index 5918dbd..1e49914 100644 --- a/internal/manage/actions/get/get.go +++ b/internal/manage/actions/get/get.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "os" "reflect" "regexp" "strconv" @@ -94,12 +95,31 @@ func Cmd() *cobra.Command { postgresDatabase := cmd.Flags().String("postgres-database", "", "PostgreSQL database (required)") postgresPasswordFile := cmd.Flags().String("postgres-password-file", "", "PostgreSQL password file (required)") - // Mark PostgreSQL flags as required - _ = cmd.MarkFlagRequired("postgres-host") - _ = cmd.MarkFlagRequired("postgres-port") - _ = cmd.MarkFlagRequired("postgres-user") - _ = cmd.MarkFlagRequired("postgres-database") - _ = cmd.MarkFlagRequired("postgres-password-file") + if postgresHostEnv := os.Getenv("OSMANAGE_POSTGRES_HOST"); postgresHostEnv != "" { + postgresHost = &postgresHostEnv + } else { + _ = cmd.MarkFlagRequired("postgres-host") + } + if postgresPortEnv := os.Getenv("OSMANAGE_POSTGRES_PORT"); postgresPortEnv != "" { + postgresPort = &postgresPortEnv + } else { + _ = cmd.MarkFlagRequired("postgres-port") + } + if postgresUserEnv := os.Getenv("OSMANAGE_POSTGRES_USER"); postgresUserEnv != "" { + postgresUser = &postgresUserEnv + } else { + _ = cmd.MarkFlagRequired("postgres-user") + } + if postgresDatabaseEnv := os.Getenv("OSMANAGE_POSTGRES_DATABASE"); postgresDatabaseEnv != "" { + postgresDatabase = &postgresDatabaseEnv + } else { + _ = cmd.MarkFlagRequired("postgres-database") + } + if postgresPasswordFileEnv := os.Getenv("OSMANAGE_POSTGRES_PASSWORD_FILE"); postgresPasswordFileEnv != "" { + postgresPasswordFile = &postgresPasswordFileEnv + } else { + _ = cmd.MarkFlagRequired("postgres-password-file") + } // Query flags fields := cmd.Flags().StringSlice("fields", nil, "only include the provided fields in output") From 30897372ef868ca5649f6aeb23e0cd2891bd6b6a Mon Sep 17 00:00:00 2001 From: Adrian Richter Date: Fri, 22 May 2026 21:40:44 +0200 Subject: [PATCH 3/3] Add defaults for address and passwordFile --- internal/constants/constants.go | 10 ++++++++++ internal/manage/actions/action/action.go | 9 +++------ internal/manage/actions/createuser/createuser.go | 9 +++------ internal/manage/actions/initialdata/initialdata.go | 10 +++------- internal/manage/actions/migrations/migrations.go | 8 ++------ internal/manage/actions/set/set.go | 9 +++------ internal/manage/actions/setpassword/setpassword.go | 10 ++++------ 7 files changed, 28 insertions(+), 37 deletions(-) diff --git a/internal/constants/constants.go b/internal/constants/constants.go index fcd9821..11526be 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -187,6 +187,16 @@ const ( DefaultOrganizationFields string = "id,name" ) +// Connect flags defaults +const ( + // DefaultBackendManageAddress is the default address for reaching backendManage + DefaultBackendManageAddress = "localhost:9002" + + // DefaultPasswordFile is the default file read when authenticating to backendManage + // TODO : const + "/" + const + DefaultPasswordFile = "secrets/internal_auth_password" +) + // Migration command defaults and configuration const ( // DefaultMigrationProgressInterval is the default interval for checking migration progress diff --git a/internal/manage/actions/action/action.go b/internal/manage/actions/action/action.go index 4f3eb00..d01c226 100644 --- a/internal/manage/actions/action/action.go +++ b/internal/manage/actions/action/action.go @@ -5,6 +5,7 @@ import ( "fmt" "os" + "github.com/OpenSlides/openslides-cli/internal/constants" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" "github.com/OpenSlides/openslides-cli/internal/utils" @@ -43,19 +44,15 @@ func Cmd() *cobra.Command { Args: cobra.RangeArgs(1, 2), } - address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") - passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") + address := cmd.Flags().StringP("address", "a", constants.DefaultBackendManageAddress, "address of the OpenSlides backendManage service (required)") + passwordFile := cmd.Flags().String("password-file", constants.DefaultPasswordFile, "file with password for authorization (required)") payloadFile := cmd.Flags().StringP("file", "f", "", "JSON file with the payload, or - for stdin") if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { address = &addressEnv - } else { - _ = cmd.MarkFlagRequired("address") } if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { passwordFile = &passwordFileEnv - } else { - _ = cmd.MarkFlagRequired("password-file") } cmd.RunE = func(cmd *cobra.Command, args []string) error { diff --git a/internal/manage/actions/createuser/createuser.go b/internal/manage/actions/createuser/createuser.go index 43fdb5b..691980d 100644 --- a/internal/manage/actions/createuser/createuser.go +++ b/internal/manage/actions/createuser/createuser.go @@ -5,6 +5,7 @@ import ( "fmt" "os" + "github.com/OpenSlides/openslides-cli/internal/constants" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" "github.com/OpenSlides/openslides-cli/internal/utils" @@ -43,19 +44,15 @@ func Cmd() *cobra.Command { Args: cobra.RangeArgs(0, 1), } - address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") - passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") + address := cmd.Flags().StringP("address", "a", constants.DefaultBackendManageAddress, "address of the OpenSlides backendManage service (required)") + passwordFile := cmd.Flags().String("password-file", constants.DefaultPasswordFile, "file with password for authorization (required)") userFile := cmd.Flags().StringP("file", "f", "", "JSON file with user data, or - for stdin") if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { address = &addressEnv - } else { - _ = cmd.MarkFlagRequired("address") } if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { passwordFile = &passwordFileEnv - } else { - _ = cmd.MarkFlagRequired("password-file") } cmd.RunE = func(cmd *cobra.Command, args []string) error { diff --git a/internal/manage/actions/initialdata/initialdata.go b/internal/manage/actions/initialdata/initialdata.go index 09248b6..9f6ec91 100644 --- a/internal/manage/actions/initialdata/initialdata.go +++ b/internal/manage/actions/initialdata/initialdata.go @@ -7,6 +7,7 @@ import ( "os" "strings" + "github.com/OpenSlides/openslides-cli/internal/constants" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" "github.com/OpenSlides/openslides-cli/internal/utils" @@ -45,22 +46,17 @@ func Cmd() *cobra.Command { Args: cobra.NoArgs, } - address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") - passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") + address := cmd.Flags().StringP("address", "a", constants.DefaultBackendManageAddress, "address of the OpenSlides backendManage service (required)") + passwordFile := cmd.Flags().String("password-file", constants.DefaultPasswordFile, "file with password for authorization (required)") superadminPasswordFile := cmd.Flags().String("superadmin-password-file", "", "file with superadmin password (required)") dataFile := cmd.Flags().StringP("file", "f", "", "JSON file with initial data, or - for stdin") if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { address = &addressEnv - } else { - _ = cmd.MarkFlagRequired("address") } if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { passwordFile = &passwordFileEnv - } else { - _ = cmd.MarkFlagRequired("password-file") } - _ = cmd.MarkFlagRequired("superadmin-password-file") cmd.RunE = func(cmd *cobra.Command, args []string) error { if strings.TrimSpace(*superadminPasswordFile) == "" { diff --git a/internal/manage/actions/migrations/migrations.go b/internal/manage/actions/migrations/migrations.go index 98afc8e..e2b180a 100644 --- a/internal/manage/actions/migrations/migrations.go +++ b/internal/manage/actions/migrations/migrations.go @@ -113,18 +113,14 @@ func createMigrationCmd(name, description string, withProgressTracking bool) *co Args: cobra.NoArgs, } - address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") - passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") + address := cmd.Flags().StringP("address", "a", constants.DefaultBackendManageAddress, "address of the OpenSlides backendManage service (required)") + passwordFile := cmd.Flags().String("password-file", constants.DefaultPasswordFile, "file with password for authorization (required)") if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { address = &addressEnv - } else { - _ = cmd.MarkFlagRequired("address") } if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { passwordFile = &passwordFileEnv - } else { - _ = cmd.MarkFlagRequired("password-file") } var progressInterval *time.Duration diff --git a/internal/manage/actions/set/set.go b/internal/manage/actions/set/set.go index 2ca1e3f..eb15a37 100644 --- a/internal/manage/actions/set/set.go +++ b/internal/manage/actions/set/set.go @@ -7,6 +7,7 @@ import ( "sort" "strings" + "github.com/OpenSlides/openslides-cli/internal/constants" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" "github.com/OpenSlides/openslides-cli/internal/utils" @@ -59,19 +60,15 @@ func Cmd() *cobra.Command { Args: cobra.RangeArgs(1, 2), } - address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") - passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") + address := cmd.Flags().StringP("address", "a", constants.DefaultBackendManageAddress, "address of the OpenSlides backendManage service (required)") + passwordFile := cmd.Flags().String("password-file", constants.DefaultPasswordFile, "file with password for authorization (required)") payloadFile := cmd.Flags().StringP("file", "f", "", "JSON file with the payload, or - for stdin") if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { address = &addressEnv - } else { - _ = cmd.MarkFlagRequired("address") } if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { passwordFile = &passwordFileEnv - } else { - _ = cmd.MarkFlagRequired("password-file") } cmd.RunE = func(cmd *cobra.Command, args []string) error { diff --git a/internal/manage/actions/setpassword/setpassword.go b/internal/manage/actions/setpassword/setpassword.go index 4f105c4..31fb76f 100644 --- a/internal/manage/actions/setpassword/setpassword.go +++ b/internal/manage/actions/setpassword/setpassword.go @@ -6,6 +6,7 @@ import ( "os" "strings" + "github.com/OpenSlides/openslides-cli/internal/constants" "github.com/OpenSlides/openslides-cli/internal/logger" "github.com/OpenSlides/openslides-cli/internal/manage/client" "github.com/OpenSlides/openslides-cli/internal/utils" @@ -26,21 +27,18 @@ func Cmd() *cobra.Command { Args: cobra.NoArgs, } - address := cmd.Flags().StringP("address", "a", "", "address of the OpenSlides backendManage service (required)") - passwordFile := cmd.Flags().String("password-file", "", "file with password for authorization (required)") + address := cmd.Flags().StringP("address", "a", constants.DefaultBackendManageAddress, "address of the OpenSlides backendManage service (required)") + passwordFile := cmd.Flags().String("password-file", constants.DefaultPasswordFile, "file with password for authorization (required)") password := cmd.Flags().StringP("password", "p", "", "new password of the user (required)") userID := cmd.Flags().Int64P("user_id", "u", 0, "ID of the user account (required)") if addressEnv := os.Getenv("OSMANAGE_BACKEND_ADDRESS"); addressEnv != "" { address = &addressEnv - } else { - _ = cmd.MarkFlagRequired("address") } if passwordFileEnv := os.Getenv("OSMANAGE_BACKEND_PASSWORD_FILE"); passwordFileEnv != "" { passwordFile = &passwordFileEnv - } else { - _ = cmd.MarkFlagRequired("password-file") } + _ = cmd.MarkFlagRequired("user_id") _ = cmd.MarkFlagRequired("password")