1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package main
- import (
- "encoding/json"
- "flag"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "github.com/slackhq/nebula/cert"
- "strings"
- )
- type printFlags struct {
- set *flag.FlagSet
- json *bool
- path *string
- }
- func newPrintFlags() *printFlags {
- pf := printFlags{set: flag.NewFlagSet("print", flag.ContinueOnError)}
- pf.set.Usage = func() {}
- pf.json = pf.set.Bool("json", false, "Optional: outputs certificates in json format")
- pf.path = pf.set.String("path", "", "Required: path to the certificate")
- return &pf
- }
- func printCert(args []string, out io.Writer, errOut io.Writer) error {
- pf := newPrintFlags()
- err := pf.set.Parse(args)
- if err != nil {
- return err
- }
- if err := mustFlagString("path", pf.path); err != nil {
- return err
- }
- rawCert, err := ioutil.ReadFile(*pf.path)
- if err != nil {
- return fmt.Errorf("unable to read cert; %s", err)
- }
- var c *cert.NebulaCertificate
- for {
- c, rawCert, err = cert.UnmarshalNebulaCertificateFromPEM(rawCert)
- if err != nil {
- return fmt.Errorf("error while unmarshaling cert: %s", err)
- }
- if *pf.json {
- b, _ := json.Marshal(c)
- out.Write(b)
- out.Write([]byte("\n"))
- } else {
- out.Write([]byte(c.String()))
- out.Write([]byte("\n"))
- }
- if rawCert == nil || len(rawCert) == 0 || strings.TrimSpace(string(rawCert)) == "" {
- break
- }
- }
- return nil
- }
- func printSummary() string {
- return "print <flags>: prints details about a certificate"
- }
- func printHelp(out io.Writer) {
- pf := newPrintFlags()
- out.Write([]byte("Usage of " + os.Args[0] + " " + printSummary() + "\n"))
- pf.set.SetOutput(out)
- pf.set.PrintDefaults()
- }
|