package main import ( "encoding/csv" "io" "log" "os" "path/filepath" "strings" "github.com/alecthomas/kingpin" "local/smtpparse/internal" ) var ( flagInputFiles = kingpin.Flag("input-file", "Input files. Can be glob patterns like `*.log` and `-` for standard input pipe.").Short('i').Required().Strings() flagOutputFile = kingpin.Flag("output-file", "Output file. Can be `-` for standard output pipe.").Default("-").Short('o').String() flagRecipients = kingpin.Flag("recipients", "List of recipients to find entries for. Defaults to everyone.").Short('r').Strings() flagAnonymize = kingpin.Flag("anonymize", "Anonymizes mail subjects.").Bool() ) func main() { kingpin.Parse() // Open input file readers := []io.Reader{} for _, globPattern := range *flagInputFiles { // allow stdin if globPattern == "-" { readers = append(readers, os.Stdin, strings.NewReader("\n")) continue } // check for files of pattern matches, err := filepath.Glob(globPattern) if err != nil { log.Fatal(err) } for _, match := range matches { f, err := os.Open(match) if err != nil { log.Fatal(err) } defer f.Close() readers = append(readers, f, strings.NewReader("\n")) } } r := io.MultiReader(readers...) // Create output var outputWriter io.Writer if *flagOutputFile == "-" { outputWriter = os.Stdout } else { f, err := os.Create(*flagOutputFile) if err != nil { log.Fatal(err) } defer f.Close() outputWriter = f } // Parse transformer := new(internal.Log) transformer.AnonymizeSubject = *flagAnonymize transformer.CSVWriter = csv.NewWriter(outputWriter) err := transformer.Parse(r) if err != nil { log.Fatal(err) } }