@@ -27,7 +27,8 @@ import (
2727)
2828
2929var (
30- cfg config.Config
30+ cfg config.Config
31+
3132 logHandler slog.Handler
3233 logHandlerOptions * slog.HandlerOptions
3334 logger * slog.Logger
@@ -111,10 +112,6 @@ func init() {
111112
112113// initConfig reads in config file and ENV variables if set.
113114func initConfig () {
114- // Set the default logger
115- logger = slog .New (logHandler )
116- slog .SetDefault (logger )
117-
118115 viper .SetEnvPrefix ("idpscim" ) // allow to read in from environment
119116
120117 envVars := []string {
@@ -175,6 +172,10 @@ func initConfig() {
175172 slog .Error ("cannot unmarshal config" , "error" , err )
176173 }
177174
175+ if cfg .Debug {
176+ cfg .LogLevel = "debug"
177+ }
178+
178179 switch strings .ToLower (cfg .LogFormat ) {
179180 case "json" :
180181 logHandler = slog .NewJSONHandler (os .Stdout , logHandlerOptions )
@@ -198,12 +199,15 @@ func initConfig() {
198199 slog .Warn ("unknown log level, setting it to info" , "level" , cfg .LogLevel )
199200 }
200201
201- if cfg . Debug {
202- cfg . LogLevel = "debug"
203- }
202+ // Set the default logger
203+ logger = slog . New ( logHandler )
204+ slog . SetDefault ( logger )
204205
205206 if cfg .IsLambda || cfg .UseSecretsManager {
206- getSecrets ()
207+ if err := getSecrets (); err != nil {
208+ slog .Error ("cannot get secrets" , "error" , err )
209+ os .Exit (1 )
210+ }
207211 }
208212
209213 // not implemented yet block
@@ -213,65 +217,64 @@ func initConfig() {
213217 }
214218}
215219
216- func getSecrets () {
220+ func getSecrets () error {
217221 slog .Info ("reading secrets from AWS Secrets Manager" )
218222
219223 awsConf , err := aws .NewDefaultConf (context .Background ())
220224 if err != nil {
221- slog .Error ("cannot load aws config" , "error" , err )
222- os .Exit (1 )
225+ return errors .Wrap (err , "cannot load aws config" )
223226 }
224227
225228 svc := secretsmanager .NewFromConfig (awsConf )
226229
227230 secrets , err := aws .NewSecretsManagerService (svc )
228231 if err != nil {
229- slog .Error ("cannot create aws secrets manager service" , "error" , err )
230- os .Exit (1 )
232+ return errors .Wrap (err , "cannot create aws secrets manager service" )
231233 }
232234
233235 slog .Debug ("reading secret" , "name" , cfg .GWSUserEmailSecretName )
234236 unwrap , err := secrets .GetSecretValue (context .Background (), cfg .GWSUserEmailSecretName )
235237 if err != nil {
236- slog .Error ("cannot get secretmanager value" , "error" , err )
237- os .Exit (1 )
238+ return errors .Wrap (err , "cannot get secretmanager value" )
238239 }
239240 cfg .GWSUserEmail = unwrap
240241
241242 slog .Debug ("reading secret" , "name" , cfg .GWSServiceAccountFileSecretName )
242243 unwrap , err = secrets .GetSecretValue (context .Background (), cfg .GWSServiceAccountFileSecretName )
243244 if err != nil {
244- slog .Error ("cannot get secretmanager value" , "error" , err )
245- os .Exit (1 )
245+ return errors .Wrap (err , "cannot get secretmanager value" )
246246 }
247247 cfg .GWSServiceAccountFile = unwrap
248248
249249 slog .Debug ("reading secret" , "name" , cfg .AWSSCIMAccessTokenSecretName )
250250 unwrap , err = secrets .GetSecretValue (context .Background (), cfg .AWSSCIMAccessTokenSecretName )
251251 if err != nil {
252- slog .Error ("cannot get secretmanager value" , "error" , err )
253- os .Exit (1 )
252+ return errors .Wrap (err , "cannot get secretmanager value" )
254253 }
255254 cfg .AWSSCIMAccessToken = unwrap
256255
257256 slog .Debug ("reading secret" , "name" , cfg .AWSSCIMEndpointSecretName )
258257 unwrap , err = secrets .GetSecretValue (context .Background (), cfg .AWSSCIMEndpointSecretName )
259258 if err != nil {
260- slog .Error ("cannot get secretmanager value" , "error" , err )
261- os .Exit (1 )
259+ return errors .Wrap (err , "cannot get secretmanager value" )
262260 }
263261 cfg .AWSSCIMEndpoint = unwrap
262+
263+ return nil
264264}
265265
266266func sync () error {
267267 slog .Debug ("viper config" , "config" , viper .AllSettings ())
268268
269269 if cfg .SyncMethod != "groups" {
270- slog .Error ("only 'sync-method=groups' are implemented" )
271- return fmt .Errorf ("unknown sync method: %s" , cfg .SyncMethod )
270+ return fmt .Errorf ("unknown sync method: %s, only 'groups' are implemented" , cfg .SyncMethod )
271+ }
272+
273+ if err := syncGroups (); err != nil {
274+ return errors .Wrap (err , "cannot sync groups" )
272275 }
273276
274- return syncGroups ()
277+ return nil
275278}
276279
277280func syncGroups () error {
@@ -284,7 +287,7 @@ func syncGroups() error {
284287 if ! cfg .IsLambda {
285288 gwsServiceAccount , err := os .ReadFile (cfg .GWSServiceAccountFile )
286289 if err != nil {
287- slog . Error ( "cannot read service account file" , "error" , err )
290+ return errors . Wrap ( err , "cannot read google workspace service account file" )
288291 }
289292 gwsServiceAccountContent = gwsServiceAccount
290293 }
@@ -343,15 +346,13 @@ func syncGroups() error {
343346
344347 awsConf , err := aws .NewDefaultConf (context .Background ())
345348 if err != nil {
346- slog .Error ("cannot load aws config" , "error" , err )
347- os .Exit (1 )
349+ return errors .Wrap (err , "cannot load aws config" )
348350 }
349351
350352 s3Client := s3 .NewFromConfig (awsConf )
351353 repo , err := repository .NewS3Repository (s3Client , repository .WithBucket (cfg .AWSS3BucketName ), repository .WithKey (cfg .AWSS3BucketKey ))
352354 if err != nil {
353- slog .Error ("cannot create s3 repository" , "error" , err )
354- os .Exit (1 )
355+ return errors .Wrap (err , "cannot create s3 repository" )
355356 }
356357
357358 ss , err := core .NewSyncService (idpService , scimService , repo , core .WithIdentityProviderGroupsFilter (cfg .GWSGroupsFilter ))
0 commit comments