-
Notifications
You must be signed in to change notification settings - Fork 1
/
library.js
128 lines (112 loc) · 4.52 KB
/
library.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
'use strict';
var User = module.parent.require('./user');
var Topic = module.parent.require('./topics');
var db = module.parent.require('./database');
var SocketAdmins = module.parent.require('./socket.io/admin');
var SocketPlugins = module.parent.require('./socket.io/plugins');
//var postTools = module.parent.require('./postTools');
var multiAccountDetector = {};
multiAccountDetector.init = function(params, callback) {
var middleware = params.middleware,
controllers = params.controllers;
controllers.getMultiAccount = function (req, res, next) {
// Renderiza la plantilla
res.render('admin', {});
};
//Creamos las direcciones para poder ver los registros
params.router.get('/admin/multiaccount',middleware.buildHeader, controllers.getMultiAccount);
params.router.get('/api/admin/multiaccount', controllers.getMultiAccount);
callback();
};
multiAccountDetector.getAuth = function(data)
{
//console.log('Data: ');
//console.log(data);
User.getIPs(data, 4, function(err, ips){
//console.log(ips[0].ip);
// Obtenemos las ips del usuario, concretamente la ultima que esta usando
multiAccountDetector.ip = ips[0].ip;
db.getSortedSetRevRange('ip:'+ips[0].ip+':uid', 0, 10, function(err, users) {
//console.log('Resultados con igual IP:');
//console.log(err);
//console.log(ips);
// Obtenemos y guardamos los usuarios que han usado esa ip
if(users && users.length > 1)
{ // solo si hay mas de un usuario con la misma IP
User.getUsersData(users, function(err, usData){
var notBanned = 0;
var sameUsers = "0";
var message = "";
for(var i=0;i<usData.length;i++)
{
if(!usData[i].banned)
{ // Compruebo el numero de multicuentas activas, pues solo permito 2
notBanned++;
}
sameUsers = sameUsers + "," + usData[i].username;
}
if(notBanned > 4)
{ // Si tengo mas de dos cuentas con la misma ip y no baneadas
// Baneo a la actual (si no es admin)
User.isAdministrator(data, function(err, admin){
if(!admin)
{
User.ban(data);
message = '["'+usData[0].username+'","['+sameUsers+']","'+multiAccountDetector.ip+'","'+Date.now()+'", "banned"]';
db.setAdd('multiaccount', message);
}
else
{
message = '["'+usData[0].username+'","['+sameUsers+']","'+multiAccountDetector.ip+'","'+Date.now()+'", null]';
db.setAdd('multiaccount', message);
}
});
}
else
{
message = '["'+usData[0].username+'","['+sameUsers+']","'+multiAccountDetector.ip+'","'+Date.now()+'", null]';
db.setAdd('multiaccount', message);
}
});
}
});
});
}
multiAccountDetector.addNavigation = function(custom_header, callback) {
// Añadimos al menu de admin el acceso a ver los registros
custom_header.plugins.push({
route: '/multiaccount',
icon: '',
name: 'MultiAccount'
});
callback(null, custom_header);
}
multiAccountDetector.getRegister = function(regData, callback)
{
// console.log(regData.req);
callback(null, regData);
}
// LLamadas por sockets
SocketAdmins.getMultiAccountMessages = function (socket, data, callback) {
//console.log('received socket');
// Recivimos la peticion para mostrar las detecciones (al hacer por sockets de admin, solo se responden
// las peticiones de admins!)
db.getObject('multiaccount', callback);
};
SocketAdmins.deleteMultiAccountMessages = function (socket, data, callback) {
//console.log('received socket');
// Recibimos la peticion de borrar el regitro
db.delete('multiaccount', callback);
};
SocketPlugins.multiAccountAccessDetected = function (socket, data, callback) {
//console.log(data);
// Deteccion de multicuenta por cookie, me viene por sockets
User.getUserField(data.user, 'username', function(err, username1){
User.getUserField(data.user2, 'username', function(err, username2){
// Insertamos un array [username1, username2, ip, tiempo, accion]
var message = '["'+username1+'","'+username2+'",null,"'+Date.now()+'", null]';
db.setAdd('multiaccount', message);
});
});
};
module.exports = multiAccountDetector;