123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- ;module.exports = (function(a, own){
- function s3(opt){
- if(!(this instanceof s3)){
- return new s3(opt);
- }
- var s = this;
- opt = opt || {};
- opt.bucket = opt.bucket || opt.Bucket || process.env.AWS_S3_BUCKET;
- opt.region = opt.region || process.AWS_REGION || "us-east-1";
- opt.accessKeyId = opt.key = opt.key || opt.accessKeyId || process.env.AWS_ACCESS_KEY_ID;
- opt.secretAccessKey = opt.secret = opt.secret || opt.secretAccessKey || process.env.AWS_SECRET_ACCESS_KEY;
- if(!opt.accessKeyId || !opt.secretAccessKey){
- return 0;
- }
- s.config = opt;
- s.AWS = require('aws-sdk');
- s.on = a.on;
- if(s.config.fakes3 = s.config.fakes3 || opt.fakes3 || process.env.fakes3){
- s.AWS.config.endpoint = s.config.endpoint = opt.fakes3 || s.config.fakes3 || process.env.fakes3;
- s.AWS.config.sslEnabled = s.config.sslEnabled = false;
- s.AWS.config.bucket = s.config.bucket = s.config.bucket.replace('.','p');
- }
- s.AWS.config.update(s.config);
- s.S3 = function(){
- var s = new this.AWS.S3();
- if(this.config.fakes3){
- s.endpoint = s.config.endpoint;
- }
- return s;
- }
- return s;
- };
- s3.id = function(m){ return m.Bucket +'/'+ m.Key }
- s3.chain = s3.prototype;
- s3.chain.PUT = function(key, o, cb, m){
- if(!key){ return }
- m = m || {}
- m.Bucket = m.Bucket || this.config.bucket;
- m.Key = m.Key || key;
- if(a.obj.is(o) || a.list.is(o)){
- m.Body = a.text.ify(o);
- m.ContentType = 'application/json';
- } else {
- m.Body = a.text.is(o)? o : a.text.ify(o);
- }
- this.S3().putObject(m, function(e,r){
- //a.log('saved', e,r);
- if(!cb){ return }
- cb(e,r);
- });
- return this;
- }
- s3.chain.GET = function(key, cb, o){
- if(!key){ return }
- var s = this
- , m = {
- Bucket: s.config.bucket
- ,Key: key
- }, id = s3.id(m);
- s.on(id, function(arg){
- var e = arg[0], d = arg[1], t = arg[2], m = arg[3], r = arg[4];
- this.off();
- delete s.batch[id];
- if(!a.fn.is(cb)){ return }
- try{ cb(e,d,t,m,r);
- }catch(e){
- console.log(e);
- }
- });
- s.batch = s.batch || {};
- if(s.batch[id]){ return s }
- s.batch[id] = (s.batch[id] || 0) + 1;
- s.S3().getObject(m, function(e,r){
- var d, t, m;
- r = r || (this && this.httpResponse);
- if(e || !r){ return s.on(id, [e]) }
- r.Text = r.text = t = (r.Body||r.body||'').toString('utf8');
- r.Type = r.type = r.ContentType || (r.headers||{})['content-type'];
- if(r.type && 'application/json' === r.type){
- d = a.obj.ify(t);
- }
- m = r.Metadata;
- s.on(id, [e, d, t, m, r]); // Warning about the r parameter, is is the raw response and may result in stupid SAX errors.
- });
- return s;
- }
- s3.chain.del = function(key, cb){
- if(!key){ return }
- var m = {
- Bucket: this.config.bucket
- ,Key: key
- }
- this.S3().deleteObject(m, function(e,r){
- if(!cb){ return }
- cb(e, r);
- });
- return this;
- }
- s3.chain.dbs = function(o, cb){
- cb = cb || o;
- var m = {}
- this.S3().listBuckets(m, function(e,r){
- //a.log('dbs',e);
- a.list.map((r||{}).Contents, function(v){console.log(v);});
- //a.log('---end list---');
- if(!a.fn.is(cb)) return;
- cb(e,r);
- });
- return this;
- }
- s3.chain.keys = function(from, upto, cb){
- cb = cb || upto || from;
- var m = {
- Bucket: this.config.bucket
- }
- if(a.text.is(from)){
- m.Prefix = from;
- }
- if(a.text.is(upto)){
- m.Delimiter = upto;
- }
- this.S3().listObjects(m, function(e,r){
- //a.log('list',e);
- a.list.map((r||{}).Contents, function(v){console.log(v)});
- //a.log('---end list---');
- if(!a.fn.is(cb)) return;
- cb(e,r);
- });
- return this;
- }
- return s3;
- })(require('../gun'), {});
- /**
- Knox S3 Config is:
- knox.createClient({
- key: ''
- , secret: ''
- , bucket: ''
- , endpoint: 'us-standard'
- , port: 0
- , secure: true
- , token: ''
- , style: ''
- , agent: ''
- });
- aws-sdk for s3 is:
- { "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-west-2" }
- AWS.config.loadFromPath('./config.json');
- {
- accessKeyId: process.env.AWS_ACCESS_KEY_ID = ''
- ,secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY = ''
- ,Bucket: process.env.s3Bucket = ''
- ,region: process.env.AWS_REGION = "us-east-1"
- ,sslEnabled: ''
- }
- **/
|