package acme import ( "crypto" "crypto/ecdsa" "crypto/x509" "encoding/base64" "encoding/json" "github.com/go-acme/lego/v4/registration" ) type User struct { Email string Registration *registration.Resource Key crypto.PrivateKey } func (u *User) GetEmail() string { return u.Email } func (u *User) GetRegistration() *registration.Resource { return u.Registration } func (u *User) GetPrivateKey() crypto.PrivateKey { return u.Key } func (u *User) ToRegister() *RegisterRes { registrationJson, err := json.Marshal(u.Registration) if err != nil { panic(err) } privateDER, err := x509.MarshalPKCS8PrivateKey(u.Key) if err != nil { panic(err) } privateBase64 := base64.StdEncoding.EncodeToString(privateDER) return &RegisterRes{ Email: u.Email, Registration: string(registrationJson), PrivateKey: privateBase64, } } func (u *User) FromRegister(register *RegisterRes) *User { u.Email = register.Email err := json.Unmarshal([]byte(register.Registration), &u.Registration) if err != nil { panic(err) } privateDER, err := base64.StdEncoding.DecodeString(register.PrivateKey) if err != nil { panic(err) } key, err := x509.ParsePKCS8PrivateKey(privateDER) if err != nil { panic(err) } privateKey, e := key.(*ecdsa.PrivateKey) if !e { panic(e) } u.Key = privateKey return u } type RegisterRes struct { Email string Registration string PrivateKey string }