// // typica - A client library for Amazon Web Services // Copyright (C) 2008,2009 Xerox Corporation // // Licensed 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 com.xerox.amazonws.ec2; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import org.apache.commons.codec.binary.Base64; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * This class describes the upload policy used when bundling images. */ public class UploadPolicy { private static Log logger = LogFactory.getLog(UploadPolicy.class); private int minutesToExpiration; private String bucket; private String acl; private String prefix; public UploadPolicy(int minutesToExpiration, String bucket, String acl, String prefix) { this.minutesToExpiration = minutesToExpiration; this.bucket = bucket; this.acl = acl; this.prefix = prefix; } UploadPolicy(String jsonPolicyString) { // TODO: parse json string.. do we really want another dependency?? } public int getMinutesToExpiration() { return minutesToExpiration; } public String getBucket() { return bucket; } public String getAcl() { return acl; } public String getPrefix() { return prefix; } public String getPolicyString() { StringBuilder json = new StringBuilder("{\n"); json.append("\"expiration\": \""); final String DateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"; SimpleDateFormat format = new SimpleDateFormat( DateFormat, Locale.US ); format.setTimeZone( TimeZone.getTimeZone( "GMT" ) ); json.append(format.format(new Date(System.currentTimeMillis()+(minutesToExpiration*60000L)))); json.append("\",\n"); json.append("\"conditions\": [\n"); json.append("{\"acl\": \""); json.append(acl); json.append("\"},\n"); json.append("{\"bucket\": \""); json.append(bucket); json.append("\"},\n"); json.append("[\"starts-with\", \"$key\", \""); json.append(prefix); json.append("\"],\n"); json.append("]\n}"); logger.debug("JSON policy string = "+json.toString()); return new String(Base64.encodeBase64(json.toString().getBytes())); } public String toString() { return "UploadPolicy[minutesToExpiration="+minutesToExpiration+", bucket=" +this.bucket+", acl="+this.acl+"]"; } }