var _ = require('lodash'); var path = require('path'); // Return true if file path is inside a folder function isInRoot(root, filename) { filename = path.normalize(filename); return (filename.substr(0, root.length) === root); } // Resolve paths in a specific folder // Throw error if file is outside this folder function resolveInRoot(root) { var input, result, err; input = _.chain(arguments) .toArray() .slice(1) .reduce(function(current, p) { // Handle path relative to book root ("/README.md") if (p[0] == "/" || p[0] == "\\") return p.slice(1); return current? path.join(current, p) : path.normalize(p); }, "") .value(); result = path.resolve(root, input); if (!isInRoot(root, result)) { err = new Error('EACCESS: "' + result + '" not in "' + root + '"'); err.code = 'EACCESS'; throw err; } return result; } module.exports = { isInRoot: isInRoot, resolveInRoot: resolveInRoot };