From d7d0ebce73794964e7290faf768701e3d54a1876 Mon Sep 17 00:00:00 2001 From: Jack Allnutt Date: Sun, 22 Mar 2015 22:42:23 +0000 Subject: [PATCH] Split server PASS from SASL authentication --- client/assets/css/style.css | 1 + client/src/app.js | 10 ++++++++++ client/src/index.html.tmpl | 11 +++++++++++ client/src/models/gateway.js | 2 ++ client/src/models/network.js | 7 +++++++ client/src/models/newconnection.js | 1 + client/src/translations/en-gb.po | 4 ++++ client/src/views/serverselect.js | 24 ++++++++++++++++++++---- server/client.js | 3 ++- server/irc/connection.js | 5 +++-- 10 files changed, 61 insertions(+), 7 deletions(-) diff --git a/client/assets/css/style.css b/client/assets/css/style.css index 7c74db558..6978b44a6 100644 --- a/client/assets/css/style.css +++ b/client/assets/css/style.css @@ -271,6 +271,7 @@ html, body { height:100%; } #kiwi .server_select { position:relative; width:320px; margin:0 auto; overflow:hidden; } #kiwi .server_select.initial { margin-top: 3em; } #kiwi .server_select .more { display: none; } +#kiwi .server_select .more tr.server_pass { display:none; } #kiwi .server_select button { } #kiwi .server_select input { } #kiwi .server_select label { } diff --git a/client/src/app.js b/client/src/app.js index 12b8b124a..a2075f470 100644 --- a/client/src/app.js +++ b/client/src/app.js @@ -309,6 +309,9 @@ _kiwi.global = { if (_kiwi.app.server_settings.client.ssl) defaults.ssl = _kiwi.app.server_settings.client.ssl; + if (_kiwi.app.server_settings.client.server_pass) + defaults.server_pass = _kiwi.app.server_settings.client.server_pass; + if (_kiwi.app.server_settings.client.channel) defaults.channel = _kiwi.app.server_settings.client.channel; @@ -327,6 +330,9 @@ _kiwi.global = { if (getQueryVariable('nick')) defaults.nick = getQueryVariable('nick'); + if (getQueryVariable('server_pass')) + defaults.server_pass = getQueryVariable('server_pass'); + if (window.location.hash) defaults.channel = window.location.hash; @@ -414,6 +420,10 @@ _kiwi.global = { defaults.ssl = _kiwi.app.server_settings.connection.ssl; } + if (_kiwi.app.server_settings.connection.server_pass) { + defaults.server_pass = _kiwi.app.server_settings.connection.server_pass; + } + if (_kiwi.app.server_settings.connection.channel) { defaults.channel = _kiwi.app.server_settings.connection.channel; } diff --git a/client/src/index.html.tmpl b/client/src/index.html.tmpl index 1f125918d..7d3930d90 100644 --- a/client/src/index.html.tmpl +++ b/client/src/index.html.tmpl @@ -222,6 +222,17 @@ + + + + + + + + + + + diff --git a/client/src/models/gateway.js b/client/src/models/gateway.js index c479aaf09..c345f7861 100644 --- a/client/src/models/gateway.js +++ b/client/src/models/gateway.js @@ -145,6 +145,7 @@ _kiwi.model.Gateway = Backbone.Model.extend({ address: connection_info.host, port: connection_info.port, ssl: connection_info.ssl, + server_pass: connection_info.server_pass, password: connection_info.password }; connection = new _kiwi.model.Network(inf); @@ -171,6 +172,7 @@ _kiwi.model.Gateway = Backbone.Model.extend({ hostname: connection_info.host, port: connection_info.port, ssl: connection_info.ssl, + server_pass:connection_info.server_pass, password: connection_info.password }; diff --git a/client/src/models/network.js b/client/src/models/network.js index bdc8a693b..37a7130ee 100644 --- a/client/src/models/network.js +++ b/client/src/models/network.js @@ -29,6 +29,12 @@ /** * The password to connect to this network + * @type String + */ + server_pass: '', + + /** + * The password to authenticate to this network * @type String */ password: '', @@ -90,6 +96,7 @@ host: this.get('address'), port: this.get('port'), ssl: this.get('ssl'), + server_pass:this.get('server_pass'), password: this.get('password') }; diff --git a/client/src/models/newconnection.js b/client/src/models/newconnection.js index 6df5b97bf..a11209e4e 100644 --- a/client/src/models/newconnection.js +++ b/client/src/models/newconnection.js @@ -25,6 +25,7 @@ _kiwi.model.NewConnection = Backbone.Collection.extend({ host: new_connection_event.server, port: new_connection_event.port, ssl: new_connection_event.ssl, + server_pass: new_connection_event.server_pass, password: new_connection_event.password, options: new_connection_event.options }, function(err, network) { diff --git a/client/src/translations/en-gb.po b/client/src/translations/en-gb.po index ece1c7d32..e3f6bf30f 100755 --- a/client/src/translations/en-gb.po +++ b/client/src/translations/en-gb.po @@ -336,6 +336,10 @@ msgstr "Nickname" msgid "client_views_serverselect_enable_password" msgstr "I have a password" +#: +msgid "client_views_serverselect_server_password" +msgstr "This server has a password" + #: msgid "client_views_serverselect_password" msgstr "Password" diff --git a/client/src/views/serverselect.js b/client/src/views/serverselect.js index dce9ddd86..860b70d04 100644 --- a/client/src/views/serverselect.js +++ b/client/src/views/serverselect.js @@ -3,6 +3,7 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ 'submit form': 'submitForm', 'click .show_more': 'showMore', 'change .have_pass input': 'showPass', + 'change .server_have_pass input': 'showServerPass', 'change .have_key input': 'showKey', 'click .fa-key': 'channelKeyIconClick', 'click .show_server': 'showServer' @@ -22,6 +23,7 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ start: _kiwi.global.i18n.translate('client_views_serverselect_connection_start').fetch(), server_network: _kiwi.global.i18n.translate('client_views_serverselect_server_and_network').fetch(), server: _kiwi.global.i18n.translate('client_views_serverselect_server').fetch(), + server_password: _kiwi.global.i18n.translate('client_views_serverselect_server_password').fetch(), port: _kiwi.global.i18n.translate('client_views_serverselect_port').fetch(), powered_by: _kiwi.global.i18n.translate('client_views_serverselect_poweredby').fetch() }; @@ -86,6 +88,7 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ server: $('input.server', this.$el).val(), port: $('input.port', this.$el).val(), ssl: $('input.ssl', this.$el).prop('checked'), + server_pass: $('input.server_password', this.$el).val(), password: $('input.password', this.$el).val(), channel: $('input.channel', this.$el).val(), channel_key: $('input.channel_key', this.$el).val(), @@ -108,6 +111,14 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ } }, + showServerPass: function (event) { + if (this.$el.find('tr.server_have_pass input').is(':checked')) { + this.$el.find('tr.server_pass').show().find('input').focus(); + } else { + this.$el.find('tr.server_pass').hide().find('input').val(''); + } + }, + channelKeyIconClick: function (event) { this.$el.find('tr.have_key input').click(); }, @@ -141,7 +152,7 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ }, populateFields: function (defaults) { - var nick, server, port, channel, channel_key, ssl, password; + var nick, server, port, channel, channel_key, ssl, server_password, password; defaults = defaults || {}; @@ -149,6 +160,7 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ server = defaults.server || ''; port = defaults.port || 6667; ssl = defaults.ssl || 0; + server_pass = defaults.server_pass || ''; password = defaults.password || ''; channel = defaults.channel || ''; channel_key = defaults.channel_key || ''; @@ -157,13 +169,17 @@ _kiwi.view.ServerSelect = Backbone.View.extend({ $('input.server', this.$el).val(server); $('input.port', this.$el).val(port); $('input.ssl', this.$el).prop('checked', ssl); - $('input#server_select_show_pass', this.$el).prop('checked', !(!password)); + $('input#server_select_show_server_pass', this.$el).prop('checked', !!server_pass); + $('input#server_select_show_pass', this.$el).prop('checked', !!password); $('input.password', this.$el).val(password); - if (!(!password)) { + if (!!server_pass) { + $('tr.server_pass', this.$el).show(); + } + if (!!password) { $('tr.pass', this.$el).show(); } $('input.channel', this.$el).val(channel); - $('input#server_select_show_channel_key', this.$el).prop('checked', !(!channel_key)); + $('input#server_select_show_channel_key', this.$el).prop('checked', !!channel_key); $('input.channel_key', this.$el).val(channel_key); if (!(!channel_key)) { $('tr.key', this.$el).show(); diff --git a/server/client.js b/server/client.js index 644ac18da..bb1d87e41 100755 --- a/server/client.js +++ b/server/client.js @@ -135,7 +135,8 @@ Client.prototype.attachKiwiCommands = function() { if (command.encoding) options.encoding = command.encoding; - options.password = global.config.restrict_server_password || command.password; + options.server_pass = global.config.restrict_server_password || command.server_pass; + options.password = command.password; that.state.connect( (global.config.restrict_server || command.hostname), diff --git a/server/irc/connection.js b/server/irc/connection.js index bfcb39a2a..0d33d6810 100644 --- a/server/irc/connection.js +++ b/server/irc/connection.js @@ -66,6 +66,7 @@ var IrcConnection = function (hostname, port, ssl, nick, user, options, state, c this.user = user; // Contains users real hostname and address this.username = this.nick.replace(/[^0-9a-zA-Z\-_.\/]/, ''); this.gecos = ''; // Users real-name. Uses default from config if empty + this.server_pass = options.server_pass || ''; this.password = options.password || ''; this.quit_message = ''; // Uses default from config if empty @@ -731,8 +732,8 @@ var socketConnectHandler = function () { that.write('CAP LS'); - if (that.password) { - that.write('PASS ' + that.password); + if (that.server_pass) { + that.write('PASS ' + that.server_pass); } that.write('NICK ' + that.nick);