New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

baidu-bcs

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

baidu-bcs - npm Package Compare versions

Comparing version 0.1.0 to 0.1.1

lib/bcs.js

538

index.js

@@ -1,537 +0,1 @@

var fs = require('fs')
var crypto = require('crypto')
var http = require('http')
var async = require('async')
var mime = require('mime')
var Stream = require('stream')
function noop() {}
var BCS = function (options) {
options = options || {}
this.accessKey = options.accessKey
this.secretKey = options.secretKey
this.host = options.host || 'bcs.duapp.com'
this.protocol = options.protocol || 'http:'
this.port = options.port || 80
this.ip = options.ip // 允许上传的ip,默认为空,即:不限制ip
this.time = options.time // 有效时间
this.size = options.size // 限制上传最大字节
}
/*
* sign
*
* options: {
* method:'',
* bucket:'',
* object:''
* }
*/
BCS.prototype.generateSign = function (options) {
/*
* sign = Flag:AccessKey:Signature
*/
var self = this
// content
var flag = 'MBO'
var content = 'Method=' + options.method + '\n'
+ 'Bucket=' + options.bucket + '\n'
+ 'Object=' + options.object + '\n'
if (self.time) {
flag += 'T'
content += 'Time=' + self.time + '\n'
}
if (self.ip) {
flag += 'I'
content += 'Ip=' + self.ip + '\n'
}
if (self.size) {
flag += 'S'
content += 'Size=' + self.size + '\n'
}
content = flag + '\n' + content
var signature = generateSignature(self.secretKey, content)
var sign = flag + ':' + self.accessKey + ':' + encodeURIComponent(signature)
return sign
}
function generateSignature (secretKey, content) {
return crypto.createHmac('sha1', secretKey).update(content).digest().toString('base64')
}
/*
* request
*
* options: {
* path: '',
* method: '',
* headers: '',
* source: '' // string (file path), buffer, stream
* }
*/
BCS.prototype.request = function (options, callback) {
options = options || {}
var self = this
options.host = self.host
options.port = self.port
if (options.path) {
options.path.split('/').map(function (item) {
return encodeURIComponent(item)
}).join('/')
}
var response = {}
var req = http.request(options, function (res) {
response.status = res.statusCode
response.headers = res.headers
response.body = ''
res.setEncoding('utf8')
res.on('data', function (chunk) {
response.body += chunk
})
res.on('end', function () {
if ((res.headers['content-type'] === 'application/json') && response.body) {
try {
response.body = JSON.parse(response.body)
} catch (e) {}
}
callback(null, response)
})
})
if (options.headers) {
for (var header in options.headers) {
req.setHeader(header, options.headers[header])
}
}
req.on('error', function (error) {
callback(error, null)
})
/*
* body
*/
if (options.source) {
if (typeof options.source === 'string') {
dealSourceWithFilePath(options.source)
} else if (Buffer.isBuffer(options.source)) {
dealSourceWithBuffer(options.source)
} else if (options.source instanceof Stream) {
dealSourceWithStream(options.source)
} else {
req.end()
}
} else {
req.end()
}
function dealSourceWithFilePath(filepath) {
var contentType = mime.lookup(options.source)
var contentLength = 0
async.series([
function (cb) {
fs.stat(filepath, function (error, stats) {
if (error) {
return cb(error)
}
contentLength = stats.size
cb(null)
})
}
], function (error) {
if (error) {
return callback(error)
}
if (contentType && !req.getHeader('Content-Type')) {
req.setHeader('Content-Type', contentType)
}
if (contentLength) {
req.setHeader('Content-Length', contentLength)
}
fs.createReadStream(filepath).pipe(req)
})
}
function dealSourceWithBuffer(bufferSource) {
var contentLength = bufferSource.length
if (contentLength) {
req.setHeader('Content-Length', contentLength)
}
req.end(bufferSource)
}
function dealSourceWithStream(streamSource) {
streamSource.pipe(req)
}
}
/*
* put bucket
*
* options: {
* bucket: '',
* acl: '' // optional
* }
*/
BCS.prototype.putBucket = function (options, callback) {
options = options || {}
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
if (options.acl) {
headers['x-bs-acl'] = options.acl
}
// path
var path = '/' + options.bucket + '?sign=' + self.generateSign({
method: 'PUT',
bucket: options.bucket,
object: '/'
})
self.request({
path: path,
method: 'PUT',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* list Bucket
*/
BCS.prototype.listBucket = function (callback) {
callback = callback || noop
var self = this
// headers
var headers = {
'Content-Length': 0
}
// path
var path = '/?sign=' + self.generateSign({
method: 'GET',
bucket: '',
object: '/'
})
self.request({
path: path,
method: 'GET',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* delete Bucket
*/
BCS.prototype.deleteBucket = function (options, callback) {
options = options || {}
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
if (options.acl) {
headers['x-bs-acl'] = options.acl
}
// path
var path = '/' + options.bucket + '?sign=' + self.generateSign({
method: 'DELETE',
bucket: options.bucket,
object: '/'
})
self.request({
path: path,
method: 'DELETE',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* put object
*
* options: {
* bucket: '',
* object: '',
* source: '',
* headers: {} // optional
* }
*/
BCS.prototype.putObject = function (options, callback) {
options = options || {}
callback = callback || noop()
var self = this
// headers
var headers = options.headers || {}
// path
var path = '/' + options.bucket + '/' + options.object + '?sign=' + self.generateSign({
method: 'PUT',
bucket: options.bucket,
object: '/' + options.object
})
self.request({
path: path,
method: 'PUT',
headers: headers,
source: options.source
}, function (error, response) {
callback(error, response)
})
}
/*
* copy object
*
* option: {
* sourceBucket: '',
* sourceObject: '',
* bucket: '',
* object: ''
}
*/
BCS.prototype.copyObject = function (options, callback) {
options = options || {}
callback = callback || noop()
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
headers['x-bs-copy-source'] = 'http://bcs.duapp.com/' + options.sourceBucket +'/' + options.sourceObject
// path
var path = '/' + options.bucket + '/' + options.object + '?sign=' + self.generateSign({
method: 'PUT',
bucket: options.bucket,
object: '/' + options.object
})
self.request({
path: path,
method: 'PUT',
headers: headers,
source: options.source
}, function (error, response) {
callback(error, response)
})
}
/*
* put superfile
*/
BCS.prototype.putSuperfile = function (options, callback) {
// todo......
}
/*
* get object
*/
BCS.prototype.getObject = function (options, callback) {
options = options || {}
callback = callback || noop()
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
// path
var path = '/' + options.bucket + '/' + options.object + '?sign=' + self.generateSign({
method: 'GET',
bucket: options.bucket,
object: '/' + options.object
})
self.request({
path: path,
method: 'GET',
headers: headers,
}, function (error, response) {
callback(error, response)
})
}
/*
* head object
*/
BCS.prototype.headObject = function (options, callback) {
options = options || {}
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
// path
var path = '/' + options.bucket + '/' + options.object + '?sign=' + self.generateSign({
method: 'HEAD',
bucket: options.bucket,
object: '/' + options.object
})
self.request({
path: path,
method: 'HEAD',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* list object
*
* options: {
* bucket: ''
* start: 0, // optional, default: 0
* limit: 30 // optional, default: 1000
}
*/
BCS.prototype.listObject = function (options, callback) {
options = options || {}
options.start = options.start || 0
options.limit = options.limit || 1000
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
// path
var path = '/' + options.bucket + '?sign=' + self.generateSign({
method: 'GET',
bucket: options.bucket,
object: '/'
}) + '&start=' + options.start + '&limit=' + options.limit
self.request({
path: path,
method: 'GET',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* delete object
*/
BCS.prototype.deleteObject = function (options, callback) {
options = options || {}
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
// path
var path = '/' + options.bucket + '/' + options.object + '?sign=' + self.generateSign({
method: 'DELETE',
bucket: options.bucket,
object: '/' + options.object
})
self.request({
path: path,
method: 'DELETE',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* put acl
*/
BCS.prototype.putAcl = function (options, callback) {
options = options || {}
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
headers['x-bs-acl'] = options.acl
// path
var path = '/' + options.bucket + '?acl=1&sign=' + self.generateSign({
method: 'PUT',
bucket: options.bucket,
object: '/'
})
self.request({
path: path,
method: 'PUT',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* get acl
*/
BCS.prototype.getAcl = function (options, callback) {
options = options || {}
callback = callback || noop
var self = this
// headers
var headers = options.headers || {}
headers['Content-Length'] = 0
// path
var path = '/' + options.bucket + '?acl=1&sign=' + self.generateSign({
method: 'GET',
bucket: options.bucket,
object: '/'
})
self.request({
path: path,
method: 'GET',
headers: headers
}, function (error, response) {
callback(error, response)
})
}
/*
* export
*/
exports.createClient = function (options) {
return new BCS(options)
}
module.exports = require('./lib/bcs')
{
"name": "baidu-bcs",
"version": "0.1.0",
"version": "0.1.1",
"description": "baidu bcs node.js sdk",

@@ -21,3 +21,3 @@ "main": "index.js",

"blanket": {
"pattern": "baidu-bcs/index.js"
"pattern": "baidu-bcs/lib"
}

@@ -32,4 +32,3 @@ },

"dependencies": {
"mime": "~1.2.11",
"async": "~0.2.9"
"mime": "~1.2.11"
},

@@ -36,0 +35,0 @@ "devDependencies": {

@@ -29,4 +29,4 @@ ### baidu-bcs

var bcs = BCS.createClient({
accessKey: 'your access key',
secretKey: 'your secret key'
accessKey: 'your access key',
secretKey: 'your secret key'
})

@@ -38,4 +38,4 @@ ```

bcs.putBucket({
bucket: '',
acl: ''
bucket: '',
acl: ''
}, function (error, result) {})

@@ -47,4 +47,4 @@ ```

bcs.putBucket({
bucket: '',
acl: ''
bucket: '',
acl: ''
}, function (error, result) {})

@@ -61,3 +61,3 @@ ```

bcs.deleteBucket({
bucket: ''
bucket: ''
}, function (error, result) {})

@@ -69,5 +69,5 @@ ```

bcs.putObject({
bucket: '',
object: '',
source: './index.js'
bucket: '',
object: '',
source: './index.js'
}, function (error, result) {})

@@ -80,8 +80,8 @@ ```

bcs.putObject({
bucket: '',
object: '',
source: new Buffer('baidu-bcs'),
headers: {
'Content-Type': 'text/plain'
}
bucket: '',
object: '',
source: new Buffer('baidu-bcs'),
headers: {
'Content-Type': 'text/plain'
}
}, function (error, result) {})

@@ -93,9 +93,9 @@ ```

bcs.putObject({
bucket: '',
object: '',
source: fs.createReadStream(__filename),
headers: {
'Content-Type': 'text/plain',
'Content-Length': fs.statSync(__filename).size // important: the 'Content-Type' is must
}
bucket: '',
object: '',
source: fs.createReadStream(__filename),
headers: {
'Content-Type': 'text/plain',
'Content-Length': fs.statSync(__filename).size // important: the 'Content-Type' is must
}
}, function (error, result) {})

@@ -111,9 +111,9 @@ ```

bcs.copyObject({
bucket: '',
object: '',
sourceBucket: '',
sourceObject: '',
headers: {
'Content-Type': ''
}
bucket: '',
object: '',
sourceBucket: '',
sourceObject: '',
headers: {
'Content-Type': ''
}
}, function (error, result) {})

@@ -125,4 +125,4 @@ ```

bcs.headObject({
bucket: '',
object: ''
bucket: '',
object: ''
}, function (error, result) {})

@@ -134,5 +134,5 @@ ```

bcs.listObject({
bucket: '',
start: 1,
limit: 1
bucket: '',
start: 1,
limit: 1
}, function (error, result) {})

@@ -144,11 +144,30 @@ ```

bcs.getObject({
bucket: '',
object: '',
bucket: '',
object: '',
}, function (error, result) {})
```
get object to file path
```js
bcs.getObject({
bucket: '',
object: '',
dest: './xxoo.xo'
}, function (error, result) {})
```
get object to write stream
```js
var writeStream = fs.createWriteStream('./xxoo.xo')
bcs.getObject({
bucket: '',
object: '',
dest: writeStream
}, function (error, result) {})
```
delete bucket
```js
bcs.deleteBucket({
bucket: ''
bucket: ''
}, function (error, result) {})

@@ -160,4 +179,4 @@ ```

bcs.putAcl({
bucket: '',
acl: 'private'
bucket: '',
acl: 'private'
}, function (error, result) {})

@@ -169,3 +188,3 @@ ```

bcs.getAcl({
bucket: ''
bucket: ''
}, function (error, result) {})

@@ -183,2 +202,5 @@ ```

### test
* coverage: 94%
coverage: 94%
### License
MIT

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc