Skip to content
This repository was archived by the owner on Feb 7, 2025. It is now read-only.

Config Documentation #255

Merged
merged 12 commits into from
Dec 23, 2024
37 changes: 37 additions & 0 deletions adr/012-configs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 12. Partner configuration

Date: 2024-12-12

## Decision

We will store partner SFTP config settings in an Azure container

## Status

Accepted.

## Context

In order to enable the usage of partner-specific settings in the different parts of the app, we are going to store the settings
in a config container in our Azure storage account. Each partner will have its own separate file within the container to minimize potential
blast radius when changing settings.

## Impact

### Positive

- We can continue to meet our partners where they are by having partner specific settings in the app in order to provide any needed customizations.
- We can create separate testing config for the Flexion organizations

### Negative

- Some added complexity for the implementation of configs.
- Initial implementation of the config will require either restarting or redeploying the app

### Risks

- None

## Related Issues

- #[1082](https://github.com/CDCgov/trusted-intermediary/issues/1082)
11 changes: 11 additions & 0 deletions docs/configs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# FAQ
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Loving the FAQ section. Great idea!

- We use the partner's organization name in ReportStream as the partner ID
- Config files are the partner ID plus `.json`
- Config keys in code are the partner ID
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could an example of what that would look like be added?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added

- We don't load configs in the PR environment
- See [The partner settings struct](/src/config/config.go) for the config structure
- Configs load prior to the application running. Any changes to the config will require a restart of the Azure container to load those changes
- For local non-partner specific testing, we have a Flexion based config that can be used in non-prod environments
- Config files should only contain non-secret values. Secrets will remain in Azure Key Vault
- secrets will use a consistent naming pattern based on the same partner ID used in config
(so we can dynamically assemble the key names in code) [see here](../SECRETS.md)
3 changes: 3 additions & 0 deletions src/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import (
"slices"
)

/*
The below struct is the struct for the values of partner configs. If adding new configs add to this struct
*/
type PartnerSettings struct {
DisplayName string `json:"displayName"` // full name if we need pretty names
IsActive bool `json:"isActive"`
Expand Down
Loading