github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/command/tls_ca_info.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 "github.com/hashicorp/nomad/helper/tlsutil" 9 "github.com/posener/complete" 10 "github.com/ryanuber/columnize" 11 ) 12 13 type TLSCAInfoCommand struct { 14 Meta 15 } 16 17 func (c *TLSCAInfoCommand) Help() string { 18 helpText := ` 19 Usage: nomad tls ca info <CA file> 20 21 Show information about a certificate authority. 22 ` 23 return strings.TrimSpace(helpText) 24 } 25 26 func (c *TLSCAInfoCommand) AutocompleteFlags() complete.Flags { 27 return mergeAutocompleteFlags(c.Meta.AutocompleteFlags(FlagSetClient), 28 complete.Flags{}) 29 } 30 31 func (c *TLSCAInfoCommand) AutocompleteArgs() complete.Predictor { 32 return complete.PredictOr( 33 complete.PredictFiles("*.pem"), 34 ) 35 } 36 37 func (c *TLSCAInfoCommand) Synopsis() string { 38 return "Show certificate authority information" 39 } 40 41 func (c *TLSCAInfoCommand) Name() string { return "tls cert info" } 42 43 func (c *TLSCAInfoCommand) Run(args []string) int { 44 45 flags := c.Meta.FlagSet(c.Name(), FlagSetClient) 46 flags.Usage = func() { c.Ui.Output(c.Help()) } 47 if err := flags.Parse(args); err != nil { 48 return 1 49 } 50 51 // Check that we got no arguments 52 args = flags.Args() 53 if l := len(args); l < 0 || l > 1 { 54 c.Ui.Error("This command takes up to one argument") 55 c.Ui.Error(commandErrorText(c)) 56 return 1 57 } 58 var certFile []byte 59 var err error 60 var file string 61 if len(args) == 0 { 62 c.Ui.Error(fmt.Sprintf("Error reading CA file: %v", err)) 63 return 1 64 } 65 if len(args) == 1 { 66 file = args[0] 67 certFile, err = os.ReadFile(file) 68 if err != nil { 69 c.Ui.Error(fmt.Sprintf("Error reading CA file: %v", err)) 70 return 1 71 } 72 } 73 74 certInfo, err := tlsutil.ParseCert(string(certFile)) 75 if err != nil { 76 c.Ui.Error(err.Error()) 77 return 1 78 } 79 // Format the certificate info 80 basic := []string{ 81 fmt.Sprintf("Serial Number|%s", certInfo.SerialNumber), 82 fmt.Sprintf("Issuer CN|%s", certInfo.Issuer.CommonName), 83 fmt.Sprintf("Common Name|%s", certInfo.Subject), 84 fmt.Sprintf("Expiry Date|%s", certInfo.NotAfter), 85 fmt.Sprintf("Permitted DNS Domains|%s", certInfo.PermittedDNSDomains), 86 } 87 88 // Print out the information 89 c.Ui.Output(columnize.SimpleFormat(basic)) 90 return 0 91 }