| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var request = require('request'); | 
					
						
							|  |  |  | var nconf = require('nconf'); | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | var fs = require('fs'); | 
					
						
							| 
									
										
										
										
											2017-05-12 17:53:23 -04:00
										 |  |  | var winston = require('winston'); | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | var utils = require('../../public/src/utils'); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | var helpers = module.exports; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | helpers.loginUser = function (username, password, callback) { | 
					
						
							|  |  |  | 	var jar = request.jar(); | 
					
						
							| 
									
										
										
										
											2017-05-27 23:32:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 	request({ | 
					
						
							|  |  |  | 		url: nconf.get('url') + '/api/config', | 
					
						
							|  |  |  | 		json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		jar: jar, | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 	}, function (err, res, body) { | 
					
						
							|  |  |  | 		if (err || res.statusCode !== 200) { | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 			return callback(err || new Error('[[error:invalid-response]]')); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		request.post(nconf.get('url') + '/login', { | 
					
						
							|  |  |  | 			form: { | 
					
						
							|  |  |  | 				username: username, | 
					
						
							|  |  |  | 				password: password, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			json: true, | 
					
						
							|  |  |  | 			jar: jar, | 
					
						
							|  |  |  | 			headers: { | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 				'x-csrf-token': body.csrf_token, | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 		}, function (err, res) { | 
					
						
							|  |  |  | 			if (err || res.statusCode !== 200) { | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 				return callback(err || new Error('[[error:invalid-response]]')); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-06-02 16:51:36 -04:00
										 |  |  | 			callback(null, jar, body.csrf_token); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-27 23:32:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | helpers.logoutUser = function (jar, callback) { | 
					
						
							|  |  |  | 	request({ | 
					
						
							|  |  |  | 		url: nconf.get('url') + '/api/config', | 
					
						
							|  |  |  | 		json: true, | 
					
						
							|  |  |  | 		jar: jar, | 
					
						
							|  |  |  | 	}, function (err, response, body) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err, response, body); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		request.post(nconf.get('url') + '/logout', { | 
					
						
							|  |  |  | 			form: {}, | 
					
						
							|  |  |  | 			json: true, | 
					
						
							|  |  |  | 			jar: jar, | 
					
						
							|  |  |  | 			headers: { | 
					
						
							|  |  |  | 				'x-csrf-token': body.csrf_token, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, function (err, response, body) { | 
					
						
							|  |  |  | 			callback(err, response, body); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 16:04:04 +03:00
										 |  |  | helpers.connectSocketIO = function (res, callback) { | 
					
						
							| 
									
										
										
										
											2017-10-13 13:57:30 -04:00
										 |  |  | 	var io = require('socket.io-client'); | 
					
						
							| 
									
										
										
										
											2020-02-06 15:52:37 -05:00
										 |  |  | 	let cookies = res.headers['set-cookie']; | 
					
						
							|  |  |  | 	cookies = cookies.filter(c => /express.sid=[^;]+;/.test(c)); | 
					
						
							|  |  |  | 	const cookie = cookies[0]; | 
					
						
							| 
									
										
										
										
											2017-10-13 13:57:30 -04:00
										 |  |  | 	var socket = io(nconf.get('base_url'), { | 
					
						
							| 
									
										
										
										
											2017-02-25 16:04:04 +03:00
										 |  |  | 		path: nconf.get('relative_path') + '/socket.io', | 
					
						
							| 
									
										
										
										
											2017-10-13 13:57:30 -04:00
										 |  |  | 		extraHeaders: { | 
					
						
							|  |  |  | 			Origin: nconf.get('url'), | 
					
						
							|  |  |  | 			Cookie: cookie, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2017-02-25 16:04:04 +03:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-10-13 13:57:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	socket.on('connect', function () { | 
					
						
							|  |  |  | 		callback(null, socket); | 
					
						
							| 
									
										
										
										
											2017-02-25 16:04:04 +03:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-13 13:57:30 -04:00
										 |  |  | 	socket.on('error', function (err) { | 
					
						
							| 
									
										
										
										
											2017-02-25 16:04:04 +03:00
										 |  |  | 		callback(err); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | helpers.uploadFile = function (uploadEndPoint, filePath, body, jar, csrf_token, callback) { | 
					
						
							|  |  |  | 	var formData = { | 
					
						
							|  |  |  | 		files: [ | 
					
						
							|  |  |  | 			fs.createReadStream(filePath), | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 			fs.createReadStream(filePath), // see https://github.com/request/request/issues/2445
 | 
					
						
							|  |  |  | 		], | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 	formData = utils.merge(formData, body); | 
					
						
							|  |  |  | 	request.post({ | 
					
						
							|  |  |  | 		url: uploadEndPoint, | 
					
						
							|  |  |  | 		formData: formData, | 
					
						
							|  |  |  | 		json: true, | 
					
						
							|  |  |  | 		jar: jar, | 
					
						
							|  |  |  | 		headers: { | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 			'x-csrf-token': csrf_token, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | 	}, function (err, res, body) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-05-10 22:05:23 -04:00
										 |  |  | 		if (res.statusCode !== 200) { | 
					
						
							| 
									
										
										
										
											2020-06-22 12:08:35 -04:00
										 |  |  | 			winston.error(JSON.stringify(body)); | 
					
						
							| 
									
										
										
										
											2017-05-10 22:05:23 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		callback(null, res, body); | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | helpers.registerUser = function (data, callback) { | 
					
						
							|  |  |  | 	var jar = request.jar(); | 
					
						
							|  |  |  | 	request({ | 
					
						
							|  |  |  | 		url: nconf.get('url') + '/api/config', | 
					
						
							|  |  |  | 		json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		jar: jar, | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 	}, function (err, response, body) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		request.post(nconf.get('url') + '/register', { | 
					
						
							|  |  |  | 			form: data, | 
					
						
							|  |  |  | 			json: true, | 
					
						
							|  |  |  | 			jar: jar, | 
					
						
							|  |  |  | 			headers: { | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 				'x-csrf-token': body.csrf_token, | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2017-09-01 18:40:34 -04:00
										 |  |  | 		}, function (err, response, body) { | 
					
						
							|  |  |  | 			callback(err, jar, response, body); | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-18 01:25:46 -07:00
										 |  |  | // http://stackoverflow.com/a/14387791/583363
 | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | helpers.copyFile = function (source, target, callback) { | 
					
						
							|  |  |  | 	var cbCalled = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var rd = fs.createReadStream(source); | 
					
						
							| 
									
										
										
										
											2017-02-18 01:56:23 -07:00
										 |  |  | 	rd.on('error', function (err) { | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 		done(err); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	var wr = fs.createWriteStream(target); | 
					
						
							| 
									
										
										
										
											2017-02-18 01:56:23 -07:00
										 |  |  | 	wr.on('error', function (err) { | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 		done(err); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-02-18 01:56:23 -07:00
										 |  |  | 	wr.on('close', function () { | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 		done(); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	rd.pipe(wr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function done(err) { | 
					
						
							|  |  |  | 		if (!cbCalled) { | 
					
						
							|  |  |  | 			callback(err); | 
					
						
							|  |  |  | 			cbCalled = true; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-02-18 02:30:48 -07:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2019-09-20 11:44:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | require('../../src/promisify')(helpers); |