Updated Branches: refs/heads/master 48b0c1651 -> a5dab7061
Example to show how to enable CORS on a Container. Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/commit/a5dab706 Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/tree/a5dab706 Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/diff/a5dab706 Branch: refs/heads/master Commit: a5dab7061dec4a370984277e9db0e15e70865835 Parents: 48b0c16 Author: Everett Toews <[email protected]> Authored: Tue Jun 4 11:13:29 2013 -0500 Committer: Everett Toews <[email protected]> Committed: Tue Jun 4 11:28:49 2013 -0500 ---------------------------------------------------------------------- .../org/jclouds/examples/rackspace/SmokeTest.java | 2 + .../CrossOriginResourceSharingContainer.java | 133 +++++++++++++++ 2 files changed, 135 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/blob/a5dab706/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java index 6214e21..96b8dfa 100644 --- a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java @@ -38,6 +38,7 @@ import org.jclouds.examples.rackspace.clouddns.UpdateDomains; import org.jclouds.examples.rackspace.clouddns.UpdateRecords; import org.jclouds.examples.rackspace.cloudfiles.CloudFilesPublish; import org.jclouds.examples.rackspace.cloudfiles.CreateContainer; +import org.jclouds.examples.rackspace.cloudfiles.CrossOriginResourceSharingContainer; import org.jclouds.examples.rackspace.cloudfiles.DeleteObjectsAndContainer; import org.jclouds.examples.rackspace.cloudfiles.ListContainers; import org.jclouds.examples.rackspace.cloudfiles.ListObjects; @@ -90,6 +91,7 @@ public class SmokeTest { ListContainers.main(args); UploadObjects.main(args); ListObjects.main(args); + CrossOriginResourceSharingContainer.main(args); DeleteObjectsAndContainer.main(args); CreateVolumeAndAttach.main(args); http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/blob/a5dab706/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java ---------------------------------------------------------------------- diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java new file mode 100644 index 0000000..f01a477 --- /dev/null +++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java @@ -0,0 +1,133 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.examples.rackspace.cloudfiles; + +import java.util.Map; + +import org.jclouds.ContextBuilder; +import org.jclouds.blobstore.BlobStore; +import org.jclouds.blobstore.BlobStoreContext; +import org.jclouds.openstack.swift.CommonSwiftAsyncClient; +import org.jclouds.openstack.swift.CommonSwiftClient; +import org.jclouds.openstack.swift.domain.ContainerMetadata; +import org.jclouds.openstack.swift.options.CreateContainerOptions; +import org.jclouds.rest.RestContext; + +import com.google.common.collect.ImmutableMap; + +/** + * Create an object storage container with Cross Origin Resource Sharing (CORS) allowed. CORS container headers allow + * users to upload files from one website--or origin--to your Cloud Files account. When you set the CORS headers on + * your container, you tell Cloud Files which sites may post to your account, how often your container checks its + * allowed sites list, and whether or not metadata headers can be passed with the objects. + * + * @author Everett Toews + */ +public class CrossOriginResourceSharingContainer { + private BlobStore storage; + private RestContext<CommonSwiftClient, CommonSwiftAsyncClient> swift; + + /** + * To get a username and API key see http://www.jclouds.org/documentation/quickstart/rackspace/ + * + * The first argument (args[0]) must be your username + * The second argument (args[1]) must be your API key + */ + public static void main(String[] args) { + CrossOriginResourceSharingContainer corsContainer = new CrossOriginResourceSharingContainer(); + + try { + corsContainer.init(args); + corsContainer.createCorsContainer(); + corsContainer.updateCorsContainer(); + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + corsContainer.close(); + } + } + + private void init(String[] args) { + // The provider configures jclouds To use the Rackspace Cloud (US) + // To use the Rackspace Cloud (UK) set the provider to "cloudfiles-uk" + String provider = "cloudfiles-us"; + + String username = args[0]; + String apiKey = args[1]; + + BlobStoreContext context = ContextBuilder.newBuilder(provider) + .credentials(username, apiKey) + .buildView(BlobStoreContext.class); + storage = context.getBlobStore(); + swift = context.unwrap(); + } + + /** + * Create a Cross Origin Resource Sharing container. + * + * Access-Control-Allow-Origin: Which URLs can make Cross Origin Requests. Format is http://www.example.com. + * Separate URLs with a space. An asterisk (*) allows all. + * Access-Control-Max-Age: The maximum age for the browser to cache the options request, in seconds. + * Access-Control-Allow-Headers: Which custom metadata headers you allow to be assigned to objects in this container. + */ + private void createCorsContainer() { + System.out.println("Create Cross Origin Resource Sharing Container"); + + Map<String, String> corsMetadata = ImmutableMap.of( + "Access-Control-Allow-Origin", "*", + "Access-Control-Max-Age", "600", + "Access-Control-Allow-Headers", "X-My-Header"); + CreateContainerOptions options = CreateContainerOptions.Builder.withMetadata(corsMetadata); + + swift.getApi().createContainer(Constants.CONTAINER, options); + System.out.println(" " + Constants.CONTAINER); + + ContainerMetadata containerMetadata = swift.getApi().getContainerMetadata(Constants.CONTAINER); + System.out.println(" " + containerMetadata.getMetadata()); + } + + /** + * Update a Cross Origin Resource Sharing container. + */ + private void updateCorsContainer() { + System.out.println("Update Cross Origin Resource Sharing Container"); + + Map<String, String> corsMetadata = ImmutableMap.of( + "Access-Control-Allow-Origin", "http://www.example.com", + "Access-Control-Max-Age", "60", + "Access-Control-Allow-Headers", "X-My-Other-Header"); + + swift.getApi().setContainerMetadata(Constants.CONTAINER, corsMetadata); + System.out.println(" " + Constants.CONTAINER); + + ContainerMetadata containerMetadata = swift.getApi().getContainerMetadata(Constants.CONTAINER); + System.out.println(" " + containerMetadata.getMetadata()); + } + + /** + * Always close your service when you're done with it. + */ + public void close() { + if (storage != null) { + storage.getContext().close(); + } + } +}
