Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/protocols/utils/fields.go
2070 views
1
package utils
2
3
import (
4
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/contextargs"
5
iputil "github.com/projectdiscovery/utils/ip"
6
urlutil "github.com/projectdiscovery/utils/url"
7
)
8
9
// JsonFields contains additional metadata fields for JSON output
10
type JsonFields struct {
11
Host string `json:"host,omitempty"`
12
Path string `json:"path,omitempty"`
13
Port string `json:"port,omitempty"`
14
Ip string `json:"ip,omitempty"`
15
Scheme string `json:"scheme,omitempty"`
16
URL string `json:"url,omitempty"`
17
}
18
19
// GetJsonFields returns the json fields for the request
20
func GetJsonFieldsFromURL(URL string) JsonFields {
21
parsed, err := urlutil.Parse(URL)
22
if err != nil {
23
return JsonFields{}
24
}
25
fields := JsonFields{
26
Port: parsed.Port(),
27
Scheme: parsed.Scheme,
28
URL: parsed.String(),
29
Path: parsed.Path,
30
}
31
if fields.Port == "" {
32
fields.Port = "80"
33
if fields.Scheme == "https" {
34
fields.Port = "443"
35
}
36
}
37
if iputil.IsIP(parsed.Host) {
38
fields.Ip = parsed.Host
39
}
40
41
fields.Host = parsed.Host
42
return fields
43
}
44
45
// GetJsonFieldsFromMetaInput returns the json fields for the request
46
func GetJsonFieldsFromMetaInput(ctx *contextargs.MetaInput) JsonFields {
47
input := ctx.Input
48
fields := JsonFields{
49
Ip: ctx.CustomIP,
50
}
51
parsed, err := urlutil.Parse(input)
52
if err != nil {
53
return fields
54
}
55
fields.Port = parsed.Port()
56
fields.Scheme = parsed.Scheme
57
fields.URL = parsed.String()
58
fields.Path = parsed.Path
59
if fields.Port == "" {
60
fields.Port = "80"
61
if fields.Scheme == "https" {
62
fields.Port = "443"
63
}
64
}
65
if iputil.IsIP(parsed.Host) {
66
fields.Ip = parsed.Host
67
}
68
69
fields.Host = parsed.Host
70
return fields
71
}
72
73