Skip to content

Commit

Permalink
Rest API: Add an X-Opaque-Id header, to be returned in the response…
Browse files Browse the repository at this point in the history
… if exists in the request, closes elastic#1202.
  • Loading branch information
kimchy committed Aug 3, 2011
1 parent 39feb3c commit 0f25427
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 46 deletions.

This file was deleted.

Expand Up @@ -36,10 +36,10 @@
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.http.HttpChannel;
import org.elasticsearch.http.HttpException;
import org.elasticsearch.http.HttpHelper;
import org.elasticsearch.rest.RestResponse;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.rest.XContentRestResponse;
import org.elasticsearch.rest.support.RestUtils;
import org.elasticsearch.transport.netty.NettyTransport;

import java.io.IOException;
Expand Down Expand Up @@ -78,7 +78,7 @@ public NettyHttpChannel(NettyHttpServerTransport transport, Channel channel, org
} else {
resp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, status);
}
if (HttpHelper.isBrowser(request.getHeader(HttpHeaders.Names.USER_AGENT))) {
if (RestUtils.isBrowser(request.getHeader(HttpHeaders.Names.USER_AGENT))) {
// add support for cross origin
resp.addHeader("Access-Control-Allow-Origin", "*");
if (request.getMethod() == HttpMethod.OPTIONS) {
Expand All @@ -89,6 +89,11 @@ public NettyHttpChannel(NettyHttpServerTransport transport, Channel channel, org
}
}

String opaque = request.getHeader("X-Opaque-Id");
if (opaque != null) {
resp.addHeader("X-Opaque-Id", opaque);
}

// Convert the response content to a ChannelBuffer.
ChannelFutureListener releaseContentListener = null;
ChannelBuffer buf;
Expand Down
Expand Up @@ -19,6 +19,7 @@

package org.elasticsearch.rest.support;

import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.base.Charsets;
import org.elasticsearch.common.path.PathTrie;

Expand All @@ -36,6 +37,17 @@ public class RestUtils {
}
};

public static boolean isBrowser(@Nullable String userAgent) {
if (userAgent == null) {
return false;
}
// chrome, safari, firefox, ie
if (userAgent.startsWith("Mozilla")) {
return true;
}
return false;
}

public static void decodeQueryString(String s, int fromIndex, Map<String, String> params) {
if (fromIndex < 0) {
return;
Expand Down
Expand Up @@ -27,6 +27,7 @@
import org.elasticsearch.rest.RestController;
import org.elasticsearch.rest.RestRequest;
import org.elasticsearch.rest.RestResponse;
import org.elasticsearch.rest.support.RestUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
Expand Down Expand Up @@ -128,12 +129,18 @@ static class ServletRestChannel implements RestChannel {

@Override public void sendResponse(RestResponse response) {
resp.setContentType(response.contentType());
resp.addHeader("Access-Control-Allow-Origin", "*");
if (restRequest.method() == RestRequest.Method.OPTIONS) {
// also add more access control parameters
resp.addHeader("Access-Control-Max-Age", "1728000");
resp.addHeader("Access-Control-Allow-Methods", "PUT, DELETE");
resp.addHeader("Access-Control-Allow-Headers", "X-Requested-With");
if (RestUtils.isBrowser(restRequest.header("User-Agent"))) {
resp.addHeader("Access-Control-Allow-Origin", "*");
if (restRequest.method() == RestRequest.Method.OPTIONS) {
// also add more access control parameters
resp.addHeader("Access-Control-Max-Age", "1728000");
resp.addHeader("Access-Control-Allow-Methods", "PUT, DELETE");
resp.addHeader("Access-Control-Allow-Headers", "X-Requested-With");
}
}
String opaque = restRequest.header("X-Opaque-Id");
if (opaque != null) {
resp.addHeader("X-Opaque-Id", opaque);
}
try {
int contentLength = response.contentLength() + response.prefixContentLength() + response.suffixContentLength();
Expand Down

0 comments on commit 0f25427

Please sign in to comment.