Skip to content

Commit fbbda22

Browse files
committed
fix: issue #322
wrap errors for fuctions and use slog to print the wrapped errors
1 parent 924d033 commit fbbda22

File tree

2 files changed

+36
-30
lines changed

2 files changed

+36
-30
lines changed

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"amzn",
44
"awsconf",
55
"AWSS",
6+
"AWSSCIM",
67
"Babs",
78
"bjensen",
89
"christiangda",
@@ -30,6 +31,7 @@
3031
"GOMODCACHE",
3132
"googleapi",
3233
"GOPATH",
34+
"gopkg",
3335
"goroot",
3436
"GOROOT",
3537
"gosec",
@@ -38,6 +40,7 @@
3840
"hashcode",
3941
"hashicorp",
4042
"idpid",
43+
"idpscim",
4144
"idpscimcli",
4245
"ietf",
4346
"Infof",
@@ -56,10 +59,12 @@
5659
"repositoryname",
5760
"Retryable",
5861
"retryablehttp",
62+
"SCIM",
5963
"scimid",
6064
"secretmanager",
6165
"securego",
6266
"sirupsen",
67+
"slashdevops",
6368
"softprops",
6469
"stackset",
6570
"stretchr",

cmd/idpscim/cmd/root.go

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import (
2727
)
2828

2929
var (
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.
113114
func 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

266266
func 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

277280
func 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

Comments
 (0)