S3.js
Summary
No overview generated for 'S3.js'
function S3Connection(host) {
app.addRepository("modules/core/Date.js");
app.addRepository("modules/core/String.js");
host = host || "s3.amazonaws.com";
var crypto = Packages.javax.crypto;
var mac = crypto.Mac.getInstance("HmacSHA1");
var currentBucket, awsId;
var doRequest = function(method, param) {
if (param.length < 1) {
}
helma.Http.call(this);
this.setMethod(method);
this.setHeader("Content-Type", "");
this.setHeader("Host", host);
this.setHeader("Date", (new Date).format(
"EEE, dd MMM yyyy HH:mm:ss Z", java.util.Locale.US
));
var baseUri = "http://" + host;
var bucket, object;
if (currentBucket) {
bucket = currentBucket;
object = param[0];
} else {
bucket = param[0];
object = param[1];
}
var path = new java.lang.StringBuffer("/");
if (bucket) {
if (bucket.constructor == S3Bucket) {
path.append(bucket.getName());
} else if (method == "PUT" && !object) {
throw Error("PUT request requires S3Bucket instance as argument")
} else {
path.append(bucket);
}
}
if (object) {
path.append("/");
if (object.constructor == S3Object) {
path.append(object.getName());
if (method == "PUT") {
var content = object.getContent();
this.setContent(content);
this.setHeader("Content-Type", object.getContentType());
}
} else {
if (method == "PUT") {
throw Error("PUT request requires S3Object instance as argument");
}
path.append(object);
}
}
var request = new java.lang.StringBuffer(method + "\n");
request.append((this.getHeader("Content-MD5") || "") + "\n");
request.append((this.getHeader("Content-Type") || "") + "\n");
request.append(this.getHeader("Date") + "\n");
if (method == "PUT") {
(object || bucket).forEachProperty(function(name, value) {
this.setHeader(name, value);
request.append(name + ":" + value + "\n");
});
}
request.append(path);
var base64 = new Packages.sun.misc.BASE64Encoder();
var signature = base64.encode(mac.doFinal(java.lang.String(request).getBytes()));
var auth = "AWS " + awsId + ":" + signature;
this.setHeader("Authorization", auth);
return this.getUrl((baseUri + path).replace(/([^:])\/\
};
this.authenticate = function(id, key) {
var signingKey = new crypto.spec.SecretKeySpec(
(new java.lang.String(key)).getBytes(), "HmacSHA1"
);
mac.init(signingKey);
awsId = id;
return;
};
this.setCurrentBucket = function(bucket) {
currentBucket = bucket;
return;
};
this.get = function() {
return doRequest("GET", arguments);
};
this.put = function() {
return doRequest("PUT", arguments);
};
this.getInfo = function() {
return doRequest("HEAD", arguments);
};
this.remove = function() {
return doRequest("DELETE", arguments);
};
this.close = function() {
awsId = null;
mac.init(new crypto.spec.SecretKeySpec([0], "HmacSHA1"));
return;
};
this.toString = function() {
return "[S3Connection" + (awsId ? "" : " (closed)") + "]";
};
return this;
}
function S3Container(name) {
var PROPERTYPREFIX = "x-amz-";
var properties = {};
if (!name) {
throw Error("Missing required name argument when instantiating S3 container");
}
this.getName = function() {
return name;
};
this.getProperty = function(name) {
return properties[PROPERTYPREFIX + name];
};
this.forEachProperty = function(callback) {
var i;
for (i in properties) {
callback(i, properties[i]);
}
return;
};
this.setProperty = function(name, value) {
var key = name.trim().toLowerCase();
if (!key.startsWith(PROPERTYPREFIX)) {
key = PROPERTYPREFIX + key;
}
properties[key] = value;
return;
};
this.setPrivate = function() {
return this.setProperty("acl", "private");
};
this.setPublic = function() {
return this.setProperty("acl", "public-read");
};
this.setPublicWritable = function() {
return this.setProperty("acl", "public-read-write");
};
this.toString = function() {
return "[S3Container]";
};
return this;
}
function S3Bucket(name, objects) {
S3Container.call(this, name);
objects = objects || {};
this.getObjects = function() {
return objects;
};
this.toString = function() {
return "[S3Bucket " + name + "]";
}
return this;
}
function S3Object(name, properties) {
S3Container.call(this, name);
var content;
var contentType = "text/plain";
properties = properties || {};
this.getContent = function() {
return content;
};
this.getContentType = function() {
return contentType;
};
this.setContent = function(data) {
content = data;
return;
};
this.setContentType = function(type) {
contentType = type;
return;
};
this.toString = function() {
return "[S3Object " + name + "]";
};
return this;
}
Documentation generated by
JSDoc on Sun Mar 4 00:51:24 2007