1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.owasp.dependencycheck.taskdefs;
19
20 import org.apache.tools.ant.BuildException;
21 import org.apache.tools.ant.Project;
22 import org.owasp.dependencycheck.Engine;
23 import org.owasp.dependencycheck.data.nvdcve.DatabaseException;
24 import org.owasp.dependencycheck.data.update.exception.UpdateException;
25 import org.owasp.dependencycheck.utils.Downloader;
26 import org.owasp.dependencycheck.utils.InvalidSettingException;
27 import org.owasp.dependencycheck.utils.Settings;
28 import org.slf4j.impl.StaticLoggerBinder;
29
30
31
32
33
34
35
36
37
38
39 @SuppressWarnings("common-java:DuplicatedBlocks")
40 public class Update extends Purge {
41
42
43
44
45 private String retireJsUrl;
46
47
48
49 private String retireJsUrlUser;
50
51
52
53 private String retireJsUrlPassword;
54
55
56
57 private String retireJsUrlBearerToken;
58
59
60
61
62 private Boolean retireJsForceUpdate;
63
64
65
66 private Boolean knownExploitedEnabled;
67
68
69
70 private String knownExploitedUrl;
71
72
73
74 private Integer knownExploitedValidForHours;
75
76
77
78 private String knownExploitedUser;
79
80
81
82 private String knownExploitedPassword;
83
84
85
86 private String knownExploitedBearerToken;
87
88
89
90 private String nvdApiEndpoint;
91
92
93
94 private String nvdApiKey;
95
96
97
98 private Integer nvdMaxRetryCount;
99
100
101
102 private Integer nvdValidForHours;
103
104
105
106 private String nvdDatafeedUrl;
107
108
109
110 private String nvdUser;
111
112
113
114 private String nvdPassword;
115
116
117
118 private String nvdBearerToken;
119
120
121
122 private Integer nvdApiDelay;
123
124
125
126
127 private Integer nvdApiResultsPerPage;
128
129
130
131
132 private String proxyServer;
133
134
135
136 private String proxyPort;
137
138
139
140 private String proxyUsername;
141
142
143
144 private String proxyPassword;
145
146
147
148 private String nonProxyHosts;
149
150
151
152 private String connectionTimeout;
153
154
155
156 private String readTimeout;
157
158
159
160 private String databaseDriverName;
161
162
163
164 private String databaseDriverPath;
165
166
167
168 private String connectionString;
169
170
171
172 private String databaseUser;
173
174
175
176 private String databasePassword;
177
178
179
180
181 private Integer hostedSuppressionsValidForHours;
182
183
184
185
186
187 private String hostedSuppressionsUser;
188
189
190
191
192
193 private String hostedSuppressionsPassword;
194
195
196
197
198
199 private String hostedSuppressionsBearerToken;
200
201
202
203
204 private Boolean hostedSuppressionsForceUpdate;
205
206
207
208 private Boolean hostedSuppressionsEnabled;
209
210
211
212 private String hostedSuppressionsUrl = null;
213
214
215
216 private Boolean retireJsAnalyzerEnabled;
217
218
219
220
221 public Update() {
222 super();
223
224
225 StaticLoggerBinder.getSingleton().setTask(this);
226 }
227
228
229
230
231
232
233 public void setNvdApiEndpoint(String nvdApiEndpoint) {
234 this.nvdApiEndpoint = nvdApiEndpoint;
235 }
236
237
238
239
240
241
242 public void setNvdApiKey(String nvdApiKey) {
243 this.nvdApiKey = nvdApiKey;
244 }
245
246
247
248
249
250
251 public void setNvdMaxRetryCount(Integer nvdMaxRetryCount) {
252 if (nvdMaxRetryCount > 0) {
253 this.nvdMaxRetryCount = nvdMaxRetryCount;
254 } else {
255 throw new BuildException("Invalid setting: `nvdMaxRetryCount` must be greater than zero");
256 }
257 }
258
259
260
261
262
263
264 public void setNvdValidForHours(int nvdValidForHours) {
265 if (nvdValidForHours >= 0) {
266 this.nvdValidForHours = nvdValidForHours;
267 } else {
268 throw new BuildException("Invalid setting: `nvdValidForHours` must be 0 or greater");
269 }
270 }
271
272
273
274
275
276
277 public void setNvdDatafeedUrl(String nvdDatafeedUrl) {
278 this.nvdDatafeedUrl = nvdDatafeedUrl;
279 }
280
281
282
283
284
285
286 public void setNvdUser(String nvdUser) {
287 this.nvdUser = nvdUser;
288 }
289
290
291
292
293
294
295 public void setNvdPassword(String nvdPassword) {
296 this.nvdPassword = nvdPassword;
297 }
298
299
300
301
302
303 public void setNvdBearerToken(String nvdBearerToken) {
304 this.nvdBearerToken = nvdBearerToken;
305 }
306
307
308
309
310
311
312 public void setNvdApiDelay(Integer nvdApiDelay) {
313 this.nvdApiDelay = nvdApiDelay;
314 }
315
316
317
318
319
320
321 public void setNvdApiResultsPerPage(Integer nvdApiResultsPerPage) {
322 this.nvdApiResultsPerPage = nvdApiResultsPerPage;
323 }
324
325
326
327
328
329
330 public void setProxyServer(String server) {
331 this.proxyServer = server;
332 }
333
334
335
336
337
338
339 public void setProxyPort(String proxyPort) {
340 this.proxyPort = proxyPort;
341 }
342
343
344
345
346
347
348 public void setProxyUsername(String proxyUsername) {
349 this.proxyUsername = proxyUsername;
350 }
351
352
353
354
355
356
357 public void setProxyPassword(String proxyPassword) {
358 this.proxyPassword = proxyPassword;
359 }
360
361
362
363
364
365
366 public void setNonProxyHosts(String nonProxyHosts) {
367 this.nonProxyHosts = nonProxyHosts;
368 }
369
370
371
372
373
374
375 public void setConnectionTimeout(String connectionTimeout) {
376 this.connectionTimeout = connectionTimeout;
377 }
378
379
380
381
382
383
384 public void setReadTimeout(String readTimeout) {
385 this.readTimeout = readTimeout;
386 }
387
388
389
390
391
392
393 public void setDatabaseDriverName(String databaseDriverName) {
394 this.databaseDriverName = databaseDriverName;
395 }
396
397
398
399
400
401
402 public void setDatabaseDriverPath(String databaseDriverPath) {
403 this.databaseDriverPath = databaseDriverPath;
404 }
405
406
407
408
409
410
411 public void setConnectionString(String connectionString) {
412 this.connectionString = connectionString;
413 }
414
415
416
417
418
419
420 public void setDatabaseUser(String databaseUser) {
421 this.databaseUser = databaseUser;
422 }
423
424
425
426
427
428
429 public void setDatabasePassword(String databasePassword) {
430 this.databasePassword = databasePassword;
431 }
432
433
434
435
436
437
438
439 public void setHostedSuppressionsValidForHours(final Integer hostedSuppressionsValidForHours) {
440 this.hostedSuppressionsValidForHours = hostedSuppressionsValidForHours;
441 }
442
443 public void setHostedSuppressionsUser(String hostedSuppressionsUser) {
444 this.hostedSuppressionsUser = hostedSuppressionsUser;
445 }
446
447 public void setHostedSuppressionsPassword(String hostedSuppressionsPassword) {
448 this.hostedSuppressionsPassword = hostedSuppressionsPassword;
449 }
450
451 public void setHostedSuppressionsBearerToken(String hostedSuppressionsBearerToken) {
452 this.hostedSuppressionsBearerToken = hostedSuppressionsBearerToken;
453 }
454
455
456
457
458
459
460
461 public void setHostedSuppressionsForceUpdate(final Boolean hostedSuppressionsForceUpdate) {
462 this.hostedSuppressionsForceUpdate = hostedSuppressionsForceUpdate;
463 }
464
465
466
467
468
469
470 public void setHostedSuppressionsEnabled(Boolean hostedSuppressionsEnabled) {
471 this.hostedSuppressionsEnabled = hostedSuppressionsEnabled;
472 }
473
474
475
476
477
478
479 public void setHostedSuppressionsUrl(final String hostedSuppressionsUrl) {
480 this.hostedSuppressionsUrl = hostedSuppressionsUrl;
481 }
482
483
484
485
486
487
488 public void setKnownExploitedUrl(String knownExploitedUrl) {
489 this.knownExploitedUrl = knownExploitedUrl;
490 }
491
492 public void setKnownExploitedValidForHours(Integer knownExploitedValidForHours) {
493 this.knownExploitedValidForHours = knownExploitedValidForHours;
494 }
495
496
497
498
499
500
501 public void setKnownExploitedUser(String knownExploitedUser) {
502 this.knownExploitedUser = knownExploitedUser;
503 }
504
505
506
507
508
509
510 public void setKnownExploitedPassword(String knownExploitedPassword) {
511 this.knownExploitedPassword = knownExploitedPassword;
512 }
513
514
515
516
517
518
519 public void setKnownExploitedBearerToken(String knownExploitedBearerToken) {
520 this.knownExploitedBearerToken = knownExploitedBearerToken;
521 }
522
523
524
525
526
527
528 public void setKnownExploitedEnabled(Boolean knownExploitedEnabled) {
529 this.knownExploitedEnabled = knownExploitedEnabled;
530 }
531
532
533
534
535
536
537 public void setRetireJsUrl(String retireJsUrl) {
538 this.retireJsUrl = retireJsUrl;
539 }
540
541
542
543
544
545
546 public void setRetireJsUrlUser(String retireJsUrlUser) {
547 this.retireJsUrlUser = retireJsUrlUser;
548 }
549
550
551
552
553
554
555 public void setRetireJsUrlPassword(String retireJsUrlPassword) {
556 this.retireJsUrlPassword = retireJsUrlPassword;
557 }
558
559
560
561
562
563
564 public void setRetireJsUrlBearerToken(String retireJsUrlBearerToken) {
565 this.retireJsUrlBearerToken = retireJsUrlBearerToken;
566 }
567
568
569
570
571
572
573
574 public void setRetireJsForceUpdate(Boolean retireJsForceUpdate) {
575 this.retireJsForceUpdate = retireJsForceUpdate;
576 }
577
578
579
580
581
582
583 public void setRetireJsAnalyzerEnabled(Boolean retireJsAnalyzerEnabled) {
584 this.retireJsAnalyzerEnabled = retireJsAnalyzerEnabled;
585 }
586
587
588
589
590
591
592
593
594
595 @SuppressWarnings("squid:RedundantThrowsDeclarationCheck")
596 @Override
597 protected void executeWithContextClassloader() throws BuildException {
598 populateSettings();
599 try {
600 Downloader.getInstance().configure(getSettings());
601 } catch (InvalidSettingException e) {
602 throw new BuildException(e);
603 }
604 try (Engine engine = new Engine(Update.class.getClassLoader(), getSettings())) {
605 engine.doUpdates();
606 } catch (UpdateException ex) {
607 if (this.isFailOnError()) {
608 throw new BuildException(ex);
609 }
610 log(ex.getMessage(), Project.MSG_ERR);
611 } catch (DatabaseException ex) {
612 final String msg = "Unable to connect to the dependency-check database; unable to update the NVD data";
613 if (this.isFailOnError()) {
614 throw new BuildException(msg, ex);
615 }
616 log(msg, Project.MSG_ERR);
617 } finally {
618 getSettings().cleanup();
619 }
620 }
621
622
623
624
625
626
627
628
629
630 @SuppressWarnings("squid:RedundantThrowsDeclarationCheck")
631 @Override
632 protected void populateSettings() throws BuildException {
633 super.populateSettings();
634 getSettings().setStringIfNotEmpty(Settings.KEYS.PROXY_SERVER, proxyServer);
635 getSettings().setStringIfNotEmpty(Settings.KEYS.PROXY_PORT, proxyPort);
636 getSettings().setStringIfNotEmpty(Settings.KEYS.PROXY_USERNAME, proxyUsername);
637 getSettings().setStringIfNotEmpty(Settings.KEYS.PROXY_PASSWORD, proxyPassword);
638 getSettings().setStringIfNotEmpty(Settings.KEYS.PROXY_NON_PROXY_HOSTS, nonProxyHosts);
639 getSettings().setStringIfNotEmpty(Settings.KEYS.CONNECTION_TIMEOUT, connectionTimeout);
640 getSettings().setStringIfNotEmpty(Settings.KEYS.CONNECTION_READ_TIMEOUT, readTimeout);
641 getSettings().setStringIfNotEmpty(Settings.KEYS.DB_DRIVER_NAME, databaseDriverName);
642 getSettings().setStringIfNotEmpty(Settings.KEYS.DB_DRIVER_PATH, databaseDriverPath);
643 getSettings().setStringIfNotEmpty(Settings.KEYS.DB_CONNECTION_STRING, connectionString);
644 getSettings().setStringIfNotEmpty(Settings.KEYS.DB_USER, databaseUser);
645 getSettings().setStringIfNotEmpty(Settings.KEYS.DB_PASSWORD, databasePassword);
646
647 getSettings().setStringIfNotEmpty(Settings.KEYS.KEV_URL, knownExploitedUrl);
648 getSettings().setStringIfNotEmpty(Settings.KEYS.KEV_USER, knownExploitedUser);
649 getSettings().setStringIfNotEmpty(Settings.KEYS.KEV_PASSWORD, knownExploitedPassword);
650 getSettings().setStringIfNotEmpty(Settings.KEYS.KEV_BEARER_TOKEN, knownExploitedBearerToken);
651 getSettings().setIntIfNotNull(Settings.KEYS.KEV_CHECK_VALID_FOR_HOURS, knownExploitedValidForHours);
652 getSettings().setBooleanIfNotNull(Settings.KEYS.ANALYZER_KNOWN_EXPLOITED_ENABLED, knownExploitedEnabled);
653
654 getSettings().setStringIfNotNull(Settings.KEYS.ANALYZER_RETIREJS_REPO_JS_URL, retireJsUrl);
655 getSettings().setStringIfNotNull(Settings.KEYS.ANALYZER_RETIREJS_REPO_JS_USER, retireJsUrlUser);
656 getSettings().setStringIfNotNull(Settings.KEYS.ANALYZER_RETIREJS_REPO_JS_PASSWORD, retireJsUrlPassword);
657 getSettings().setStringIfNotNull(Settings.KEYS.ANALYZER_RETIREJS_REPO_JS_BEARER_TOKEN, retireJsUrlBearerToken);
658 getSettings().setBooleanIfNotNull(Settings.KEYS.ANALYZER_RETIREJS_FORCEUPDATE, retireJsForceUpdate);
659 getSettings().setBooleanIfNotNull(Settings.KEYS.ANALYZER_RETIREJS_ENABLED, retireJsAnalyzerEnabled);
660
661 getSettings().setStringIfNotEmpty(Settings.KEYS.HOSTED_SUPPRESSIONS_URL, hostedSuppressionsUrl);
662 getSettings().setIntIfNotNull(Settings.KEYS.HOSTED_SUPPRESSIONS_VALID_FOR_HOURS, hostedSuppressionsValidForHours);
663 getSettings().setStringIfNotNull(Settings.KEYS.HOSTED_SUPPRESSIONS_USER, hostedSuppressionsUser);
664 getSettings().setStringIfNotNull(Settings.KEYS.HOSTED_SUPPRESSIONS_PASSWORD, hostedSuppressionsPassword);
665 getSettings().setStringIfNotNull(Settings.KEYS.HOSTED_SUPPRESSIONS_BEARER_TOKEN, hostedSuppressionsBearerToken);
666 getSettings().setBooleanIfNotNull(Settings.KEYS.HOSTED_SUPPRESSIONS_FORCEUPDATE, hostedSuppressionsForceUpdate);
667 getSettings().setBooleanIfNotNull(Settings.KEYS.HOSTED_SUPPRESSIONS_ENABLED, hostedSuppressionsEnabled);
668
669 getSettings().setStringIfNotEmpty(Settings.KEYS.NVD_API_KEY, nvdApiKey);
670 getSettings().setStringIfNotEmpty(Settings.KEYS.NVD_API_ENDPOINT, nvdApiEndpoint);
671 getSettings().setIntIfNotNull(Settings.KEYS.NVD_API_DELAY, nvdApiDelay);
672 getSettings().setIntIfNotNull(Settings.KEYS.NVD_API_RESULTS_PER_PAGE, nvdApiResultsPerPage);
673 getSettings().setStringIfNotEmpty(Settings.KEYS.NVD_API_DATAFEED_URL, nvdDatafeedUrl);
674 getSettings().setStringIfNotEmpty(Settings.KEYS.NVD_API_DATAFEED_USER, nvdUser);
675 getSettings().setStringIfNotEmpty(Settings.KEYS.NVD_API_DATAFEED_PASSWORD, nvdPassword);
676 getSettings().setStringIfNotEmpty(Settings.KEYS.NVD_API_DATAFEED_BEARER_TOKEN, nvdBearerToken);
677 getSettings().setIntIfNotNull(Settings.KEYS.NVD_API_MAX_RETRY_COUNT, nvdMaxRetryCount);
678 getSettings().setIntIfNotNull(Settings.KEYS.NVD_API_VALID_FOR_HOURS, nvdValidForHours);
679 }
680 }