From 2c14fed18f286a20b70e6dd283f5eef64e14a63c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BCller?= Date: Sat, 20 Apr 2019 18:17:41 +0200 Subject: [PATCH] add conversion from account V1 to V2 --- dumper/info.go | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ dumper/kv/kv.go | 6 ++--- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/dumper/info.go b/dumper/info.go index 9dc4e51..f449427 100644 --- a/dumper/info.go +++ b/dumper/info.go @@ -39,6 +39,64 @@ type Account struct { KeyType certcrypto.KeyType } +// 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 Domain + Certificate *CertificateV1 +} + +// ConvertAccountV1ToV2 converts account information from version 1 to 2 +func ConvertAccountV1ToV2(account *AccountV1) *StoredData { + storedData := &StoredData{} + storedData.Account = &Account{ + PrivateKey: account.PrivateKey, + Registration: account.Registration, + Email: account.Email, + KeyType: account.KeyType, + } + var certs []*Certificate + for _, oldCert := range account.DomainsCertificate.Certs { + certs = append(certs, &Certificate{ + Certificate: oldCert.Certificate.Certificate, + Domain: oldCert.Domains, + Key: oldCert.Certificate.PrivateKey, + }) + } + storedData.Certificates = certs + return storedData +} + // Tree FIXME move func Tree(root, indent string) error { fi, err := os.Stat(root) diff --git a/dumper/kv/kv.go b/dumper/kv/kv.go index f2e41f5..d4994c8 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 := &dumper.AccountV1{} + if err := json.Unmarshal(acmeData, &account); err != nil { return data, err } - return storedData, nil + return dumper.ConvertAccountV1ToV2(account), nil }