Store raw displayName, only escape when used

Prevents double escaping when importing chat history from another peer.
Also validate color and time when we receive history
master
Daniel Berteaud 11 years ago
parent 409edd50db
commit 1e2e524900
  1. 25
      public/js/vroom.js

@ -173,7 +173,7 @@ function initVroom(room) {
} }
peer.send('peer_color', {color: peers.local.color}); peer.send('peer_color', {color: peers.local.color});
// We don't have chat history yet ? Lets ask to this new peer // We don't have chat history yet ? Lets ask to this new peer
if(!peers.local.hasHistory){ if(!peers.local.hasHistory && chatIndex == 0){
peer.sendDirectly('vroom', 'getHistory', ''); peer.sendDirectly('vroom', 'getHistory', '');
} }
}, 3500); }, 3500);
@ -256,8 +256,9 @@ function initVroom(room) {
function newChatMessage(from,message,time,color){ function newChatMessage(from,message,time,color){
// displayName has already been escaped // displayName has already been escaped
var cl = (from === 'local') ? 'chatMsgSelf':'chatMsgOthers'; var cl = (from === 'local') ? 'chatMsgSelf':'chatMsgOthers';
if (!time) if (!time || !time.match(/^\d{1,2}:\d{1,2}:\d{1,2}$/)){
time = getTime(); time = getTime();
}
if (peers[from] && peers[from].color){ if (peers[from] && peers[from].color){
var color = peers[from].color; var color = peers[from].color;
var displayName = peers[from].displayName; var displayName = peers[from].displayName;
@ -265,10 +266,10 @@ function initVroom(room) {
// this peer might not be defined if we're importing chat history // this peer might not be defined if we're importing chat history
// So just use the from as the displayName and the provided color // So just use the from as the displayName and the provided color
else{ else{
var color = (color) ? color:chooseColor(); var color = (color && color.match(/#[\da-f]{6}/i)) ? color:chooseColor();
var displayName = from; var displayName = from;
} }
var newmsg = $('<div class="chatMsg ' + cl + '">' + time + ' ' + displayName + '<p>' + linkify(stringEscape(message)) + '</p></div>').css('background-color', color); var newmsg = $('<div class="chatMsg ' + cl + '">' + time + ' ' + stringEscape(displayName) + '<p>' + linkify(stringEscape(message)) + '</p></div>').css('background-color', color);
$('<div class="row chatMsgContainer"></div>').append(newmsg).appendTo('#chatHistory'); $('<div class="row chatMsgContainer"></div>').append(newmsg).appendTo('#chatHistory');
$('#chatHistory').scrollTop($('#chatHistory').prop('scrollHeight')); $('#chatHistory').scrollTop($('#chatHistory').prop('scrollHeight'));
// Record this message in the history object // Record this message in the history object
@ -287,9 +288,9 @@ function initVroom(room) {
function updateDisplayName(id){ function updateDisplayName(id){
// We might receive the screen before the peer itself // We might receive the screen before the peer itself
// so check if the object exists before using it, or fallback with empty values // so check if the object exists before using it, or fallback with empty values
var display = (peers[id] && peers[id].hasName) ? peers[id].displayName : ''; var display = (peers[id] && peers[id].hasName) ? stringEscape(peers[id].displayName) : '';
var color = (peers[id] && peers[id].color) ? peers[id].color : chooseColor(); var color = (peers[id] && peers[id].color) ? peers[id].color : chooseColor();
var screenName = (peers[id] && peers[id].hasName) ? sprintf(locale.SCREEN_s, peers[id].displayName) : ''; var screenName = (peers[id] && peers[id].hasName) ? sprintf(locale.SCREEN_s, stringEscape(peers[id].displayName)) : '';
$('#name_' + id).html(display).css('background-color', color); $('#name_' + id).html(display).css('background-color', color);
$('#name_' + id + '_screen').html(screenName).css('background-color', color); $('#name_' + id + '_screen').html(screenName).css('background-color', color);
} }
@ -320,8 +321,8 @@ function initVroom(room) {
} }
// The peer sets a displayName, record this in our peers struct // The peer sets a displayName, record this in our peers struct
else if (data.type == 'setDisplayName'){ else if (data.type == 'setDisplayName'){
var name = stringEscape(data.payload); var name = data.payload;
peer.logger.log('Received displayName ' + name + ' from peer ' + peer.id); peer.logger.log('Received displayName ' + stringEscape(name) + ' from peer ' + peer.id);
// Set display name under the video // Set display name under the video
peers[peer.id].displayName = name; peers[peer.id].displayName = name;
if (name !== ''){ if (name !== ''){
@ -398,12 +399,12 @@ function initVroom(room) {
webrtc.on('room_locked', function(data){ webrtc.on('room_locked', function(data){
$('#lockLabel').addClass('btn-danger active'); $('#lockLabel').addClass('btn-danger active');
$.notify(sprintf(locale.ROOM_LOCKED_BY_s, peers[data.id].displayName), 'info'); $.notify(sprintf(locale.ROOM_LOCKED_BY_s, stringEscape(peers[data.id].displayName)), 'info');
}); });
webrtc.on('room_unlocked', function(data){ webrtc.on('room_unlocked', function(data){
$('#lockLabel').removeClass('btn-danger active'); $('#lockLabel').removeClass('btn-danger active');
$.notify(sprintf(locale.ROOM_UNLOCKED_BY_s, peers[data.id].displayName), 'info'); $.notify(sprintf(locale.ROOM_UNLOCKED_BY_s, stringEscape(peers[data.id].displayName)), 'info');
}); });
// Handle the readyToCall event: join the room // Handle the readyToCall event: join the room
@ -436,7 +437,7 @@ function initVroom(room) {
// Error sending something through dataChannel // Error sending something through dataChannel
webrtc.on('cantsend', function (peer, message){ webrtc.on('cantsend', function (peer, message){
if (message.type == 'textChat'){ if (message.type == 'textChat'){
var who = (peers[peer.id].hasName) ? peers[peer.id].displayName : locale.ONE_OF_THE_PEERS; var who = (peers[peer.id].hasName) ? stringEscape(peers[peer.id].displayName) : locale.ONE_OF_THE_PEERS;
$.notify(sprintf(locale.CANT_SEND_TO_s, who), 'error'); $.notify(sprintf(locale.CANT_SEND_TO_s, who), 'error');
} }
}); });
@ -481,7 +482,7 @@ function initVroom(room) {
$('#chatBox').attr('placeholder', locale.SET_YOUR_NAME_TO_CHAT); $('#chatBox').attr('placeholder', locale.SET_YOUR_NAME_TO_CHAT);
peers.local.hasName = false; peers.local.hasName = false;
} }
peers.local.displayName = stringEscape($('#displayName').val()); peers.local.displayName = $('#displayName').val();
updateDisplayName('local'); updateDisplayName('local');
webrtc.sendDirectlyToAll('vroom', 'setDisplayName', $('#displayName').val()); webrtc.sendDirectlyToAll('vroom', 'setDisplayName', $('#displayName').val());
}); });

Loading…
Cancel
Save