Support template wildcarding
@@ -9,6 +9,7 @@ import (
"io/ioutil"
"net/http/cookiejar"
"os"
+ "path/filepath"
"strings"
"sync"
@@ -126,23 +127,44 @@ func (r *Runner) RunEnumeration() {
for _, t := range r.options.Templates {
// resolve and convert relative to absolute path
absPath, err := r.resolvePathIfRelative(t)
- if err != nil {
+ if err != nil && !strings.Contains(t, "*") {
gologger.Errorf("Could not find template file '%s': %s\n", t, err)
continue
}
+ // Template input includes a wildcard
+ if strings.Contains(t, "*") {
+ matches := []string{}
+ matches, err = filepath.Glob(t)
+ if err != nil {
+ gologger.Labelf("Wildcard found, but unable to glob '%s': %s\n", t, err)
+ continue
+ }
+
+ for _, i := range matches {
+ processed[i] = true
+ }
+
+ // couldn't find templates in directory
+ if len(matches) == 0 {
+ gologger.Labelf("Error, no templates were found with '%s'.\n", t)
+ continue
+ } else {
+ gologger.Labelf("Identified %d templates\n", len(matches))
+ }
+
+ allTemplates = append(allTemplates, matches...)
+ } else {
// determine file/directory
isFile, err := isFilePath(absPath)
if err != nil {
gologger.Errorf("Could not stat '%s': %s\n", absPath, err)
continue
}
-
// test for uniqueness
if !isNewPath(absPath, processed) {
continue
}
-
// mark this absolute path as processed
// - if it's a file, we'll never process it again
// - if it's a dir, we'll never walk it again
@@ -185,6 +207,7 @@ func (r *Runner) RunEnumeration() {
allTemplates = append(allTemplates, matches...)
}
}
+ }
// 0 matches means no templates were found in directory
if len(allTemplates) == 0 {
