Search in sources :

Example 1 with Headers

use of org.openecard.addon.bind.Headers in project open-ecard by ecsec.

the class HttpAppPluginActionHandler method readReqHeaders.

private Headers readReqHeaders(HttpRequest httpRequest) {
    Headers headers = new Headers();
    // loop over all headers in the request
    HeaderIterator it = httpRequest.headerIterator();
    while (it.hasNext()) {
        Header next = it.nextHeader();
        String name = next.getName();
        String value = next.getValue();
        if (isMultiValueHeaderType(name)) {
            for (String part : value.split(",")) {
                headers.addHeader(name, part.trim());
            }
        } else {
            headers.addHeader(name, value);
        }
    }
    return headers;
}
Also used : Header(org.openecard.apache.http.Header) Headers(org.openecard.addon.bind.Headers) HeaderIterator(org.openecard.apache.http.HeaderIterator)

Example 2 with Headers

use of org.openecard.addon.bind.Headers 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

Headers (org.openecard.addon.bind.Headers)2 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 RequestBody (org.openecard.addon.bind.RequestBody)1 Header (org.openecard.apache.http.Header)1 HeaderIterator (org.openecard.apache.http.HeaderIterator)1 HttpEntityEnclosingRequest (org.openecard.apache.http.HttpEntityEnclosingRequest)1 HttpResponse (org.openecard.apache.http.HttpResponse)1 DocumentRoot (org.openecard.control.binding.http.common.DocumentRoot)1