Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
}
finally {
request.orig[source] = request[source];
if (value !== undefined) {
request[source] = value;
}
}
if (request.route.settings.validate.failAction === 'ignore') {
return;
}
// Prepare error
const defaultError = validationError.isBoom ? validationError : Boom.badRequest(`Invalid request ${source} input`);
const detailedError = Boom.boomify(validationError, { statusCode: 400, override: false });
detailedError.output.payload.validation = { source, keys: [] };
if (validationError.details) {
for (const details of validationError.details) {
const path = details.path;
detailedError.output.payload.validation.keys.push(Hoek.escapeHtml(path.join('.')));
}
}
if (request.route.settings.validate.errorFields) {
for (const field in request.route.settings.validate.errorFields) {
detailedError.output.payload[field] = request.route.settings.validate.errorFields[field];
}
}
return request._core.toolkit.failAction(request, request.route.settings.validate.failAction, defaultError, { details: detailedError, tags: ['validation', 'error', source] });
};
else {
operation = method(request, h);
}
}
var response = await exports.timed(operation, options);
}
catch (err) {
if (Bounce.isSystem(err)) {
response = Boom.badImplementation(err);
}
else if (!Bounce.isError(err)) {
response = Boom.badImplementation('Cannot throw non-error object', err);
}
else {
response = Boom.boomify(err);
}
}
// Process response
if (response === undefined) {
response = Boom.badImplementation(`${method.name} method did not return a value, a promise, or throw an error`);
}
if (options.continue &&
response === exports.symbols.continue) {
if (options.continue === 'undefined') {
return;
}
if (request.raw.res.finished) {
if (event !== 'aborted') {
request.info.responded = Date.now();
}
team.attend();
return;
}
if (err) {
request.raw.res.destroy();
Response.drain(stream);
}
err = err || new Boom.Boom(`Request ${event}`, { statusCode: request.route.settings.response.disconnectStatusCode });
const error = internals.error(request, Boom.boomify(err));
request._setResponse(error);
if (request.raw.res[Config.symbol]) {
request.raw.res.statusCode = error.statusCode;
request.raw.res[Config.symbol].result = error.source; // Force injected response to error
}
if (event) {
request._log(['response', 'error', event]);
}
else {
request._log(['response', 'error'], err);
}
request.raw.res.end(); // Triggers injection promise resolve
team.attend();
const macOptions = Hoek.clone(options.integrity);
macOptions.salt = hmacSalt;
const mac = await exports.hmacWithPassword(password.integrity, macOptions, macBaseString);
if (!Cryptiles.fixedTimeComparison(mac.digest, hmac)) {
throw new Boom.Boom('Bad hmac value');
}
// Decrypt
try {
var encrypted = B64.base64urlDecode(encryptedB64, 'buffer');
}
catch (err) {
throw Boom.boomify(err);
}
const decryptOptions = Hoek.clone(options.encryption);
decryptOptions.salt = encryptionSalt;
try {
decryptOptions.iv = B64.base64urlDecode(encryptionIv, 'buffer');
}
catch (err) {
throw Boom.boomify(err);
}
const decrypted = await exports.decrypt(password.encryption, decryptOptions, encrypted);
// Parse JSON
}
if (!states.length) {
return;
}
let header = await request._core.states.format(states);
const existing = response.headers['set-cookie'];
if (existing) {
header = (Array.isArray(existing) ? existing : [existing]).concat(header);
}
response._header('set-cookie', header);
}
catch (err) {
const error = Boom.boomify(err);
request._log(['state', 'response', 'error'], error);
request._states = {}; // Clear broken state
throw error;
}
};
exports.parseAddrs = (request, h) => {
if (!request.query.arg) {
throw Boom.badRequest('Argument `addr` is required')
}
try {
multiaddr(request.query.arg)
} catch (err) {
throw Boom.boomify(err, { statusCode: 400 })
}
return {
addr: request.query.arg
}
}
_prepare() {
this._passThrough();
if (!this._processors.prepare) {
return this;
}
try {
return this._processors.prepare(this);
}
catch (err) {
throw Boom.boomify(err);
}
}
internals.hashFile = async function (response) {
const hash = Crypto.createHash('sha1');
hash.setEncoding('hex');
const fileStream = response.source.file.createReadStream({ autoClose: false });
fileStream.pipe(hash);
try {
await internals.streamEnd(fileStream);
return hash.read();
}
catch (err) {
Bounce.rethrow(err, 'system');
throw Boom.boomify(err, { message: 'Failed to hash file', data: { path: response.source.path } });
}
};
static wrap(result, request) {
if (result instanceof internals.Response ||
typeof result === 'symbol') {
return result;
}
if (result instanceof Error) {
return Boom.boomify(result);
}
return new internals.Response(result, request);
}
for await (const part of multipart(request)) {
if (part.type !== 'file') {
continue
}
file = Buffer.concat(await all(part.content))
}
if (!file) {
throw Boom.badRequest("Argument 'file' is required")
}
try {
return { config: JSON.parse(file.toString('utf8')) }
} catch (err) {
throw Boom.boomify(err, { message: 'Failed to decode file as config' })
}
},