In-lined error checks, reduced scope of error variables, introduced new error variables instead of re-using them

dev
forgedhallpass 2021-08-31 12:55:52 +03:00
parent cfbd628b55
commit 40d88d2304
22 changed files with 55 additions and 94 deletions

View File

@ -35,8 +35,7 @@ func main() {
if customTest != "" && !strings.Contains(file, customTest) { if customTest != "" && !strings.Contains(file, customTest) {
continue // only run tests user asked continue // only run tests user asked
} }
err := test.Execute(file) if err := test.Execute(file); err != nil {
if err != nil {
fmt.Fprintf(os.Stderr, "%s Test \"%s\" failed: %s\n", failed, file, err) fmt.Fprintf(os.Stderr, "%s Test \"%s\" failed: %s\n", failed, file, err)
errored = true errored = true
} else { } else {

View File

@ -21,10 +21,10 @@ type workflowBasic struct{}
// Executes executes a test case and returns an error if occurred // Executes executes a test case and returns an error if occurred
func (h *workflowBasic) Execute(filePath string) error { func (h *workflowBasic) Execute(filePath string) error {
router := httprouter.New() router := httprouter.New()
router.GET("/", httprouter.Handle(func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
httpDebugRequestDump(r) httpDebugRequestDump(r)
fmt.Fprintf(w, "This is test matcher text") fmt.Fprintf(w, "This is test matcher text")
})) })
ts := httptest.NewServer(router) ts := httptest.NewServer(router)
defer ts.Close() defer ts.Close()
@ -43,10 +43,10 @@ type workflowConditionMatched struct{}
// Executes executes a test case and returns an error if occurred // Executes executes a test case and returns an error if occurred
func (h *workflowConditionMatched) Execute(filePath string) error { func (h *workflowConditionMatched) Execute(filePath string) error {
router := httprouter.New() router := httprouter.New()
router.GET("/", httprouter.Handle(func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
httpDebugRequestDump(r) httpDebugRequestDump(r)
fmt.Fprintf(w, "This is test matcher text") fmt.Fprintf(w, "This is test matcher text")
})) })
ts := httptest.NewServer(router) ts := httptest.NewServer(router)
defer ts.Close() defer ts.Close()
@ -65,10 +65,10 @@ type workflowConditionUnmatch struct{}
// Executes executes a test case and returns an error if occurred // Executes executes a test case and returns an error if occurred
func (h *workflowConditionUnmatch) Execute(filePath string) error { func (h *workflowConditionUnmatch) Execute(filePath string) error {
router := httprouter.New() router := httprouter.New()
router.GET("/", httprouter.Handle(func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
httpDebugRequestDump(r) httpDebugRequestDump(r)
fmt.Fprintf(w, "This is test matcher text") fmt.Fprintf(w, "This is test matcher text")
})) })
ts := httptest.NewServer(router) ts := httptest.NewServer(router)
defer ts.Close() defer ts.Close()
@ -84,13 +84,13 @@ func (h *workflowConditionUnmatch) Execute(filePath string) error {
type workflowMatcherName struct{} type workflowMatcherName struct{}
// Executes executes a test case and returns an error if occurred // Execute executes a test case and returns an error if occurred
func (h *workflowMatcherName) Execute(filePath string) error { func (h *workflowMatcherName) Execute(filePath string) error {
router := httprouter.New() router := httprouter.New()
router.GET("/", httprouter.Handle(func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
httpDebugRequestDump(r) httpDebugRequestDump(r)
fmt.Fprintf(w, "This is test matcher text") fmt.Fprintf(w, "This is test matcher text")
})) })
ts := httptest.NewServer(router) ts := httptest.NewServer(router)
defer ts.Close() defer ts.Close()

View File

@ -83,13 +83,11 @@ func validateOptions(options *types.Options) error {
} }
// Validate proxy options if provided // Validate proxy options if provided
err := validateProxyURL(options.ProxyURL, "invalid http proxy format (It should be http://username:password@host:port)") if err := validateProxyURL(options.ProxyURL, "invalid http proxy format (It should be http://username:password@host:port)"); err != nil {
if err != nil {
return err return err
} }
err = validateProxyURL(options.ProxySocksURL, "invalid socks proxy format (It should be socks5://username:password@host:port)") if err := validateProxyURL(options.ProxySocksURL, "invalid socks proxy format (It should be socks5://username:password@host:port)"); err != nil {
if err != nil {
return err return err
} }

View File

@ -108,14 +108,12 @@ func (r *Runner) updateTemplates() error {
gologger.Verbose().Msgf("Downloading nuclei-templates (v%s) to %s\n", version.String(), r.templatesConfig.TemplatesDirectory) gologger.Verbose().Msgf("Downloading nuclei-templates (v%s) to %s\n", version.String(), r.templatesConfig.TemplatesDirectory)
r.fetchLatestVersionsFromGithub() // also fetch latest versions r.fetchLatestVersionsFromGithub() // also fetch latest versions
_, err = r.downloadReleaseAndUnzip(ctx, version.String(), asset.GetZipballURL()) if _, err := r.downloadReleaseAndUnzip(ctx, version.String(), asset.GetZipballURL()); err != nil {
if err != nil {
return err return err
} }
r.templatesConfig.CurrentVersion = version.String() r.templatesConfig.CurrentVersion = version.String()
err = config.WriteConfiguration(r.templatesConfig, true, checkedIgnore) if err := config.WriteConfiguration(r.templatesConfig, true, checkedIgnore); err != nil {
if err != nil {
return err return err
} }
gologger.Info().Msgf("Successfully downloaded nuclei-templates (v%s). GoodLuck!\n", version.String()) gologger.Info().Msgf("Successfully downloaded nuclei-templates (v%s). GoodLuck!\n", version.String())
@ -163,12 +161,11 @@ func (r *Runner) updateTemplates() error {
gologger.Verbose().Msgf("Downloading nuclei-templates (v%s) to %s\n", version.String(), r.templatesConfig.TemplatesDirectory) gologger.Verbose().Msgf("Downloading nuclei-templates (v%s) to %s\n", version.String(), r.templatesConfig.TemplatesDirectory)
r.fetchLatestVersionsFromGithub() r.fetchLatestVersionsFromGithub()
_, err = r.downloadReleaseAndUnzip(ctx, version.String(), asset.GetZipballURL()) if _, err := r.downloadReleaseAndUnzip(ctx, version.String(), asset.GetZipballURL()); err != nil {
if err != nil {
return err return err
} }
err = config.WriteConfiguration(r.templatesConfig, true, checkedIgnore)
if err != nil { if err := config.WriteConfiguration(r.templatesConfig, true, checkedIgnore); err != nil {
return err return err
} }
gologger.Info().Msgf("Successfully updated nuclei-templates (v%s). GoodLuck!\n", version.String()) gologger.Info().Msgf("Successfully updated nuclei-templates (v%s). GoodLuck!\n", version.String())
@ -294,8 +291,7 @@ func (r *Runner) downloadReleaseAndUnzip(ctx context.Context, version, downloadU
} }
// Create the template folder if it doesn't exists // Create the template folder if it doesn't exists
err = os.MkdirAll(r.templatesConfig.TemplatesDirectory, os.ModePerm) if err := os.MkdirAll(r.templatesConfig.TemplatesDirectory, os.ModePerm); err != nil {
if err != nil {
return nil, fmt.Errorf("failed to create template base folder: %s", err) return nil, fmt.Errorf("failed to create template base folder: %s", err)
} }
@ -308,8 +304,7 @@ func (r *Runner) downloadReleaseAndUnzip(ctx context.Context, version, downloadU
r.printUpdateChangelog(results, version) r.printUpdateChangelog(results, version)
} }
checksumFile := filepath.Join(r.templatesConfig.TemplatesDirectory, ".checksum") checksumFile := filepath.Join(r.templatesConfig.TemplatesDirectory, ".checksum")
err = writeTemplatesChecksum(checksumFile, results.checksums) if err := writeTemplatesChecksum(checksumFile, results.checksums); err != nil {
if err != nil {
return nil, errors.Wrap(err, "could not write checksum") return nil, errors.Wrap(err, "could not write checksum")
} }
@ -320,8 +315,8 @@ func (r *Runner) downloadReleaseAndUnzip(ctx context.Context, version, downloadU
buffer.WriteString(addition) buffer.WriteString(addition)
buffer.WriteString("\n") buffer.WriteString("\n")
} }
err = ioutil.WriteFile(additionsFile, buffer.Bytes(), os.ModePerm)
if err != nil { if err := ioutil.WriteFile(additionsFile, buffer.Bytes(), os.ModePerm); err != nil {
return nil, errors.Wrap(err, "could not write new additions file") return nil, errors.Wrap(err, "could not write new additions file")
} }
return results, err return results, err
@ -362,8 +357,7 @@ func (r *Runner) compareAndWriteTemplates(z *zip.Reader) (*templateUpdateResults
} }
results.totalCount++ results.totalCount++
templateDirectory := filepath.Join(r.templatesConfig.TemplatesDirectory, finalPath) templateDirectory := filepath.Join(r.templatesConfig.TemplatesDirectory, finalPath)
err := os.MkdirAll(templateDirectory, os.ModePerm) if err := os.MkdirAll(templateDirectory, os.ModePerm); err != nil {
if err != nil {
return nil, fmt.Errorf("failed to create template folder %s : %s", templateDirectory, err) return nil, fmt.Errorf("failed to create template folder %s : %s", templateDirectory, err)
} }
@ -387,8 +381,7 @@ func (r *Runner) compareAndWriteTemplates(z *zip.Reader) (*templateUpdateResults
hasher := md5.New() hasher := md5.New()
// Save file and also read into hasher for md5 // Save file and also read into hasher for md5
_, err = io.Copy(f, io.TeeReader(reader, hasher)) if _, err := io.Copy(f, io.TeeReader(reader, hasher)); err != nil {
if err != nil {
f.Close() f.Close()
return nil, fmt.Errorf("could not write template file: %s", err) return nil, fmt.Errorf("could not write template file: %s", err)
} }
@ -545,8 +538,7 @@ func (r *Runner) githubFetchLatestTagRepo(repo string) (string, error) {
} }
var tags []githubTagData var tags []githubTagData
err = json.Unmarshal(body, &tags) if err := json.Unmarshal(body, &tags); err != nil {
if err != nil {
return "", err return "", err
} }
if len(tags) == 0 { if len(tags) == 0 {

View File

@ -55,8 +55,7 @@ func ReadConfiguration() (*Config, error) {
defer file.Close() defer file.Close()
config := &Config{} config := &Config{}
err = jsoniter.NewDecoder(file).Decode(config) if err := jsoniter.NewDecoder(file).Decode(config); err != nil {
if err != nil {
return nil, err return nil, err
} }
return config, nil return config, nil

View File

@ -113,18 +113,14 @@ var functions = map[string]govaluate.ExpressionFunction{
}, },
"sha256": func(args ...interface{}) (interface{}, error) { "sha256": func(args ...interface{}) (interface{}, error) {
h := sha256.New() h := sha256.New()
_, err := h.Write([]byte(types.ToString(args[0]))) if _, err := h.Write([]byte(types.ToString(args[0]))); err != nil {
if err != nil {
return nil, err return nil, err
} }
return hex.EncodeToString(h.Sum(nil)), nil return hex.EncodeToString(h.Sum(nil)), nil
}, },
"sha1": func(args ...interface{}) (interface{}, error) { "sha1": func(args ...interface{}) (interface{}, error) {
h := sha1.New() h := sha1.New()
_, err := h.Write([]byte(types.ToString(args[0]))) if _, err := h.Write([]byte(types.ToString(args[0]))); err != nil {
if err != nil {
return nil, err return nil, err
} }
return hex.EncodeToString(h.Sum(nil)), nil return hex.EncodeToString(h.Sum(nil)), nil

View File

@ -84,9 +84,7 @@ func (e *Extractor) ExtractJSON(corpus string) map[string]struct{} {
var jsonObj interface{} var jsonObj interface{}
err := json.Unmarshal([]byte(corpus), &jsonObj) if err := json.Unmarshal([]byte(corpus), &jsonObj); err != nil {
if err != nil {
return results return results
} }

View File

@ -20,11 +20,10 @@ func newFileOutputWriter(file string) (*fileWriter, error) {
// WriteString writes an output to the underlying file // WriteString writes an output to the underlying file
func (w *fileWriter) Write(data []byte) error { func (w *fileWriter) Write(data []byte) error {
_, err := w.file.Write(data) if _, err := w.file.Write(data); err != nil {
if err != nil {
return err return err
} }
_, err = w.file.Write([]byte("\n")) _, err := w.file.Write([]byte("\n"))
return err return err
} }

View File

@ -107,8 +107,7 @@ func ParseTemplate(templatePath string) (*templates.Template, error) {
} }
template := &templates.Template{} template := &templates.Template{}
err = yaml.Unmarshal(data, template) if err := yaml.Unmarshal(data, template); err != nil {
if err != nil {
return nil, err return nil, err
} }
parsedTemplatesCache.Store(templatePath, template, nil) parsedTemplatesCache.Store(templatePath, template, nil)

View File

@ -18,8 +18,7 @@ func hash(v interface{}) (string, error) {
sh := sha256.New() sh := sha256.New()
_, err = io.WriteString(sh, string(data)) if _, err = io.WriteString(sh, string(data)); err != nil {
if err != nil {
return "", err return "", err
} }
return hex.EncodeToString(sh.Sum(nil)), nil return hex.EncodeToString(sh.Sum(nil)), nil
@ -28,8 +27,7 @@ func hash(v interface{}) (string, error) {
func marshal(data interface{}) ([]byte, error) { func marshal(data interface{}) ([]byte, error) {
var b bytes.Buffer var b bytes.Buffer
enc := gob.NewEncoder(&b) enc := gob.NewEncoder(&b)
err := enc.Encode(data) if err := enc.Encode(data); err != nil {
if err != nil {
return nil, err return nil, err
} }
@ -38,8 +36,7 @@ func marshal(data interface{}) ([]byte, error) {
func unmarshal(data []byte, obj interface{}) error { func unmarshal(data []byte, obj interface{}) error {
dec := gob.NewDecoder(bytes.NewBuffer(data)) dec := gob.NewDecoder(bytes.NewBuffer(data))
err := dec.Decode(obj) if err := dec.Decode(obj); err != nil {
if err != nil {
return err return err
} }

View File

@ -44,8 +44,7 @@ func (pf *ProjectFile) Get(req []byte) (*http.Response, error) {
var httprecord HTTPRecord var httprecord HTTPRecord
httprecord.Response = newInternalResponse() httprecord.Response = newInternalResponse()
err = unmarshal(data, &httprecord) if err := unmarshal(data, &httprecord); err != nil {
if err != nil {
return nil, err return nil, err
} }

View File

@ -24,8 +24,7 @@ func NewExecuter(requests []protocols.Request, options *protocols.ExecuterOption
// Compile compiles the execution generators preparing any requests possible. // Compile compiles the execution generators preparing any requests possible.
func (e *Executer) Compile() error { func (e *Executer) Compile() error {
for _, request := range e.requests { for _, request := range e.requests {
err := request.Compile(e.options) if err := request.Compile(e.options); err != nil {
if err != nil {
return err return err
} }
} }

View File

@ -71,8 +71,7 @@ func (r *Request) ExecuteWithResults(input string, metadata /*TODO review unused
// isURL tests a string to determine if it is a well-structured url or not. // isURL tests a string to determine if it is a well-structured url or not.
func isURL(toTest string) bool { func isURL(toTest string) bool {
_, err := url.ParseRequestURI(toTest) if _, err := url.ParseRequestURI(toTest); err != nil {
if err != nil {
return false return false
} }
u, err := url.Parse(toTest) u, err := url.Parse(toTest)

View File

@ -18,8 +18,7 @@ func (r *Request) getInputPaths(target string, callback func(string)) error {
// Template input includes a wildcard // Template input includes a wildcard
if strings.Contains(target, "*") && !r.NoRecursive { if strings.Contains(target, "*") && !r.NoRecursive {
err := r.findGlobPathMatches(target, processed, callback) if err := r.findGlobPathMatches(target, processed, callback); err != nil {
if err != nil {
return errors.Wrap(err, "could not find glob matches") return errors.Wrap(err, "could not find glob matches")
} }
return nil return nil
@ -38,8 +37,7 @@ func (r *Request) getInputPaths(target string, callback func(string)) error {
} }
// Recursively walk down the Templates directory and run all // Recursively walk down the Templates directory and run all
// the template file checks // the template file checks
err = r.findDirectoryMatches(target, processed, callback) if err := r.findDirectoryMatches(target, processed, callback); err != nil {
if err != nil {
return errors.Wrap(err, "could not find directory matches") return errors.Wrap(err, "could not find directory matches")
} }
return nil return nil

View File

@ -37,18 +37,18 @@ func (i *Instance) Run(baseURL *url.URL, actions []*Action, timeout time.Duratio
} }
createdPage.router = router createdPage.router = router
err = page.SetViewport(&proto.EmulationSetDeviceMetricsOverride{Viewport: &proto.PageViewport{ if err := page.SetViewport(&proto.EmulationSetDeviceMetricsOverride{Viewport: &proto.PageViewport{
Scale: 1, Scale: 1,
Width: float64(1920), Width: float64(1920),
Height: float64(1080), Height: float64(1080),
}}) }}); err != nil {
if err != nil {
return nil, nil, err return nil, nil, err
} }
_, err = page.SetExtraHeaders([]string{"Accept-Language", "en, en-GB, en-us;"})
if err != nil { if _, err := page.SetExtraHeaders([]string{"Accept-Language", "en, en-GB, en-us;"}); err != nil {
return nil, nil, err return nil, nil, err
} }
go router.Run() go router.Run()
data, err := createdPage.ExecuteActions(baseURL, actions) data, err := createdPage.ExecuteActions(baseURL, actions)
if err != nil { if err != nil {

View File

@ -176,8 +176,7 @@ func (p *Page) NavigateURL(action *Action, out map[string]string, parsed *url.UR
values["BaseURL"] = parsedString values["BaseURL"] = parsedString
final := fasttemplate.ExecuteStringStd(URL, "{{", "}}", values) final := fasttemplate.ExecuteStringStd(URL, "{{", "}}", values)
err := p.page.Navigate(final) if err := p.page.Navigate(final); err != nil {
if err != nil {
return errors.Wrap(err, "could not navigate") return errors.Wrap(err, "could not navigate")
} }
return nil return nil

View File

@ -418,8 +418,7 @@ func (r *Request) executeRequest(reqURL string, request *generatedRequest, previ
// if nuclei-project is enabled store the response if not previously done // if nuclei-project is enabled store the response if not previously done
if r.options.ProjectFile != nil && !fromcache { if r.options.ProjectFile != nil && !fromcache {
err := r.options.ProjectFile.Set(dumpedRequest, resp, data) if err := r.options.ProjectFile.Set(dumpedRequest, resp, data); err != nil {
if err != nil {
return errors.Wrap(err, "could not store in project file") return errors.Wrap(err, "could not store in project file")
} }
} }

View File

@ -38,8 +38,7 @@ func (r *Request) ExecuteWithResults(input string, metadata /*TODO review unused
actualAddress = net.JoinHostPort(actualAddress, kv.port) actualAddress = net.JoinHostPort(actualAddress, kv.port)
} }
err = r.executeAddress(actualAddress, address, input, kv.tls, previous, callback) if err := r.executeAddress(actualAddress, address, input, kv.tls, previous, callback); err != nil {
if err != nil {
gologger.Verbose().Label("ERR").Msgf("Could not make network request for %s: %s\n", actualAddress, err) gologger.Verbose().Label("ERR").Msgf("Could not make network request for %s: %s\n", actualAddress, err)
continue continue
} }
@ -138,8 +137,7 @@ func (r *Request) executeRequestWithPayloads(actualAddress, address, input strin
} }
reqBuilder.Write(finalData) reqBuilder.Write(finalData)
_, err = conn.Write(finalData) if _, err := conn.Write(finalData); err != nil {
if err != nil {
r.options.Output.Request(r.options.TemplateID, address, "network", err) r.options.Output.Request(r.options.TemplateID, address, "network", err)
r.options.Progress.IncrementFailedRequestsBy(1) r.options.Progress.IncrementFailedRequestsBy(1)
return errors.Wrap(err, "could not write request to server") return errors.Wrap(err, "could not write request to server")

View File

@ -17,8 +17,7 @@ func (r *Request) getInputPaths(target string, callback func(string)) error {
// Template input includes a wildcard // Template input includes a wildcard
if strings.Contains(target, "*") { if strings.Contains(target, "*") {
err := r.findGlobPathMatches(target, processed, callback) if err := r.findGlobPathMatches(target, processed, callback); err != nil {
if err != nil {
return errors.Wrap(err, "could not find glob matches") return errors.Wrap(err, "could not find glob matches")
} }
return nil return nil
@ -35,8 +34,7 @@ func (r *Request) getInputPaths(target string, callback func(string)) error {
// Recursively walk down the Templates directory and run all // Recursively walk down the Templates directory and run all
// the template file checks // the template file checks
err = r.findDirectoryMatches(target, processed, callback) if err := r.findDirectoryMatches(target, processed, callback); err != nil {
if err != nil {
return errors.Wrap(err, "could not find directory matches") return errors.Wrap(err, "could not find directory matches")
} }
return nil return nil

View File

@ -55,8 +55,7 @@ func (i *Exporter) Export(event *output.ResultEvent) error {
dataBuilder.WriteString(description) dataBuilder.WriteString(description)
data := dataBuilder.Bytes() data := dataBuilder.Bytes()
err := ioutil.WriteFile(filepath.Join(i.directory, finalFilename), data, 0644) return ioutil.WriteFile(filepath.Join(i.directory, finalFilename), data, 0644)
return err
} }
// Close closes the exporter after operation // Close closes the exporter after operation

View File

@ -56,8 +56,7 @@ func Parse(filePath string, preprocessor Preprocessor, options protocols.Execute
data = preprocessor.Process(data) data = preprocessor.Process(data)
} }
err = yaml.UnmarshalStrict(data, template) if err := yaml.UnmarshalStrict(data, template); err != nil {
if err != nil {
if !fieldErrorRegexp.MatchString(err.Error()) { if !fieldErrorRegexp.MatchString(err.Error()) {
return nil, err return nil, err
} }
@ -141,8 +140,7 @@ func Parse(filePath string, preprocessor Preprocessor, options protocols.Execute
template.Executer = executer.NewExecuter(requests, &options) template.Executer = executer.NewExecuter(requests, &options)
} }
if template.Executer != nil { if template.Executer != nil {
err := template.Executer.Compile() if err := template.Executer.Compile(); err != nil {
if err != nil {
return nil, errors.Wrap(err, "could not compile request") return nil, errors.Wrap(err, "could not compile request")
} }
template.TotalRequests += template.Executer.Requests() template.TotalRequests += template.Executer.Requests()

View File

@ -15,8 +15,7 @@ func (w *Workflow) RunWorkflow(input string) bool {
for _, template := range w.Workflows { for _, template := range w.Workflows {
swg.Add() swg.Add()
func(template *WorkflowTemplate) { func(template *WorkflowTemplate) {
err := w.runWorkflowStep(template, input, results, &swg) if err := w.runWorkflowStep(template, input, results, &swg); err != nil {
if err != nil {
gologger.Warning().Msgf("[%s] Could not execute workflow step: %s\n", template.Template, err) gologger.Warning().Msgf("[%s] Could not execute workflow step: %s\n", template.Template, err)
} }
swg.Done() swg.Done()
@ -116,8 +115,7 @@ func (w *Workflow) runWorkflowStep(template *WorkflowTemplate, input string, res
swg.Add() swg.Add()
go func(template *WorkflowTemplate) { go func(template *WorkflowTemplate) {
err := w.runWorkflowStep(template, input, results, swg) if err := w.runWorkflowStep(template, input, results, swg); err != nil {
if err != nil {
gologger.Warning().Msgf("[%s] Could not execute workflow step: %s\n", template.Template, err) gologger.Warning().Msgf("[%s] Could not execute workflow step: %s\n", template.Template, err)
} }
swg.Done() swg.Done()