| 
									
										
										
										
											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'); | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | var myXhr = require('../mocks/newXhr'); | 
					
						
							| 
									
										
										
										
											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(); | 
					
						
							|  |  |  | 	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]]')); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 			myXhr.callbacks.test2 = function () { | 
					
						
							|  |  |  | 				this.setDisableHeaderCheck(true); | 
					
						
							|  |  |  | 				var stdOpen = this.open; | 
					
						
							|  |  |  | 				this.open = function () { | 
					
						
							|  |  |  | 					stdOpen.apply(this, arguments); | 
					
						
							|  |  |  | 					this.setRequestHeader('Cookie', res.headers['set-cookie'][0].split(';')[0]); | 
					
						
							| 
									
										
										
										
											2017-02-23 21:29:28 +03:00
										 |  |  | 					this.setRequestHeader('Origin', nconf.get('url')); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 				}; | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var socketClient = require('socket.io-client'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-18 12:30:49 -07:00
										 |  |  | 			var io = socketClient.connect(nconf.get('url'), { forceNew: true, multiplex: false }); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 			io.on('connect', function () { | 
					
						
							| 
									
										
										
										
											2016-11-01 17:33:19 +03:00
										 |  |  | 				callback(null, jar, io, body.csrf_token); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			io.on('error', function (err) { | 
					
						
							|  |  |  | 				callback(err); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | helpers.initSocketIO = function (callback) { | 
					
						
							|  |  |  | 	var jar; | 
					
						
							|  |  |  | 	request.get({ | 
					
						
							|  |  |  | 		url: nconf.get('url') + '/api/config', | 
					
						
							|  |  |  | 		jar: jar, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 		json: true, | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 	}, function (err, res, body) { | 
					
						
							|  |  |  | 		if (err) { | 
					
						
							|  |  |  | 			return callback(err); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		myXhr.callbacks.test2 = function () { | 
					
						
							|  |  |  | 			this.setDisableHeaderCheck(true); | 
					
						
							|  |  |  | 			var stdOpen = this.open; | 
					
						
							|  |  |  | 			this.open = function () { | 
					
						
							|  |  |  | 				stdOpen.apply(this, arguments); | 
					
						
							|  |  |  | 				this.setRequestHeader('Cookie', res.headers['set-cookie'][0].split(';')[0]); | 
					
						
							| 
									
										
										
										
											2017-02-23 21:29:28 +03:00
										 |  |  | 				this.setRequestHeader('Origin', nconf.get('url')); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 			}; | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-18 12:30:49 -07:00
										 |  |  | 		var io = require('socket.io-client')(nconf.get('url'), { forceNew: true }); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		io.on('connect', function () { | 
					
						
							|  |  |  | 			callback(null, jar, io); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		io.on('error', function (err) { | 
					
						
							|  |  |  | 			callback(err); | 
					
						
							| 
									
										
										
										
											2016-10-25 17:56:32 +03:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2016-10-26 16:38:42 +03:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											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); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		callback(err, res, body); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2016-12-02 14:05:54 +03:00
										 |  |  | 		}, function (err, res, body) { | 
					
						
							|  |  |  | 			if (err) { | 
					
						
							|  |  |  | 				return callback(err); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			callback(null, jar); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | }; |