UNPKG

hulawho

Version:
176 lines (138 loc) 3.7 kB
var async = require('async') var mongoose = require('mongoose') var LeagueModel = require('./models/schema').League var User = require('./User') var crypto = require('./modules/crypto_primitives') function League(profile) { var self = this if(profile) { self.name = profile.name self.password = profile.password self.admin = profile.admin } } League.prototype.createLeague = function(callback) { var self = this // check whether a league of the same name already exists LeagueModel.findOne({name: self.name}, function(err, res) { if(err) { callback(err) return } if(res) { callback({status: 400, message: 'LEAGUE EXISTS'}) return } var async_queue = [] async_queue.push(function(cb) { crypto.generateKdf(self.password, cb) }) async_queue.push(function(cb) { crypto.generateLeagueCode(cb) }) async.parallel(async_queue, function(err, res) { if(err) { callback(err) return } self.kdf = res[0] self.code = res[1] var entry = { name: self.name, code: self.code, kdf: self.kdf, admin: self.admin, members: [self.admin] } var league = new LeagueModel(entry) league.save(function(err, res) { if(err) { callback(err) return } var userObject = new User() userObject.pushLeague(self.admin, res._id, function(err, res) { if(err) { callback(err) return } callback(null, {status: 200, message: 'ADD LEAGUE OK', data: {name: self.name, code: self.code, admin: self.admin}}) }) }) }) }) } League.prototype.pushUser = function(league, user, callback) { var self = this self.id = league LeagueModel.findOneAndUpdate({_id: self.id}, {$push: {members: user}}, function(err, res) { if(err) { callback(err) return } if(!res) { callback({status: 428, message: 'LEAGUE NOT FOUND'}) return } callback(null, {status: 200, message: 'LEAGUE USER PUSH OK'}) }) } League.prototype.getLeague = function(league, callback) { var self = this self.id = league LeagueModel.findOne({_id: self.id}, function(err, res) { if(err) { callback(err) return } if(!res) { callback({status: 400, message: 'LEAGUE DOES NOT EXIST'}) return } callback(null, {status: 200, message: 'GET LEAGUE OK', data: res}) }) } League.prototype.joinLeague = function(code, password, user, callback) { var self = this LeagueModel.findOne({code: code}, function(err, res) { if(err) { callback(err) return } if(!res) { callback({status: 400, message: 'LEAGUE DOES NOT EXIST'}) return } if(res.members.indexOf(user) > -1) { callback({status: 400, message: 'ALREADY A MEMBER'}) return } self.id = res._id crypto.verifyKdf(res.kdf, password, function(err, res) { if(err) { callback(err) return } if(res != true) { callback({status: 400, message: 'LEAGUE AUTHENTICATION FAILURE'}) return } var async_queue = [] async_queue.push(function(cb) { self.pushUser(self.id, user, cb) }) async_queue.push(function(cb) { var userObject = new User() userObject.pushLeague(user, self.id, cb) }) async.parallel(async_queue, function(err, res) { if(err) { callback(err) return } callback(null, {status: 200, message: 'JOIN LEAGUE OK'}) }) }) }) } module.exports = League