binbandit / binbandit/secretfetch

[FEATURE] Improve handling of fields without a tag

Open
#2 0 comments 0 reactions 1 assignee Claimed by @binbandit View on GitHub
enhancement
Dominant language
Go
Stars
62
Forks
3
PR merge metrics
No merged PRs in 30d

Description

## Problem Statement
I load some configs from json/yaml files while secrets are loaded with `secretfetch`. The issue is I can't do this as `secretfetch` expects every field in the destination struct to have a valid tag, it returns the error `"invalid tag for field Env: no secret tag found for field NonSecretValue"`

This won't work

```
type Config struct {
NonSecretValue string `yaml:"noSecretValue"`
SecretValue string `secret:"aws=prefix/my-secret,env=SECRET_VALUE"`
}
```

The same happens with nested structs:

```
type Config struct {
// This won't load as `API` struct does not have the `secret` tag
API struct {
AdminUser string `secret:"aws=prefix/user,env=API_ADMIN_USER"`
AdminPassword string `secret:"aws=prefix/pass,env=API_ADMIN_PASS"`
}
}
```

## Proposed Solution
It would be nice if I could just tell `secretfetch` to ignore fields without the `secret` tag (or make it the default behavior).

## Alternative Solutions
To make this work right now I need to create another struct that has all the secrets and then assign them to my `Config` struct.

## Example Usage
```go
type Config struct {
SecretValue string `secret:"aws=prefix/my-secret,env=SECRET_VALUE"`
NonSecretValue string `yaml:"noSecretValue"`

API struct {
AdminUser string `secret:"aws=prefix/user,env=API_ADMIN_USER"`
AdminPassword string `secret:"aws=prefix/pass,env=API_ADMIN_PASS"`
}
}
var cfg Config

// Read yaml config file
yaml.Unmarshal([]byte(data), &cfg)

// Read secrets, this will only load fields with the "secret" tag even if inside
// a nested struct without a tag. Other fields won't be changed.
secretfetch.Fetch(context.Background(), cfg, nil)
```

## Benefits
A single and easy-to-use struct can be used to load non-secret values and secrets with `secretfetch`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.