Merge pull request #171 from wdahlenburg/wildcard_templates

Support Template Wildcarding
dev
bauthard 2020-07-25 17:30:17 +05:30 committed by GitHub
commit 66200dc191
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 77 additions and 43 deletions

View File

@ -9,6 +9,7 @@ import (
"io/ioutil" "io/ioutil"
"net/http/cookiejar" "net/http/cookiejar"
"os" "os"
"path/filepath"
"strings" "strings"
"sync" "sync"
@ -124,25 +125,57 @@ func (r *Runner) RunEnumeration() {
// parses user input, handle file/directory cases and produce a list of unique templates // parses user input, handle file/directory cases and produce a list of unique templates
for _, t := range r.options.Templates { for _, t := range r.options.Templates {
var absPath string
var err error
if strings.Contains(t, "*") {
dirs := strings.Split(t, "/")
priorDir := strings.Join(dirs[:len(dirs)-1], "/")
absPath, err = r.resolvePathIfRelative(priorDir)
absPath += "/" + dirs[len(dirs)-1]
} else {
// resolve and convert relative to absolute path // resolve and convert relative to absolute path
absPath, err := r.resolvePathIfRelative(t) absPath, err = r.resolvePathIfRelative(t)
}
if err != nil { if err != nil {
gologger.Errorf("Could not find template file '%s': %s\n", t, err) gologger.Errorf("Could not find template file '%s': %s\n", t, err)
continue continue
} }
// Template input includes a wildcard
if strings.Contains(absPath, "*") {
matches := []string{}
matches, err = filepath.Glob(absPath)
if err != nil {
gologger.Labelf("Wildcard found, but unable to glob '%s': %s\n", absPath, 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", absPath)
continue
} else {
gologger.Labelf("Identified %d templates\n", len(matches))
}
allTemplates = append(allTemplates, matches...)
} else {
// determine file/directory // determine file/directory
isFile, err := isFilePath(absPath) isFile, err := isFilePath(absPath)
if err != nil { if err != nil {
gologger.Errorf("Could not stat '%s': %s\n", absPath, err) gologger.Errorf("Could not stat '%s': %s\n", absPath, err)
continue continue
} }
// test for uniqueness // test for uniqueness
if !isNewPath(absPath, processed) { if !isNewPath(absPath, processed) {
continue continue
} }
// mark this absolute path as processed // mark this absolute path as processed
// - if it's a file, we'll never process it again // - if it's a file, we'll never process it again
// - if it's a dir, we'll never walk it again // - if it's a dir, we'll never walk it again
@ -185,6 +218,7 @@ func (r *Runner) RunEnumeration() {
allTemplates = append(allTemplates, matches...) allTemplates = append(allTemplates, matches...)
} }
} }
}
// 0 matches means no templates were found in directory // 0 matches means no templates were found in directory
if len(allTemplates) == 0 { if len(allTemplates) == 0 {