in src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java [70:139]
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {
DistributionPackageImporter distributionPackageImporter = request
.getResource()
.adaptTo(DistributionPackageImporter.class);
String digestAlgorithm = null;
String digestMessage = null;
String digestHeader = request.getHeader(DIGEST_HEADER);
if (isNotEmpty(digestHeader)) {
log.debug("Found Digest header {}, extracting algorithm and message...", digestHeader);
Matcher matcher = digestHeaderRegex.matcher(digestHeader);
if (matcher.matches()) {
digestAlgorithm = matcher.group(1);
digestMessage = matcher.group(2);
} else {
log.debug("Digest header {} not supported, it doesn't match with expected pattern {}", digestHeader, digestHeaderRegex.pattern());
}
}
final long start = System.currentTimeMillis();
response.setContentType("application/json");
InputStream stream;
if (isNotEmpty(digestAlgorithm) && isNotEmpty(digestMessage)) {
stream = openDigestInputStream(request.getInputStream(), digestAlgorithm);
} else {
stream = request.getInputStream();
}
ResourceResolver resourceResolver = request.getResourceResolver();
try {
if (request.getParameter("forceError") != null) {
throw new Exception("manually forced error");
}
DistributionPackageInfo distributionPackageInfo = distributionPackageImporter.importStream(resourceResolver, stream);
long end = System.currentTimeMillis();
if (isNotEmpty(digestAlgorithm) && isNotEmpty(digestMessage)) {
String receivedDigestMessage = readDigestMessage((DigestInputStream) stream);
if (!digestMessage.equalsIgnoreCase(receivedDigestMessage)) {
log.error("Error during distribution import: received distribution package is corrupted, expected [{}] but received [{}]",
digestMessage, receivedDigestMessage);
Map<String, String> kv = new HashMap<String, String>();
kv.put("digestAlgorithm", digestAlgorithm);
kv.put("expected", digestMessage);
kv.put("received", receivedDigestMessage);
ServletJsonUtils.writeJson(response, SC_BAD_REQUEST, "Received distribution package is corrupted", kv);
return;
}
}
log.info("Package {} imported successfully in {}ms", distributionPackageInfo, end - start);
ServletJsonUtils.writeJson(response, SC_OK, "package imported successfully", null);
} catch (final Throwable e) {
String msg = format("an unexpected error has occurred during distribution import. " +
"Error: %s",
e.getMessage());
log.error(msg, e);
ServletJsonUtils.writeJson(response, SC_INTERNAL_SERVER_ERROR, msg, null);
} finally {
long end = System.currentTimeMillis();
log.debug("Processed package import request in {} ms", end - start);
}
}