@@ -5,7 +5,8 @@ let formidable = require('formidable'),
55 fs = require ( 'fs' ) ,
66 crypto = require ( 'crypto' ) ,
77 resize = require ( './resize' ) ,
8- mailer = require ( './mailer' ) ;
8+ mailer = require ( './mailer' ) ,
9+ validator = require ( 'validator' ) ;
910
1011exports . getAll = function ( req , res ) {
1112 const ORDER_BY_DATE_ASC = 'asc' ,
@@ -194,8 +195,6 @@ exports.createEntry = function (req, res) {
194195 requiredFields = [ 'email' , 'firstname' , 'anon' , 'message' ] ,
195196 allowedFields = [ 'email' , 'firstname' , 'lastname' , 'anon' , 'message' , 'country' , 'beta' , 'newsletter' , 'pax' ] ;
196197
197- const messageMaxCharacters = 500 ;
198-
199198 form . uploadDir = __dirname + '/../uploads/' ;
200199 form . keepExtensions = true ;
201200 form . maxFields = 5 ;
@@ -223,12 +222,53 @@ exports.createEntry = function (req, res) {
223222
224223 fields [ [ field ] ] = value ;
225224 }
225+ if ( field === 'firstname' ) {
226+ fields [ [ field ] ] = validator . escape ( validator . trim ( value ) ) ;
227+ if ( ! validator . isLength ( value , { min : 1 , max : 200 } ) ) {
228+ errorFields . push ( 'firstname' ) ;
229+ out [ 'firstname' ] = 'This field needs to have between 1 and 200 characters' ;
230+ }
231+ }
232+ if ( field === 'lastname' ) {
233+ fields [ [ field ] ] = validator . escape ( validator . trim ( value ) ) ;
234+ if ( ! validator . isLength ( value , { max : 200 } ) ) {
235+ errorFields . push ( 'lastname' ) ;
236+ out [ 'lastname' ] = 'Limit of 200 characters for this field exceeded' ;
237+ }
238+ }
239+ if ( field === 'email' ) {
240+ fields [ [ field ] ] = validator . escape ( validator . trim ( value ) ) ;
241+ if ( ! validator . isEmail ( value ) ) {
242+ errorFields . push ( 'email' ) ;
243+ out [ 'email' ] = 'No valid email address' ;
244+ }
245+ if ( ! validator . isLength ( value , { max : 200 } ) ) {
246+ errorFields . push ( 'email' ) ;
247+ out [ 'message' ] = 'Limit of 200 characters for this field exceeded' ;
248+ }
249+ }
250+ if ( field === 'country' ) {
251+ fields [ [ field ] ] = validator . escape ( validator . trim ( value ) ) ;
252+ if ( ! validator . isISO31661Alpha2 ( value ) ) {
253+ errorFields . push ( 'country' ) ;
254+ out [ 'country' ] = 'No valid country code' ;
255+ }
256+ }
226257 if ( field === 'message' ) {
227- if ( ( String ( value ) ) . length > messageMaxCharacters ) {
228- errorFields . push ( field ) ;
229- out [ field ] = 'Limit of ' + messageMaxCharacters + ' characters for this field exceeded' ;
258+ fields [ [ field ] ] = validator . escape ( validator . trim ( value ) ) ;
259+ if ( ! validator . isLength ( value , { max : 500 } ) ) {
260+ errorFields . push ( 'message' ) ;
261+ out [ 'message' ] = 'Limit of 500 characters for this field exceeded' ;
230262 }
231263 }
264+ if ( field === 'anon' ) {
265+ fields [ [ field ] ] = validator . toBoolean ( validator . trim ( value ) ) ;
266+ if ( ! validator . isBoolean ( String ( value ) ) ) {
267+ errorFields . push ( 'anon' ) ;
268+ out [ 'message' ] = 'No valid value' ;
269+ }
270+ }
271+
232272 } ) . on ( 'file' , function ( field , file ) {
233273 files . push ( {
234274 size : file . size ,
0 commit comments