Fix user.js for new auth

This commit is contained in:
calzoneman 2013-08-17 15:54:23 -05:00
parent ebd55b4846
commit 65d7a8a455

185
user.js
View file

@ -533,15 +533,16 @@ User.prototype.initCallbacks = function() {
var lastguestlogin = {}; var lastguestlogin = {};
// Attempt to login // Attempt to login
User.prototype.login = function(name, pw, session) { User.prototype.login = function(name, pw, session) {
var self = this;
// No password => try guest login // No password => try guest login
if(pw == "" && session == "") { if(pw == "" && session == "") {
if(this.ip in lastguestlogin) { if(self.ip in lastguestlogin) {
var diff = (Date.now() - lastguestlogin[this.ip])/1000; var diff = (Date.now() - lastguestlogin[self.ip])/1000;
if(diff < this.server.cfg["guest-login-delay"]) { if(diff < self.server.cfg["guest-login-delay"]) {
this.socket.emit("login", { self.socket.emit("login", {
success: false, success: false,
error: ["Guest logins are restricted to one per ", error: ["Guest logins are restricted to one per ",
this.server.cfg["guest-login-delay"] self.server.cfg["guest-login-delay"]
+ " seconds per IP. ", + " seconds per IP. ",
"This restriction does not apply to registered users." "This restriction does not apply to registered users."
].join("") ].join("")
@ -549,149 +550,101 @@ User.prototype.login = function(name, pw, session) {
return false; return false;
} }
} }
try { if(!$util.isValidUserName(name)) {
// Sorry bud, can't take that name self.socket.emit("login", {
if(Auth.isRegistered(name)) {
this.socket.emit("login", {
success: false,
error: "That username is already taken"
});
return false;
}
// YOUR ARGUMENT IS INVALID
else if(!Auth.validateName(name)) {
this.socket.emit("login", {
success: false, success: false,
error: "Invalid username. Usernames must be 1-20 characters long and consist only of alphanumeric characters and underscores" error: "Invalid username. Usernames must be 1-20 characters long and consist only of alphanumeric characters and underscores"
}); });
return;
} }
else {
if(this.channel != null) { self.server.db.isUsernameTaken(name, function (err, taken) {
for(var i = 0; i < this.channel.users.length; i++) { if(err) {
if(this.channel.users[i].name == name) { self.socket.emit("login", {
this.socket.emit("login", {
success: false, success: false,
error: "That name is already taken on this channel" error: "Internal error: " + err
});
return;
}
if(taken) {
self.socket.emit("login", {
success: false,
error: "That username is taken"
});
return;
}
if(self.channel != null) {
for(var i = 0; i < self.channel.users.length; i++) {
if(self.channel.users[i].name == name) {
self.socket.emit("login", {
success: false,
error: "That name is already taken on self channel"
}); });
return; return;
} }
} }
} }
lastguestlogin[this.ip] = Date.now(); lastguestlogin[self.ip] = Date.now();
this.rank = Rank.Guest; self.rank = Rank.Guest;
Logger.syslog.log(this.ip + " signed in as " + name); Logger.syslog.log(self.ip + " signed in as " + name);
this.server.db.recordVisit(this.ip, name); self.server.db.recordVisit(self.ip, name);
this.name = name; self.name = name;
this.loggedIn = false; self.loggedIn = false;
this.socket.emit("login", { self.socket.emit("login", {
success: true, success: true,
name: name name: name
}); });
this.socket.emit("rank", this.rank); self.socket.emit("rank", self.rank);
if(this.channel != null) { if(self.channel != null) {
this.channel.logger.log(this.ip + " signed in as " + name); self.channel.logger.log(self.ip + " signed in as " + name);
this.channel.broadcastNewUser(this); self.channel.broadcastNewUser(self);
} }
} }
} } else {
catch(e) { self.server.db.userLogin(name, pw, session, function (err, row) {
this.socket.emit("login", { if(err) {
ActionLog.record(self.ip, self.name, "login-failure");
self.socket.emit("login", {
success: false, success: false,
error: e error: err
}); });
return;
} }
} if(self.channel != null) {
else { for(var i = 0; i < self.channel.users.length; i++) {
try { if(self.channel.users[i].name == name) {
var row; self.channel.kick(self.channel.users[i], "Duplicate login");
if((row = Auth.login(name, pw, session))) {
if(this.channel != null) {
for(var i = 0; i < this.channel.users.length; i++) {
if(this.channel.users[i].name == name) {
this.channel.kick(this.channel.users[i], "Duplicate login");
} }
} }
} }
if(this.global_rank >= 255) if(self.global_rank >= 255)
ActionLog.record(this.ip, name, "login-success"); ActionLog.record(self.ip, name, "login-success");
this.loggedIn = true; self.loggedIn = true;
this.socket.emit("login", { self.socket.emit("login", {
success: true, success: true,
session: row.session_hash, session: row.session_hash,
name: name name: name
}); });
Logger.syslog.log(this.ip + " logged in as " + name); Logger.syslog.log(self.ip + " logged in as " + name);
this.server.db.recordVisit(this.ip, name); self.server.db.recordVisit(self.ip, name);
this.profile = { self.profile = {
image: row.profile_image, image: row.profile_image,
text: row.profile_text text: row.profile_text
}; };
var chanrank = (this.channel != null) ? this.channel.getRank(name) var chanrank = (self.channel != null) ? self.channel.getRank(name)
: Rank.Guest; : Rank.Guest;
var rank = (chanrank > row.global_rank) ? chanrank var rank = (chanrank > row.global_rank) ? chanrank
: row.global_rank; : row.global_rank;
this.rank = (this.rank > rank) ? this.rank : rank; self.rank = (self.rank > rank) ? self.rank : rank;
this.global_rank = row.global_rank; self.global_rank = row.global_rank;
this.socket.emit("rank", this.rank); self.socket.emit("rank", self.rank);
this.name = name; self.name = name;
if(this.channel != null) { if(self.channel != null) {
this.channel.logger.log(this.ip + " logged in as " + name); self.channel.logger.log(self.ip + " logged in as " + name);
this.channel.broadcastNewUser(this); self.channel.broadcastNewUser(self);
} }
}
// Wrong password
else {
ActionLog.record(this.ip, this.name, "login-failure");
this.socket.emit("login", {
success: false,
error: "Invalid session"
});
return false;
}
}
catch(e) {
this.socket.emit("login", {
success: false,
error: e
});
}
}
}
// Attempt to register a user account
User.prototype.register = function(name, pw) {
if(pw == "") {
// Sorry bud, password required
this.socket.emit("register", {
success: false,
error: "You must provide a password"
});
return false;
}
else if(Auth.isRegistered(name)) {
this.socket.emit("register", {
success: false,
error: "That username is already taken"
});
return false;
}
else if(!Auth.validateName(name)) {
this.socket.emit("register", {
success: false,
error: "Invalid username. Usernames must be 1-20 characters long and consist only of alphanumeric characters and underscores"
});
}
else if(Auth.register(name, pw)) {
console.log(this.ip + " registered " + name);
this.socket.emit("register", {
success: true
});
this.login(name, pw);
}
else {
this.socket.emit("register", {
success: false,
error: "[](/ppshrug) Registration Failed."
}); });
} }
} }