diff --git a/README.mkd b/README.mkd index a76bf25..46c48f8 100644 --- a/README.mkd +++ b/README.mkd @@ -142,6 +142,7 @@ Options: -s, --savestatus Save only responses with specific status code -v, --verbose Verbose mode -X, --method HTTP method (default: GET) + -g, --savegf Save only if gf finds something Defaults: pathsFile: ./paths diff --git a/args.go b/args.go index 90cca52..01e0e3e 100644 --- a/args.go +++ b/args.go @@ -47,6 +47,7 @@ type config struct { headers headerArgs followLocation bool method string + savegf string saveStatus saveStatusArgs timeout int verbose bool @@ -91,6 +92,11 @@ func processArgs() config { flag.StringVar(&method, "method", "GET", "") flag.StringVar(&method, "X", "GET", "") + // savegf param + savegf := "" + flag.StringVar(&savegf, "savegf", "", "") + flag.StringVar(&savegf, "g", "", "") + // savestatus params var saveStatus saveStatusArgs flag.Var(&saveStatus, "savestatus", "") @@ -148,6 +154,7 @@ func processArgs() config { headers: headers, followLocation: followLocation, method: method, + savegf: savegf, saveStatus: saveStatus, timeout: timeout, requester: requesterFn, @@ -177,6 +184,7 @@ func init() { h += " -t, --timeout Set the HTTP timeout (default: 10000)\n" h += " -v, --verbose Verbose mode\n" h += " -X, --method HTTP method (default: GET)\n\n" + h += " -g, --savegf Save only if gf finds something\n\n" h += "Defaults:\n" h += " pathsFile: ./paths\n" diff --git a/main.go b/main.go index f2a73a2..d503b60 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,11 @@ package main import ( "bufio" + "bytes" "fmt" "net/url" "os" + "os/exec" "path/filepath" "sync" "time" @@ -84,6 +86,7 @@ func main() { owg.Add(1) go func() { for res := range responses { + if len(c.saveStatus) > 0 && !c.saveStatus.Includes(res.statusCode) { continue } @@ -94,6 +97,25 @@ func main() { } path, err := res.save(c.output, c.noHeaders) + if len(c.savegf) > 0 { + var cmd *exec.Cmd + cmd = exec.Command("gf", c.savegf, path) + var out bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = os.Stderr + cmd.Run() + strOut := out.String() + if len(strOut) == 0 { + err := os.Remove(path) + + if err != nil { + fmt.Println(err) + return + } + continue + } + } + if err != nil { fmt.Fprintf(os.Stderr, "failed to save file: %s\n", err) }