diff --git a/cmd/docgen/docgen.go b/cmd/docgen/docgen.go index f9dc8278e..51c2a195d 100644 --- a/cmd/docgen/docgen.go +++ b/cmd/docgen/docgen.go @@ -6,53 +6,58 @@ import ( "os" "reflect" "regexp" - "strings" "github.com/invopop/jsonschema" - "github.com/projectdiscovery/nuclei/v3/pkg/templates" "github.com/projectdiscovery/nuclei/v3/pkg/utils/json" ) var pathRegex = regexp.MustCompile(`github\.com/projectdiscovery/nuclei/v3/(?:internal|pkg)/(?:.*/)?([A-Za-z.]+)`) -func main() { - // Generate yaml syntax documentation - data, err := templates.GetTemplateDoc().Encode() +func writeToFile(filename string, data []byte) { + file, err := os.Create(filename) if err != nil { - log.Fatalf("Could not encode docs: %s\n", err) + log.Fatalf("Could not create file %s: %s\n", filename, err) } + defer file.Close() + _, err = file.Write(data) + if err != nil { + log.Fatalf("Could not write to file %s: %s\n", filename, err) + } +} + +func main() { if len(os.Args) < 3 { log.Fatalf("syntax: %s md-docs-file jsonschema-file\n", os.Args[0]) } - err = os.WriteFile(os.Args[1], data, 0644) + // Generate YAML documentation + data, err := templates.GetTemplateDoc().Encode() if err != nil { - log.Fatalf("Could not write docs: %s\n", err) + log.Fatalf("Could not encode docs: %s\n", err) + } + writeToFile(os.Args[1], data) + + // Generate JSON Schema + r := &jsonschema.Reflector{ + Namer: func(t reflect.Type) string { + if t.Kind() == reflect.Slice { + return "" + } + return t.String() + }, } - // Generate jsonschema - r := &jsonschema.Reflector{} - r.Namer = func(r reflect.Type) string { - if r.Kind() == reflect.Slice { - return "" - } - return r.String() - } jsonschemaData := r.Reflect(&templates.Template{}) var buf bytes.Buffer encoder := json.NewEncoder(&buf) encoder.SetIndent("", " ") - _ = encoder.Encode(jsonschemaData) + if err := encoder.Encode(jsonschemaData); err != nil { + log.Fatalf("Could not encode JSON schema: %s\n", err) + } - schema := buf.String() - for _, match := range pathRegex.FindAllStringSubmatch(schema, -1) { - schema = strings.ReplaceAll(schema, match[0], match[1]) - } - err = os.WriteFile(os.Args[2], []byte(schema), 0644) - if err != nil { - log.Fatalf("Could not write jsonschema: %s\n", err) - } + schema := pathRegex.ReplaceAllString(buf.String(), "$1") + writeToFile(os.Args[2], []byte(schema)) }