From 1b19f4cbef7bd1e4fa4ba52b4e621a96fc1bd54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BCller?= Date: Sat, 20 Apr 2019 20:35:29 +0200 Subject: [PATCH] add conversion from account V1 to V2 (#9) --- dumper/kv/convert.go | 65 ++++++++++++++++++++++++++++++++++++++++++++ dumper/kv/kv.go | 6 ++-- 2 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 dumper/kv/convert.go diff --git a/dumper/kv/convert.go b/dumper/kv/convert.go new file mode 100644 index 0000000..95ce86f --- /dev/null +++ b/dumper/kv/convert.go @@ -0,0 +1,65 @@ +package kv + +import ( + "github.com/go-acme/lego/certcrypto" + "github.com/go-acme/lego/registration" + "github.com/ldez/traefik-certs-dumper/dumper" +) + +// CertificateV1 is used to store certificate info +type CertificateV1 struct { + Domain string + CertURL string + CertStableURL string + PrivateKey []byte + Certificate []byte +} + +// AccountV1 is used to store lets encrypt registration info +type AccountV1 struct { + Email string + Registration *registration.Resource + PrivateKey []byte + KeyType certcrypto.KeyType + DomainsCertificate DomainsCertificates + ChallengeCerts map[string]*ChallengeCert + HTTPChallenge map[string]map[string][]byte +} + +// DomainsCertificates stores a certificate for multiple domains +type DomainsCertificates struct { + Certs []*DomainsCertificate +} + +// ChallengeCert stores a challenge certificate +type ChallengeCert struct { + Certificate []byte + PrivateKey []byte +} + +// DomainsCertificate contains a certificate for multiple domains +type DomainsCertificate struct { + Domains dumper.Domain + Certificate *CertificateV1 +} + +// convertAccountV1ToV2 converts account information from version 1 to 2 +func convertAccountV1ToV2(account *AccountV1) *dumper.StoredData { + storedData := &dumper.StoredData{} + storedData.Account = &dumper.Account{ + PrivateKey: account.PrivateKey, + Registration: account.Registration, + Email: account.Email, + KeyType: account.KeyType, + } + var certs []*dumper.Certificate + for _, oldCert := range account.DomainsCertificate.Certs { + certs = append(certs, &dumper.Certificate{ + Certificate: oldCert.Certificate.Certificate, + Domain: oldCert.Domains, + Key: oldCert.Certificate.PrivateKey, + }) + } + storedData.Certificates = certs + return storedData +} diff --git a/dumper/kv/kv.go b/dumper/kv/kv.go index f2e41f5..dd31658 100644 --- a/dumper/kv/kv.go +++ b/dumper/kv/kv.go @@ -78,10 +78,10 @@ func getStoredDataFromGzip(pair *store.KVPair) (*dumper.StoredData, error) { return data, err } - storedData := &dumper.StoredData{} - if err := json.Unmarshal(acmeData, &storedData); err != nil { + account := &AccountV1{} + if err := json.Unmarshal(acmeData, &account); err != nil { return data, err } - return storedData, nil + return convertAccountV1ToV2(account), nil }