Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
exports.pipeline = function(root){
console.log("Deprecated, please use MOUNT instead, this will be removed in a future version.");
var publicPath = path.resolve(root)
var terra = terraform.root(publicPath)
return function(req, rsp, next){
var normalizedPath = helpers.normalizeUrl(req.url)
var priorityList = terraform.helpers.buildPriorityList(normalizedPath)
var sourceFile = terraform.helpers.findFirstFile(publicPath, priorityList)
if(!sourceFile) return next()
terra.render(sourceFile, function(error, body){
if(error) return next(error)
if(!body) return next() // 404
var outputType = terraform.helpers.outputType(sourceFile)
var mimeType = helpers.mimeType(outputType)
var charset = mime.charsets.lookup(mimeType)
rsp.statusCode = 200
var charset = mime.charsets.lookup(mimeType)
var body = helpers.cssError(locals)
rsp.statusCode = 200
rsp.setHeader('Content-Type', mimeType + (charset ? '; charset=' + charset : ''))
rsp.setHeader('Content-Length', Buffer.byteLength(body, charset));
rsp.end(body)
}else{
// Make the paths relative but keep the root dir.
// TODO: move to helper.
//
// var loc = req.projectPath.split(path.sep); loc.pop()
// var loc = loc.join(path.sep) + path.sep
// if(error.filename) error.filename = error.filename.replace(loc, "")
terraform.root(__dirname + "/templates").render("error.jade", locals, function(err, body){
var mimeType = helpers.mimeType('html')
var charset = mime.charsets.lookup(mimeType)
rsp.statusCode = 500
rsp.setHeader('Content-Type', mimeType + (charset ? '; charset=' + charset : ''))
rsp.setHeader('Content-Length', Buffer.byteLength(body, charset));
rsp.end(body)
})
}
}else{
// 404
if(!body) return next()
var outputType = terraform.helpers.outputType(sourceFile)
var mimeType = helpers.mimeType(outputType)
var charset = mime.charsets.lookup(mimeType)
rsp.statusCode = 200
return function(req, rsp, next){
var host = req.headers.host;
var hostname = host.split(':')[0];
var arr = hostname.split(".");
var port = host.split(':')[1] ? ':' + host.split(':')[1] : '';
var poly = terraform.root(__dirname + "/templates");
if(arr.length == 2){
fs.readdir(dirPath, function(err, files){
var projects = [];
files.forEach(function(file){
var local = file.split('.');
var appPart = local.join("_");
if (local.length > 2) {
var domain = local.slice(Math.max(local.length - 2, 1)).join(".");
if (reservedDomains.indexOf(domain) != -1) {
appPart = local[0];
}
}
var poly = exports.poly = function(req, rsp, next){
if(req.hasOwnProperty("poly")) return next()
try{
req.poly = terraform.root(req.setup.publicPath, req.setup.config.globals)
}catch(error){
error.stack = helpers.stacktrace(error.stack, { lineno: error.lineno })
var locals = {
project: req.headers.host,
error: error,
pkg: pkg
}
return terraform.root(__dirname + "/templates").render("error.jade", locals, function(err, body){
rsp.statusCode = 500
rsp.end(body)
})
}
next()
}
outputPath = "www"
}
if(!outputPath){
outputPath = "www"
}
/**
* Setup all the paths and collect all the data
*/
try{
outputPath = path.resolve(projectPath, outputPath)
var setup = helpers.setup(projectPath, "production")
var terra = terraform.root(setup.publicPath, setup.config.globals)
}catch(err){
return callback(err)
}
/**
* Protect the user (as much as possible) from compiling up the tree
* resulting in the project deleting its own source code.
*/
if(!helpers.willAllow(projectPath, outputPath)){
return callback({
type: "Invalid Output Path",
message: "Output path cannot be greater then one level up from project path and must be in directory starting with `_` (underscore).",
projectPath: projectPath,
outputPath: outputPath