@tlrg/middleware-js
Version:
Node module for sharing common middlewares.
95 lines (73 loc) • 2.58 kB
JavaScript
var moment = require('moment');
var currency = require('./currency');
var _ = require('lodash');
var mobileOnly = require('./mobileOnly');
function sanitizeDate(incomingStartDate) {
var today = moment().startOf('day');
var startDate = moment(incomingStartDate || today, ['YYYYMMDD', 'YYYY-MM-DD']);
var oneYearInTheFuture = moment().add(364, 'days');
if (!startDate.isValid()) {
return today;
}
if (startDate.isBefore(today)) {
return today;
}
if (startDate.isAfter(oneYearInTheFuture)) {
return today;
}
return startDate;
}
module.exports = function (req, res, next) {
var lrSearchCookie = {};
try {
lrSearchCookie = JSON.parse(req.cookies.search);
} catch (_) {}
var incomingStartDate = req.query.d || req.cookies.arrivalDate || lrSearchCookie.Date;
var nights = parseInt(req.query.n) || parseInt(lrSearchCookie.Nights) || 1;
if (nights < 1) {
nights = 1;
}
if (nights > 28) {
nights = 28;
}
var startDate = sanitizeDate(incomingStartDate);
var departureDate = req.query.dd || req.cookies.departureDate;
if (departureDate) {
var departureDateAsMoment = moment(departureDate, ['YYYYMMDD', 'YYYY-MM-DD']);
nights = departureDateAsMoment.diff(startDate, 'days');
}
var queryRt = req.query.rt;
if (Array.isArray(queryRt)) {
queryRt = queryRt[0];
}
var rt = (queryRt || '').split('-');
var adults = rt[0] || req.query['rt-adult'] || req.cookies.numberOfAdults || lrSearchCookie.Adults || 2;
var children = rt[1] || req.query['rt-child'] || req.cookies.numberOfChildren || lrSearchCookie.Children || 0;
adults = parseInt(adults, 10) || 2;
children = parseInt(children, 10) || 0;
if (adults > 8) {
adults = 8;
}
if (children > 3) {
children = 3;
}
var formats = {
laterooms: 'YYYYMMDD',
asiarooms: 'YYYY-MM-DD'
};
req.moonstick.meta = {
destination: _.escape(req.query.parsedSearch || req.query.k || lrSearchCookie.Destination || ''),
date: startDate,
nights: nights,
departureDate: startDate.clone().add(nights, 'days').startOf('day'),
adults: adults,
children: children,
guests: adults + children,
rt: adults + '-' + children,
format: formats[req.moonstick.brand] || 'YYYYMMDD',
currency: currency(req),
isLoggedIn: Boolean(req.user && req.cookies['moomin-cmid']),
mobileOnly: mobileOnly(req)
};
next();
};