-
Notifications
You must be signed in to change notification settings - Fork 0
/
repository.go
155 lines (134 loc) · 4.63 KB
/
repository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package sc
import (
"net"
"strconv"
"strings"
"time"
)
// Repository https://docs.tenable.com/sccv/api/Repository.html
type Repository struct {
ID string `json:"id" sc:"id"`
Name string `json:"name" sc:"name"`
Description string `json:"description" sc:"description"`
Type string `json:"type" sc:"type"`
DataFormat string `json:"dataFormat" sc:"dataFormat"`
VulnCount int `json:"-" sc:"vulnCount"`
VulnCountStr string `json:"vulnCount"`
RemoteID string `json:"remoteID" sc:"remoteID"`
RemoteIP string `json:"remoteIP" sc:"remoteIP"`
IsRunning bool `json:"-" sc:"running"`
Running string `json:"running"`
DownloadFormat string `json:"downloadFormat" sc:"downloadFormat"`
LastSyncTime time.Time `json:"-" sc:"lastSyncTime"`
LastSyncTimeStr string `json:"lastSyncTime"`
LastVulnUpdate time.Time `json:"-" sc:"lastVulnUpdate"`
LastVulnUpdateStr string `json:"lastVulnUpdate"`
CreatedTime time.Time `json:"-" sc:"createdTime"`
CreatedTimeStr string `json:"createdTime"`
ModifiedTime time.Time `json:"-" sc:"modifiedTime"`
ModifiedTimeStr string `json:"modifiedTime"`
Organizations []Organization `json:"organization" sc:"organizations"`
TypeFields repositoryTypeFields `json:"typeFields" sc:"typeFields"`
}
type repositoryTypeFields struct {
LastVulnUpdate time.Time `json:"-" sc:"lastVulnUpdate"`
LastVulnUpdateStr string `json:"lastVulnUpdate"`
VulnCount int `json:"-" sc:"vulnCount"`
VulnCountStr string `json:"vulnCount"`
NessusSchedule map[string]string `json:"nessusSchedule" sc:"nessusSchedule"`
Correlation []map[string]string `json:"correlation" sc:"correlation"`
IPRange []*net.IPNet `json:"-" sc:"ipRange"`
IPRangeStr string `json:"ipRange"`
IPCount int `json:"-" sc:"ipCount"`
IPCountStr string `json:"ipCount"`
RunningNessusStr string `json:"runningNessus"`
RunningNessus bool `json:"-" sc:"runningNessus"`
LastGenerateNessusTime time.Time `json:"-" sc:"lastGenerateNessusTime"`
LastGenerateNessusTimeStr string `json:"lastGenerateNessusTime"`
TrendingDaysStr string `json:"trendingDays"`
TrendingDays int `json:"-" sc:"trendingDays"`
TrendWithRawStr string `json:"trendWithRaw"`
TrendWithRaw bool `json:"-" sc:"trendWithRaw"`
}
func (r *Repository) readAttr() error {
var err error
r.VulnCount, err = strconv.Atoi(r.VulnCountStr)
if err != nil {
return err
}
err = readBool(&r.Running, &r.IsRunning)
if err != nil {
return err
}
err = readTime(&r.LastSyncTimeStr, &r.LastSyncTime)
if err != nil {
return err
}
err = readTime(&r.LastVulnUpdateStr, &r.LastVulnUpdate)
if err != nil {
return err
}
err = readTime(&r.CreatedTimeStr, &r.CreatedTime)
if err != nil {
return err
}
err = readTime(&r.ModifiedTimeStr, &r.ModifiedTime)
if err != nil {
return err
}
for _, o := range r.Organizations {
err := o.readAttr()
if err != nil {
return err
}
}
err = r.TypeFields.readAttr()
if err != nil {
return err
}
return nil
}
func (f *repositoryTypeFields) readAttr() error {
// read time.Time
err := readTime(&f.LastVulnUpdateStr, &f.LastVulnUpdate)
if err != nil {
return err
}
err = readTime(&f.LastGenerateNessusTimeStr, &f.LastGenerateNessusTime)
if err != nil {
return err
}
// read integers
f.VulnCount, err = strconv.Atoi(f.VulnCountStr)
if err != nil {
return err
}
f.IPCount, err = strconv.Atoi(f.IPCountStr)
if err != nil {
return err
}
f.TrendingDays, err = strconv.Atoi(f.TrendingDaysStr)
if err != nil {
return err
}
// read Booleans
err = readBool(&f.RunningNessusStr, &f.RunningNessus)
if err != nil {
return err
}
err = readBool(&f.TrendWithRawStr, &f.TrendWithRaw)
if err != nil {
return err
}
// read list of IP nets
var nets []*net.IPNet
for _, cidr := range strings.Split(f.IPRangeStr, ",") {
_, n, err := net.ParseCIDR(cidr)
if err != nil {
return err
}
nets = append(nets, n)
}
f.IPRange = nets
return nil
}