diff --git a/channel.js b/channel.js
index 0b476c65..1d53a34b 100644
--- a/channel.js
+++ b/channel.js
@@ -119,14 +119,6 @@ var Channel = function(name, Server) {
Server.db.loadChannelData(self, function () {
self.dbloaded = true;
- // If the channel is empty and isn't registered, the first person
- // gets ownership of the channel (temporarily)
- if(self.users.length == 1 && !self.registered) {
- var user = self.users[0];
- user.rank = (user.rank < Rank.Owner) ? 10 : user.rank;
- self.broadcastUserUpdate(user);
- user.socket.emit("channelNotRegistered");
- }
if(self.registered) {
self.loadDump();
}
@@ -710,12 +702,6 @@ Channel.prototype.userJoin = function(user) {
}
}
- // If the channel is empty and isn't registered, the first person
- // gets ownership of the channel (temporarily)
- if(this.dbloaded && this.users.length == 0 && !this.registered) {
- user.rank = (user.rank < Rank.Owner) ? 10 : user.rank;
- user.socket.emit("channelNotRegistered");
- }
this.users.push(user);
this.broadcastVoteskipUpdate();
if(user.name != "") {
@@ -953,6 +939,12 @@ Channel.prototype.broadcastUsercount = function() {
Channel.prototype.broadcastNewUser = function(user) {
var self = this;
+ // If the channel is empty and isn't registered, the first person
+ // gets ownership of the channel (temporarily)
+ if(self.dbloaded && self.users.length == 1 && !self.registered) {
+ user.rank = (user.rank < Rank.Owner) ? 10 : user.rank;
+ user.socket.emit("channelNotRegistered");
+ }
self.server.db.listAliases(user.ip, function (err, aliases) {
if(err) {
aliases = [];
diff --git a/database.js b/database.js
index a6558058..74af84c0 100644
--- a/database.js
+++ b/database.js
@@ -747,6 +747,11 @@ Database.prototype.userLogin = function (name, pw, session, callback) {
return;
}
+ if(row.session_hash) {
+ callback(null, row);
+ return;
+ }
+
self.createLoginSession(name, function (err, hash) {
if(err) {
callback(err, null);
@@ -790,6 +795,7 @@ Database.prototype.userLoginPassword = function (name, pw, callback) {
if(valid) {
// For security, erase the password field before returning
delete row["pw"];
+ row.session_hash = "";
callback(null, row);
return;
}
@@ -809,6 +815,7 @@ Database.prototype.userLoginPassword = function (name, pw, callback) {
// Remove password field before returning
delete row["pw"];
+ row.session_hash = "";
callback(null, row);
} else {
callback("Invalid username/password combination", null);
diff --git a/user.js b/user.js
index a634064a..cc6086d2 100644
--- a/user.js
+++ b/user.js
@@ -475,7 +475,6 @@ User.prototype.initCallbacks = function() {
self.server.db.saveUserPlaylist(pl, self.name, data.name,
function (err, res) {
if(err) {
- console.log(typeof err);
self.socket.emit("savePlaylist", {
success: false,
error: err
@@ -628,7 +627,7 @@ User.prototype.login = function(name, pw, session) {
} else {
self.server.db.userLogin(name, pw, session, function (err, row) {
if(err) {
- self.server.actionlog.record(self.ip, self.name, "login-failure");
+ self.server.actionlog.record(self.ip, name, "login-failure");
self.socket.emit("login", {
success: false,
error: err
@@ -637,7 +636,7 @@ User.prototype.login = function(name, pw, session) {
}
if(self.channel != null) {
for(var i = 0; i < self.channel.users.length; i++) {
- if(self.channel.users[i].name == name) {
+ if(self.channel.users[i].name.toLowerCase() == name.toLowerCase()) {
self.channel.kick(self.channel.users[i], "Duplicate login");
}
}
@@ -667,11 +666,11 @@ User.prototype.login = function(name, pw, session) {
}
};
if(self.channel !== null) {
- self.channel.getRank(self.name, function (err, rank) {
- if(!err && rank > self.global_rank)
+ self.channel.getRank(name, function (err, rank) {
+ if(!err)
self.rank = rank;
else
- self.rank = self.global_rank
+ self.rank = self.global_rank;
afterRankLookup();
});
} else {
diff --git a/www/assets/js/account.js b/www/assets/js/account.js
index 5ad2d614..c65cf7f9 100644
--- a/www/assets/js/account.js
+++ b/www/assets/js/account.js
@@ -44,9 +44,10 @@ if(uname && session) {
session: session
};
postJSON(WEB_URL + "/api/login?callback=?", data, function (data) {
+ console.log(data);
if(data.success)
onLogin();
- }, "jsonp");
+ });
}
function onLogin() {
@@ -182,7 +183,7 @@ $("#registerbtn").click(function() {
.text(data.error)
.insertBefore($("#registerpane form"));
}
- }, "jsonp");
+ });
});
$("#loginbtn").click(function() {
@@ -217,7 +218,7 @@ $("#loginbtn").click(function() {
.text(data.error)
.insertBefore($("#loginpane form"));
}
- }, "jsonp");
+ });
});
$("#cpwbtn").click(function() {
@@ -279,7 +280,7 @@ $("#cpwbtn").click(function() {
.text(data.error)
.insertBefore($("#changepwpane form"));
}
- }, "jsonp");
+ });
});
$("#cebtn").click(function() {
@@ -332,7 +333,7 @@ $("#cebtn").click(function() {
.text(data.error)
.insertBefore($("#changeemailpane form"));
}
- }, "jsonp");
+ });
});
@@ -360,7 +361,7 @@ $("#rpbtn").click(function() {
.text(data.error)
.insertBefore($("#pwresetpane form"));
}
- }, "jsonp");
+ });
});
@@ -388,7 +389,7 @@ $("#profilesave").click(function() {
.text(data.error)
.insertBefore($("#profilepane form"));
}
- }, "jsonp");
+ });
});
$("#login").click(function() {
diff --git a/www/login.html b/www/login.html
index 2ace9b2d..0e48e3c8 100644
--- a/www/login.html
+++ b/www/login.html
@@ -37,6 +37,30 @@