Compare commits

...

3 Commits

Author SHA1 Message Date
Anurag Mittal d186876291
added debug statements 2020-01-21 16:23:25 +01:00
Anurag Mittal d1e05eb580
exp/exposeCountItems 2020-01-10 19:23:44 +01:00
Anurag Mittal 8ac0beb65b
added countItems to deep healtch for easy access for UI(hack) 2020-01-10 14:22:35 +01:00
5 changed files with 164 additions and 151 deletions

View File

@ -70,6 +70,9 @@ function clientCheck(flightCheckOnStartUp, log, cb) {
if (fail) {
return cb(errors.InternalError, obj);
}
metadata.countItems(log, (err, res) => {
obj.dataManaged = res;
});
return cb(null, obj);
});
}
@ -123,7 +126,7 @@ function healthcheckHandler(clientIP, req, res, log, statsClient) {
}
const deep = (req.url === '/_/healthcheck/deep');
return routeHandler(deep, req, res, log, statsClient,
healthcheckEndHandler);
healthcheckEndHandler);
}
module.exports = {

View File

@ -19,7 +19,7 @@
},
"homepage": "https://github.com/scality/S3#readme",
"dependencies": {
"arsenal": "github:scality/Arsenal#c1bb2ac",
"arsenal": "github:scality/Arsenal#exp/perfMetadata",
"async": "~2.5.0",
"aws-sdk": "2.178.0",
"azure-storage": "^2.1.0",

View File

@ -9,7 +9,7 @@ const HttpRequestAuthV4 = require('../utils/HttpRequestAuthV4');
const config = require('../../config.json');
const DUMMY_SIGNATURE =
'baadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0de';
'baadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0debaadc0de';
http.globalAgent.keepAlive = true;
@ -61,24 +61,24 @@ class HttpChunkedUploadWithBadSignature extends HttpRequestAuthV4 {
function testChunkedPutWithBadSignature(n, alterSignatureChunkId, cb) {
const req = new HttpChunkedUploadWithBadSignature(
`http://${config.ipAddress}:${PORT}/${BUCKET}/obj-${n}`, {
accessKey: config.accessKey,
secretKey: config.secretKey,
method: 'PUT',
headers: {
'content-length': N_DATA_CHUNKS * DATA_CHUNK_SIZE,
'connection': 'keep-alive',
},
alterSignatureChunkId,
}, res => {
if (alterSignatureChunkId >= 0 &&
alterSignatureChunkId <= N_DATA_CHUNKS) {
assert.strictEqual(res.statusCode, 403);
} else {
assert.strictEqual(res.statusCode, 200);
}
res.on('data', () => {});
res.on('end', cb);
});
accessKey: config.accessKey,
secretKey: config.secretKey,
method: 'PUT',
headers: {
'content-length': N_DATA_CHUNKS * DATA_CHUNK_SIZE,
'connection': 'keep-alive',
},
alterSignatureChunkId,
}, res => {
if (alterSignatureChunkId >= 0 &&
alterSignatureChunkId <= N_DATA_CHUNKS) {
assert.strictEqual(res.statusCode, 403);
} else {
assert.strictEqual(res.statusCode, 200);
}
res.on('data', () => { });
res.on('end', cb);
});
req.on('error', err => {
assert.ifError(err);
@ -101,25 +101,25 @@ describe('streaming V4 signature with bad chunk signature', () => {
before(done => createBucket(bucketUtil, done));
after(done => cleanupBucket(bucketUtil, done));
it('Cloudserver should be robust against bad signature in streaming ' +
'payload', function badSignatureInStreamingPayload(cb) {
this.timeout(120000);
async.timesLimit(N_PUTS, 10, (n, done) => {
// multiple test cases depend on the value of
// alterSignatureChunkId:
// alterSignatureChunkId >= 0 &&
// alterSignatureChunkId < N_DATA_CHUNKS
// <=> alter the signature of the target data chunk
// alterSignatureChunkId == N_DATA_CHUNKS
// <=> alter the signature of the last empty chunk that
// carries the last payload signature
// alterSignatureChunkId > N_DATA_CHUNKS
// <=> no signature is altered (regular test case)
// By making n go from 0 to nDatachunks+1, we cover all
// above cases.
'payload', function badSignatureInStreamingPayload(cb) {
this.timeout(120000);
async.timesLimit(N_PUTS, 10, (n, done) => {
// multiple test cases depend on the value of
// alterSignatureChunkId:
// alterSignatureChunkId >= 0 &&
// alterSignatureChunkId < N_DATA_CHUNKS
// <=> alter the signature of the target data chunk
// alterSignatureChunkId == N_DATA_CHUNKS
// <=> alter the signature of the last empty chunk that
// carries the last payload signature
// alterSignatureChunkId > N_DATA_CHUNKS
// <=> no signature is altered (regular test case)
// By making n go from 0 to nDatachunks+1, we cover all
// above cases.
const alterSignatureChunkId = ALTER_CHUNK_SIGNATURE ?
(n % (N_DATA_CHUNKS + 2)) : null;
testChunkedPutWithBadSignature(n, alterSignatureChunkId, done);
}, err => cb(err));
});
const alterSignatureChunkId = ALTER_CHUNK_SIGNATURE ?
(n % (N_DATA_CHUNKS + 2)) : null;
testChunkedPutWithBadSignature(n, alterSignatureChunkId, done);
}, err => cb(err));
});
});

View File

@ -64,7 +64,7 @@ class HttpRequestAuthV4 extends stream.Writable {
getCredentialScope() {
const signingDate = this._timestamp.slice(0, 8);
const credentialScope =
`${signingDate}/${REGION}/${SERVICE}/aws4_request`;
`${signingDate}/${REGION}/${SERVICE}/aws4_request`;
// console.log(`CREDENTIAL SCOPE: "${credentialScope}"`);
return credentialScope;
}
@ -72,13 +72,13 @@ class HttpRequestAuthV4 extends stream.Writable {
getSigningKey() {
const signingDate = this._timestamp.slice(0, 8);
const dateKey = crypto.createHmac('sha256', `AWS4${this._secretKey}`)
.update(signingDate, 'binary').digest();
.update(signingDate, 'binary').digest();
const dateRegionKey = crypto.createHmac('sha256', dateKey)
.update(REGION, 'binary').digest();
.update(REGION, 'binary').digest();
const dateRegionServiceKey = crypto.createHmac('sha256', dateRegionKey)
.update(SERVICE, 'binary').digest();
.update(SERVICE, 'binary').digest();
this._signingKey = crypto.createHmac('sha256', dateRegionServiceKey)
.update('aws4_request', 'binary').digest();
.update('aws4_request', 'binary').digest();
}
createSignature(stringToSign) {
@ -97,18 +97,18 @@ class HttpRequestAuthV4 extends stream.Writable {
qsParams.push({ key, value });
});
const canonicalQueryString =
qsParams
.sort((a, b) => {
if (a.key !== b.key) {
return a.key < b.key ? -1 : 1;
}
return a.value < b.value ? -1 : 1;
})
.map(param => `${encodeURI(param.key)}=${encodeURI(param.value)}`)
.join('&');
qsParams
.sort((a, b) => {
if (a.key !== b.key) {
return a.key < b.key ? -1 : 1;
}
return a.value < b.value ? -1 : 1;
})
.map(param => `${encodeURI(param.key)}=${encodeURI(param.value)}`)
.join('&');
const canonicalSignedHeaders = signedHeadersList
.map(header => `${header}:${signedHeaders[header]}\n`)
.join('');
.map(header => `${header}:${signedHeaders[header]}\n`)
.join('');
const canonicalRequest = [
method,
urlObj.pathname,
@ -124,16 +124,16 @@ class HttpRequestAuthV4 extends stream.Writable {
constructRequestStringToSign(canonicalReq) {
const canonicalReqHash =
crypto.createHash('sha256').update(canonicalReq).digest('hex');
crypto.createHash('sha256').update(canonicalReq).digest('hex');
const stringToSign = `AWS4-HMAC-SHA256\n${this._timestamp}\n` +
`${this.getCredentialScope()}\n${canonicalReqHash}`;
`${this.getCredentialScope()}\n${canonicalReqHash}`;
// console.log(`STRING TO SIGN: "${stringToSign}"`);
return stringToSign;
}
getAuthorizationSignature(urlObj, signedHeaders) {
const canonicalRequest =
this.getCanonicalRequest(urlObj, signedHeaders);
this.getCanonicalRequest(urlObj, signedHeaders);
this._lastSignature = this.createSignature(
this.constructRequestStringToSign(canonicalRequest));
return this._lastSignature;
@ -141,23 +141,23 @@ class HttpRequestAuthV4 extends stream.Writable {
getAuthorizationHeader(urlObj, signedHeaders) {
const authorizationSignature =
this.getAuthorizationSignature(urlObj, signedHeaders);
this.getAuthorizationSignature(urlObj, signedHeaders);
const signedHeadersList = Object.keys(signedHeaders).sort();
return ['AWS4-HMAC-SHA256',
`Credential=${this._accessKey}/${this.getCredentialScope()},`,
`SignedHeaders=${signedHeadersList.join(';')},`,
`Signature=${authorizationSignature}`,
].join(' ');
`Credential=${this._accessKey}/${this.getCredentialScope()},`,
`SignedHeaders=${signedHeadersList.join(';')},`,
`Signature=${authorizationSignature}`,
].join(' ');
}
constructChunkStringToSign(chunkData) {
const currentChunkHash =
crypto.createHash('sha256').update(chunkData.toString())
.digest('hex');
crypto.createHash('sha256').update(chunkData.toString())
.digest('hex');
const stringToSign = `AWS4-HMAC-SHA256-PAYLOAD\n${this._timestamp}\n` +
`${this.getCredentialScope()}\n${this._lastSignature}\n` +
`${EMPTY_STRING_HASH}\n${currentChunkHash}`;
`${this.getCredentialScope()}\n${this._lastSignature}\n` +
`${EMPTY_STRING_HASH}\n${currentChunkHash}`;
// console.log(`CHUNK STRING TO SIGN: "${stringToSign}"`);
return stringToSign;
}
@ -174,12 +174,12 @@ class HttpRequestAuthV4 extends stream.Writable {
}
const chunkSignature = this.getChunkSignature(chunkData);
return [chunkData.length.toString(16),
';chunk-signature=',
chunkSignature,
'\r\n',
chunkData,
'\r\n',
].join('');
';chunk-signature=',
chunkSignature,
'\r\n',
chunkData,
'\r\n',
].join('');
}
_constructRequest(hasDataToSend) {
@ -207,7 +207,7 @@ class HttpRequestAuthV4 extends stream.Writable {
contentLengthHeader = header;
}
if (!['connection',
'transfer-encoding'].includes(lowerHeader)) {
'transfer-encoding'].includes(lowerHeader)) {
signedHeaders[lowerHeader] = httpHeaders[header];
}
});

160
yarn.lock
View File

@ -3,16 +3,16 @@
"@babel/code-frame@^7.0.0":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
dependencies:
"@babel/highlight" "^7.0.0"
"@babel/highlight" "^7.8.3"
"@babel/highlight@^7.0.0":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
"@babel/highlight@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
dependencies:
chalk "^2.0.0"
esutils "^2.0.2"
@ -146,11 +146,11 @@ ajv@4.10.0:
json-stable-stringify "^1.0.1"
ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1:
version "6.10.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
version "6.11.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9"
integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==
dependencies:
fast-deep-equal "^2.0.1"
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
@ -241,9 +241,9 @@ arraybuffer.slice@~0.0.7:
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
"arsenal@github:scality/Arsenal#c1bb2ac":
version "8.1.4"
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/c1bb2ac0585294b022718eb988361011b5b8ad6c"
"arsenal@github:scality/Arsenal#exp/perfMetadata":
version "8.2.0"
resolved "https://codeload.github.com/scality/Arsenal/tar.gz/fff956b02b53bc5bc17df100a69017a4ca8de687"
dependencies:
"@hapi/joi" "^15.1.0"
JSONStream "^1.0.0"
@ -485,9 +485,9 @@ aws-sdk@2.80.0:
xmlbuilder "4.2.1"
aws-sdk@^2.2.23:
version "2.597.0"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.597.0.tgz#028c7778b4fdc742ac040e7071b85a070d18bf2a"
integrity sha512-xdhm1bYnh46b7pEOmIsptQcPAJmq9MT31cUsn3WzOr6IPtiRLz5XIHIusFFsJYpyjiFB99b1n8SabRR7j6H1AA==
version "2.607.0"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.607.0.tgz#d3a8bdacdbcb5097629b2cf3f74ba953d80f7e46"
integrity sha512-j4SGSuu5GaUxa1KwDkAta4iDGKeYgb6ECF68C8HqYEn4+PdJz/fQ8gnszUHzt1sHxvVK2dso6d4eUdt5DSiuGw==
dependencies:
buffer "4.9.1"
events "1.1.1"
@ -505,9 +505,9 @@ aws-sign2@~0.7.0:
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c"
integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==
version "1.9.1"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
axios@^0.18.0:
version "0.18.1"
@ -682,6 +682,14 @@ bl@^1.0.0:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
bl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493"
integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==
dependencies:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
bl@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e"
@ -1171,7 +1179,7 @@ delegates@^1.0.0:
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
denque@^1.1.0:
denque@^1.1.0, denque@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
@ -1355,9 +1363,9 @@ error-ex@^1.2.0, error-ex@^1.3.1:
is-arrayish "^0.2.1"
es-abstract@^1.17.0, es-abstract@^1.17.0-next.1:
version "1.17.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1"
integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==
version "1.17.3"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.3.tgz#d921ff5889a3664921094bb13aaf0dfd11818578"
integrity sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==
dependencies:
es-to-primitive "^1.2.1"
function-bind "^1.1.1"
@ -1450,25 +1458,25 @@ eslint-config-scality@scality/Guidelines#28e73a2:
markdownlint "0.11.0"
eslint-import-resolver-node@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
version "0.3.3"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
dependencies:
debug "^2.6.9"
resolve "^1.5.0"
resolve "^1.13.1"
eslint-module-utils@^2.4.1:
version "2.5.0"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c"
integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==
version "2.5.2"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708"
integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==
dependencies:
debug "^2.6.9"
pkg-dir "^2.0.0"
eslint-plugin-import@^2.14.0:
version "2.19.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz#5654e10b7839d064dd0d46cd1b88ec2133a11448"
integrity sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==
version "2.20.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa"
integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==
dependencies:
array-includes "^3.0.3"
array.prototype.flat "^1.2.1"
@ -1634,10 +1642,10 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-deep-equal@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
@ -1904,9 +1912,9 @@ gtoken@^2.3.0:
pify "^4.0.0"
handlebars@^4.0.3:
version "4.5.3"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482"
integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==
version "4.7.2"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.2.tgz#01127b3840156a0927058779482031afe0e730d7"
integrity sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==
dependencies:
neo-async "^2.6.0"
optimist "^0.6.1"
@ -2867,17 +2875,17 @@ memorystream@^0.3.1:
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
mime-db@1.42.0:
version "1.42.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac"
integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==
mime-db@1.43.0:
version "1.43.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.19, mime-types@~2.1.24:
version "2.1.25"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437"
integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==
version "2.1.26"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
dependencies:
mime-db "1.42.0"
mime-db "1.43.0"
mime@^1.3.4:
version "1.6.0"
@ -2957,9 +2965,9 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@~0.5.1:
minimist "0.0.8"
mocha-junit-reporter@^1.23.1:
version "1.23.1"
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.1.tgz#ba11519c0b967f404e4123dd69bc4ba022ab0f12"
integrity sha512-qeDvKlZyAH2YJE1vhryvjUQ06t2hcnwwu4k5Ddwn0GQINhgEYFhlGM0DwYCVUHq5cuo32qAW6HDsTHt7zz99Ng==
version "1.23.3"
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.3.tgz#941e219dd759ed732f8641e165918aa8b167c981"
integrity sha512-ed8LqbRj1RxZfjt/oC9t12sfrWsjZ3gNnbhV1nuj9R/Jb5/P3Xb4duv2eCfCDMYH+fEu0mqca7m4wsiVjsxsvA==
dependencies:
debug "^2.2.0"
md5 "^2.1.0"
@ -3021,11 +3029,13 @@ mongodb@^2.2.31:
readable-stream "2.2.7"
mongodb@^3.0.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.4.1.tgz#0d15e57e0ea0fc85b7a4fb9291b374c2e71652dc"
integrity sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==
version "3.5.2"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.5.2.tgz#83b8bcb3d96b666a10eeca2f9c7ad1db056ae291"
integrity sha512-Lxt4th2tK2MxmkDBR5cMik+xEnkvhwg0BC5kGcHm9RBwaNEsrIryvV5istGXOHbnif5KslMpY1FbX6YbGJ/Trg==
dependencies:
bl "^2.2.0"
bson "^1.1.1"
denque "^1.4.1"
require_optional "^1.0.1"
safe-buffer "^5.1.2"
optionalDependencies:
@ -3656,9 +3666,9 @@ readable-stream@2.2.7:
util-deprecate "~1.0.1"
readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
@ -3669,9 +3679,9 @@ readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5:
util-deprecate "~1.0.1"
readable-stream@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
version "3.5.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.5.0.tgz#465d70e6d1087f6162d079cd0b5db7fbebfd1606"
integrity sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
@ -3792,10 +3802,10 @@ resolve-from@^4.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.5.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff"
integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1:
version "1.14.2"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2"
integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==
dependencies:
path-parse "^1.0.6"
@ -4537,9 +4547,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
uglify-js@^3.1.4:
version "3.7.3"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a"
integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg==
version "3.7.6"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.6.tgz#0783daa867d4bc962a37cc92f67f6e3238c47485"
integrity sha512-yYqjArOYSxvqeeiYH2VGjZOqq6SVmhxzaPjJC1W2F9e+bqvFL9QXQ2osQuKUFjM2hGjKG2YclQnRKWQSt/nOTQ==
dependencies:
commander "~2.20.3"
source-map "~0.6.1"
@ -4550,9 +4560,9 @@ ultron@1.0.x:
integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
underscore@^1.8.3:
version "1.9.1"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
version "1.9.2"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.2.tgz#0c8d6f536d6f378a5af264a72f7bec50feb7cf2f"
integrity sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==
underscore@~1.8.3:
version "1.8.3"
@ -4626,9 +4636,9 @@ uuid@3.3.2:
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2:
version "3.3.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
validate-npm-package-license@^3.0.1:
version "3.0.4"