2015-07-22 23:30:14 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Implements User Model
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2015-08-31 14:29:37 +00:00
|
|
|
var async = require("async");
|
2015-08-28 14:00:14 +00:00
|
|
|
var mongoose = require("mongoose");
|
|
|
|
var Profile = mongoose.model("Profile");
|
2015-08-31 14:29:37 +00:00
|
|
|
var steam = require('steamidconvert')();
|
|
|
|
var enslClient = require("../ensl/client")();
|
|
|
|
var hiveClient = require("../hive/client")();
|
2015-07-22 23:30:14 +00:00
|
|
|
|
2015-08-28 14:00:14 +00:00
|
|
|
function User (user) {
|
|
|
|
this.id = user['id'];
|
|
|
|
this.online = true;
|
2015-07-22 23:30:14 +00:00
|
|
|
this.username = user['username'];
|
|
|
|
this.country = user['country'];
|
|
|
|
this.time_zone = user['time_zone'];
|
2015-08-31 14:29:37 +00:00
|
|
|
this.avatar = enslClient.baseUrl + user['avatar'];
|
2015-07-22 23:30:14 +00:00
|
|
|
this.admin = user['admin'];
|
2015-08-05 00:06:09 +00:00
|
|
|
this.team = user['team'];
|
2015-08-27 12:06:54 +00:00
|
|
|
this.bans = user['bans'];
|
2015-08-28 20:28:50 +00:00
|
|
|
this.steam = {
|
2015-08-31 14:29:37 +00:00
|
|
|
id: null,
|
2015-08-28 20:28:50 +00:00
|
|
|
url: user['steam']['url'] || null,
|
|
|
|
nickname: user['steam']['nickname'] || null
|
|
|
|
};
|
2015-08-28 14:00:14 +00:00
|
|
|
this.profile = null;
|
2015-08-31 14:29:37 +00:00
|
|
|
this.hive = {
|
|
|
|
id: null
|
|
|
|
};
|
|
|
|
|
|
|
|
if (this.steam.url) {
|
|
|
|
this.steam.id = this.getSteamId();
|
|
|
|
this.hive.id = this.getHiveId();
|
|
|
|
}
|
|
|
|
|
2015-08-28 14:00:14 +00:00
|
|
|
}
|
2015-07-22 23:30:14 +00:00
|
|
|
|
2015-08-31 14:29:37 +00:00
|
|
|
User.prototype.getSteamId = () => {
|
|
|
|
if (this.steam.url === null) return null;
|
|
|
|
var urlId = this.steam.url.match(/\d*$/);
|
|
|
|
if (!urlId) return null;
|
|
|
|
return steam.convertToText(urlId[0]);
|
|
|
|
};
|
|
|
|
|
|
|
|
User.prototype.getHiveId = () => {
|
|
|
|
var steamId = this.getSteamId();
|
|
|
|
if (!steamId) return null;
|
|
|
|
var index = steamId.match(/:0:/) ? 0 : 1;
|
|
|
|
var tailId = parseInt(steamId.match(/\d*$/), 10);
|
|
|
|
return index === 1 ? (tailId * 2) + 1 : tailId * 2;
|
|
|
|
};
|
|
|
|
|
|
|
|
User.prototype.updateProfile = (data, callback) => {
|
2015-08-28 20:28:50 +00:00
|
|
|
let self = this;
|
|
|
|
Profile.update({
|
|
|
|
userId: self.id
|
2015-08-31 14:29:37 +00:00
|
|
|
}, data, error => {
|
2015-08-28 20:28:50 +00:00
|
|
|
if (error) return callback(error);
|
2015-08-31 14:29:37 +00:00
|
|
|
Profile.findOne({userId: self.id}, (error, profile) => {
|
2015-08-28 20:28:50 +00:00
|
|
|
if (error) return callback(error);
|
|
|
|
self.profile = profile.toJson();
|
|
|
|
return callback(error, profile);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2015-08-28 14:00:14 +00:00
|
|
|
User.find = (id, callback) => {
|
2015-08-31 14:29:37 +00:00
|
|
|
enslClient.getUserById({
|
2015-08-28 14:00:14 +00:00
|
|
|
id: id
|
|
|
|
}, (error, response, body) => {
|
|
|
|
if (error) return callback(error);
|
|
|
|
if (response.statusCode !== 200) return callback(new Error("Unable to auth user against API"));
|
2015-08-28 14:17:08 +00:00
|
|
|
let user = new User(body);
|
2015-08-31 14:29:37 +00:00
|
|
|
Profile.findOrCreate(user, (error, profile) => {
|
2015-08-28 14:00:14 +00:00
|
|
|
if (error) return callback(error);
|
2015-08-28 14:17:08 +00:00
|
|
|
user.profile = profile.toJson();
|
|
|
|
return callback(null, user);
|
2015-08-28 14:00:14 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = User;
|