UNPKG

softlayer-object-storage

Version:

Set of helpers to work with the softLayer Object Storage.

1 lines 5.57 kB
'use strict';var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}/* eslint-disable prefer-promise-reject-errors */var request=require('request');var fs=require('fs');var ObjectStorage=function(){function ObjectStorage(config){_classCallCheck(this,ObjectStorage);this.removeAccess=config.removeAccess||false;this.storage=config.storage;this.endpoint=config.endpoint;this.username=config.username;this.headers=config.headers||{};this.key=config.key;this.container=config.container;this.token={url:this.endpoint,timeout:config.timeout||1000*120,headers:_extends({'X-Auth-Key':this.key,'X-Auth-User':this.username},this.headers)};}_createClass(ObjectStorage,[{key:'createContainer',value:function createContainer(containerName){var _this=this;return new Promise(function(resolve,reject){request.get(_this.token,function(err,res){if(err)return reject(err);var token={timeout:_this.token.timeout,url:JSON.parse(res.body).storage[_this.storage]+'/'+containerName,headers:{'X-Auth-Token':res.headers['x-auth-token']}};request.put(token,function(error){if(error)return reject(error);resolve(token.url);}).on('error',reject);}).on('error',reject);});}},{key:'removeContainer',value:function removeContainer(containerName){var _this2=this;if(this.removeAccess){return new Promise(function(resolve,reject){request.get(_this2.token,function(err,res){if(err)return reject(err);var token={timeout:_this2.token.timeout,url:JSON.parse(res.body).storage[_this2.storage]+'/'+containerName,headers:{'X-Auth-Token':res.headers['x-auth-token']}};request.delete(token,function(error){if(error)reject({error:error,done:true});resolve({done:true});}).on('error',reject);}).on('error',reject);});}return Promise.resolve('remove not allowed, set { removeAccess: true } to allow');}},{key:'listContainers',value:function listContainers(){var _this3=this;return new Promise(function(resolve,reject){request.get(_this3.token,function(err,res){var token={timeout:_this3.token.timeout,url:''+JSON.parse(res.body).storage[_this3.storage],headers:{'X-Auth-Token':res.headers['x-auth-token']}};request.get(token,function(error,_ref){var body=_ref.body;if(error)return reject(error);var list=[];body.split('\n').forEach(function(name){if(name){list.push(JSON.parse(res.body).storage[_this3.storage]+'/'+name);}});resolve(list);}).on('error',reject);}).on('error',reject);});}},{key:'listFiles',value:function listFiles(path){var _this4=this;return new Promise(function(resolve,reject){request.get(_this4.token,function(err,res){var token={timeout:_this4.token.timeout,url:JSON.parse(res.body).storage[_this4.storage]+'/'+_this4.container,headers:{'X-Auth-Token':res.headers['x-auth-token']}};request.get(token,function(error,_ref2){var body=_ref2.body;if(error)return reject(error);var list=[];body.split('\n').forEach(function(name){if(name){var url=JSON.parse(res.body).storage[_this4.storage]+'/'+_this4.container+'/'+name;if(path){if(~url.indexOf(''+_this4.container+path))list.push(url);}else{list.push(url);}}});resolve(list);}).on('error',reject);}).on('error',reject);});}},{key:'uploadFile',value:function uploadFile(file,_ref3){var _this5=this;var name=_ref3.name,container=_ref3.container,headers=_ref3.headers;return new Promise(function(resolve,reject){var readStream=typeof file==='string'?fs.createReadStream(file):file;request.get(_this5.token,function(err,res){if(err){reject(err);}else{var token={timeout:_this5.token.timeout,url:res.headers['x-storage-url']+'/'+(container||_this5.container)+'/'+(name||file.filename),headers:_extends({'X-Auth-Token':res.headers['x-auth-token']},headers)};var writeStream=request.put(token);readStream.pipe(writeStream);writeStream.on('error',reject);readStream.on('error',reject);readStream.on('close',function(){return resolve(token.url);});}}).on('error',reject);});}},{key:'removeFile',value:function removeFile(files){var _this6=this;if(this.removeAccess){return new Promise(function(resolve,reject){request.get(_this6.token,function(err,res){if(err)return reject(err);if(Array.isArray(files)){files.forEach(function(filename,idx){request.delete({timeout:_this6.token.timeout,url:JSON.parse(res.body).storage[_this6.storage]+'/'+_this6.container+'/'+filename,headers:{'X-Auth-Token':res.headers['x-auth-token']}},function(error){if(error){reject(error);}else if(idx===files.length-1){resolve({done:true});}});});}else{request.delete({timeout:_this6.token.timeout,url:JSON.parse(res.body).storage[_this6.storage]+'/'+_this6.container+'/'+files,headers:{'X-Auth-Token':res.headers['x-auth-token']}},function(error){if(error){reject(error);}else{resolve({done:true});}});}});});}return Promise.resolve('remove not allowed, set { removeAccess: true } to allow');}}]);return ObjectStorage;}();module.exports=ObjectStorage;