Work on acme.sh hander

and dns providers
This commit is contained in:
Jamie Curnow
2021-08-19 22:33:01 +10:00
parent 339ee13346
commit 556f8b773b
19 changed files with 518 additions and 81 deletions

View File

@@ -41,6 +41,7 @@ func Create(certificate *Model) (int, error) {
expires_on,
status,
meta,
is_ecc,
is_deleted
) VALUES (
:created_on,
@@ -54,6 +55,7 @@ func Create(certificate *Model) (int, error) {
:expires_on,
:status,
:meta,
:is_ecc,
:is_deleted
)`, certificate)
@@ -91,6 +93,7 @@ func Update(certificate *Model) error {
expires_on = :expires_on,
status = :status,
meta = :meta,
is_ecc = :is_ecc,
is_deleted = :is_deleted
WHERE id = :id`, certificate)

View File

@@ -50,6 +50,7 @@ type Model struct {
Status string `json:"status" db:"status" filter:"status,string"`
ErrorMessage string `json:"error_message,omitempty" db:"error_message" filter:"error_message,string"`
Meta types.JSONB `json:"-" db:"meta"`
IsECC int `json:"is_ecc" db:"is_ecc" filter:"is_ecc,integer"`
IsDeleted bool `json:"is_deleted,omitempty" db:"is_deleted"`
// Expansions:
CertificateAuthority *certificateauthority.Model `json:"certificate_authority,omitempty"`
@@ -201,7 +202,8 @@ func (m *Model) Request() error {
return err
}
err = acme.RequestCert(domains, m.Type)
// TODO: fill in blank params
err = acme.RequestCert(domains, m.Type, "", "", "", nil)
if err != nil {
m.Status = StatusFailed
m.ErrorMessage = err.Error()

View File

@@ -33,16 +33,16 @@ func Create(provider *Model) (int, error) {
created_on,
modified_on,
user_id,
provider_key,
name,
acme_sh_name,
meta,
is_deleted
) VALUES (
:created_on,
:modified_on,
:user_id,
:provider_key,
:name,
:acme_sh_name,
:meta,
:is_deleted
)`, provider)
@@ -73,8 +73,8 @@ func Update(provider *Model) error {
created_on = :created_on,
modified_on = :modified_on,
user_id = :user_id,
provider_key = :provider_key,
name = :name,
acme_sh_name = :acme_sh_name,
meta = :meta,
is_deleted = :is_deleted
WHERE id = :id`, provider)

View File

@@ -14,14 +14,14 @@ const (
// Model is the user model
type Model struct {
ID int `json:"id" db:"id" filter:"id,integer"`
CreatedOn types.DBDate `json:"created_on" db:"created_on" filter:"created_on,integer"`
ModifiedOn types.DBDate `json:"modified_on" db:"modified_on" filter:"modified_on,integer"`
UserID int `json:"user_id" db:"user_id" filter:"user_id,integer"`
ProviderKey string `json:"provider_key" db:"provider_key" filter:"provider_key,string"`
Name string `json:"name" db:"name" filter:"name,string"`
Meta types.JSONB `json:"meta" db:"meta"`
IsDeleted bool `json:"is_deleted,omitempty" db:"is_deleted"`
ID int `json:"id" db:"id" filter:"id,integer"`
CreatedOn types.DBDate `json:"created_on" db:"created_on" filter:"created_on,integer"`
ModifiedOn types.DBDate `json:"modified_on" db:"modified_on" filter:"modified_on,integer"`
UserID int `json:"user_id" db:"user_id" filter:"user_id,integer"`
Name string `json:"name" db:"name" filter:"name,string"`
AcmeShName string `json:"acme_sh_name" db:"acme_sh_name" filter:"acme_sh_name,string"`
Meta types.JSONB `json:"meta" db:"meta"`
IsDeleted bool `json:"is_deleted,omitempty" db:"is_deleted"`
}
func (m *Model) getByQuery(query string, params []interface{}) error {
@@ -71,3 +71,41 @@ func (m *Model) Delete() bool {
}
return true
}
// GetAcmeShEnvVars returns the env vars required for acme.sh dns cert requests
func (m *Model) GetAcmeShEnvVars() ([]string, error) {
envs := make([]string, 0)
switch m.AcmeShName {
// AWS
case "dns_aws":
envs = []string{
"AWS_ACCESS_KEY_ID=\"sdfsdfsdfljlbjkljlkjsdfoiwje\"",
"AWS_SECRET_ACCESS_KEY=\"xxxxxxx\"",
}
// Cloudflare
case "dns_cf":
envs = []string{
"CF_Key=\"sdfsdfsdfljlbjkljlkjsdfoiwje\"",
"CF_Email=\"xxxx@sss.com\"",
"CF_Token=\"xxxx\"",
"CF_Account_ID=\"xxxx\"",
"CF_Zone_ID=\"xxxx\"",
}
// DuckDNS
case "dns_duckdns":
envs = []string{
"DuckDNS_Token=\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"",
}
// Njalla
case "dns_njalla":
envs = []string{
"NJALLA_Token=\"sdfsdfsdfljlbjkljlkjsdfoiwje\"",
}
}
return envs, nil
}

View File

@@ -0,0 +1,70 @@
package dnsprovider
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestModelGetAcmeShEnvVars(t *testing.T) {
type want struct {
envs []string
err error
}
tests := []struct {
name string
dnsProvider Model
want want
}{
{
name: "dns_aws",
dnsProvider: Model{
AcmeShName: "dns_aws",
},
want: want{
envs: []string{
"AWS_ACCESS_KEY_ID=\"sdfsdfsdfljlbjkljlkjsdfoiwje\"",
"AWS_SECRET_ACCESS_KEY=\"xxxxxxx\"",
},
err: nil,
},
},
{
name: "dns_cf",
dnsProvider: Model{
AcmeShName: "dns_cf",
},
want: want{
envs: []string{
"CF_Key=\"sdfsdfsdfljlbjkljlkjsdfoiwje\"",
"CF_Email=\"xxxx@sss.com\"",
"CF_Token=\"xxxx\"",
"CF_Account_ID=\"xxxx\"",
"CF_Zone_ID=\"xxxx\"",
},
err: nil,
},
},
{
name: "dns_duckdns",
dnsProvider: Model{
AcmeShName: "dns_duckdns",
},
want: want{
envs: []string{
"DuckDNS_Token=\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"",
},
err: nil,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
envs, err := tt.dnsProvider.GetAcmeShEnvVars()
assert.Equal(t, tt.want.envs, envs)
assert.Equal(t, tt.want.err, err)
})
}
}