From: Darren Date: Thu, 8 Nov 2012 02:23:30 +0000 (+0000) Subject: Option to restrict connections to 1 server X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=93e84f75a98294378edd7a39ce1cef3eecfea7b6;p=KiwiIRC.git Option to restrict connections to 1 server --- diff --git a/client/assets/css/style.css b/client/assets/css/style.css index 0a17194..ec5f62d 100644 --- a/client/assets/css/style.css +++ b/client/assets/css/style.css @@ -223,6 +223,7 @@ a img { border:none; } .server_select .basic label { font-size:1.3em; margin-top:4px; } .server_select .basic { border-bottom: 1px dashed gray; margin-bottom:1em; } .server_select .basic .show_more { display: block; width:40px; margin:10px 0 0 0; font-size:0.8em; background: url(../img/more.png) no-repeat right 7px; } +.server_select.single_server .basic { border:none; } .server_select .status { text-align: center; font-weight: bold; padding:1em; } .server_select .status .ok { border:1px solid #A33F3F; background-color:#D28A8A; diff --git a/client/assets/dev/build.js b/client/assets/dev/build.js index be386f4..8e75dca 100644 --- a/client/assets/dev/build.js +++ b/client/assets/dev/build.js @@ -84,9 +84,23 @@ console.log('kiwi.js and kiwi.min.js built'); var index_src = fs.readFileSync(__dirname + '/index.html.tmpl', FILE_ENCODING); var vars = { base_path: config.get().http_base_path, - cache_buster: Math.ceil(Math.random() * 9000).toString() + cache_buster: Math.ceil(Math.random() * 9000).toString(), + server_settings: '{}' }; +if (config.get().restrict_server) { + vars.server_settings = JSON.stringify({ + connection: { + server: config.get().restrict_server, + port: config.get().restrict_server_port || 6667, + ssl: config.get().restrict_server_ssl, + channel: config.get().restrict_server_channel, + nick: config.get().restrict_server_nick, + allow_change: false + } + }); +} + _.each(vars, function(value, key) { index_src = index_src.replace(new RegExp('<%' + key + '%>', 'g'), value); }); diff --git a/client/assets/dev/index.html.tmpl b/client/assets/dev/index.html.tmpl index 054aa57..7b6f311 100644 --- a/client/assets/dev/index.html.tmpl +++ b/client/assets/dev/index.html.tmpl @@ -235,10 +235,12 @@ function startApp () { var opts = { container: $('#kiwi'), - base_path: base_path + base_path: base_path, // Override the kiwi_server to use. (Think: running on standalone client..) - //kiwi_server: 'http://kiwiirc.com:80' + //kiwi_server: 'http://kiwiirc.com:80', + + server_settings: <%server_settings%> }; // Start the app diff --git a/client/assets/dev/model_application.js b/client/assets/dev/model_application.js index b08ea49..9eeedcc 100644 --- a/client/assets/dev/model_application.js +++ b/client/assets/dev/model_application.js @@ -29,6 +29,9 @@ _kiwi.model.Application = function () { // The base url to the kiwi server this.set('base_path', options[0].base_path ? options[0].base_path : '/kiwi'); + // Any options sent down from the server + this.server_settings = options[0].server_settings || {}; + // Best guess at where the kiwi server is this.detectKiwiServer(); }; @@ -217,6 +220,30 @@ _kiwi.model.Application = function () { } } + // If any settings have been given by the server.. override any auto detected settings + if (this.server_settings && this.server_settings.connection) { + if (this.server_settings.connection.server) { + defaults.server = this.server_settings.connection.server; + } + + if (this.server_settings.connection.port) { + defaults.port = this.server_settings.connection.port; + } + + if (this.server_settings.connection.ssl) { + defaults.ssl = this.server_settings.connection.ssl; + } + + if (this.server_settings.connection.channel) { + defaults.channel = this.server_settings.connection.channel; + } + + if (this.server_settings.connection.nick) { + defaults.nick = this.server_settings.connection.nick; + } + } +console.log('defaults', defaults, this.server_settings); + // Set any random numbers if needed defaults.nick = defaults.nick.replace('?', Math.floor(Math.random() * 100000).toString()); diff --git a/client/assets/dev/view.js b/client/assets/dev/view.js index 3c8db34..68b4c41 100644 --- a/client/assets/dev/view.js +++ b/client/assets/dev/view.js @@ -107,6 +107,15 @@ _kiwi.view.ServerSelect = function () { initialize: function () { this.$el = $($('#tmpl_server_select').html()); + // Remove the 'more' link if the server has disabled server changing + if (_kiwi.app.server_settings && _kiwi.app.server_settings.connection) { + if (!_kiwi.app.server_settings.connection.allow_change) { + this.$el.find('.show_more').remove(); + this.$el.addClass('single_server'); + } + } + + _kiwi.gateway.bind('onconnect', this.networkConnected, this); _kiwi.gateway.bind('connecting', this.networkConnecting, this); diff --git a/config.js b/config.js index 6837641..5becf37 100644 --- a/config.js +++ b/config.js @@ -95,7 +95,13 @@ conf.http_base_path = "/kiwi"; conf.quit_message = "http://www.kiwiirc.com/ - A hand-crafted IRC client"; - +// If not empty, the client may only connect to this 1 IRC server +//conf.restrict_server = "irc.kiwiirc.com"; +//conf.restrict_server_port = 6667; +//conf.restrict_server_ssl = false; +//conf.restrict_server_channel = "#kiwiirc"; +//conf.restrict_server_password = ""; +//conf.restrict_server_nick = "kiwi_"; /* diff --git a/server/client.js b/server/client.js index 0a530bc..27aa056 100755 --- a/server/client.js +++ b/server/client.js @@ -110,38 +110,55 @@ function kiwiCommand(command, callback) { callback = function () {}; } switch (command.command) { - case 'connect': - if (command.hostname && command.port && command.nick) { - var con = new IrcConnection(command.hostname, command.port, command.ssl, - command.nick, {hostname: this.websocket.handshake.revdns, address: this.websocket.handshake.real_address}, - command.password); - - var con_num = this.next_connection++; - this.irc_connections[con_num] = con; - - var irc_commands = new IrcCommands(con, con_num, this); - irc_commands.bindEvents(); - - con.on('connected', function () { - return callback(null, con_num); - }); - - con.on('error', function (err) { + case 'connect': + if (command.hostname && command.port && command.nick) { + var con; + + if (global.config.restrict_server) { + con = new IrcConnection( + global.config.restrict_server, + global.config.restrict_server_port, + global.config.restrict_server_ssl, + command.nick, + {hostname: this.websocket.handshake.revdns, address: this.websocket.handshake.real_address}, + global.config.restrict_server_password); + + } else { + con = new IrcConnection( + command.hostname, + command.port, + command.ssl, + command.nick, + {hostname: this.websocket.handshake.revdns, address: this.websocket.handshake.real_address}, + command.password); + } + + var con_num = this.next_connection++; + this.irc_connections[con_num] = con; + + var irc_commands = new IrcCommands(con, con_num, this); + irc_commands.bindEvents(); + + con.on('connected', function () { + return callback(null, con_num); + }); + + con.on('error', function (err) { console.log('irc_connection error (' + command.hostname + '):', err); // TODO: Once multiple servers implemented, specify which server failed //that.sendKiwiCommand('error', {server: con_num, error: err}); return callback(err.code, null); - }); + }); con.on('close', function () { that.irc_connections[con_num] = null; }); - } else { - return callback('Hostname, port and nickname must be specified'); - } - break; - default: - callback(); + } else { + return callback('Hostname, port and nickname must be specified'); + } + break; + default: + callback(); } }