From 9a139316cc0d7a071658cbdf2b26ed73a47ac1d7 Mon Sep 17 00:00:00 2001 From: Edoardo Rosa <6991986+notdodo@users.noreply.github.com> Date: Sat, 18 Nov 2023 19:47:55 +0100 Subject: [PATCH] Avoid env for auth (#9) * fix: logging with custom field * enh: auth from CLI flags * fix: handle errors * fix: handle errors --- .env_example | 4 +--- cmd/dump.go | 8 +++++++- cmd/root.go | 27 +++++++++++++++------------ main.go | 9 +++------ pkg/io/logging/logging.go | 8 ++++---- 5 files changed, 30 insertions(+), 26 deletions(-) diff --git a/.env_example b/.env_example index bcc3c50..ecb6070 100644 --- a/.env_example +++ b/.env_example @@ -4,6 +4,4 @@ NEO4J_PASS=IAMmeIAMme!1! NEO4J_AUTH="${NEO4J_USER}/${NEO4J_PASS}" NEO4J_server_memory_heap_initial__size=12G NEO4J_server_memory_heap_max__size=16G -NEO4J_server_memory_pagecache_size=12G -OKTA_CLIENT_ORGURL=yourtenant.okta.com -OKTA_CLIENT_TOKEN="00SOMETHINGWRONG" \ No newline at end of file +NEO4J_server_memory_pagecache_size=12G \ No newline at end of file diff --git a/cmd/dump.go b/cmd/dump.go index e5f6470..02b1e8f 100644 --- a/cmd/dump.go +++ b/cmd/dump.go @@ -2,6 +2,7 @@ package cmd import ( "github.com/notdodo/IAMme-IAMme/pkg/app" + "github.com/notdodo/IAMme-IAMme/pkg/infra/okta" "github.com/spf13/cobra" ) @@ -9,7 +10,12 @@ var usersCmd = &cobra.Command{ Use: "dump", Short: "Fetch Okta info and store them in Neo4j", Run: func(cmd *cobra.Command, args []string) { - oktaNeo4jApp := app.NewOktaNeo4jApp(clients.okta, clients.neo4j) + markAsRequired("org-url") + markAsRequired("client-token") + if err := rootCmd.ValidateRequiredFlags(); err != nil { + logger.Error("Required flags not provided", err) + } + oktaNeo4jApp := app.NewOktaNeo4jApp(okta.NewOktaClient(orgUrl, oktaClientToken), neo4jClient) oktaNeo4jApp.Dump() }, } diff --git a/cmd/root.go b/cmd/root.go index 3d75a39..27d532c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,19 +2,16 @@ package cmd import ( "github.com/notdodo/IAMme-IAMme/pkg/infra/neo4j" - "github.com/notdodo/IAMme-IAMme/pkg/infra/okta" "github.com/notdodo/IAMme-IAMme/pkg/io/logging" "github.com/spf13/cobra" ) -type clientsType struct { - okta okta.OktaClient - neo4j neo4j.Neo4jClient -} - -var clients *clientsType var logger logging.LogManager +var verbose bool +var orgUrl string +var oktaClientToken string +var neo4jClient neo4j.Neo4jClient var rootCmd = &cobra.Command{ Use: "iamme", Short: "A CLI tool to interact with Okta and Neo4j", @@ -22,14 +19,20 @@ var rootCmd = &cobra.Command{ func init() { logger = logging.NewLogManager() + rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output") + rootCmd.PersistentFlags().StringVarP(&orgUrl, "org-url", "u", "", "Okta Org URL") + rootCmd.PersistentFlags().StringVarP(&oktaClientToken, "client-token", "c", "", "Okta Client Token") } -func Execute(oktaClient okta.OktaClient, neo4jClient neo4j.Neo4jClient) { - clients = &clientsType{ - oktaClient, - neo4jClient, - } +func Execute(neo4j neo4j.Neo4jClient) { + neo4jClient = neo4j if err := rootCmd.Execute(); err != nil { logger.Error("Error executing command", "err", err) } } + +func markAsRequired(flag string) { + if err := rootCmd.MarkFlagRequired(flag); err != nil { + logger.Error("Required flags not provided", "flag", flag) + } +} diff --git a/main.go b/main.go index 1a41747..4607cdd 100644 --- a/main.go +++ b/main.go @@ -3,11 +3,9 @@ package main import ( "log" + "github.com/joho/godotenv" "github.com/notdodo/IAMme-IAMme/cmd" "github.com/notdodo/IAMme-IAMme/pkg/infra/neo4j" - "github.com/notdodo/IAMme-IAMme/pkg/infra/okta" - - "github.com/joho/godotenv" ) func main() { @@ -15,7 +13,6 @@ func main() { if err != nil { log.Fatalln(err.Error()) } - cmd.Execute( - okta.NewOktaClient(envFile["OKTA_CLIENT_ORGURL"], envFile["OKTA_CLIENT_TOKEN"]), - neo4j.NewNeo4jClient(envFile["NEO4J_URL"], envFile["NEO4J_USER"], envFile["NEO4J_PASS"])) + cmd.Execute(neo4j.NewNeo4jClient(envFile["NEO4J_URL"], envFile["NEO4J_USER"], envFile["NEO4J_PASS"])) + } diff --git a/pkg/io/logging/logging.go b/pkg/io/logging/logging.go index c84a050..fecff29 100644 --- a/pkg/io/logging/logging.go +++ b/pkg/io/logging/logging.go @@ -22,7 +22,7 @@ func NewLogManager() LogManager { return &logManager{ logger: log.NewWithOptions(os.Stdout, log.Options{ CallerOffset: 1, - Fields: []interface{}{"err"}, + Fields: []interface{}{"err", "flag"}, Level: log.WarnLevel, ReportCaller: true, ReportTimestamp: true, @@ -36,14 +36,14 @@ func (lm *logManager) Debug(message interface{}, keyvals ...interface{}) { } func (lm *logManager) Info(message interface{}, keyvals ...interface{}) { - lm.logger.Info(message) + lm.logger.Info(message, keyvals...) } func (lm *logManager) Warn(message interface{}, keyvals ...interface{}) { - lm.logger.Info(message) + lm.logger.Info(message, keyvals...) } func (lm *logManager) Error(message interface{}, keyvals ...interface{}) { - lm.logger.Error(message) + lm.logger.Error(message, keyvals...) os.Exit(1) }