Added settings module and exposed it to the templates

The server should require the same settings module as the client; so
that the checks is performed on both sides.
This commit is contained in:
unkelpehr 2014-09-21 21:09:08 +02:00
parent 42016ac9bc
commit 482d352f30
4 changed files with 54 additions and 30 deletions

View File

@ -62,7 +62,7 @@ define(['fandango', 'websocket', 'aes'], function (fandango, websocket, aes) {
} }
/** /**
* A very simple implementation of sprintf() * A very simple templating function.
* @param {} str [description] * @param {} str [description]
* @param {[type]} map [description] * @param {[type]} map [description]
* @return {[type]} [description] * @return {[type]} [description]

View File

@ -1,14 +1,11 @@
// Main cryptalk module // Main cryptalk module
define({ define({
data: {
// If no host is given it will default to localhost.
host: ''
},
compiles: ['$'], compiles: ['$'],
requires: ['templates', 'sound', 'fandango'] requires: ['settings', 'templates', 'sound', 'fandango']
}, function ($, requires, data) { }, function ($, requires, data) {
var socket, var socket,
key, key,
host,
room, room,
hash, hash,
nick, nick,
@ -27,6 +24,7 @@ define({
}, },
// Shortcut // Shortcut
settings = requires.settings;
fandango = requires.fandango; fandango = requires.fandango;
templates = requires.templates; templates = requires.templates;
sound = requires.sound; sound = requires.sound;
@ -34,11 +32,16 @@ define({
// Adds a new message to the DOM // Adds a new message to the DOM
post = function (type, text, clearChat, clearBuffer, nick) { post = function (type, text, clearChat, clearBuffer, nick) {
var tpl = templates.post[type], var tpl = templates.post[type],
post = $.template(tpl, text && { post,
text: text, data = fandango.merge({}, settings, {
nick: nick nick: nick,
room: room,
mute: mute
}); });
data.text = $.template(text, data);
post = $.template(tpl, data);
// Always clear the input after a post // Always clear the input after a post
if (clearBuffer) { if (clearBuffer) {
clearInput(); clearInput();
@ -79,8 +82,10 @@ define({
key: function (payload) { key: function (payload) {
// Make sure the key meets the length requirements // Make sure the key meets the length requirements
if (payload.length < 8) { if (payload.length > settings.key_maxLen) {
return post('error', templates.messages.key_weak); return post('error', templates.messages.key_to_long);
} else if (payload.length < settings.key_minLen) {
return post('error', templates.messages.key_to_short);
} }
// Set key // Set key
@ -91,9 +96,11 @@ define({
}, },
nick: function (payload) { nick: function (payload) {
// Make sure the nick meets the length requirements // Make sure the key meets the length requirements
if (payload.length < 2) { if (payload.length > settings.nick_maxLen) {
return post('error', templates.messages.nick_short); return post('error', templates.messages.nick_to_long);
} else if (payload.length < settings.nick_minLen) {
return post('error', templates.messages.nick_to_short);
} }
// Set nick // Set nick
@ -114,7 +121,7 @@ define({
join: function (payload) { join: function (payload) {
return ( return (
room room
? post('error', $.template(templates.messages.already_in_room, { roomName: room})) ? post('error', templates.messages.already_in_room)
: socket.emit('room:join', payload) : socket.emit('room:join', payload)
); );
}, },
@ -122,7 +129,7 @@ define({
generate: function (payload) { generate: function (payload) {
return ( return (
room room
? post('error', $.template(templates.messages.already_in_room, { roomName: room})) ? post('error', templates.messages.already_in_room)
: socket.emit('room:generate') : socket.emit('room:generate')
); );
} }
@ -250,16 +257,18 @@ define({
} }
}; };
host = settings.host;
// Post the help/welcome message // Post the help/welcome message
post('motd', templates.motd, true); post('motd', templates.motd, true);
// Push 'Connecting...' message // Push 'Connecting...' message
post('info', $.template(templates.messages.connecting, { post('info', $.template(templates.messages.connecting, {
host: data.host || 'localhost' host: host || 'localhost'
})); }));
// The one and only socket // The one and only socket
socket = $.Websocket.connect(data.host); socket = $.Websocket.connect(host);
// Bind socket events // Bind socket events
socket socket
@ -330,7 +339,7 @@ define({
// Tell the user that the chat is ready to interact with // Tell the user that the chat is ready to interact with
post('info', $.template(templates.messages.connected, { post('info', $.template(templates.messages.connected, {
host: data.host || 'localhost' host: host || 'localhost'
})); }));
// It's possible to provide room and key using the hashtag. // It's possible to provide room and key using the hashtag.

View File

@ -0,0 +1,10 @@
define({
// If no host is given it will default to localhost.
host: '',
nick_maxLen: 20,
nick_minLen: 3,
key_maxLen: Infinity,
key_minLen: 8
});

View File

@ -48,6 +48,8 @@ define({
default_nick: 'Anonymous', default_nick: 'Anonymous',
// All post templates will have access to the properties in the 'settings' module,
// along with the current nick, room, mute-status and of course the message ('text').
post: { post: {
motd: '<li><i class="motd">{text}</i></li>', motd: '<li><i class="motd">{text}</i></li>',
info: '<li>INF&gt; <i class="info">{text}</i></li>', info: '<li>INF&gt; <i class="info">{text}</i></li>',
@ -56,34 +58,37 @@ define({
message: '<li><i class="nick">{nick}&gt;</i> <i class="message">{text}</i></li>' message: '<li><i class="nick">{nick}&gt;</i> <i class="message">{text}</i></li>'
}, },
// All message templates will have access to the properties in the 'settings' module,
// along with the current nick, room and mute-status.
messages: { messages: {
key_weak: 'Hmm, that\'s a weak key, try again...', key_to_short: 'Hmm, that\'s a weak key, try again...',
key_to_long: 'Man that\'s a long key. Make it a tad short, \'kay?',
key_ok_ready: 'Key set, you can now start communicating.', key_ok_ready: 'Key set, you can now start communicating.',
key_ok_but_no_room: 'Key set, you can now join a room and start communicating.', key_ok_but_no_room: 'Key set, you can now join a room and start communicating.',
nick_to_short: 'Nickname is too short, it has to be at least {nick_minLen} characters long. Try again.',
nick_to_long: 'Nickname is too long, it can be at most {nick_maxLen} characters long. Try again.',
nick_set: 'From now on, you\'re referred to as \'{nick}\'.',
msg_no_room: 'You have to join a room before sending messages. See /help.', msg_no_room: 'You have to join a room before sending messages. See /help.',
not_in_room: 'You have to be in a room to count participants...', not_in_room: 'You have to be in a room to count participants...',
msg_no_key: 'You have to set an encryption key before sending a message. See /help.', msg_no_key: 'You have to set an encryption key before sending a message. See /help.',
nick_short: 'Nickname is too short, try again.',
nick_set: 'From now on, you\'re referred to as \'{nick}\'.',
leave_from_nowhere: 'How are you supposed to leave, while being nowhere?', leave_from_nowhere: 'How are you supposed to leave, while being nowhere?',
// Sounds // Sounds
muted: 'Notification sounds is now muted.', muted: 'Notification sounds is now muted.',
unmuted: 'Notifications sounds is now on.', unmuted: 'Notifications sounds is now on.',
// Available variables: 'commandName' // Extra variables: 'commandName'
unrecognized_command: 'Unrecognized command: "{commandName}"', unrecognized_command: 'Unrecognized command: "{commandName}"',
// Available variables: 'roomName' joined_room: 'Joined room {room}',
joined_room: 'Joined room {roomName}', left_room: 'Left room {room}',
left_room: 'Left room {roomName}', already_in_room: 'You are already in a room ({room}), stoopid.',
already_in_room: 'You are already in a room ({roomName}), stoopid.',
unable_to_decrypt: 'Unabled to decrypt received message, keys does not match.', unable_to_decrypt: 'Unabled to decrypt received message, keys does not match.',
socket_error: 'A network error has occurred. A restart may be required to bring back full functionality.<br>Examine the logs for more details.', socket_error: 'A network error has occurred. A restart may be required to bring back full functionality.<br>Examine the logs for more details.',
// Available variable: 'host'
connecting: 'Connecting to host {host}...', connecting: 'Connecting to host {host}...',
connected: 'A connection to the server has been established. Happy chatting!' connected: 'A connection to the server has been established. Happy chatting!'
}, },