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