forked from mozilla/CSOL-site
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy paths3.js
60 lines (55 loc) · 1.67 KB
/
s3.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var s3;
const S3_REQUIRED_ENV_VARS = [
"CSOL_AWS_KEY",
"CSOL_AWS_SECRET",
"CSOL_AWS_BUCKET"
];
const USE_FAKE_S3 = process.env['NODE_ENV'] == 'development' &&
process.env["CSOL_AWS_FAKE_S3_DIR"];
if (USE_FAKE_S3) {
var FakeS3 = require('./s3-fake');
s3 = new FakeS3(process.env["CSOL_AWS_FAKE_S3_DIR"]);
} else {
var knox = require('knox');
S3_REQUIRED_ENV_VARS.forEach(function(name) {
if (!process.env[name])
throw new Error("missing environment var " + name + ", please " +
"define it or specify CSOL_AWS_FAKE_S3_DIR");
});
s3 = knox.createClient({
key: process.env["CSOL_AWS_KEY"],
secret: process.env["CSOL_AWS_SECRET"],
region: process.env["CSOL_AWS_REGION"],
bucket: process.env["CSOL_AWS_BUCKET"]
});
}
s3.healthCheck = function(meta, cb) {
var async = require('async');
var rnd = Math.floor(Math.random() * 100000).toString();
var url = '/healthChecker_test_' + rnd;
if (USE_FAKE_S3)
meta.notes = 'fake s3';
else
meta.notes = process.env["CSOL_AWS_BUCKET"] + '.s3.amazonaws.com';
async.series([
s3.putBuffer.bind(s3, new Buffer(rnd), url, {
'Content-Type': 'text/plain'
}),
function(cb) {
s3.get(url).on('response', function(proxy) {
var chunks = [];
proxy.on('data', function(chunk) {
chunks.push(chunk);
});
proxy.on('end', function() {
var buf = Buffer.concat(chunks);
if (buf.toString('ascii') != rnd)
return cb("expected " + rnd + ", got " + buf.toString('ascii'));
cb();
});
}).end();
},
s3.deleteFile.bind(s3, url)
], cb);
};
module.exports = s3;