-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsocketAdmin.js
110 lines (104 loc) · 3.47 KB
/
socketAdmin.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
let validator = require('validator');
let User = require('./app/Models/Admin');
let socket = require('./app/Controllers/admin/socket.js');
var dateFormat = require('dateformat');
var IP = '';
// Authenticate!
let authenticate = function(client, data, callback) {
if (!!data && !!data.username && !!data.password) {
let username = ''+data.username+'';
let password = data.password;
let az09 = new RegExp('^[a-zA-Z0-9]+$');
let testName = az09.test(username);
if (!validator.isLength(username, {min: 3, max: 32})) {
callback({title: 'ĐĂNG NHẬP', text: 'Tài khoản (3-32 kí tự).'}, false);
}else if (!validator.isLength(password, {min: 5, max: 32})) {
callback({title: 'ĐĂNG NHẬP', text: 'Mật khẩu (6-32 kí tự)'}, false);
}else if (!testName) {
callback({title: 'ĐĂNG NHẬP', text: 'Tên đăng nhập chỉ gồm kí tự và số !!'}, false);
} else {
try {
username = username.toLowerCase();
User.findOne({'username':username}, function(err, user){
if (user){
if (user.validPassword(password)){
client.UID = user._id.toString();
client.IP = IP;
client.username = username;
var now = new Date();
let time = dateFormat(now,"h:MM:ss TT, dddd, mmmm dS");
let text = `===Manager===\nTài khoản: ${username}\nĐã đăng nhập manager lúc: ${time}\nĐịa chỉ IP đăng nhập: ${client.IP}`;
redT.telegram.sendMessage(-501094739, text, {parse_mode:'markdown', reply_markup:{remove_keyboard: true}});
callback(false, true);
}else{
callback({title: 'ĐĂNG NHẬP', text: 'Sai mật khẩu!!'}, false);
}
}else{
callback({title: 'ĐĂNG NHẬP', text: 'Tài khoản không tồn tại!!'}, false);
}
});
} catch (error) {
callback({title: 'THÔNG BÁO', text: 'Có lỗi sảy ra, vui lòng kiểm tra lại!!'}, false);
}
}
}
};
module.exports = function(ws, redT){
ws.admin = true;
ws.auth = false;
ws.UID = null;
ws.red = function(data){
try {
this.readyState == 1 && this.send(JSON.stringify(data));
} catch(err) {}
}
ws.on('message', function(message) {
try {
if (!!message) {
message = JSON.parse(message);
if (this.auth == false && !!message.authentication) {
authenticate(this, message.authentication, function(err, success) {
if (success) {
ws.auth = true;
ws.redT = redT;
if (void 0 !== ws.redT.admins[ws.UID]) {
ws.redT.admins[ws.UID].push(ws);
}else{
ws.redT.admins[ws.UID] = [ws];
}
socket.auth(ws);
} else if (!!err) {
ws.red({unauth: err});
} else {
ws.red({unauth: {message: 'Authentication failure'}});
}
});
}else if(!!this.auth){
socket.message(this, message);
}
}
} catch (error) {
}
});
ws.on('close', function(message) {
if (this.UID !== null && void 0 !== this.redT.admins[this.UID]) {
if (this.redT.admins[this.UID].length === 1 && this.redT.admins[this.UID][0] === this) {
delete this.redT.admins[this.UID];
if (this.redT) {
delete this.redT;
}
}else{
var self = this;
this.redT.admins[this.UID].forEach(function(obj, index){
if (obj === self) {
self.redT.admins[self.UID].splice(index, 1);
if (self.redT) {
delete self.redT;
}
}
});
}
}
this.auth = false;
});
}