From f0fb87c1b9101f6111d4f73b2f99db2e476415a5 Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Fri, 22 Feb 2013 19:28:02 +0100 Subject: [PATCH] changed username policy to allow only unreserved URI characters --- app.js | 3 +-- lib/room.js | 10 ++++++---- lib/utils.js | 11 ++++++++++- package.json | 2 +- public/js/app.js | 21 +++++++++------------ public/js/leaderboards.js | 2 +- routes/user.js | 36 ++++++++++++++---------------------- views/changepasswd.jade | 4 ++-- views/home.jade | 4 ++-- views/leaderboards.jade | 6 ++---- views/room.jade | 4 ++-- views/user.jade | 4 ++-- 12 files changed, 52 insertions(+), 55 deletions(-) diff --git a/app.js b/app.js index f950a07..9c3cc6c 100644 --- a/app.js +++ b/app.js @@ -127,8 +127,7 @@ io.sockets.on('connection', function(socket) { } }); socket.on('joinanonymously', function(nickname, roomname) { - if (!socket.nickname && typeof nickname === 'string' && nickname !== '' && - ~config.rooms.indexOf(roomname)) { + if (!socket.nickname && typeof nickname === 'string' && ~config.rooms.indexOf(roomname)) { rooms[roomname].setNickName(socket, nickname); } }); diff --git a/lib/room.js b/lib/room.js index 3163df2..75d26b2 100644 --- a/lib/room.js +++ b/lib/room.js @@ -8,6 +8,7 @@ var amatch = require('./match') , config = require('../config') , fifolength = config.songsinarun * config.gameswithnorepeats , io + , isUsername = require('./utils').isUsername , sockets , songsdb = clients.songs , usersdb = clients.users; @@ -405,12 +406,13 @@ function Room(roomname) { this.setNickName = function(socket, nickname) { var feedback = null; - if (nickname.length > 15) { - feedback = 'That name is too long.'; - } - else if (nickname === 'binb') { + if (nickname === 'binb') { feedback = 'That name is reserved.'; } + else if (!isUsername(nickname)) { + feedback = 'Name must contain only '; + feedback += 'alphanumeric characters.'; + } else if (sockets[nickname]) { feedback = 'Name already taken.'; } diff --git a/lib/utils.js b/lib/utils.js index b5118ec..d5b81ca 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -22,7 +22,7 @@ exports.buildLeaderboards = function(pointsresults, timesresults) { }; /** - * Check if the provided string is a valid email address. + * Check whether a given string is a valid email address. */ exports.isEmail = function(str) { @@ -31,6 +31,15 @@ exports.isEmail = function(str) { return filter.test(str); }; +/** + * Check whether a given string is a well formed username. + */ + +exports.isUsername = function(str) { + var filter = /^[a-zA-Z0-9\-_]{1,15}$/; + return filter.test(str); +}; + /** * Get a random slogan. */ diff --git a/package.json b/package.json index 40758d3..3aa5d9e 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,5 @@ "start": "app.js" }, "subdomain": "binb", - "version": "0.3.5-6" + "version": "0.3.5-7" } diff --git a/public/js/app.js b/public/js/app.js index ebb4bf0..e899f83 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -394,9 +394,8 @@ for(var i=0;i<3;i++) { if (podium[i]) { - var playername = podium[i].nickname.encodeEntities(); html += '
'; - html += ''+playername+''; + html += ''+podium[i].nickname+''; html += ''+podium[i].points+''; html += ''+podium[i].golds+''+podium[i].silvers+''; html += ''+podium[i].bronzes+''+podium[i].guessed+''; @@ -466,8 +465,7 @@ // Prompt for name and send it var joinAnonymously = function(msg) { if (/nickname\s*\=/.test(document.cookie) && !msg) { - var encodednickname = document.cookie.replace(/.*nickname\s*\=\s*([^;]*);?.*/, '$1'); - nickname = decodeURIComponent(encodednickname); + var nickname = document.cookie.replace(/.*nickname\s*\=\s*([^;]*);?.*/, '$1'); return socket.emit('joinanonymously', nickname, roomname); } @@ -480,7 +478,7 @@ html += '

You are joining the '+roomname+' room

'; html += ''; html += '