smtplogparser/main.go

76 lines
1.7 KiB
Go
Raw Permalink Normal View History

2018-03-22 23:35:29 +00:00
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)
}
}