1package cmd
2
3import (
4	"github.com/go-acme/lego/v3/log"
5	"github.com/urfave/cli"
6)
7
8func createRevoke() cli.Command {
9	return cli.Command{
10		Name:   "revoke",
11		Usage:  "Revoke a certificate",
12		Action: revoke,
13		Flags: []cli.Flag{
14			cli.BoolFlag{
15				Name:  "keep, k",
16				Usage: "Keep the certificates after the revocation instead of archiving them.",
17			},
18		},
19	}
20}
21
22func revoke(ctx *cli.Context) error {
23	acc, client := setup(ctx, NewAccountsStorage(ctx))
24
25	if acc.Registration == nil {
26		log.Fatalf("Account %s is not registered. Use 'run' to register a new account.\n", acc.Email)
27	}
28
29	certsStorage := NewCertificatesStorage(ctx)
30	certsStorage.CreateRootFolder()
31
32	for _, domain := range ctx.GlobalStringSlice("domains") {
33		log.Printf("Trying to revoke certificate for domain %s", domain)
34
35		certBytes, err := certsStorage.ReadFile(domain, ".crt")
36		if err != nil {
37			log.Fatalf("Error while revoking the certificate for domain %s\n\t%v", domain, err)
38		}
39
40		err = client.Certificate.Revoke(certBytes)
41		if err != nil {
42			log.Fatalf("Error while revoking the certificate for domain %s\n\t%v", domain, err)
43		}
44
45		log.Println("Certificate was revoked.")
46
47		if ctx.Bool("keep") {
48			return nil
49		}
50
51		certsStorage.CreateArchiveFolder()
52
53		err = certsStorage.MoveToArchive(domain)
54		if err != nil {
55			return err
56		}
57
58		log.Println("Certificate was archived for domain:", domain)
59	}
60
61	return nil
62}
63