View Javadoc
1   /*
2    * This file is part of dependency-check-core.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   * Copyright (c) 2016 Jeremy Long. All Rights Reserved.
17   */
18  package org.owasp.dependencycheck.xml.hints;
19  
20  import java.util.ArrayList;
21  import java.util.List;
22  import javax.annotation.concurrent.NotThreadSafe;
23  import org.owasp.dependencycheck.dependency.Confidence;
24  import org.owasp.dependencycheck.dependency.Evidence;
25  import org.owasp.dependencycheck.xml.suppression.PropertyType;
26  
27  /**
28   * A collection of product and vendor evidence to match; if any evidence is
29   * matched the addVendor and addProduct evidence should be added to the
30   * dependency.
31   *
32   * @author Jeremy Long
33   */
34  @NotThreadSafe
35  public class HintRule {
36  
37      /**
38       * The list of file names to match.
39       */
40      private final List<PropertyType> fileNames = new ArrayList<>();
41      /**
42       * The list of vendor evidence that is being matched.
43       */
44      private final List<EvidenceMatcher> givenVendor = new ArrayList<>();
45      /**
46       * The list of product evidence that is being matched.
47       */
48      private final List<EvidenceMatcher> givenProduct = new ArrayList<>();
49      /**
50       * The list of product evidence that is being matched.
51       */
52      private final List<EvidenceMatcher> givenVersion = new ArrayList<>();
53      /**
54       * The list of vendor hints to add.
55       */
56      private final List<Evidence> addVendor = new ArrayList<>();
57      /**
58       * The list of product evidence to add.
59       */
60      private final List<Evidence> addProduct = new ArrayList<>();
61      /**
62       * The list of version evidence to add.
63       */
64      private final List<Evidence> addVersion = new ArrayList<>();
65  
66      /**
67       * The list of vendor hints to remove.
68       */
69      private final List<EvidenceMatcher> removeVendor = new ArrayList<>();
70      /**
71       * The list of product evidence to remove.
72       */
73      private final List<EvidenceMatcher> removeProduct = new ArrayList<>();
74      /**
75       * The list of version evidence to remove.
76       */
77      private final List<EvidenceMatcher> removeVersion = new ArrayList<>();
78  
79      /**
80       * Adds the filename evidence to the collection.
81       *
82       * @param filename the filename to add
83       */
84      public void addFilename(PropertyType filename) {
85          this.fileNames.add(filename);
86      }
87  
88      /**
89       * Returns the list of fileName evidence to match against.
90       *
91       * @return the list of fileName evidence to match against
92       */
93      public List<PropertyType> getFileNames() {
94          return fileNames;
95      }
96  
97      /**
98       * Adds a given product to the list of evidence to matched.
99       *
100      * @param source the source of the evidence
101      * @param name the name of the evidence
102      * @param value the value of the evidence
103      * @param regex whether value is a regex
104      * @param confidence the confidence of the evidence
105      */
106     public void addGivenProduct(String source, String name, String value, boolean regex, Confidence confidence) {
107         givenProduct.add(new EvidenceMatcher(source, name, value, regex, confidence));
108     }
109 
110     /**
111      * Get the value of givenProduct.
112      *
113      * @return the value of givenProduct
114      */
115     public List<EvidenceMatcher> getGivenProduct() {
116         return givenProduct;
117     }
118 
119     /**
120      * Adds a given vendors to the list of evidence to matched.
121      *
122      * @param source the source of the evidence
123      * @param name the name of the evidence
124      * @param value the value of the evidence
125      * @param regex whether value is a regex
126      * @param confidence the confidence of the evidence
127      */
128     public void addGivenVendor(String source, String name, String value, boolean regex, Confidence confidence) {
129         givenVendor.add(new EvidenceMatcher(source, name, value, regex, confidence));
130     }
131 
132     /**
133      * Get the value of givenVendor.
134      *
135      * @return the value of givenVendor
136      */
137     public List<EvidenceMatcher> getGivenVendor() {
138         return givenVendor;
139     }
140 
141     /**
142      * Adds a given product to the list of evidence to add when matched.
143      *
144      * @param source the source of the evidence
145      * @param name the name of the evidence
146      * @param value the value of the evidence
147      * @param confidence the confidence of the evidence
148      */
149     public void addAddProduct(String source, String name, String value, Confidence confidence) {
150         addProduct.add(new Evidence(source, name, value, confidence, true));
151     }
152 
153     /**
154      * Get the value of addProduct.
155      *
156      * @return the value of addProduct
157      */
158     public List<Evidence> getAddProduct() {
159         return addProduct;
160     }
161 
162     /**
163      * Adds a given version to the list of evidence to add when matched.
164      *
165      * @param source the source of the evidence
166      * @param name the name of the evidence
167      * @param value the value of the evidence
168      * @param confidence the confidence of the evidence
169      */
170     public void addAddVersion(String source, String name, String value, Confidence confidence) {
171         addVersion.add(new Evidence(source, name, value, confidence, true));
172     }
173 
174     /**
175      * Get the value of addVersion.
176      *
177      * @return the value of addVersion
178      */
179     public List<Evidence> getAddVersion() {
180         return addVersion;
181     }
182 
183     /**
184      * Adds a given vendor to the list of evidence to add when matched.
185      *
186      * @param source the source of the evidence
187      * @param name the name of the evidence
188      * @param value the value of the evidence
189      * @param confidence the confidence of the evidence
190      */
191     public void addAddVendor(String source, String name, String value, Confidence confidence) {
192         addVendor.add(new Evidence(source, name, value, confidence, true));
193     }
194 
195     /**
196      * Get the value of addVendor.
197      *
198      * @return the value of addVendor
199      */
200     public List<Evidence> getAddVendor() {
201         return addVendor;
202     }
203 
204     /**
205      * Adds a given vendor to the list of evidence to remove when matched.
206      *
207      * @param source the source of the evidence
208      * @param name the name of the evidence
209      * @param value the value of the evidence
210      * @param regex whether value is a regex
211      * @param confidence the confidence of the evidence
212      */
213     public void addRemoveVendor(String source, String name, String value, boolean regex, Confidence confidence) {
214         removeVendor.add(new EvidenceMatcher(source, name, value, regex, confidence));
215     }
216     /**
217      * Get the value of removeVendor.
218      *
219      * @return the value of removeVendor
220      */
221     public List<EvidenceMatcher> getRemoveVendor() {
222         return removeVendor;
223     }
224     /**
225      * Adds a given product to the list of evidence to remove when matched.
226      *
227      * @param source the source of the evidence
228      * @param name the name of the evidence
229      * @param value the value of the evidence
230      * @param regex whether value is a regex
231      * @param confidence the confidence of the evidence
232      */
233     public void addRemoveProduct(String source, String name, String value, boolean regex, Confidence confidence) {
234         removeProduct.add(new EvidenceMatcher(source, name, value, regex, confidence));
235     }
236     /**
237      * Get the value of removeProduct.
238      *
239      * @return the value of removeProduct
240      */
241     public List<EvidenceMatcher> getRemoveProduct() {
242         return removeProduct;
243     }
244     /**
245      * Adds a given version to the list of evidence to remove when matched.
246      *
247      * @param source the source of the evidence
248      * @param name the name of the evidence
249      * @param value the value of the evidence
250      * @param regex whether value is a regex
251      * @param confidence the confidence of the evidence
252      */
253     public void addRemoveVersion(String source, String name, String value, boolean regex, Confidence confidence) {
254         removeVersion.add(new EvidenceMatcher(source, name, value, regex, confidence));
255     }
256     /**
257      * Get the value of removeVersion.
258      *
259      * @return the value of removeVersion
260      */
261     public List<EvidenceMatcher> getRemoveVersion() {
262         return removeVersion;
263     }
264     /**
265      * Adds a given version to the list of evidence to match.
266      *
267      * @param source the source of the evidence
268      * @param name the name of the evidence
269      * @param value the value of the evidence
270      * @param regex whether value is a regex
271      * @param confidence the confidence of the evidence
272      */
273     public void addGivenVersion(String source, String name, String value, boolean regex, Confidence confidence) {
274         givenVersion.add(new EvidenceMatcher(source, name, value, regex, confidence));
275     }
276     /**
277      * Get the value of givenVersion.
278      *
279      * @return the value of givenVersion
280      */
281     public List<EvidenceMatcher> getGivenVersion() {
282         return givenVersion;
283     }
284 }