use of org.codelibs.curl.CurlRequest in project fess by codelibs.
the class EsApiManager method processRequest.
protected void processRequest(final HttpServletRequest request, final HttpServletResponse response, final String path) {
if (StringUtil.isNotBlank(path)) {
final String lowerPath = path.toLowerCase(Locale.ROOT);
if (lowerPath.endsWith(".html")) {
response.setContentType("text/html;charset=utf-8");
} else if (lowerPath.endsWith(".txt")) {
response.setContentType("text/plain");
} else if (lowerPath.endsWith(".css")) {
response.setContentType("text/css");
}
}
if ("/_plugin".equals(path) || path.startsWith("/_plugin/")) {
processPluginRequest(request, response, path.replaceFirst("^/_plugin", StringUtil.EMPTY));
return;
}
final Method httpMethod = Method.valueOf(request.getMethod().toUpperCase(Locale.ROOT));
final CurlRequest curlRequest = ComponentUtil.getCurlHelper().request(httpMethod, path);
final String contentType = request.getHeader("Content-Type");
if (StringUtil.isNotEmpty(contentType)) {
curlRequest.header("Content-Type", contentType);
}
request.getParameterMap().entrySet().stream().forEach(entry -> {
if (entry.getValue().length > 1) {
curlRequest.param(entry.getKey(), String.join(",", entry.getValue()));
} else if (entry.getValue().length == 1) {
curlRequest.param(entry.getKey(), entry.getValue()[0]);
}
});
try (final CurlResponse curlResponse = curlRequest.onConnect((req, con) -> {
con.setDoOutput(true);
if (httpMethod != Method.GET && request.getContentLength() > 2) {
try (ServletInputStream in = request.getInputStream();
OutputStream out = con.getOutputStream()) {
CopyUtil.copy(in, out);
} catch (final IOException e) {
throw new WebApiException(HttpServletResponse.SC_BAD_REQUEST, e);
}
}
}).execute()) {
try (ServletOutputStream out = response.getOutputStream();
InputStream in = curlResponse.getContentAsStream()) {
response.setStatus(curlResponse.getHttpStatusCode());
writeHeaders(response);
CopyUtil.copy(in, out);
} catch (final ClientAbortException e) {
logger.debug("Client aborts this request.", e);
}
} catch (final Exception e) {
if (!(e.getCause() instanceof ClientAbortException)) {
throw new WebApiException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
}
logger.debug("Client aborts this request.", e);
}
}
use of org.codelibs.curl.CurlRequest in project fess by codelibs.
the class PluginHelper method createCurlRequest.
protected CurlRequest createCurlRequest(final String url) {
final CurlRequest request = Curl.get(url);
final Proxy proxy = ComponentUtil.getFessConfig().getHttpProxy();
if (proxy != null && !Proxy.NO_PROXY.equals(proxy)) {
request.proxy(proxy);
}
return request;
}
use of org.codelibs.curl.CurlRequest in project fess by codelibs.
the class CurlHelper method request.
public CurlRequest request(final Method method, final String path) {
final CurlRequest request = new CurlRequest(method, ResourceUtil.getFesenHttpUrl() + path);
final FessConfig fessConfig = ComponentUtil.getFessConfig();
final String username = fessConfig.getElasticsearchUsername();
final String password = fessConfig.getElasticsearchPassword();
if (StringUtil.isNotBlank(username) && StringUtil.isNotBlank(password)) {
final String value = username + ":" + password;
final String basicAuth = "Basic " + java.util.Base64.getEncoder().encodeToString(value.getBytes(StandardCharsets.UTF_8));
request.header("Authorization", basicAuth);
}
if (sslSocketFactory != null) {
request.sslSocketFactory(sslSocketFactory);
}
return request;
}
use of org.codelibs.curl.CurlRequest in project fess by codelibs.
the class AdminEsreqAction method upload.
@Execute
@Secured({ ROLE })
public ActionResponse upload(final UploadForm form) {
validate(form, messages -> {
}, () -> asListHtml(null));
verifyTokenKeep(() -> asListHtml(this::saveToken));
String header = null;
final StringBuilder buf = new StringBuilder(1000);
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(form.requestFile.getInputStream(), Constants.UTF_8))) {
header = ReaderUtil.readLine(reader);
if (header == null) {
throwValidationError(messages -> messages.addErrorsInvalidHeaderForRequestFile(GLOBAL, "no header"), () -> asListHtml(this::saveToken));
// no-op
return redirect(getClass());
}
String line;
while ((line = ReaderUtil.readLine(reader)) != null) {
buf.append(line);
}
} catch (final Exception e) {
throwValidationError(messages -> messages.addErrorsFailedToReadRequestFile(GLOBAL, e.getMessage()), () -> asListHtml(this::saveToken));
}
final CurlRequest curlRequest = getCurlRequest(header);
if (curlRequest == null) {
final String msg = header;
throwValidationError(messages -> messages.addErrorsInvalidHeaderForRequestFile(GLOBAL, msg), () -> asListHtml(this::saveToken));
} else {
try (final CurlResponse response = curlRequest.body(buf.toString()).execute()) {
final File tempFile = ComponentUtil.getSystemHelper().createTempFile("esreq_", ".json");
try (final InputStream in = response.getContentAsStream()) {
CopyUtil.copy(in, tempFile);
} catch (final Exception e1) {
if (tempFile != null && tempFile.exists() && !tempFile.delete()) {
logger.warn("Failed to delete {}", tempFile.getAbsolutePath());
}
throw e1;
}
return asStream("es_" + System.currentTimeMillis() + ".json").contentTypeOctetStream().stream(out -> {
try (final InputStream in = new FileInputStream(tempFile)) {
out.write(in);
} finally {
if (tempFile.exists() && !tempFile.delete()) {
logger.warn("Failed to delete {}", tempFile.getAbsolutePath());
}
}
});
} catch (final Exception e) {
logger.warn("Failed to process request file: {}", form.requestFile.getFileName(), e);
throwValidationError(messages -> messages.addErrorsInvalidHeaderForRequestFile(GLOBAL, e.getMessage()), () -> asListHtml(this::saveToken));
}
}
// no-op
return redirect(getClass());
}
Aggregations