-
Notifications
You must be signed in to change notification settings - Fork 76
/
structures.go
executable file
·130 lines (115 loc) · 3.76 KB
/
structures.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
/*
* Copyright 2021 American Express
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package scan
import (
"regexp"
)
//Rules is the exported definition of the Rules structure for Earlybird
type Rules struct {
Rules []Rule `json:"rules"`
Searcharea string `json:"Searcharea"`
}
//Rule Each module config is a set of rules
type Rule struct {
Code, Severity, Confidence, SolutionID int
Pattern, Caption, Category, Solution, Postprocess string
CompiledPattern *regexp.Regexp
Searcharea string
CWE []string
Example string
}
//Hit is a match in a file against a specific rule
type Hit struct {
Code int `json:"code"`
Filename string `json:"filename"`
Caption string `json:"caption"`
Category string `json:"category"`
MatchValue string `json:"match_value"`
LineValue string `json:"line_value"`
Solution string `json:"solution"`
Line int `json:"line"`
Severity string `json:"severity"`
SeverityID int `json:"severity_id"`
Confidence string `json:"confidence"`
ConfidenceID int `json:"confidence_id"`
Labels []string `json:"labels"`
CWE []string `json:"cwe"`
Time string `json:"time"`
}
// File to scan
type File struct {
Name string
Path string
Lines []Line
}
// Line in a file to scan
type Line struct {
LineNum int
LineValue, FilePath, FileName string
}
// Report is the Earlybird end output
type Report struct {
Version string `json:"version"`
Skipped []string `json:"skipped"`
Ignore []string `json:"ignore"`
Threshold int `json:"threshold"`
Modules []string `json:"modules"`
Hits []Hit `json:"hits"`
HitCount int `json:"hit_count"`
FilesScanned int `json:"files_scanned"`
RulesObserved int `json:"rules_observed"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
Duration string `json:"duration"`
}
//WorkJob As we add jobs to the pool, they need to contain the line being scanned and the file content (in Lines)
type WorkJob struct {
WorkLine Line
FileLines []Line
}
// FalsePositives are the rules to match false positives post process
type FalsePositives struct {
FalsePositives []FalsePositive `json:"rules"`
}
//FalsePositive is a rule to match false positives post process
type FalsePositive struct {
Codes []int
Pattern string
CompiledPattern *regexp.Regexp
FileExtensions []string
UseFullLine bool
}
// Solutions to each rule / finding
type Solutions struct {
Solutions []Solution `json:"solutions"`
}
//Solution display text for a solution
type Solution struct {
ID int `json:"id"`
Text string `json:"text"`
}
//LabelConfig Rule for applying labels to hits based on context
type LabelConfig struct {
Label string `json:"label"`
Keys []string `json:"keys"`
Multiline bool `json:"multiline"`
Category string `json:"category"`
Codes []int `json:"codes"`
}
//LabelConfigs Rules for applying labels to hits based on context
type LabelConfigs struct {
Labels []LabelConfig `json:"Labels"`
}