Search in sources :

Example 1 with CurlRequest

use of org.codelibs.elasticsearch.runner.net.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 (path.startsWith("/_plugin/") || path.equals("/_plugin")) {
        processPluginRequest(request, response, path.replaceFirst("^/_plugin", StringUtil.EMPTY));
        return;
    }
    final Method httpMethod = Method.valueOf(request.getMethod().toUpperCase(Locale.ROOT));
    final CurlRequest curlRequest = new CurlRequest(httpMethod, ResourceUtil.getElasticsearchHttpUrl() + path);
    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]);
        }
    });
    curlRequest.onConnect((req, con) -> {
        con.setDoOutput(true);
        if (httpMethod != Method.GET) {
            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(con -> {
        try (ServletOutputStream out = response.getOutputStream()) {
            try (InputStream in = con.getInputStream()) {
                response.setStatus(con.getResponseCode());
                CopyUtil.copy(in, out);
            } catch (final Exception e) {
                response.setStatus(con.getResponseCode());
                try (InputStream err = con.getErrorStream()) {
                    CopyUtil.copy(err, out);
                }
            }
        } catch (final ClientAbortException e) {
            logger.debug("Client aborts this request.", e);
        } catch (final Exception e) {
            if (e.getCause() instanceof ClientAbortException) {
                logger.debug("Client aborts this request.", e);
            } else {
                throw new WebApiException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
            }
        }
    });
}
Also used : FilterChain(javax.servlet.FilterChain) Constants(org.codelibs.fess.Constants) ServletException(javax.servlet.ServletException) FessSystemException(org.codelibs.fess.exception.FessSystemException) ServletInputStream(javax.servlet.ServletInputStream) BaseApiManager(org.codelibs.fess.api.BaseApiManager) LoggerFactory(org.slf4j.LoggerFactory) ClientAbortException(org.apache.catalina.connector.ClientAbortException) SessionManager(org.lastaflute.web.servlet.session.SessionManager) WebApiException(org.codelibs.fess.exception.WebApiException) FessUserBean(org.codelibs.fess.mylasta.action.FessUserBean) ResourceUtil(org.codelibs.fess.util.ResourceUtil) HttpServletRequest(javax.servlet.http.HttpServletRequest) RequestManager(org.lastaflute.web.servlet.request.RequestManager) ServletOutputStream(javax.servlet.ServletOutputStream) Locale(java.util.Locale) CopyUtil(org.codelibs.core.io.CopyUtil) Path(java.nio.file.Path) OutputStream(java.io.OutputStream) Logger(org.slf4j.Logger) Files(java.nio.file.Files) HttpServletResponse(javax.servlet.http.HttpServletResponse) StringUtil(org.codelibs.core.lang.StringUtil) IOException(java.io.IOException) UUID(java.util.UUID) ComponentUtil(org.codelibs.fess.util.ComponentUtil) CurlRequest(org.codelibs.elasticsearch.runner.net.CurlRequest) InputStream(java.io.InputStream) Method(org.codelibs.elasticsearch.runner.net.Curl.Method) ServletInputStream(javax.servlet.ServletInputStream) ServletOutputStream(javax.servlet.ServletOutputStream) ServletInputStream(javax.servlet.ServletInputStream) InputStream(java.io.InputStream) ServletOutputStream(javax.servlet.ServletOutputStream) OutputStream(java.io.OutputStream) CurlRequest(org.codelibs.elasticsearch.runner.net.CurlRequest) ClientAbortException(org.apache.catalina.connector.ClientAbortException) Method(org.codelibs.elasticsearch.runner.net.Curl.Method) IOException(java.io.IOException) WebApiException(org.codelibs.fess.exception.WebApiException) ServletException(javax.servlet.ServletException) FessSystemException(org.codelibs.fess.exception.FessSystemException) ClientAbortException(org.apache.catalina.connector.ClientAbortException) WebApiException(org.codelibs.fess.exception.WebApiException) IOException(java.io.IOException)

Example 2 with CurlRequest

use of org.codelibs.elasticsearch.runner.net.CurlRequest in project fess by codelibs.

the class AdminEsreqAction method upload.

@Execute
public ActionResponse upload(final UploadForm form) {
    validate(form, messages -> {
    }, () -> asListHtml(null));
    verifyToken(() -> asListHtml(() -> 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);
        String line;
        while ((line = ReaderUtil.readLine(reader)) != null) {
            buf.append(line);
        }
    } catch (final Exception e) {
        throwValidationError(messages -> messages.addErrorsFailedToReadRequestFile(GLOBAL, e.getMessage()), () -> {
            return asListHtml(() -> saveToken());
        });
    }
    final CurlRequest curlRequest = getCurlRequest(header);
    if (curlRequest == null) {
        final String msg = header;
        throwValidationError(messages -> messages.addErrorsInvalidHeaderForRequestFile(GLOBAL, msg), () -> {
            return asListHtml(() -> saveToken());
        });
    } else {
        try (final CurlResponse response = curlRequest.header("Content-Type", "application/json").body(buf.toString()).execute()) {
            final File tempFile = File.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()), () -> {
                return asListHtml(() -> saveToken());
            });
        }
    }
    // no-op
    return redirect(getClass());
}
Also used : Constants(org.codelibs.fess.Constants) Logger(org.slf4j.Logger) StringUtil(org.codelibs.core.lang.StringUtil) LoggerFactory(org.slf4j.LoggerFactory) FileInputStream(java.io.FileInputStream) InputStreamReader(java.io.InputStreamReader) ActionRuntime(org.lastaflute.web.ruts.process.ActionRuntime) File(java.io.File) Curl(org.codelibs.elasticsearch.runner.net.Curl) ResourceUtil(org.codelibs.fess.util.ResourceUtil) ActionResponse(org.lastaflute.web.response.ActionResponse) Locale(java.util.Locale) FessAdminAction(org.codelibs.fess.app.web.base.FessAdminAction) Execute(org.lastaflute.web.Execute) CurlResponse(org.codelibs.elasticsearch.runner.net.CurlResponse) BufferedReader(java.io.BufferedReader) CopyUtil(org.codelibs.core.io.CopyUtil) HtmlResponse(org.lastaflute.web.response.HtmlResponse) ReaderUtil(org.codelibs.core.io.ReaderUtil) CurlRequest(org.codelibs.elasticsearch.runner.net.CurlRequest) InputStream(java.io.InputStream) InputStreamReader(java.io.InputStreamReader) CurlResponse(org.codelibs.elasticsearch.runner.net.CurlResponse) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) BufferedReader(java.io.BufferedReader) CurlRequest(org.codelibs.elasticsearch.runner.net.CurlRequest) File(java.io.File) FileInputStream(java.io.FileInputStream) Execute(org.lastaflute.web.Execute)

Aggregations

InputStream (java.io.InputStream)2 Locale (java.util.Locale)2 CopyUtil (org.codelibs.core.io.CopyUtil)2 StringUtil (org.codelibs.core.lang.StringUtil)2 CurlRequest (org.codelibs.elasticsearch.runner.net.CurlRequest)2 Constants (org.codelibs.fess.Constants)2 ResourceUtil (org.codelibs.fess.util.ResourceUtil)2 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 BufferedReader (java.io.BufferedReader)1 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 InputStreamReader (java.io.InputStreamReader)1 OutputStream (java.io.OutputStream)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 UUID (java.util.UUID)1 FilterChain (javax.servlet.FilterChain)1 ServletException (javax.servlet.ServletException)1