mirror of
https://github.com/go-acme/lego
synced 2026-03-14 14:35:48 +01:00
82 lines
2 KiB
Go
82 lines
2 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bufio"
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/go-acme/lego/v5/lego"
|
|
"github.com/go-acme/lego/v5/log"
|
|
"github.com/go-acme/lego/v5/registration"
|
|
"github.com/urfave/cli/v3"
|
|
)
|
|
|
|
// TODO(ldez): add register command.
|
|
|
|
const rootPathWarningMessage = `!!!! HEADS UP !!!!
|
|
|
|
Your account credentials have been saved in your
|
|
configuration directory at "%s".
|
|
|
|
You should make a secure backup of this folder now. This
|
|
configuration directory will also contain private keys
|
|
generated by lego and certificates obtained from the ACME
|
|
server. Making regular backups of this folder is ideal.
|
|
`
|
|
|
|
func registerAccount(ctx context.Context, cmd *cli.Command, client *lego.Client) (*registration.Resource, error) {
|
|
accepted := handleTOS(cmd, client)
|
|
if !accepted {
|
|
log.Fatal("You did not accept the TOS. Unable to proceed.")
|
|
}
|
|
|
|
if cmd.Bool(flgEAB) {
|
|
kid := cmd.String(flgKID)
|
|
hmacEncoded := cmd.String(flgHMAC)
|
|
|
|
if kid == "" || hmacEncoded == "" {
|
|
log.Fatal(fmt.Sprintf("Requires arguments --%s and --%s.", flgKID, flgHMAC))
|
|
}
|
|
|
|
return client.Registration.RegisterWithExternalAccountBinding(ctx, registration.RegisterEABOptions{
|
|
TermsOfServiceAgreed: accepted,
|
|
Kid: kid,
|
|
HmacEncoded: hmacEncoded,
|
|
})
|
|
}
|
|
|
|
return client.Registration.Register(ctx, registration.RegisterOptions{TermsOfServiceAgreed: true})
|
|
}
|
|
|
|
func handleTOS(cmd *cli.Command, client *lego.Client) bool {
|
|
// Check for a global accept override
|
|
if cmd.Bool(flgAcceptTOS) {
|
|
return true
|
|
}
|
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
log.Warn("Please review the TOS", slog.String("url", client.GetToSURL()))
|
|
|
|
for {
|
|
fmt.Println("Do you accept the TOS? Y/n")
|
|
|
|
text, err := reader.ReadString('\n')
|
|
if err != nil {
|
|
log.Fatal("Could not read from the console", log.ErrorAttr(err))
|
|
}
|
|
|
|
text = strings.Trim(text, "\r\n")
|
|
switch text {
|
|
case "", "y", "Y":
|
|
return true
|
|
case "n", "N":
|
|
return false
|
|
default:
|
|
fmt.Println("Your input was invalid. Please answer with one of Y/y, n/N or by pressing enter.")
|
|
}
|
|
}
|
|
}
|