print.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "io"
  7. "io/ioutil"
  8. "os"
  9. "github.com/slackhq/nebula/cert"
  10. "strings"
  11. )
  12. type printFlags struct {
  13. set *flag.FlagSet
  14. json *bool
  15. path *string
  16. }
  17. func newPrintFlags() *printFlags {
  18. pf := printFlags{set: flag.NewFlagSet("print", flag.ContinueOnError)}
  19. pf.set.Usage = func() {}
  20. pf.json = pf.set.Bool("json", false, "Optional: outputs certificates in json format")
  21. pf.path = pf.set.String("path", "", "Required: path to the certificate")
  22. return &pf
  23. }
  24. func printCert(args []string, out io.Writer, errOut io.Writer) error {
  25. pf := newPrintFlags()
  26. err := pf.set.Parse(args)
  27. if err != nil {
  28. return err
  29. }
  30. if err := mustFlagString("path", pf.path); err != nil {
  31. return err
  32. }
  33. rawCert, err := ioutil.ReadFile(*pf.path)
  34. if err != nil {
  35. return fmt.Errorf("unable to read cert; %s", err)
  36. }
  37. var c *cert.NebulaCertificate
  38. for {
  39. c, rawCert, err = cert.UnmarshalNebulaCertificateFromPEM(rawCert)
  40. if err != nil {
  41. return fmt.Errorf("error while unmarshaling cert: %s", err)
  42. }
  43. if *pf.json {
  44. b, _ := json.Marshal(c)
  45. out.Write(b)
  46. out.Write([]byte("\n"))
  47. } else {
  48. out.Write([]byte(c.String()))
  49. out.Write([]byte("\n"))
  50. }
  51. if rawCert == nil || len(rawCert) == 0 || strings.TrimSpace(string(rawCert)) == "" {
  52. break
  53. }
  54. }
  55. return nil
  56. }
  57. func printSummary() string {
  58. return "print <flags>: prints details about a certificate"
  59. }
  60. func printHelp(out io.Writer) {
  61. pf := newPrintFlags()
  62. out.Write([]byte("Usage of " + os.Args[0] + " " + printSummary() + "\n"))
  63. pf.set.SetOutput(out)
  64. pf.set.PrintDefaults()
  65. }