From a8131d31dc885529fa9e27394555796b767edd4a Mon Sep 17 00:00:00 2001 From: Robin Bramley Date: Fri, 5 Jul 2013 17:25:51 +0100 Subject: [PATCH 1/3] Swift TempAuth and Copy commands along with an example --- .../objectstore/SwiftCopyExample.java | 39 +++++++++++++ .../org/openstack/swift/api/CopyObject.java | 57 +++++++++++++++++++ .../openstack/swift/api/TempAuthenticate.java | 41 +++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 openstack-examples/src/main/java/org/openstack/examples/objectstore/SwiftCopyExample.java create mode 100644 swift-client/src/main/java/org/openstack/swift/api/CopyObject.java create mode 100644 swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java diff --git a/openstack-examples/src/main/java/org/openstack/examples/objectstore/SwiftCopyExample.java b/openstack-examples/src/main/java/org/openstack/examples/objectstore/SwiftCopyExample.java new file mode 100644 index 000000000..a0bcc2923 --- /dev/null +++ b/openstack-examples/src/main/java/org/openstack/examples/objectstore/SwiftCopyExample.java @@ -0,0 +1,39 @@ +package org.openstack.examples.objectstore; + +import java.util.HashMap; +import java.util.List; + +import javax.ws.rs.core.Response; + +import org.openstack.swift.SwiftClient; +import org.openstack.swift.api.*; +import org.openstack.swift.model.Object; + +/** + * Swift copy operation with TempAuth. + * The containers and source file need to exist. + * + * @author Robin Bramley + */ +public class SwiftCopyExample { + + public static void main( String[] args ) { + SwiftClient swiftClient = new SwiftClient("https://192.168.22.66:8443/auth/v1.0", null); + Response res = swiftClient.execute(new TempAuthenticate("test:tester", "testing")); + + String storageUrl = res.getHeaderString(TempAuthenticate.RES_HEADER_STORAGE_URL); + String token = res.getHeaderString(TempAuthenticate.RES_HEADER_AUTH_TOKEN); + System.out.println("Token: " + token); + + swiftClient = new SwiftClient(storageUrl, token); + + swiftClient.execute(new CopyObject("container1","robin_monochrome.jpg","backup","rb-mono.jpg", "image/jpeg")); + + List objs = swiftClient.execute(new ListObjects("backup", new HashMap() {{ + put("path", ""); + }})); + for(Object obj : objs) { + System.out.println(obj.getName() + " - " + obj.getContentType()); + } + } +} diff --git a/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java b/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java new file mode 100644 index 000000000..99c4c76cc --- /dev/null +++ b/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java @@ -0,0 +1,57 @@ +package org.openstack.swift.api; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import org.openstack.swift.SwiftCommand; + +/** + * Copy an object. + * "do a PUT to the new object (the target) location, but add the 'X-Copy-From' header to designate the source of the data" + * + * @author Robin Bramley + */ +public class CopyObject implements SwiftCommand{ + + private static final String DELIMITER = "/"; + + private static final String REQ_HEADER_COPY_FROM = "X-Copy-From"; + + private String sourceContainerName; + + private String sourceObjectName; + + private String destContainerName; + + private String destObjectName; + + private String mimeType; + + public CopyObject(String sourceContainerName, String sourceObjectName, String destContainerName, String destObjectName, String mimeType) { + this.sourceContainerName = sourceContainerName; + this.sourceObjectName = sourceObjectName; + this.destContainerName = destContainerName; + this.destObjectName = destObjectName; + this.mimeType = mimeType; + } + + @Override + public Response execute(WebTarget target) { + // set up the value for the X-Copy-From header + StringBuilder sb = new StringBuilder(2 + + sourceContainerName.length() + + sourceObjectName.length()) + .append(DELIMITER).append(sourceContainerName) + .append(DELIMITER).append(sourceObjectName); + String source = sb.toString(); + + Invocation.Builder invocationBuilder = target.path(destContainerName).path(destObjectName).request(); + + invocationBuilder.header(REQ_HEADER_COPY_FROM, source); + + return invocationBuilder.put(Entity.entity("", mimeType)); + } + +} diff --git a/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java b/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java new file mode 100644 index 000000000..34bca94f2 --- /dev/null +++ b/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java @@ -0,0 +1,41 @@ +package org.openstack.swift.api; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import org.openstack.swift.SwiftCommand; + +/** + * Perform TempAuth authentication + * + * @author Robin Bramley + */ +public class TempAuthenticate implements SwiftCommand{ + + private static final String REQ_HEADER_STORAGE_USER = "X-Storage-User"; + private static final String REQ_HEADER_STORAGE_PASS = "X-Storage-Pass"; + public static final String RES_HEADER_STORAGE_URL = "X-Storage-Url"; + public static final String RES_HEADER_AUTH_TOKEN = "X-Auth-Token"; + + private String storageUser; + + private String storagePass; + + public TempAuthenticate(String storageUser, String storagePass) { + this.storageUser = storageUser; + this.storagePass = storagePass; + } + + @Override + public Response execute(WebTarget target) { + Invocation.Builder invocationBuilder = target.request(); + + invocationBuilder.header(REQ_HEADER_STORAGE_USER, storageUser); + invocationBuilder.header(REQ_HEADER_STORAGE_PASS, storagePass); + + return invocationBuilder.get(); + } + +} From bdb0f7d481c025056fc4227f8c8cea05bc81d34b Mon Sep 17 00:00:00 2001 From: efoncubierta Date: Thu, 10 Oct 2013 16:32:46 +0100 Subject: [PATCH 2/3] Single endpoint instance For each command is executed through SwiftClient a new listener is created in OpenStack.CLIENT.listeners . In order to avoid filling the memory with the same listener again and again, I have created the endpoint just once for each SwiftClient instance. --- .../main/java/org/openstack/swift/SwiftClient.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/swift-client/src/main/java/org/openstack/swift/SwiftClient.java b/swift-client/src/main/java/org/openstack/swift/SwiftClient.java index 8fc6a6861..bd38805b2 100644 --- a/swift-client/src/main/java/org/openstack/swift/SwiftClient.java +++ b/swift-client/src/main/java/org/openstack/swift/SwiftClient.java @@ -7,15 +7,20 @@ public class SwiftClient extends AbstractOpenStackClient { + private WebTarget endpoint = null; + public SwiftClient(String endpointURL, String token) { super(endpointURL, token); } public R execute(SwiftCommand command) { - WebTarget endpoint = OpenStack.CLIENT.target(endpointURL); - if(token != null) { - endpoint.register(tokenFilter); + if(endpoint == null) { + endpoint = OpenStack.CLIENT.target(endpointURL); + if(token != null) { + endpoint.register(tokenFilter); + } } + return command.execute(endpoint); } From c2b0b7ae2f33f314466e83ee44394e136fee4411 Mon Sep 17 00:00:00 2001 From: efoncubierta Date: Fri, 11 Oct 2013 13:54:27 +0100 Subject: [PATCH 3/3] Added token parameter to SwiftCommand.execute() The user token must be set per transaction, instead of creating a new listener in OpenStack.CLIENT every time the SwiftClient.execute method is called. --- .../java/org/openstack/swift/SwiftClient.java | 14 +++++------- .../org/openstack/swift/SwiftCommand.java | 5 ++++- .../org/openstack/swift/api/CopyObject.java | 9 +++++++- .../openstack/swift/api/CreateContainer.java | 14 +++++++++++- .../openstack/swift/api/CreateDirectory.java | 22 ++++++++++++++----- .../openstack/swift/api/DeleteContainer.java | 14 +++++++++++- .../org/openstack/swift/api/DeleteObject.java | 14 +++++++++++- .../openstack/swift/api/DownloadObject.java | 15 +++++++++++-- .../openstack/swift/api/ListContainers.java | 14 +++++++++++- .../org/openstack/swift/api/ListObjects.java | 15 ++++++++++++- .../org/openstack/swift/api/ShowAccount.java | 14 +++++++++++- .../openstack/swift/api/ShowContainer.java | 14 +++++++++++- .../org/openstack/swift/api/ShowObject.java | 14 +++++++++++- .../openstack/swift/api/TempAuthenticate.java | 16 +++++++++++--- .../org/openstack/swift/api/UploadObject.java | 10 +++++++++ 15 files changed, 175 insertions(+), 29 deletions(-) diff --git a/swift-client/src/main/java/org/openstack/swift/SwiftClient.java b/swift-client/src/main/java/org/openstack/swift/SwiftClient.java index bd38805b2..fbfb2696b 100644 --- a/swift-client/src/main/java/org/openstack/swift/SwiftClient.java +++ b/swift-client/src/main/java/org/openstack/swift/SwiftClient.java @@ -7,21 +7,17 @@ public class SwiftClient extends AbstractOpenStackClient { - private WebTarget endpoint = null; - public SwiftClient(String endpointURL, String token) { super(endpointURL, token); } public R execute(SwiftCommand command) { - if(endpoint == null) { - endpoint = OpenStack.CLIENT.target(endpointURL); - if(token != null) { - endpoint.register(tokenFilter); - } + final WebTarget endpoint = OpenStack.CLIENT.target(endpointURL); + if(token != null) { + return command.execute(endpoint, token); + } else { + return command.execute(endpoint); } - - return command.execute(endpoint); } } diff --git a/swift-client/src/main/java/org/openstack/swift/SwiftCommand.java b/swift-client/src/main/java/org/openstack/swift/SwiftCommand.java index c129bf2a0..1db68b3a7 100644 --- a/swift-client/src/main/java/org/openstack/swift/SwiftCommand.java +++ b/swift-client/src/main/java/org/openstack/swift/SwiftCommand.java @@ -3,7 +3,10 @@ import javax.ws.rs.client.WebTarget; public interface SwiftCommand { + + static final String REQ_HEADER_AUTH_TOKEN = "X-Auth-Token"; - R execute(WebTarget endpoint); + R execute(WebTarget target); + R execute(WebTarget target, String token); } diff --git a/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java b/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java index 99c4c76cc..df7afdef9 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java +++ b/swift-client/src/main/java/org/openstack/swift/api/CopyObject.java @@ -39,6 +39,11 @@ public CopyObject(String sourceContainerName, String sourceObjectName, String de @Override public Response execute(WebTarget target) { + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { // set up the value for the X-Copy-From header StringBuilder sb = new StringBuilder(2 + sourceContainerName.length() @@ -50,8 +55,10 @@ public Response execute(WebTarget target) { Invocation.Builder invocationBuilder = target.path(destContainerName).path(destObjectName).request(); invocationBuilder.header(REQ_HEADER_COPY_FROM, source); + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } return invocationBuilder.put(Entity.entity("", mimeType)); } - } diff --git a/swift-client/src/main/java/org/openstack/swift/api/CreateContainer.java b/swift-client/src/main/java/org/openstack/swift/api/CreateContainer.java index 56495759a..cfec54d1e 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/CreateContainer.java +++ b/swift-client/src/main/java/org/openstack/swift/api/CreateContainer.java @@ -1,6 +1,7 @@ package org.openstack.swift.api; import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; @@ -16,7 +17,18 @@ public CreateContainer(String containerName) { @Override public Response execute(WebTarget target) { - return target.path(containerName).request().method("PUT",Entity.text("*")); + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.path(containerName).request(); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.method("PUT", Entity.text("*")); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/CreateDirectory.java b/swift-client/src/main/java/org/openstack/swift/api/CreateDirectory.java index 586c6aba0..45c0cdbc7 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/CreateDirectory.java +++ b/swift-client/src/main/java/org/openstack/swift/api/CreateDirectory.java @@ -1,6 +1,7 @@ package org.openstack.swift.api; import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import org.openstack.swift.SwiftCommand; @@ -17,11 +18,22 @@ public CreateDirectory(String container, String path) { } @Override - public Void execute(WebTarget endpoint) { - endpoint.path(container).path(path).request().put(Entity.entity(new byte[1],"application/directory")); - return null; + public Void execute(WebTarget target) { + + return execute(target, null); } - - + @Override + public Void execute(WebTarget target, String token) { + // TODO Auto-generated method stub + Invocation.Builder invocationBuilder = target.path(container).path(path).request(); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + invocationBuilder.put(Entity.entity(new byte[1],"application/directory")); + + return null; + } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/DeleteContainer.java b/swift-client/src/main/java/org/openstack/swift/api/DeleteContainer.java index 100ab5e5b..22d9d9424 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/DeleteContainer.java +++ b/swift-client/src/main/java/org/openstack/swift/api/DeleteContainer.java @@ -1,5 +1,6 @@ package org.openstack.swift.api; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -16,7 +17,18 @@ public DeleteContainer(String containerName) { @Override public Response execute(WebTarget target) { - return target.path(containerName).request(MediaType.APPLICATION_JSON).delete(); + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.path(containerName).request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.delete(); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/DeleteObject.java b/swift-client/src/main/java/org/openstack/swift/api/DeleteObject.java index 7a50218bd..c8e9a7bb2 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/DeleteObject.java +++ b/swift-client/src/main/java/org/openstack/swift/api/DeleteObject.java @@ -1,5 +1,6 @@ package org.openstack.swift.api; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -19,7 +20,18 @@ public DeleteObject(String containerName, String objectName) { @Override public Response execute(WebTarget target) { - return target.path(containerName).path(objectName).request(MediaType.APPLICATION_JSON).delete(); + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.path(containerName).path(objectName).request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.delete(); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/DownloadObject.java b/swift-client/src/main/java/org/openstack/swift/api/DownloadObject.java index 0aa65f3a6..e597da7ba 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/DownloadObject.java +++ b/swift-client/src/main/java/org/openstack/swift/api/DownloadObject.java @@ -2,6 +2,7 @@ import java.io.InputStream; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -22,11 +23,21 @@ public DownloadObject(String containerName, String objectName) { @Override public ObjectDownload execute(WebTarget target) { - Response response = target.path(containerName).path(objectName).request(MediaType.APPLICATION_JSON).get(); + return execute(target, null); + } + + @Override + public ObjectDownload execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.path(containerName).path(objectName).request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + Response response = invocationBuilder.get(); ObjectDownload objectDownload = new ObjectDownload(); objectDownload.setInputStream((InputStream) response.getEntity()); return objectDownload; - } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/ListContainers.java b/swift-client/src/main/java/org/openstack/swift/api/ListContainers.java index 8d6de058e..ea6c228eb 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/ListContainers.java +++ b/swift-client/src/main/java/org/openstack/swift/api/ListContainers.java @@ -2,6 +2,7 @@ import java.util.List; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; @@ -13,7 +14,18 @@ public class ListContainers implements SwiftCommand>{ @Override public List execute(WebTarget target) { - return target.request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + return execute(target, null); + } + + @Override + public List execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.get(new GenericType>(){}); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/ListObjects.java b/swift-client/src/main/java/org/openstack/swift/api/ListObjects.java index 5e4532d7f..52a417c7d 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/ListObjects.java +++ b/swift-client/src/main/java/org/openstack/swift/api/ListObjects.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Map; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; @@ -23,13 +24,25 @@ public ListObjects(String containerName, Map filters) { @Override public List execute(WebTarget target) { + return execute(target, null); + } + + @Override + public List execute(WebTarget target, String token) { target = target.path(containerName); for(String filter : new String[]{"prefix","delimiter","path","marker"}) { if(filters.get(filter) != null) { target = target.queryParam(filter, filters.get(filter)); } } - return target.request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + + Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.get(new GenericType>(){}); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/ShowAccount.java b/swift-client/src/main/java/org/openstack/swift/api/ShowAccount.java index e3d52bf74..abdad7b5e 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/ShowAccount.java +++ b/swift-client/src/main/java/org/openstack/swift/api/ShowAccount.java @@ -1,5 +1,6 @@ package org.openstack.swift.api; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -10,7 +11,18 @@ public class ShowAccount implements SwiftCommand{ @Override public Response execute(WebTarget target) { - return target.request(MediaType.APPLICATION_JSON).head(); + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.head(); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/ShowContainer.java b/swift-client/src/main/java/org/openstack/swift/api/ShowContainer.java index ef931cf85..a9daf3702 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/ShowContainer.java +++ b/swift-client/src/main/java/org/openstack/swift/api/ShowContainer.java @@ -1,5 +1,6 @@ package org.openstack.swift.api; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -16,7 +17,18 @@ public ShowContainer(String containerName) { @Override public Response execute(WebTarget target) { - return target.path(containerName).request(MediaType.APPLICATION_JSON).head(); + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.path(containerName).request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.head(); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/ShowObject.java b/swift-client/src/main/java/org/openstack/swift/api/ShowObject.java index ad2b1e2e6..ada30ce51 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/ShowObject.java +++ b/swift-client/src/main/java/org/openstack/swift/api/ShowObject.java @@ -1,5 +1,6 @@ package org.openstack.swift.api; +import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -19,7 +20,18 @@ public ShowObject(String containerName, String objectName) { @Override public Response execute(WebTarget target) { - return target.path(containerName).path(objectName).request(MediaType.APPLICATION_JSON).head(); + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { + Invocation.Builder invocationBuilder = target.path(containerName).path(objectName).request(MediaType.APPLICATION_JSON); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.head(); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java b/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java index 34bca94f2..6bcc6eeaa 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java +++ b/swift-client/src/main/java/org/openstack/swift/api/TempAuthenticate.java @@ -3,6 +3,7 @@ import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.openstack.swift.SwiftCommand; @@ -30,12 +31,21 @@ public TempAuthenticate(String storageUser, String storagePass) { @Override public Response execute(WebTarget target) { + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { Invocation.Builder invocationBuilder = target.request(); - invocationBuilder.header(REQ_HEADER_STORAGE_USER, storageUser); + invocationBuilder.header(REQ_HEADER_STORAGE_USER, storageUser); invocationBuilder.header(REQ_HEADER_STORAGE_PASS, storagePass); - - return invocationBuilder.get(); + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + + return invocationBuilder.get(); } } diff --git a/swift-client/src/main/java/org/openstack/swift/api/UploadObject.java b/swift-client/src/main/java/org/openstack/swift/api/UploadObject.java index 1f312dac6..e43242294 100644 --- a/swift-client/src/main/java/org/openstack/swift/api/UploadObject.java +++ b/swift-client/src/main/java/org/openstack/swift/api/UploadObject.java @@ -19,10 +19,20 @@ public UploadObject(ObjectForUpload objectForUpload) { @Override public Response execute(WebTarget target) { + return execute(target, null); + } + + @Override + public Response execute(WebTarget target, String token) { Invocation.Builder invocationBuilder = target.path(objectForUpload.getContainer()).path(objectForUpload.getName()).request(MediaType.APPLICATION_JSON); for(String key : objectForUpload.getProperties().keySet()) { invocationBuilder.header("x-object-meta-" + key, objectForUpload.getProperties().get(key)); } + + if(token != null) { + invocationBuilder.header(REQ_HEADER_AUTH_TOKEN, token); + } + return invocationBuilder.put(Entity.entity(objectForUpload.getInputStream(), MediaType.APPLICATION_OCTET_STREAM), Response.class); }