1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.owasp.dependencycheck;
20
21 import java.io.File;
22 import java.io.FileNotFoundException;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.util.List;
26 import java.util.logging.Level;
27 import java.util.logging.Logger;
28 import org.apache.commons.cli.ParseException;
29 import org.owasp.dependencycheck.reporting.ReportGenerator;
30 import org.owasp.dependencycheck.dependency.Dependency;
31 import org.owasp.dependencycheck.cli.CliParser;
32 import org.owasp.dependencycheck.utils.LogUtils;
33 import org.owasp.dependencycheck.utils.Settings;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public class App {
58
59
60
61
62 private static final String LOG_PROPERTIES_FILE = "log.properties";
63
64
65
66
67
68
69 public static void main(String[] args) {
70 final App app = new App();
71 app.run(args);
72 }
73
74
75
76
77
78
79 public void run(String[] args) {
80
81 final CliParser cli = new CliParser();
82 try {
83 cli.parse(args);
84 } catch (FileNotFoundException ex) {
85 System.err.println(ex.getMessage());
86 cli.printHelp();
87 return;
88 } catch (ParseException ex) {
89 System.err.println(ex.getMessage());
90 cli.printHelp();
91 return;
92 }
93
94 final InputStream in = App.class.getClassLoader().getResourceAsStream(LOG_PROPERTIES_FILE);
95 LogUtils.prepareLogger(in, cli.getVerboseLog());
96
97 if (cli.isGetVersion()) {
98 cli.printVersionInfo();
99 } else if (cli.isRunScan()) {
100 updateSettings(cli.isAutoUpdate(), cli.getConnectionTimeout(), cli.getProxyUrl(),
101 cli.getProxyPort(), cli.getProxyUsername(), cli.getProxyPassword(),
102 cli.getDataDirectory(), cli.getPropertiesFile());
103 runScan(cli.getReportDirectory(), cli.getReportFormat(), cli.getApplicationName(), cli.getScanFiles());
104 } else {
105 cli.printHelp();
106 }
107 }
108
109
110
111
112
113
114
115
116
117
118
119 private void runScan(String reportDirectory, String outputFormat, String applicationName, String[] files) {
120 final Engine scanner = new Engine();
121
122 for (String file : files) {
123 scanner.scan(file);
124 }
125
126 scanner.analyzeDependencies();
127 final List<Dependency> dependencies = scanner.getDependencies();
128
129 final ReportGenerator report = new ReportGenerator(applicationName, dependencies, scanner.getAnalyzers());
130 try {
131 report.generateReports(reportDirectory, outputFormat);
132 } catch (IOException ex) {
133 Logger.getLogger(App.class.getName()).log(Level.SEVERE, "There was an IO error while attempting to generate the report.");
134 Logger.getLogger(App.class.getName()).log(Level.INFO, null, ex);
135 } catch (Exception ex) {
136 Logger.getLogger(App.class.getName()).log(Level.SEVERE, "There was an error while attempting to generate the report.");
137 Logger.getLogger(App.class.getName()).log(Level.INFO, null, ex);
138 }
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152
153 private void updateSettings(boolean autoUpdate, String connectionTimeout, String proxyUrl, String proxyPort,
154 String proxyUser, String proxyPass, String dataDirectory, File propertiesFile) {
155
156 if (propertiesFile != null) {
157 try {
158 Settings.mergeProperties(propertiesFile);
159 } catch (FileNotFoundException ex) {
160 final String msg = String.format("Unable to load properties file '%s'", propertiesFile.getPath());
161 Logger.getLogger(App.class.getName()).log(Level.SEVERE, msg);
162 Logger.getLogger(App.class.getName()).log(Level.FINE, null, ex);
163 } catch (IOException ex) {
164 final String msg = String.format("Unable to find properties file '%s'", propertiesFile.getPath());
165 Logger.getLogger(App.class.getName()).log(Level.SEVERE, msg);
166 Logger.getLogger(App.class.getName()).log(Level.FINE, null, ex);
167 }
168 }
169 if (dataDirectory != null) {
170 Settings.setString(Settings.KEYS.DATA_DIRECTORY, dataDirectory);
171 } else if (System.getProperty("basedir") != null) {
172 final File dataDir = new File(System.getProperty("basedir"), "data");
173 Settings.setString(Settings.KEYS.DATA_DIRECTORY, dataDir.getAbsolutePath());
174 } else {
175 final File jarPath = new File(App.class.getProtectionDomain().getCodeSource().getLocation().getPath());
176 final File base = jarPath.getParentFile();
177 final String sub = Settings.getString(Settings.KEYS.DATA_DIRECTORY);
178 final File dataDir = new File(base, sub);
179 Settings.setString(Settings.KEYS.DATA_DIRECTORY, dataDir.getAbsolutePath());
180 }
181 Settings.setBoolean(Settings.KEYS.AUTO_UPDATE, autoUpdate);
182 if (proxyUrl != null && !proxyUrl.isEmpty()) {
183 Settings.setString(Settings.KEYS.PROXY_URL, proxyUrl);
184 }
185 if (proxyPort != null && !proxyPort.isEmpty()) {
186 Settings.setString(Settings.KEYS.PROXY_PORT, proxyPort);
187 }
188 if (proxyUser != null && !proxyUser.isEmpty()) {
189 Settings.setString(Settings.KEYS.PROXY_USERNAME, proxyUser);
190 }
191 if (proxyPass != null && !proxyPass.isEmpty()) {
192 Settings.setString(Settings.KEYS.PROXY_PASSWORD, proxyPass);
193 }
194 if (connectionTimeout != null && !connectionTimeout.isEmpty()) {
195 Settings.setString(Settings.KEYS.CONNECTION_TIMEOUT, connectionTimeout);
196 }
197 }
198 }