| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 'use strict'; | 
					
						
							| 
									
										
										
										
											2017-02-17 21:55:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | var	assert = require('assert'); | 
					
						
							|  |  |  | var nconf = require('nconf'); | 
					
						
							|  |  |  | var request = require('request'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var db = require('./mocks/databasemock'); | 
					
						
							| 
									
										
										
										
											2016-10-16 21:51:42 +03:00
										 |  |  | var user = require('../src/user'); | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe('authentication', function () { | 
					
						
							|  |  |  | 	var jar = request.jar(); | 
					
						
							| 
									
										
										
										
											2016-12-15 14:47:42 +03:00
										 |  |  | 	var regularUid; | 
					
						
							| 
									
										
										
										
											2016-10-16 17:42:14 +03:00
										 |  |  | 	before(function (done) { | 
					
						
							| 
									
										
										
										
											2016-12-15 14:47:42 +03:00
										 |  |  | 		user.create({username: 'regular', password: 'regularpwd', email: 'regular@nodebb.org' }, function (err, uid) { | 
					
						
							| 
									
										
										
										
											2016-10-16 17:42:14 +03:00
										 |  |  | 			assert.ifError(err); | 
					
						
							| 
									
										
										
										
											2016-12-15 14:47:42 +03:00
										 |  |  | 			regularUid = uid; | 
					
						
							| 
									
										
										
										
											2016-10-16 17:36:24 +03:00
										 |  |  | 			done(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 	it('should register and login a user', function (done) { | 
					
						
							|  |  |  | 		request({ | 
					
						
							|  |  |  | 			url: nconf.get('url') + '/api/config', | 
					
						
							|  |  |  | 			json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 			jar: jar, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 		}, function (err, response, body) { | 
					
						
							|  |  |  | 			assert.ifError(err); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			request.post(nconf.get('url') + '/register', { | 
					
						
							|  |  |  | 				form: { | 
					
						
							|  |  |  | 					email: 'admin@nodebb.org', | 
					
						
							|  |  |  | 					username: 'admin', | 
					
						
							|  |  |  | 					password: 'adminpwd', | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				json: true, | 
					
						
							|  |  |  | 				jar: jar, | 
					
						
							|  |  |  | 				headers: { | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					'x-csrf-token': body.csrf_token, | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 			}, function (err, response, body) { | 
					
						
							|  |  |  | 				assert.ifError(err); | 
					
						
							|  |  |  | 				assert(body); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				request({ | 
					
						
							|  |  |  | 					url: nconf.get('url') + '/api/me', | 
					
						
							|  |  |  | 					json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					jar: jar, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}, function (err, response, body) { | 
					
						
							|  |  |  | 					assert.ifError(err); | 
					
						
							|  |  |  | 					assert(body); | 
					
						
							|  |  |  | 					assert.equal(body.username, 'admin'); | 
					
						
							|  |  |  | 					assert.equal(body.email, 'admin@nodebb.org'); | 
					
						
							| 
									
										
										
										
											2016-10-16 21:51:42 +03:00
										 |  |  | 					done(); | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	it('should logout a user', function (done) { | 
					
						
							|  |  |  | 		request({ | 
					
						
							|  |  |  | 			url: nconf.get('url') + '/api/config', | 
					
						
							|  |  |  | 			json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 			jar: jar, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 		}, function (err, response, body) { | 
					
						
							|  |  |  | 			assert.ifError(err); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			request.post(nconf.get('url') + '/logout', { | 
					
						
							|  |  |  | 				form: {}, | 
					
						
							|  |  |  | 				json: true, | 
					
						
							|  |  |  | 				jar: jar, | 
					
						
							|  |  |  | 				headers: { | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					'x-csrf-token': body.csrf_token, | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-12-15 14:47:42 +03:00
										 |  |  | 			}, function (err) { | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				assert.ifError(err); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				request({ | 
					
						
							|  |  |  | 					url: nconf.get('url') + '/api/me', | 
					
						
							|  |  |  | 					json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					jar: jar, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}, function (err, response, body) { | 
					
						
							|  |  |  | 					assert.ifError(err); | 
					
						
							|  |  |  | 					assert.equal(body, 'not-authorized'); | 
					
						
							| 
									
										
										
										
											2016-10-25 21:34:47 +02:00
										 |  |  | 					done(); | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	it('should login a user', function (done) { | 
					
						
							|  |  |  | 		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-16 16:43:38 +03:00
										 |  |  | 		}, function (err, response, body) { | 
					
						
							|  |  |  | 			assert.ifError(err); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			request.post(nconf.get('url') + '/login', { | 
					
						
							|  |  |  | 				form: { | 
					
						
							| 
									
										
										
										
											2016-10-16 21:51:42 +03:00
										 |  |  | 					username: 'regular', | 
					
						
							|  |  |  | 					password: 'regularpwd', | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				json: true, | 
					
						
							|  |  |  | 				jar: jar, | 
					
						
							|  |  |  | 				headers: { | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					'x-csrf-token': body.csrf_token, | 
					
						
							|  |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 			}, function (err, response, body) { | 
					
						
							|  |  |  | 				assert.ifError(err); | 
					
						
							|  |  |  | 				assert(body); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				request({ | 
					
						
							|  |  |  | 					url: nconf.get('url') + '/api/me', | 
					
						
							|  |  |  | 					json: true, | 
					
						
							| 
									
										
										
										
											2017-02-17 19:31:21 -07:00
										 |  |  | 					jar: jar, | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}, function (err, response, body) { | 
					
						
							|  |  |  | 					assert.ifError(err); | 
					
						
							|  |  |  | 					assert(body); | 
					
						
							| 
									
										
										
										
											2016-10-16 21:51:42 +03:00
										 |  |  | 					assert.equal(body.username, 'regular'); | 
					
						
							|  |  |  | 					assert.equal(body.email, 'regular@nodebb.org'); | 
					
						
							| 
									
										
										
										
											2017-01-03 15:08:16 +03:00
										 |  |  | 					db.getObject('uid:' + regularUid + ':sessionUUID:sessionId', function (err, sessions) { | 
					
						
							|  |  |  | 						assert.ifError(err); | 
					
						
							|  |  |  | 						assert(sessions); | 
					
						
							|  |  |  | 						assert(Object.keys(sessions).length > 0); | 
					
						
							|  |  |  | 						done(); | 
					
						
							|  |  |  | 					}); | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-15 14:47:42 +03:00
										 |  |  | 	it('should revoke all sessions', function (done) { | 
					
						
							|  |  |  | 		var socketAdmin = require('../src/socket.io/admin'); | 
					
						
							|  |  |  | 		db.sortedSetCard('uid:' + regularUid + ':sessions', function (err, count) { | 
					
						
							|  |  |  | 			assert.ifError(err); | 
					
						
							|  |  |  | 			assert(count); | 
					
						
							|  |  |  | 			socketAdmin.deleteAllSessions({uid: 1}, {}, function (err) { | 
					
						
							|  |  |  | 				assert.ifError(err); | 
					
						
							|  |  |  | 				db.sortedSetCard('uid:' + regularUid + ':sessions', function (err, count) { | 
					
						
							|  |  |  | 					assert.ifError(err); | 
					
						
							|  |  |  | 					assert(!count); | 
					
						
							|  |  |  | 					done(); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	after(function (done) { | 
					
						
							| 
									
										
										
										
											2016-10-17 23:34:09 +03:00
										 |  |  | 		db.emptydb(done); | 
					
						
							| 
									
										
										
										
											2016-10-16 16:43:38 +03:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 |