76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
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)
|
|
}
|
|
|
|
}
|