| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | package testimport (	"crypto"	"crypto/ecdsa"	"crypto/elliptic"	"crypto/rand"	"fmt"	"io/ioutil"	"log"	"testing"	"github.com/go-acme/lego/v4/certcrypto"	"github.com/go-acme/lego/v4/certificate"	"github.com/go-acme/lego/v4/challenge/http01"	"github.com/go-acme/lego/v4/lego"	"github.com/go-acme/lego/v4/registration")// You'll need a user or account type that implements acme.Usertype MyUser struct {	Email        string	Registration *registration.Resource	key          crypto.PrivateKey}func (u *MyUser) GetEmail() string {	return u.Email}func (u MyUser) GetRegistration() *registration.Resource {	return u.Registration}func (u *MyUser) GetPrivateKey() crypto.PrivateKey {	return u.key}func TestLego(t *testing.T) {	// Create a user. New accounts need an email and private key to start.	privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)	if err != nil {		log.Fatal(err)	}	myUser := MyUser{		Email: "me@jackyu.cn",		key:   privateKey,	}	config := lego.NewConfig(&myUser)	// This CA URL is configured for a local dev instance of Boulder running in Dockerfile in a VM.	config.CADirURL = "https://acme-staging-v02.api.letsencrypt.org/directory"	config.Certificate.KeyType = certcrypto.RSA2048	// A client facilitates communication with the CA server.	client, err := lego.NewClient(config)	if err != nil {		log.Fatal(err)	}	err = client.Challenge.SetHTTP01Provider(http01.NewProviderServer("", "9180"))	if err != nil {		log.Fatal(err)	}	// New users will need to register	reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})	if err != nil {		log.Fatal(err)	}	myUser.Registration = reg	request := certificate.ObtainRequest{		Domains: []string{"shanghai2.ojbk.me"},		Bundle:  true,	}	certificates, err := client.Certificate.Obtain(request)	if err != nil {		log.Fatal(err)	}	// Each certificate comes back with the cert bytes, the bytes of the client's	// private key, and a certificate URL. SAVE THESE TO DISK.	fmt.Printf("%#v\n", certificates)	err = ioutil.WriteFile("fullchain.cer", certificates.Certificate, 0644)	if err != nil {		log.Fatal(err)	}	err = ioutil.WriteFile("private.key", certificates.PrivateKey, 0644)	if err != nil {		log.Fatal(err)	}}
 |