1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.devops.conga.plugins.aem.maven;
21
22 import static io.wcm.tooling.commons.packmgr.install.VendorInstallerFactory.COMPOSUM_URL;
23 import static io.wcm.tooling.commons.packmgr.install.VendorInstallerFactory.CRX_URL;
24
25 import java.util.List;
26
27 import javax.inject.Inject;
28
29 import org.apache.commons.lang3.Strings;
30 import org.apache.maven.execution.MavenSession;
31 import org.apache.maven.plugin.AbstractMojo;
32 import org.apache.maven.plugin.MojoExecutionException;
33 import org.apache.maven.plugins.annotations.Parameter;
34 import org.apache.maven.settings.crypto.SettingsDecrypter;
35
36 import io.wcm.tooling.commons.packmgr.PackageManagerProperties;
37 import io.wcm.tooling.commons.packmgr.install.VendorInstallerFactory;
38 import io.wcm.tooling.commons.packmgr.install.VendorInstallerFactory.Service;
39
40
41
42
43 abstract class AbstractContentPackageMojo extends AbstractMojo {
44
45 private static final String CONSOLE_URL = "/system/console";
46
47
48
49
50
51
52
53
54
55
56 @Parameter(property = "vault.serviceURL", required = true, defaultValue = "http://localhost:4502/crx/packmgr/service")
57 private String serviceURL;
58
59
60
61
62 @Parameter(property = "vault.userId", defaultValue = "admin")
63 private String userId;
64
65
66
67
68 @Parameter(property = "vault.password", defaultValue = "admin")
69 private String password;
70
71
72
73
74
75 @Parameter(property = "vault.oauth2AccessToken")
76 private String oauth2AccessToken;
77
78
79
80
81
82 @Parameter(property = "console.userId")
83 private String consoleUserId;
84
85
86
87
88
89 @Parameter(property = "console.password")
90
91 private String consolePassword;
92
93
94
95
96
97 @Parameter(property = "console.consoleOauth2AccessToken")
98 private String consoleOauth2AccessToken;
99
100
101
102
103 @Parameter(property = "vault.skip", defaultValue = "false")
104 private boolean skip;
105
106
107
108
109 @Parameter(property = "vault.retryCount", defaultValue = "24")
110 private int retryCount;
111
112
113
114
115 @Parameter(property = "vault.retryDelay", defaultValue = "5")
116 private int retryDelay;
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 @Parameter(property = "vault.bundleStatusURL", required = false)
136 private String bundleStatusURL;
137
138
139
140
141
142 @Parameter(property = "vault.bundleStatusWaitLimit", defaultValue = "360")
143 private int bundleStatusWaitLimit;
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162 @Parameter(property = "vault.packageManagerInstallStatusURL", required = false)
163 private String packageManagerInstallStatusURL;
164
165
166
167
168
169
170 @Parameter(property = "vault.packageManagerInstallStatusWaitLimit", defaultValue = "360")
171 private int packageManagerInstallStatusWaitLimit;
172
173
174
175
176
177
178 @Parameter(property = "vault.bundleStatusBlacklistBundleNames", defaultValue = "^updater\\.aem.*$")
179 private String[] bundleStatusBlacklistBundleNames;
180
181
182
183
184
185 @Parameter(property = "vault.bundleStatusWhitelistBundleNames",
186 defaultValue = "^com\\.day\\.crx\\.crxde-support$,"
187 + "^com\\.adobe\\.granite\\.crx-explorer$,"
188 + "^com\\.adobe\\.granite\\.crxde-lite$,"
189 + "^org\\.apache\\.sling\\.jcr\\.webdav$,"
190 + "^org\\.apache\\.sling\\.jcr\\.davex$")
191 private String[] bundleStatusWhitelistBundleNames;
192
193
194
195
196
197
198
199
200
201
202
203
204
205 @Parameter(property = "vault.systemReadyURL", required = false)
206 private String systemReadyURL;
207
208
209
210
211
212 @Parameter(property = "vault.systemReadyWaitLimitSec", defaultValue = "30")
213 private int systemReadyWaitLimitSec;
214
215
216
217
218 @Parameter(property = "vault.relaxedSSLCheck", defaultValue = "false")
219 private boolean relaxedSSLCheck;
220
221
222
223
224 @Parameter(property = "vault.httpConnectTimeoutSec", defaultValue = "10")
225 private int httpConnectTimeoutSec;
226
227
228
229
230 @Parameter(property = "vault.httpSocketTimeoutSec", defaultValue = "60")
231 private int httpSocketTimeout;
232
233
234
235
236
237 @Parameter(property = "vault.packageManagerOutputLogLevel", defaultValue = "INFO")
238 private String packageManagerOutputLogLevel;
239
240 @Parameter(property = "session", defaultValue = "${session}", readonly = true)
241 private MavenSession session;
242
243 @Inject
244 private SettingsDecrypter decrypter;
245
246 protected final boolean isSkip() {
247 return this.skip;
248 }
249
250 protected PackageManagerProperties getPackageManagerProperties() throws MojoExecutionException {
251 PackageManagerProperties props = new PackageManagerProperties();
252
253 props.setPackageManagerUrl(buildPackageManagerUrl());
254 props.setUserId(this.userId);
255 props.setPassword(this.password);
256 props.setOAuth2AccessToken(this.oauth2AccessToken);
257 props.setConsoleUserId(this.consoleUserId);
258 props.setConsolePassword(this.consolePassword);
259 props.setConsoleOAuth2AccessToken(this.consoleOauth2AccessToken);
260 props.setRetryCount(this.retryCount);
261 props.setRetryDelaySec(this.retryDelay);
262 props.setBundleStatusUrl(buildBundleStatusUrl());
263 props.setBundleStatusWaitLimitSec(this.bundleStatusWaitLimit);
264 props.setBundleStatusBlacklistBundleNames(List.of(this.bundleStatusBlacklistBundleNames));
265 props.setBundleStatusWhitelistBundleNames(List.of(this.bundleStatusWhitelistBundleNames));
266 props.setSystemReadyUrl(buildSystemReadyUrl());
267 props.setSystemReadyWaitLimitSec(this.systemReadyWaitLimitSec);
268 props.setPackageManagerInstallStatusURL(buildPackageManagerInstallStatusUrl());
269 props.setPackageManagerInstallStatusWaitLimitSec(this.packageManagerInstallStatusWaitLimit);
270 props.setRelaxedSSLCheck(this.relaxedSSLCheck);
271 props.setHttpConnectTimeoutSec(this.httpConnectTimeoutSec);
272 props.setHttpSocketTimeoutSec(this.httpSocketTimeout);
273 props.setProxies(ProxySupport.getMavenProxies(session, decrypter));
274 props.setPackageManagerOutputLogLevel(this.packageManagerOutputLogLevel);
275
276 return props;
277 }
278
279 private String buildPackageManagerUrl() throws MojoExecutionException {
280 String serviceUrl = this.serviceURL;
281 switch (VendorInstallerFactory.identify(serviceUrl)) {
282 case CRX:
283 serviceUrl = VendorInstallerFactory.getBaseUrl(serviceUrl) + CRX_URL;
284 break;
285 case COMPOSUM:
286 serviceUrl = VendorInstallerFactory.getBaseUrl(serviceUrl) + COMPOSUM_URL;
287 break;
288 default:
289 throw new MojoExecutionException("Unsupported service URL: " + serviceUrl);
290 }
291 return serviceUrl;
292 }
293
294 private String buildBundleStatusUrl() throws MojoExecutionException {
295 if (Strings.CS.equals(this.bundleStatusURL, "-")) {
296 return null;
297 }
298 if (this.bundleStatusURL != null) {
299 return this.bundleStatusURL;
300 }
301
302 String baseUrl = VendorInstallerFactory.getBaseUrl(buildPackageManagerUrl());
303 return baseUrl + "/system/console/bundles/.json";
304 }
305
306 private String buildSystemReadyUrl() throws MojoExecutionException {
307 if (Strings.CS.equals(this.systemReadyURL, "-")) {
308 return null;
309 }
310 if (this.systemReadyURL != null) {
311 return this.systemReadyURL;
312 }
313
314 String baseUrl = VendorInstallerFactory.getBaseUrl(buildPackageManagerUrl());
315 return baseUrl + "/systemready";
316 }
317
318 private String buildPackageManagerInstallStatusUrl() throws MojoExecutionException {
319 if (Strings.CS.equals(this.packageManagerInstallStatusURL, "-")
320 || VendorInstallerFactory.identify(this.serviceURL) != Service.CRX) {
321 return null;
322 }
323 if (this.packageManagerInstallStatusURL != null) {
324 return this.packageManagerInstallStatusURL;
325 }
326
327 String baseUrl = VendorInstallerFactory.getBaseUrl(buildPackageManagerUrl());
328 return baseUrl + "/crx/packmgr/installstatus.jsp";
329 }
330
331 protected String buildConsoleUrl() {
332 return VendorInstallerFactory.getBaseUrl(this.serviceURL) + CONSOLE_URL;
333 }
334
335 protected String getConsoleUser() {
336 return this.consoleUserId;
337 }
338
339 protected String getConsolePassword() {
340 return this.consolePassword;
341 }
342
343 }