package main import ( "errors" "fmt" "io/ioutil" "os" "github.com/spf13/cobra" "github.com/safing/jess" "github.com/safing/portbase/container" ) func init() { rootCmd.AddCommand(verifyCmd) } var ( verifyCmdHelp = "usage: jess verify <file>" verifyCmd = &cobra.Command{ Use: "verify <file>", Short: "verify file", DisableFlagsInUseLine: true, RunE: func(cmd *cobra.Command, args []string) (err error) { // check args if len(args) != 1 { return errors.New(verifyCmdHelp) } // check filenames filename := args[0] // check input file if filename != "-" { fileInfo, err := os.Stat(filename) if err != nil { return err } if fileInfo.Size() > warnFileSize { confirmed, err := confirm("Input file is really big (%s) and jess needs to load it fully to memory, continue?", true) if err != nil { return err } if !confirmed { return nil } } } // load file var data []byte if filename == "-" { data, err = ioutil.ReadAll(os.Stdin) } else { data, err = ioutil.ReadFile(filename) } if err != nil { return err } // parse file letter, err := jess.LetterFromFileFormat(container.New(data)) if err != nil { return err } // adjust requirements if requirements == nil { requirements = jess.NewRequirements(). Remove(jess.Confidentiality). Remove(jess.Integrity). Remove(jess.RecipientAuthentication) } // verify err = letter.Verify(requirements, trustStore) if err != nil { return err } // success fmt.Println("ok") return nil }, } )