From 7e1f9d3f661d829f2d01e641c8fdf8cc8342c8b1 Mon Sep 17 00:00:00 2001 From: Sercan Date: Sun, 5 Jun 2016 13:14:29 +0300 Subject: [PATCH] resolves #113 --- .../views/layouts/top_navbar/top_navbar.html | 23 +++++++++- client/views/layouts/top_navbar/top_navbar.js | 46 ++++++++++++++++--- lib/collections/connections.js | 4 ++ server/mongodb/helper.js | 12 +++++ 4 files changed, 76 insertions(+), 9 deletions(-) diff --git a/client/views/layouts/top_navbar/top_navbar.html b/client/views/layouts/top_navbar/top_navbar.html index 46bb4ff..44abbf8 100644 --- a/client/views/layouts/top_navbar/top_navbar.html +++ b/client/views/layouts/top_navbar/top_navbar.html @@ -6,7 +6,8 @@ @@ -154,7 +155,8 @@ class="form-control"> -
diff --git a/client/views/layouts/top_navbar/top_navbar.js b/client/views/layouts/top_navbar/top_navbar.js index bbaa49c..607e59a 100644 --- a/client/views/layouts/top_navbar/top_navbar.js +++ b/client/views/layouts/top_navbar/top_navbar.js @@ -122,6 +122,15 @@ Template.topNavbar.events({ var connection = Connections.findOne({_id: Session.get(Template.strSessionConnection)}); Template.topNavbar.clearAllFieldsOfConnectionModal(); + if (connection.x509Username) { + $('#divX509Username').show(); + $('#inputUseX509').iCheck('check'); + $('#inputX509Username').val(connection.x509Username); + } else { + $('#inputUseX509').iCheck('uncheck'); + $('#divX509Username').hide(); + } + if (connection.readFromSecondary) { $('#inputReadFromSecondary').iCheck('check'); } else { @@ -235,6 +244,9 @@ Template.topNavbar.events({ var inputCertificatePathSelector = $('#inputCertificatePath'); var rootCertificatePathSelector = $("#inputRootCaPath"); var inputCertificateKeyPathSelector = $('#inputCertificateKeyPath'); + var cmbSShAuthTypeSelector = $('#cmbSshAuthType'); + var inputSShPassPhraseSelector = $('#inputSshPassPhrase'); + var inputSshCertificatePathSelector = $('#inputSshCertificatePath'); var connection = {}; connection.readFromSecondary = $('#inputReadFromSecondary').iCheck('update')[0].checked; @@ -244,15 +256,15 @@ Template.topNavbar.events({ connection.sshPort = $('#inputSshPort').val(); connection.sshUser = $('#inputSshUsername').val(); - if ($('#cmbSshAuthType').val() == 'Password') { + if (cmbSShAuthTypeSelector.val() == 'Password') { connection.sshPassword = $('#inputSshPassword').val(); } - else if ($('#cmbSshAuthType').val() == 'Key File') { - if ($('#inputSshCertificatePath').val()) { - connection.sshCertificatePath = $('#inputSshCertificatePath').val(); + else if (cmbSShAuthTypeSelector.val() == 'Key File') { + if (inputSshCertificatePathSelector.val()) { + connection.sshCertificatePath = inputSshCertificatePathSelector.val(); } - if ($('#inputSshPassPhrase').val()) { - connection.sshPassPhrase = $('#inputSshPassPhrase').val(); + if (inputSShPassPhraseSelector.val()) { + connection.sshPassPhrase = inputSShPassPhraseSelector.val(); } } } @@ -268,6 +280,10 @@ Template.topNavbar.events({ connection.databaseName = $('#inputDatabaseName').val(); if ($('#inputAuthCertificate').iCheck('update')[0].checked) { + if ($('#inputUseX509').iCheck('update')[0].checked && $('#inputX509Username').val()) { + connection.x509Username = $('#inputX509Username').val(); + } + if (inputCertificatePathSelector.val()) { connection.sslCertificatePath = inputCertificatePathSelector.val(); connection.passPhrase = $("#inputPassPhrase").val(); @@ -368,6 +384,9 @@ Template.topNavbar.clearAllFieldsOfConnectionModal = function () { $("#inputSshCertificatePath").val(''); $("#inputSshPassPhrase").val(''); $("#inputSshPassword").val(''); + $('#inputX509Username').val(''); + $('#divX509Username').hide(); + $('#inputUseX509').iCheck('uncheck'); $('#inputUseUrl').iCheck('uncheck'); $('#inputUseSsh').iCheck('uncheck'); $('#inputUseSSL').iCheck('uncheck'); @@ -615,11 +634,12 @@ Template.topNavbar.initIChecks = function () { var anchorTab2Selector = $('#anchorTab2'); var inputUseUriSelector = $("#inputUseUrl"); var inputUseSshSelector = $("#inputUseSsh"); + var inputUseX509Username = $("#inputUseX509"); var inputReadFromSecondary = $("#inputReadFromSecondary"); inputAuthStandardSelector.iCheck('check'); - $('#divUseSSL, #divUseSsh, #divUseUrl, #divReadFromSecondary').iCheck({ + $('#divUseSSL, #divUseSsh, #divUseUrl, #divReadFromSecondary, #divUseX509').iCheck({ checkboxClass: 'icheckbox_square-green' }); @@ -636,6 +656,18 @@ Template.topNavbar.initIChecks = function () { inputReadFromSecondary.iCheck('uncheck'); + inputUseX509Username.iCheck('uncheck'); + inputUseX509Username.on('ifChanged', function (event) { + var divX509UsernameSelector = $('#divX509Username'); + + var isChecked = event.currentTarget.checked; + if (isChecked) { + divX509UsernameSelector.show(); + } else { + divX509UsernameSelector.hide(); + } + }); + inputUseUriSelector.iCheck('uncheck'); inputUseUriSelector.on('ifChanged', function (event) { var inputUriSelector = $('#inputUrl'); diff --git a/lib/collections/connections.js b/lib/collections/connections.js index 375f508..0ed1189 100644 --- a/lib/collections/connections.js +++ b/lib/collections/connections.js @@ -23,6 +23,10 @@ Connections.attachSchema(new SimpleSchema({ type: "String", optional: true }, + 'x509Username': { + type: "String", + optional: true + }, 'sshCertificate': { type: "String", optional: true diff --git a/server/mongodb/helper.js b/server/mongodb/helper.js index 4e461b9..cd748a9 100644 --- a/server/mongodb/helper.js +++ b/server/mongodb/helper.js @@ -9,13 +9,25 @@ getConnectionUrl = function (connection) { var connectionUrl = 'mongodb://'; if (connection.user && connection.password) { connectionUrl += connection.user + ':' + encodeURIComponent(connection.password) + '@'; + } else if (connection.x509Username) { + connectionUrl += encodeURIComponent(connection.x509Username) + '@' } + + connectionUrl += connection.host + ':' + connection.port + '/' + connection.databaseName; if (connection.readFromSecondary) { connectionUrl += '?readPreference=secondary'; } + if (connection.x509Username) { + if (connectionUrl.indexOf('?') != -1) { + connectionUrl += '&authMechanism=MONGODB-X509'; + } else { + connectionUrl += '?authMechanism=MONGODB-X509'; + } + } + if (connection.authDatabaseName) { if (connectionUrl.indexOf('?') != -1) { connectionUrl += '&authSource=' + connection.authDatabaseName; -- GitLab