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;
}
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);
}
}
}
Aggregations