in internal/sync.go [662:723]
func DoSync(ctx context.Context, cfg *config.Config) error {
log.Info("Syncing AWS users and groups from Google Workspace SAML Application")
creds := []byte(cfg.GoogleCredentials)
if !cfg.IsLambda {
b, err := ioutil.ReadFile(cfg.GoogleCredentials)
if err != nil {
return err
}
creds = b
}
// create a http client with retry and backoff capabilities
retryClient := retryablehttp.NewClient()
// https://github.com/hashicorp/go-retryablehttp/issues/6
if cfg.Debug {
retryClient.Logger = log.StandardLogger()
} else {
retryClient.Logger = nil
}
httpClient := retryClient.StandardClient()
googleClient, err := google.NewClient(ctx, cfg.GoogleAdmin, creds)
if err != nil {
return err
}
awsClient, err := aws.NewClient(
httpClient,
&aws.Config{
Endpoint: cfg.SCIMEndpoint,
Token: cfg.SCIMAccessToken,
})
if err != nil {
return err
}
c := New(cfg, awsClient, googleClient)
log.WithField("sync_method", cfg.SyncMethod).Info("syncing")
if cfg.SyncMethod == config.DefaultSyncMethod {
err = c.SyncGroupsUsers(cfg.GroupMatch)
if err != nil {
return err
}
} else {
err = c.SyncUsers(cfg.UserMatch)
if err != nil {
return err
}
err = c.SyncGroups(cfg.GroupMatch)
if err != nil {
return err
}
}
return nil
}