| 
				
			 | 
			
			
				@@ -1,6 +1,7 @@ 
			 | 
		
	
		
			
			| 
				1
			 | 
			
				1
			 | 
			
			
				 var pug			= require('pug'); 
			 | 
		
	
		
			
			| 
				2
			 | 
			
				2
			 | 
			
			
				 var nodemailer  = require('nodemailer'); 
			 | 
		
	
		
			
			| 
				3
			 | 
			
				3
			 | 
			
			
				 var crypto		= require('crypto'); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				4
			 | 
			
			
				+var fs		= require('fs'); 
			 | 
		
	
		
			
			| 
				4
			 | 
			
				5
			 | 
			
			
				 var settings	= require('./settings'); 
			 | 
		
	
		
			
			| 
				5
			 | 
			
				6
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				6
			 | 
			
				7
			 | 
			
			
				 // Translation 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -28,6 +29,28 @@ var transporter = nodemailer.createTransport(settings.mailserver); 
			 | 
		
	
		
			
			| 
				28
			 | 
			
				29
			 | 
			
			
				 // Verification tokens 
			 | 
		
	
		
			
			| 
				29
			 | 
			
				30
			 | 
			
			
				 var tokens = {}; 
			 | 
		
	
		
			
			| 
				30
			 | 
			
				31
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+// Default template 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+// JavaScript has no native way to handle multi-line strings, so we put our template 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+// in a comment inside a function fro which we generate a string. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				35
			 | 
			
			
				+// cf: https://tomasz.janczuk.org/2013/05/multi-line-strings-in-javascript-and.html 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+var defaultTemplate = (function() {/* 
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+html 
			 | 
		
	
		
			
			| 
				
			 | 
			
				38
			 | 
			
			
				+	body 
			 | 
		
	
		
			
			| 
				
			 | 
			
				39
			 | 
			
			
				+		p.subj 
			 | 
		
	
		
			
			| 
				
			 | 
			
				40
			 | 
			
			
				+			span(style="font-weight:bold") Subject:  
			 | 
		
	
		
			
			| 
				
			 | 
			
				41
			 | 
			
			
				+			span= subject 
			 | 
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				+		p.from 
			 | 
		
	
		
			
			| 
				
			 | 
			
				43
			 | 
			
			
				+			span(style="font-weight:bold") Sent from:  
			 | 
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				+			span= replyTo 
			 | 
		
	
		
			
			| 
				
			 | 
			
				45
			 | 
			
			
				+		each field in custom 
			 | 
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				+			p.custom 
			 | 
		
	
		
			
			| 
				
			 | 
			
				47
			 | 
			
			
				+				span(style="font-weight:bold")= field.label + ': ' 
			 | 
		
	
		
			
			| 
				
			 | 
			
				48
			 | 
			
			
				+				span= field.value 
			 | 
		
	
		
			
			| 
				
			 | 
			
				49
			 | 
			
			
				+		p.message 
			 | 
		
	
		
			
			| 
				
			 | 
			
				50
			 | 
			
			
				+			span(style="font-weight:bold") Message:  
			 | 
		
	
		
			
			| 
				
			 | 
			
				51
			 | 
			
			
				+		 
			 | 
		
	
		
			
			| 
				
			 | 
			
				52
			 | 
			
			
				+		p= html 
			 | 
		
	
		
			
			| 
				
			 | 
			
				53
			 | 
			
			
				+*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]; 
			 | 
		
	
		
			
			| 
				31
			 | 
			
				54
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				32
			 | 
			
				55
			 | 
			
			
				 // Serve static (JS + HTML) files 
			 | 
		
	
		
			
			| 
				33
			 | 
			
				56
			 | 
			
			
				 app.use(express.static('front')); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -104,23 +127,33 @@ app.post('/send', function(req, res, next) { 
			 | 
		
	
		
			
			| 
				104
			 | 
			
				127
			 | 
			
			
				 	// Replacing the mail's content with HTML from the pug template 
			 | 
		
	
		
			
			| 
				105
			 | 
			
				128
			 | 
			
			
				 	// Commenting the line below will bypass the generation and only user the 
			 | 
		
	
		
			
			| 
				106
			 | 
			
				129
			 | 
			
			
				 	// text entered by the user 
			 | 
		
	
		
			
			| 
				107
			 | 
			
				
			 | 
			
			
				-	params.html = pug.renderFile('template.pug', params); 
			 | 
		
	
		
			
			| 
				108
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				109
			 | 
			
				
			 | 
			
			
				-	log.info(lang.log_sending, params.replyTo); 
			 | 
		
	
		
			
			| 
				110
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				111
			 | 
			
				
			 | 
			
			
				-	// Send the email to all users 
			 | 
		
	
		
			
			| 
				112
			 | 
			
				
			 | 
			
			
				-	sendMails(params, function(err, infos) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				130
			 | 
			
			
				+	fs.access('template.pug', function(err) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				131
			 | 
			
			
				+		// Checking if the template exists. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				132
			 | 
			
			
				+		// If not, fallback to the default template. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				133
			 | 
			
			
				+		// TODO: Parameterise the template file name. 
			 | 
		
	
		
			
			| 
				113
			 | 
			
				134
			 | 
			
			
				 		if(err) { 
			 | 
		
	
		
			
			| 
				114
			 | 
			
				
			 | 
			
			
				-			log.error(err); 
			 | 
		
	
		
			
			| 
				115
			 | 
			
				
			 | 
			
			
				-		} 
			 | 
		
	
		
			
			| 
				116
			 | 
			
				
			 | 
			
			
				-		logStatus(infos); 
			 | 
		
	
		
			
			| 
				117
			 | 
			
				
			 | 
			
			
				-	}, function() { 
			 | 
		
	
		
			
			| 
				118
			 | 
			
				
			 | 
			
			
				-		if(status.failed === status.total) { 
			 | 
		
	
		
			
			| 
				119
			 | 
			
				
			 | 
			
			
				-			res.status(500).send(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				135
			 | 
			
			
				+			params.html = pug.render(defaultTemplate, params); 
			 | 
		
	
		
			
			| 
				120
			 | 
			
				136
			 | 
			
			
				 		} else { 
			 | 
		
	
		
			
			| 
				121
			 | 
			
				
			 | 
			
			
				-			res.status(200).send(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				137
			 | 
			
			
				+			params.html = pug.renderFile('template.pug', params); 
			 | 
		
	
		
			
			| 
				122
			 | 
			
				138
			 | 
			
			
				 		} 
			 | 
		
	
		
			
			| 
				123
			 | 
			
				
			 | 
			
			
				-	}) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				139
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				140
			 | 
			
			
				+		log.info(lang.log_sending, params.replyTo); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				141
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				142
			 | 
			
			
				+		// Send the email to all users 
			 | 
		
	
		
			
			| 
				
			 | 
			
				143
			 | 
			
			
				+		sendMails(params, function(err, infos) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				144
			 | 
			
			
				+			if(err) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				145
			 | 
			
			
				+				log.error(err); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				146
			 | 
			
			
				+			} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				147
			 | 
			
			
				+			logStatus(infos); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				148
			 | 
			
			
				+		}, function() { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				149
			 | 
			
			
				+			if(status.failed === status.total) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				150
			 | 
			
			
				+				res.status(500).send(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				151
			 | 
			
			
				+			} else { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				152
			 | 
			
			
				+				res.status(200).send(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				153
			 | 
			
			
				+			} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				154
			 | 
			
			
				+		}); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				155
			 | 
			
			
				+	}); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				156
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				124
			 | 
			
				157
			 | 
			
			
				 }); 
			 | 
		
	
		
			
			| 
				125
			 | 
			
				158
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				126
			 | 
			
				159
			 | 
			
			
				  
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -334,4 +367,4 @@ function processCustom(custom) { 
			 | 
		
	
		
			
			| 
				334
			 | 
			
				367
			 | 
			
			
				 	} 
			 | 
		
	
		
			
			| 
				335
			 | 
			
				368
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				336
			 | 
			
				369
			 | 
			
			
				 	return fields; 
			 | 
		
	
		
			
			| 
				337
			 | 
			
				
			 | 
			
			
				-} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				370
			 | 
			
			
				+} 
			 |