Skip to content

Commit

Permalink
refactor: rename structs
Browse files Browse the repository at this point in the history
  • Loading branch information
soerenschneider committed Oct 14, 2023
1 parent 699d9bb commit 0064021
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 53 deletions.
18 changes: 9 additions & 9 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
func main() {
configPath := parseCli()
log.Info().Msgf("acmevault-server version %s, commit %s", internal.BuildVersion, internal.CommitHash)
conf, err := config.AcmeVaultServerConfigFromFile(configPath)
conf, err := config.Read(configPath)
if err != nil {
log.Fatal().Msgf("Could not load config: %v", err)
}
Expand Down Expand Up @@ -70,6 +70,12 @@ func getUserHomeDirectory() string {
return dir
}

func dieOnError(err error, msg string) {
if err != nil {
log.Fatal().Err(err).Msg(msg)
}
}

func buildVaultAuth(conf config.VaultConfig) (vault.Auth, error) {
switch conf.AuthMethod {
case "token":
Expand All @@ -89,13 +95,7 @@ func buildVaultAuth(conf config.VaultConfig) (vault.Auth, error) {
}
}

func dieOnError(err error, msg string) {
if err != nil {
log.Fatal().Err(err).Msg(msg)
}
}

func NewAcmeVaultServer(conf config.AcmeVaultServerConfig) {
func NewAcmeVaultServer(conf config.AcmeVaultConfig) {
vaultAuth, err := buildVaultAuth(conf.Vault)
dieOnError(err, "could not build token auth")

Expand All @@ -121,7 +121,7 @@ func NewAcmeVaultServer(conf config.AcmeVaultServerConfig) {
dieOnError(err, "Couldn't start server")
}

func Run(acmeVault *server.AcmeVaultServer, storage certstorage.CertStorage, conf config.AcmeVaultServerConfig) error {
func Run(acmeVault *server.AcmeVaultServer, storage certstorage.CertStorage, conf config.AcmeVaultConfig) error {
if acmeVault == nil {
return errors.New("empty acmevault provided")
}
Expand Down
34 changes: 17 additions & 17 deletions internal/config/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,45 +15,45 @@ var (
defaultMetricsAddr = "127.0.0.1:9112"
)

type AcmeVaultServerConfig struct {
Vault VaultConfig `yaml:"vault" validate:"required"`
AcmeEmail string `yaml:"email" validate:"required,email"`
AcmeUrl string `yaml:"acmeUrl" validate:"required,oneof=https://acme-v02.api.letsencrypt.org/directory https://acme-staging-v02.api.letsencrypt.org/directory"`
AcmeDnsProvider string `yaml:"acmeDnsProvider"`
AcmeCustomDnsServers []string `yaml:"acmeCustomDnsServers,omitempty" validate:"dive,ip"`
IntervalSeconds int `yaml:"intervalSeconds" validate:"min=3600,max=86400"`
Domains []AcmeServerDomains `yaml:"domains" validate:"required,dive"`
MetricsAddr string `yaml:"metricsAddr" validate:"tcp_addr"`
type AcmeVaultConfig struct {
Vault VaultConfig `yaml:"vault" validate:"required"`
AcmeEmail string `yaml:"email" validate:"required,email"`
AcmeUrl string `yaml:"acmeUrl" validate:"required,oneof=https://acme-v02.api.letsencrypt.org/directory https://acme-staging-v02.api.letsencrypt.org/directory"`
AcmeDnsProvider string `yaml:"acmeDnsProvider"`
AcmeCustomDnsServers []string `yaml:"acmeCustomDnsServers,omitempty" validate:"dive,ip"`
IntervalSeconds int `yaml:"intervalSeconds" validate:"min=3600,max=86400"`
Domains []DomainsConfig `yaml:"domains" validate:"required,dive"`
MetricsAddr string `yaml:"metricsAddr" validate:"tcp_addr"`
}

type AcmeServerDomains struct {
type DomainsConfig struct {
Domain string `yaml:"domain" validate:"required,fqdn"`
Sans []string `yaml:"sans,omitempty" validate:"dive,fqdn"`
}

func (a AcmeServerDomains) String() string {
func (a DomainsConfig) String() string {
if len(a.Sans) > 0 {
return fmt.Sprintf("%s (%v)", a.Domain, a.Sans)
}

return a.Domain
}

func (conf AcmeVaultServerConfig) Validate() error {
func (conf AcmeVaultConfig) Validate() error {
return validate.Struct(conf)
}

func getDefaultServerConfig() AcmeVaultServerConfig {
return AcmeVaultServerConfig{
func getDefaultConfig() AcmeVaultConfig {
return AcmeVaultConfig{
AcmeUrl: letsEncryptUrl,
IntervalSeconds: defaultIntervalSeconds,
MetricsAddr: defaultMetricsAddr,
Vault: DefaultVaultConfig(),
Vault: defaultVaultConfig(),
}
}

func AcmeVaultServerConfigFromFile(path string) (AcmeVaultServerConfig, error) {
conf := getDefaultServerConfig()
func Read(path string) (AcmeVaultConfig, error) {
conf := getDefaultConfig()
content, err := os.ReadFile(path)
if err != nil {
return conf, fmt.Errorf("can not read config from file %s: %v", path, err)
Expand Down
36 changes: 18 additions & 18 deletions internal/config/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ func TestAcmeVaultServerConfigFromFile(t *testing.T) {
tests := []struct {
name string
path string
want AcmeVaultServerConfig
want AcmeVaultConfig
wantErr bool
}{
{
name: "example json config",
path: "../../contrib/config.json",
want: AcmeVaultServerConfig{
want: AcmeVaultConfig{
Vault: VaultConfig{
Addr: "https://vault:8200",
SecretId: "secretId",
Expand All @@ -30,7 +30,7 @@ func TestAcmeVaultServerConfigFromFile(t *testing.T) {
AcmeUrl: letsEncryptUrl,
AcmeDnsProvider: "",
IntervalSeconds: 43200,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "domain1.tld",
Sans: []string{"domain3.tld", "domain4.tld"},
Expand All @@ -46,7 +46,7 @@ func TestAcmeVaultServerConfigFromFile(t *testing.T) {
{
name: "example yaml config",
path: "../../contrib/config.yaml",
want: AcmeVaultServerConfig{
want: AcmeVaultConfig{
Vault: VaultConfig{
Addr: "https://vault:8200",
SecretId: "secretId",
Expand All @@ -61,7 +61,7 @@ func TestAcmeVaultServerConfigFromFile(t *testing.T) {
AcmeUrl: letsEncryptUrl,
AcmeDnsProvider: "",
IntervalSeconds: 43200,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "domain1.tld",
Sans: []string{"domain3.tld", "domain4.tld"},
Expand All @@ -77,13 +77,13 @@ func TestAcmeVaultServerConfigFromFile(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := AcmeVaultServerConfigFromFile(tt.path)
got, err := Read(tt.path)
if (err != nil) != tt.wantErr {
t.Errorf("AcmeVaultServerConfigFromFile() error = %v, wantErr %v", err, tt.wantErr)
t.Errorf("Read() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("AcmeVaultServerConfigFromFile() got = %v, want %v", got, tt.want)
t.Errorf("Read() got = %v, want %v", got, tt.want)
}
})
}
Expand All @@ -97,7 +97,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider string
AcmeCustomDnsServers []string
IntervalSeconds int
Domains []AcmeServerDomains
Domains []DomainsConfig
MetricsAddr string
}
tests := []struct {
Expand Down Expand Up @@ -125,7 +125,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: []string{"8.8.8.8", "2001:4860:4860::8888"},
IntervalSeconds: 3600,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.domain",
Sans: []string{"another.valid.domain"},
Expand All @@ -151,7 +151,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: []string{"not.an.ip"},
IntervalSeconds: 3600,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.domain",
Sans: []string{"another.valid.domain"},
Expand All @@ -177,7 +177,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: nil,
IntervalSeconds: 3600,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "nofqdn",
Sans: []string{"another.valid.domain"},
Expand All @@ -203,7 +203,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: nil,
IntervalSeconds: 3600,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.fqdn",
Sans: []string{"novalidfqdn", "valid.fqdn"},
Expand All @@ -229,7 +229,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: nil,
IntervalSeconds: 3599,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.fqdn",
Sans: []string{"one.more.valid.fqdn", "another.valid.fqdn"},
Expand All @@ -255,7 +255,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: nil,
IntervalSeconds: 86401,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.fqdn",
Sans: []string{"one.more.valid.fqdn", "another.valid.fqdn"},
Expand Down Expand Up @@ -283,7 +283,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: nil,
IntervalSeconds: 86400,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.fqdn",
Sans: []string{"one.more.valid.fqdn", "another.valid.fqdn"},
Expand All @@ -309,7 +309,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
AcmeDnsProvider: "",
AcmeCustomDnsServers: nil,
IntervalSeconds: 86400,
Domains: []AcmeServerDomains{
Domains: []DomainsConfig{
{
Domain: "valid.fqdn",
Sans: []string{"one.more.valid.fqdn", "another.valid.fqdn"},
Expand All @@ -322,7 +322,7 @@ func TestAcmeVaultServerConfig_Validate(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
conf := AcmeVaultServerConfig{
conf := AcmeVaultConfig{
Vault: tt.fields.VaultConfig,
AcmeEmail: tt.fields.AcmeEmail,
AcmeUrl: tt.fields.AcmeUrl,
Expand Down
2 changes: 1 addition & 1 deletion internal/config/common.go → internal/config/vault.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (conf *VaultConfig) Print() {
PrintFields(conf, SensitiveFields...)
}

func DefaultVaultConfig() VaultConfig {
func defaultVaultConfig() VaultConfig {
var pathPrefix string
parsed, err := url.Parse(letsEncryptStagingUrl)
if err == nil {
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions internal/server/acme/lego.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func getAccount(accountStorage certstorage.AccountStorage, email string) (*certs
}, true, nil
}

func NewGoLegoDealer(accountStorage certstorage.AccountStorage, conf config.AcmeVaultServerConfig, dnsProvider challenge.Provider) (*GoLego, error) {
func NewGoLegoDealer(accountStorage certstorage.AccountStorage, conf config.AcmeVaultConfig, dnsProvider challenge.Provider) (*GoLego, error) {
log.Info().Msgf("Trying to read account details for %s from vault...", conf.AcmeEmail)
account, registerNewAccount, err := getAccount(accountStorage, conf.AcmeEmail)
if err != nil {
Expand Down Expand Up @@ -98,7 +98,7 @@ func (l *GoLego) RegisterAccount() (*registration.Resource, error) {
return l.client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
}

func (l *GoLego) ObtainCert(domain config.AcmeServerDomains) (*certstorage.AcmeCertificate, error) {
func (l *GoLego) ObtainCert(domain config.DomainsConfig) (*certstorage.AcmeCertificate, error) {
domains := []string{domain.Domain}
domains = append(domains, domain.Sans...)
request := certificate.ObtainRequest{
Expand Down
3 changes: 2 additions & 1 deletion internal/server/acme/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package acme

import (
"crypto"

"github.com/go-acme/lego/v4/certcrypto"
"github.com/go-acme/lego/v4/registration"
"github.com/soerenschneider/acmevault/internal/config"
Expand All @@ -15,7 +16,7 @@ const (

type AcmeDealer interface {
RegisterAccount() (*registration.Resource, error)
ObtainCert(domain config.AcmeServerDomains) (*certstorage.AcmeCertificate, error)
ObtainCert(domain config.DomainsConfig) (*certstorage.AcmeCertificate, error)
RenewCert(cert *certstorage.AcmeCertificate) (*certstorage.AcmeCertificate, error)
}

Expand Down
6 changes: 3 additions & 3 deletions internal/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ import (
type AcmeVaultServer struct {
acmeClient acme.AcmeDealer
certStorage certstorage.CertStorage
domains []config.AcmeServerDomains
domains []config.DomainsConfig
}

func NewAcmeVaultServer(domains []config.AcmeServerDomains, acmeClient acme.AcmeDealer, storage certstorage.CertStorage) (*AcmeVaultServer, error) {
func NewAcmeVaultServer(domains []config.DomainsConfig, acmeClient acme.AcmeDealer, storage certstorage.CertStorage) (*AcmeVaultServer, error) {
if len(domains) == 0 {
return nil, errors.New("no domains given")
}
Expand Down Expand Up @@ -55,7 +55,7 @@ func (c *AcmeVaultServer) CheckCerts() error {
return err
}

func (c *AcmeVaultServer) obtainAndHandleCert(domain config.AcmeServerDomains) error {
func (c *AcmeVaultServer) obtainAndHandleCert(domain config.DomainsConfig) error {
read, err := c.certStorage.ReadPublicCertificateData(domain.Domain)
if err != nil || read == nil {
log.Error().Err(err).Msgf("Error reading cert data from storage for domain '%s'", domain.Domain)
Expand Down
4 changes: 2 additions & 2 deletions internal/server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func TestServerHappyPathRenewal(t *testing.T) {
server := AcmeVaultServer{
acmeClient: dealer,
certStorage: certStorage,
domains: []config.AcmeServerDomains{{Domain: "example.com"}},
domains: []config.DomainsConfig{{Domain: "example.com"}},
}

old := &certstorage.AcmeCertificate{}
Expand All @@ -41,7 +41,7 @@ func (m *MockAcmeDealer) RegisterAccount() (*registration.Resource, error) {
return args.Get(0).(*registration.Resource), args.Error(1)
}

func (m *MockAcmeDealer) ObtainCert(domains config.AcmeServerDomains) (*certstorage.AcmeCertificate, error) {
func (m *MockAcmeDealer) ObtainCert(domains config.DomainsConfig) (*certstorage.AcmeCertificate, error) {
args := m.Called()
if nil == args.Get(0) {
return nil, args.Error(1)
Expand Down

0 comments on commit 0064021

Please sign in to comment.