Search in sources :

Example 1 with DocumentRoot

use of org.openecard.control.binding.http.common.DocumentRoot in project open-ecard by ecsec.

the class HttpAppPluginActionHandler method handle.

@Override
public void handle(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext context) throws HttpException, IOException {
    LOG.debug("HTTP request: {}", httpRequest.toString());
    CORSFilter corsFilter = new CORSFilter();
    HttpResponse corsResp = corsFilter.preProcess(httpRequest, context);
    if (corsResp != null) {
        // CORS Response created, return it to the caller
        // This is either a preflight response, or a block, because the Origin mismatched
        LOG.debug("HTTP response: {}", corsResp);
        Http11Response.copyHttpResponse(corsResp, httpResponse);
        return;
    }
    // deconstruct request uri
    String uri = httpRequest.getRequestLine().getUri();
    URI requestURI = URI.create(uri);
    String path = requestURI.getPath();
    // remove leading '/'
    String resourceName = path.substring(1, path.length());
    // find suitable addon
    try {
        AppPluginAction action = selector.getAppPluginAction(resourceName);
        String rawQuery = requestURI.getRawQuery();
        Map<String, String> queries = new HashMap<>(0);
        if (rawQuery != null) {
            queries = HttpRequestLineUtils.transform(rawQuery);
        }
        RequestBody body = null;
        if (httpRequest instanceof HttpEntityEnclosingRequest) {
            LOG.debug("Request contains an entity.");
            body = getRequestBody(httpRequest, resourceName);
        }
        Headers headers = readReqHeaders(httpRequest);
        // and add some special values to the header section
        headers.setHeader(METHOD_HDR, httpRequest.getRequestLine().getMethod());
        BindingResult bindingResult = action.execute(body, queries, headers, null);
        HttpResponse response = createHTTPResponseFromBindingResult(bindingResult);
        response.setParams(httpRequest.getParams());
        LOG.debug("HTTP response: {}", response);
        Http11Response.copyHttpResponse(response, httpResponse);
        // CORS post processing
        corsFilter.postProcess(httpRequest, httpResponse, context);
    } catch (AddonNotFoundException ex) {
        if (path.equals("/")) {
            new IndexHandler().handle(httpRequest, httpResponse, context);
        } else if (path.startsWith("/")) {
            new FileHandler(new DocumentRoot("/www", "/www-files")).handle(httpRequest, httpResponse, context);
        } else {
            new DefaultHandler().handle(httpRequest, httpResponse, context);
        }
    }
}
Also used : BindingResult(org.openecard.addon.bind.BindingResult) HashMap(java.util.HashMap) AddonNotFoundException(org.openecard.addon.AddonNotFoundException) Headers(org.openecard.addon.bind.Headers) DocumentRoot(org.openecard.control.binding.http.common.DocumentRoot) HttpResponse(org.openecard.apache.http.HttpResponse) AppPluginAction(org.openecard.addon.bind.AppPluginAction) URI(java.net.URI) HttpEntityEnclosingRequest(org.openecard.apache.http.HttpEntityEnclosingRequest) RequestBody(org.openecard.addon.bind.RequestBody)

Aggregations

URI (java.net.URI)1 HashMap (java.util.HashMap)1 AddonNotFoundException (org.openecard.addon.AddonNotFoundException)1 AppPluginAction (org.openecard.addon.bind.AppPluginAction)1 BindingResult (org.openecard.addon.bind.BindingResult)1 Headers (org.openecard.addon.bind.Headers)1 RequestBody (org.openecard.addon.bind.RequestBody)1 HttpEntityEnclosingRequest (org.openecard.apache.http.HttpEntityEnclosingRequest)1 HttpResponse (org.openecard.apache.http.HttpResponse)1 DocumentRoot (org.openecard.control.binding.http.common.DocumentRoot)1