diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index 70a9a37..fad6b6d 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -29,6 +29,7 @@ import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.hash.HashCode; @@ -64,6 +65,7 @@ final class S3ProxyHandler extends AbstractHandler { "75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a"; private static final String FAKE_OWNER_DISPLAY_NAME = "CustomersName@amazon.com"; + private static final String FAKE_REQUEST_ID = "4442587FB7D0A2F9"; private final BlobStore blobStore; S3ProxyHandler(BlobStore blobStore) { @@ -255,25 +257,12 @@ final class S3ProxyHandler extends AbstractHandler { if (blobStore.createContainerInLocation(location, containerName)) { return; } - try (Writer writer = response.getWriter()) { - response.setStatus(HttpServletResponse.SC_CONFLICT); - writer.write("\r\n" + - "\r\n" + - " BucketAlreadyOwnedByYou\r\n" + - " Your previous request to create the named bucket succeeded and you already own it.\r\n" + - " "); - writer.write(containerName); - writer.write("\r\n" + - // TODO: RequestId - " 4442587FB7D0A2F9\r\n" + - "\r\n"); - writer.flush(); - } catch (IOException ioe) { - logger.error("Error writing to client: {}", - ioe.getMessage()); - response.setStatus( - HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - } + sendSimpleErrorResponse(response, HttpServletResponse.SC_CONFLICT, + "BucketAlreadyOwnedByYou", + "Your previous request to create the named bucket" + + " succeeded and you already own it.", + Optional.of(" " + containerName + + "\r\n")); } catch (RuntimeException re) { logger.error("Error creating container: {}", re.getMessage()); response.setStatus(HttpServletResponse.SC_FORBIDDEN); @@ -548,4 +537,29 @@ final class S3ProxyHandler extends AbstractHandler { entry.getValue()); } } + + private static void sendSimpleErrorResponse(HttpServletResponse response, + int status, String code, String message, Optional extra) { + try (Writer writer = response.getWriter()) { + response.setStatus(status); + writer.write("\r\n" + + "\r\n" + + " "); + writer.write(code); + writer.write("\r\n" + + " "); + writer.write(message); + writer.write("\r\n"); + if (extra.isPresent()) { + writer.write(extra.get()); + } + writer.write(" " + FAKE_REQUEST_ID + + "\r\n" + + "\r\n"); + writer.flush(); + } catch (IOException ioe) { + logger.error("Error writing to client: {}", + ioe.getMessage()); + } + } }