66 lines
1.7 KiB
Go
Raw Normal View History

package disk
import (
"bytes"
"io/ioutil"
"os"
"path"
"strings"
"github.com/projectdiscovery/nuclei/v2/pkg/output"
"github.com/projectdiscovery/nuclei/v2/pkg/reporting/format"
)
type Exporter struct {
directory string
options *Options
}
// Options contains the configuration options for github issue tracker client
type Options struct {
// Directory is the directory to export found results to
Directory string `yaml:"directory"`
}
// New creates a new disk exporter integration client based on options.
func New(options *Options) (*Exporter, error) {
directory := options.Directory
if options.Directory == "" {
dir, err := os.Getwd()
if err != nil {
return nil, err
}
directory = dir
}
_ = os.MkdirAll(directory, os.ModePerm)
return &Exporter{options: options, directory: directory}, nil
}
// Export exports a passed result event to disk
func (i *Exporter) Export(event *output.ResultEvent) error {
summary := format.Summary(event)
description := format.MarkdownDescription(event)
filenameBuilder := &strings.Builder{}
2021-03-22 14:28:29 +05:30
filenameBuilder.WriteString(event.TemplateID)
filenameBuilder.WriteString("-")
2021-03-22 14:48:11 +05:30
filenameBuilder.WriteString(strings.ReplaceAll(strings.ReplaceAll(event.Matched, "/", "_"), ":", "_"))
filenameBuilder.WriteString(".md")
finalFilename := filenameBuilder.String()
dataBuilder := &bytes.Buffer{}
dataBuilder.WriteString("### ")
dataBuilder.WriteString(summary)
dataBuilder.WriteString("\n---\n")
dataBuilder.WriteString(description)
data := dataBuilder.Bytes()
err := ioutil.WriteFile(path.Join(i.directory, finalFilename), data, 0644)
return err
}
2021-06-05 18:01:08 +05:30
// Close closes the exporter after operation
func (i *Exporter) Close() error {
return nil
}