mirror of
https://github.com/XrayR-project/XrayR.git
synced 2025-06-07 21:09:53 +00:00
68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package mylego
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/go-acme/lego/v4/certificate"
|
|
"github.com/go-acme/lego/v4/lego"
|
|
"github.com/go-acme/lego/v4/registration"
|
|
)
|
|
|
|
const rootPathWarningMessage = `!!!! HEADS UP !!!!
|
|
|
|
Your account credentials have been saved in your Let's Encrypt
|
|
configuration directory at "%s".
|
|
|
|
You should make a secure backup of this folder now. This
|
|
configuration directory will also contain certificates and
|
|
private keys obtained from Let's Encrypt so making regular
|
|
backups of this folder is ideal.
|
|
`
|
|
|
|
func (l *LegoCMD) Run() error {
|
|
accountsStorage := NewAccountsStorage(l)
|
|
|
|
account, client := setup(accountsStorage)
|
|
setupChallenges(l, client)
|
|
|
|
if account.Registration == nil {
|
|
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
|
|
if err != nil {
|
|
log.Panicf("Could not complete registration\n\t%v", err)
|
|
}
|
|
|
|
account.Registration = reg
|
|
if err = accountsStorage.Save(account); err != nil {
|
|
log.Panic(err)
|
|
}
|
|
|
|
fmt.Printf(rootPathWarningMessage, accountsStorage.GetRootPath())
|
|
}
|
|
|
|
certsStorage := NewCertificatesStorage(l.path)
|
|
certsStorage.CreateRootFolder()
|
|
|
|
cert, err := obtainCertificate([]string{l.C.CertDomain}, client)
|
|
if err != nil {
|
|
// Make sure to return a non-zero exit code if ObtainSANCertificate returned at least one error.
|
|
// Due to us not returning partial certificate we can just exit here instead of at the end.
|
|
log.Panicf("Could not obtain certificates:\n\t%v", err)
|
|
}
|
|
|
|
certsStorage.SaveResource(cert)
|
|
|
|
return nil
|
|
}
|
|
|
|
func obtainCertificate(domains []string, client *lego.Client) (*certificate.Resource, error) {
|
|
if len(domains) > 0 {
|
|
// obtain a certificate, generating a new private key
|
|
request := certificate.ObtainRequest{
|
|
Domains: domains,
|
|
}
|
|
return client.Certificate.Obtain(request)
|
|
}
|
|
return nil, fmt.Errorf("not a valid domain")
|
|
}
|