Socket
Socket
Sign inDemoInstall

express-hbs

Package Overview
Dependencies
48
Maintainers
31
Versions
57
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.4.2 to 2.5.0

3

example/app-layoutsDir.js

@@ -22,3 +22,4 @@ // npm install express express-hbs

layoutsDir: relative('views/layout'),
defaultLayout: relative('views/layout/default.hbs')
defaultLayout: relative('views/layout/default.hbs'),
restrictLayoutsTo: relative('views/layout')
}));

@@ -25,0 +26,0 @@ app.set('view engine', 'hbs');

@@ -23,3 +23,4 @@ 'use strict';

partialsDir: [relative('views/partials'), relative('views/partials-other')],
defaultLayout: relative('views/layout/default.hbs')
defaultLayout: relative('views/layout/default.hbs'),
restrictLayoutsTo: viewsDir
}));

@@ -26,0 +27,0 @@ app.set('view engine', 'hbs');

@@ -102,2 +102,9 @@ 'use strict';

if (this.restrictLayoutsTo) {
if (!layoutFile.startsWith(this.restrictLayoutsTo)) {
var err = new Error('Cannot read ' + layoutFile + ' it does not reside in ' + this.restrictLayoutsTo);
return cb(err, null);
}
}
// assume hbs extension

@@ -258,2 +265,4 @@ if (path.extname(layoutFile) === '') layoutFile += this._options.extname;

this.restrictLayoutsTo = this._options.restrictLayoutsTo;
// express passes this through ___express func, gulp pass in an option

@@ -260,0 +269,0 @@ this.viewsDir = null;

{
"name": "express-hbs",
"version": "2.4.2",
"version": "2.5.0",
"description": "Express handlebars template engine complete with multiple layouts, partials and blocks.",

@@ -33,3 +33,3 @@ "keywords": [

"cookie-parser": "1.4.6",
"eslint": "8.48.0",
"eslint": "8.54.0",
"express": "4.18.2",

@@ -36,0 +36,0 @@ "i18n": "0.15.1",

@@ -46,2 +46,3 @@ # express-hbs

// OPTIONAL settings
restrictLayoutsTo: "{String} Absolute path to a directory to restrict layout directive reading from",
blockHelperName: "{String} Override 'block' helper name.",

@@ -103,5 +104,5 @@ contentHelperName: "{String} Override 'contentFor' helper name.",

## ⚠️ This creates a potential security vulnerability:
## ⚠️ This creates a potential security vulnerability if used without a `restrictLayoutsTo`:
Do not use this option in conjunction with passing user submitted data to res.render e.g. `res.render('index', req.query)`. This allows users to read arbitrary files from your filesystem!
The `restrictLayoutsTo` option will restrict reading layouts to a particular directory, if you do not pass this option then do not use the `layout` option in conjunction with passing user submitted data to res.render e.g. `res.render('index', req.query)`. This allows users to read arbitrary files from your filesystem!

@@ -108,0 +109,0 @@ ```js

@@ -68,3 +68,4 @@ 'use strict';

app.engine('hbs', hbs.express4({
defaultLayout: path.join(viewsDir, "layout.hbs")
defaultLayout: path.join(viewsDir, 'layout.hbs'),
restrictLayoutsTo: viewsDir
}));

@@ -71,0 +72,0 @@ app.set('view engine', 'hbs');

@@ -34,3 +34,4 @@ /**

app.engine('hbs', hbs.express3({
i18n: i18n
i18n: i18n,
restrictLayoutsTo: viewsDir
}));

@@ -37,0 +38,0 @@ app.set('view engine', 'hbs');

@@ -14,3 +14,4 @@ 'use strict';

extname: '.server.view.html',
partialsDir: dirname + '/partialsDir'
partialsDir: dirname + '/partialsDir',
restrictLayoutsTo: dirname
});

@@ -17,0 +18,0 @@

@@ -18,3 +18,4 @@ var assert = require('assert');

var render = hb.express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -42,3 +43,4 @@ var locals = H.createLocals('express3', dirname);

var render = hb.express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -45,0 +47,0 @@ var locals = H.createLocals('express3', dirname);

@@ -12,3 +12,5 @@ 'use strict';

it('should use multiple layouts with caching', function(done) {
var render = hbs.create().express3({});
var render = hbs.create().express3({
restrictLayoutsTo: dirname
});
var locals1 = H.createLocals('express3', dirname, { layout: 'layout1', cache: true });

@@ -34,3 +36,4 @@ var locals2 = H.createLocals('express3', dirname, { layout: 'layout2', cache: true });

var render = hbs.create().express3({
partialsDir: [dirname + '/partials']
partialsDir: [dirname + '/partials'],
restrictLayoutsTo: dirname
});

@@ -48,3 +51,4 @@

var render = hbs.create().express3({
partialsDir: [dirname + '/partials']
partialsDir: [dirname + '/partials'],
restrictLayoutsTo: dirname
});

@@ -64,3 +68,4 @@

var render = hb.express3({
partialsDir: [dirname + '/partials']
partialsDir: [dirname + '/partials'],
restrictLayoutsTo: dirname
});

@@ -89,3 +94,4 @@ hb.handlebars.registerPartial('emptyPartial', '');

var render = hb.express3({
partialsDir: [dirname + '/partials']
partialsDir: [dirname + '/partials'],
restrictLayoutsTo: dirname
});

@@ -118,3 +124,4 @@ // this fails

var render = hbs.create().express3({
layoutsDir: dirname + '/views/layouts'
layoutsDir: dirname + '/views/layouts',
restrictLayoutsTo: dirname
});

@@ -167,3 +174,5 @@

var dirname = path.join(__dirname, 'issues/21');
var render = hbs.create().express3();
var render = hbs.create().express3({
restrictLayoutsTo: dirname
});

@@ -187,3 +196,5 @@ function check(err, html) {

var hb = hbs.create()
var render = hb.express3({});
var render = hb.express3({
restrictLayoutsTo: dirname
});
var locals = H.createLocals('express3', dirname, {});

@@ -198,3 +209,5 @@ render(dirname + '/error.hbs', locals, function(err, html) {

var hb = hbs.create()
var render = hb.express3({});
var render = hb.express3({
restrictLayoutsTo: dirname
});
var locals = H.createLocals('express3', dirname, {});

@@ -210,3 +223,4 @@ render(dirname + '/front/error.hbs', locals, function(err, html) {

var render = hb.express3({
partialsDir: dirname + '/partials'
partialsDir: dirname + '/partials',
restrictLayoutsTo: dirname
});

@@ -223,3 +237,4 @@ var locals = H.createLocals('express3', dirname, {});

var render = hb.express3({
partialsDir: dirname + '/partials'
partialsDir: dirname + '/partials',
restrictLayoutsTo: dirname
});

@@ -245,3 +260,5 @@ var locals = H.createLocals('express3', dirname, {});

});
var render = hb.express3({});
var render = hb.express3({
restrictLayoutsTo: dirname
});
var locals = H.createLocals('express3', dirname, {});

@@ -268,3 +285,4 @@ render(dirname + '/index.hbs', locals, function(err, html) {

var render = hb.express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -288,3 +306,4 @@ var locals = H.createLocals('express3', dirname);

var render = hb.express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -307,2 +326,3 @@ var locals = H.createLocals('express3', dirname);

partialsDir: dirname + '/partials',
restrictLayoutsTo: dirname,
onCompile: function(eh, source, filename) {

@@ -347,3 +367,4 @@ var options;

var render = hb.express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -378,3 +399,4 @@ var locals = H.createLocals('express3', dirname);

var render = hb.express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -400,3 +422,4 @@ var locals = H.createLocals('express3', dirname);

var render = hb.express3({
partialsDir: dirname
partialsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -417,3 +440,4 @@

var render = hbs.create().express3({
partialsDir: [dirname + '/partials']
partialsDir: [dirname + '/partials'],
restrictLayoutsTo: dirname
});

@@ -443,3 +467,5 @@

});
var render = hb.express3({});
var render = hb.express3({
restrictLayoutsTo: dirname
});
var locals = H.createLocals('express3', dirname, {});

@@ -464,3 +490,5 @@ render(dirname + '/index.hbs', locals, function(err, html) {

var hb = hbs.create()
var render = hb.express3({});
var render = hb.express3({
restrictLayoutsTo: dirname
});
var locals = H.createLocals('express3', dirname, { });

@@ -467,0 +495,0 @@ render(dirname + '/index.hbs', locals, check);

var request = require('supertest');
var assert = require('assert');
var path = require('path');
var hbs = require('..');

@@ -68,2 +69,3 @@

var render = hbs.create().express3({
restrictLayoutsTo: dirname
});

@@ -80,2 +82,3 @@ var locals = createLocals('express3', dirname);

var render = hbs.create().express3({
restrictLayoutsTo: dirname
});

@@ -90,4 +93,19 @@ var locals = createLocals('express3', dirname, { layout: 'layouts/default' });

it('should error when using a layout outside of the restrictLayoutsTo', function(done) {
var render = hbs.create().express3({
restrictLayoutsTo: path.resolve(path.join(__dirname, '../'))
});
var locals = createLocals('express3', dirname, {layout: '/Users/egg/Code/Ghost/ghost/core/package.json'});
render(dirname + '/aside.hbs', locals, function (err, html) {
if (!err) {
return done(new Error('We expect an error when reading'));
}
return done();
});
});
it ('should not process template-specified layout when options.layout is falsy', function(done) {
var render = hbs.create().express3({
restrictLayoutsTo: dirname
});

@@ -94,0 +112,0 @@ var locals = createLocals('express3', dirname, { layout: false });

@@ -14,3 +14,5 @@ 'use strict';

var instance = hbs.create();
var render = instance.express3({});
var render = instance.express3({
restrictLayoutsTo: dirname
});
instance.updateTemplateOptions({

@@ -41,3 +43,5 @@ data: {

var instance = hbs.create();
var render = instance.express3({});
var render = instance.express3({
restrictLayoutsTo: dirname
});
instance.updateTemplateOptions({

@@ -71,3 +75,5 @@ data: {

var instance = hbs.create();
var render = instance.express4({});
var render = instance.express4({
restrictLayoutsTo: dirname
});
instance.updateTemplateOptions({

@@ -98,3 +104,5 @@ data: {

var instance = hbs.create();
var render = instance.express3({});
var render = instance.express3({
restrictLayoutsTo: dirname
});
instance.updateTemplateOptions({

@@ -101,0 +109,0 @@ data: {

@@ -13,3 +13,5 @@ 'use strict';

app = express();
app.engine('hbs', hbs.express3());
app.engine('hbs', hbs.express3({
restrictLayoutsTo: './test/views/multiple'
}));
app.set('view engine', 'hbs');

@@ -16,0 +18,0 @@ app.get('/test1', function (req, res) {

@@ -12,3 +12,4 @@ var assert = require('assert');

var render = hbs.create().express3({
viewsDir: dirname
viewsDir: dirname,
restrictLayoutsTo: dirname
});

@@ -26,3 +27,4 @@ var locals = H.createLocals('express3', dirname);

viewsDir: dirname,
layoutsDir: dirname + '/layouts'
layoutsDir: dirname + '/layouts',
restrictLayoutsTo: dirname
});

@@ -29,0 +31,0 @@ var locals = H.createLocals('express3', dirname, {layout: 'default.hbs'});

@@ -13,3 +13,3 @@ var assert = require('assert');

var hb = hbs.create();
var render = hb.express3({beautify: true});
var render = hb.express3({beautify: true, restrictLayoutsTo: dirname});
var locals = H.createLocals('express3', dirname, {});

@@ -16,0 +16,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc