Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/output/format_screen.go
2070 views
1
package output
2
3
import (
4
"bytes"
5
"strconv"
6
"strings"
7
8
"github.com/projectdiscovery/nuclei/v3/pkg/types"
9
mapsutil "github.com/projectdiscovery/utils/maps"
10
)
11
12
// formatScreen formats the output for showing on screen.
13
func (w *StandardWriter) formatScreen(output *ResultEvent) []byte {
14
builder := &bytes.Buffer{}
15
16
if !w.noMetadata {
17
if w.timestamp {
18
builder.WriteRune('[')
19
builder.WriteString(w.aurora.Cyan(output.Timestamp.Format("2006-01-02 15:04:05")).String())
20
builder.WriteString("] ")
21
}
22
builder.WriteRune('[')
23
builder.WriteString(w.aurora.BrightGreen(output.TemplateID).String())
24
25
if output.MatcherName != "" {
26
builder.WriteString(":")
27
builder.WriteString(w.aurora.BrightGreen(output.MatcherName).Bold().String())
28
} else if output.ExtractorName != "" {
29
builder.WriteString(":")
30
builder.WriteString(w.aurora.BrightGreen(output.ExtractorName).Bold().String())
31
}
32
33
if w.matcherStatus {
34
builder.WriteString("] [")
35
if !output.MatcherStatus {
36
builder.WriteString(w.aurora.Red("failed").String())
37
} else {
38
builder.WriteString(w.aurora.Green("matched").String())
39
}
40
}
41
42
if output.GlobalMatchers {
43
builder.WriteString("] [")
44
builder.WriteString(w.aurora.BrightMagenta("global").String())
45
}
46
47
builder.WriteString("] [")
48
builder.WriteString(w.aurora.BrightBlue(output.Type).String())
49
builder.WriteString("] ")
50
51
builder.WriteString("[")
52
builder.WriteString(w.severityColors(output.Info.SeverityHolder.Severity))
53
builder.WriteString("] ")
54
}
55
if output.Matched != "" {
56
builder.WriteString(output.Matched)
57
} else {
58
builder.WriteString(output.Host)
59
}
60
61
// If any extractors, write the results
62
if len(output.ExtractedResults) > 0 {
63
builder.WriteString(" [")
64
65
for i, item := range output.ExtractedResults {
66
// trim trailing space
67
// quote non-ascii and non printable characters and then
68
// unquote quotes (`"`) for readability
69
item = strings.TrimSpace(item)
70
item = strconv.QuoteToASCII(item)
71
item = strings.ReplaceAll(item, `\"`, `"`)
72
73
builder.WriteString(w.aurora.BrightCyan(item).String())
74
75
if i != len(output.ExtractedResults)-1 {
76
builder.WriteRune(',')
77
}
78
}
79
builder.WriteString("]")
80
}
81
82
if len(output.Lines) > 0 {
83
builder.WriteString(" [LN: ")
84
85
for i, line := range output.Lines {
86
builder.WriteString(strconv.Itoa(line))
87
88
if i != len(output.Lines)-1 {
89
builder.WriteString(",")
90
}
91
}
92
builder.WriteString("]")
93
}
94
95
// Write meta if any
96
if len(output.Metadata) > 0 {
97
builder.WriteString(" [")
98
99
first := true
100
// sort to get predictable output
101
for _, name := range mapsutil.GetSortedKeys(output.Metadata) {
102
value := output.Metadata[name]
103
if !first {
104
builder.WriteRune(',')
105
}
106
first = false
107
108
builder.WriteString(w.aurora.BrightYellow(name).String())
109
builder.WriteRune('=')
110
builder.WriteString(w.aurora.BrightYellow(strconv.QuoteToASCII(types.ToString(value))).String())
111
}
112
builder.WriteString("]")
113
}
114
115
// If it is a fuzzing output, enrich with additional
116
// metadata for the match.
117
if output.IsFuzzingResult {
118
if output.FuzzingParameter != "" {
119
builder.WriteString(" [")
120
builder.WriteString(output.FuzzingPosition)
121
builder.WriteRune(':')
122
builder.WriteString(w.aurora.BrightMagenta(output.FuzzingParameter).String())
123
builder.WriteString("]")
124
}
125
126
builder.WriteString(" [")
127
builder.WriteString(output.FuzzingMethod)
128
builder.WriteString("]")
129
}
130
return builder.Bytes()
131
}
132
133