diff options
author | Keith Wall <kwall@apache.org> | 2014-09-05 10:31:02 +0000 |
---|---|---|
committer | Keith Wall <kwall@apache.org> | 2014-09-05 10:31:02 +0000 |
commit | 167c5e3c509592117f7f549529c2e225c63b2eda (patch) | |
tree | 8cad1ee20cf0794f07599927691d2a1202abec8c | |
parent | 0f6d85fef11f3002997a032588fe20ecbad76c63 (diff) | |
download | qpid-python-167c5e3c509592117f7f549529c2e225c63b2eda.tar.gz |
QPID-6068: [Java Broker] Prevent NPE when ediiting JMX_CONNECTOR port through REST or Web Management UI
* Also hidden the authentication provider field when editting an RMI port
* Added the missing prompts for transports/protocols.
* Remove the mandatory marker from the protocols field
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1622677 13f79535-47bb-0310-9956-ffa450edef68
6 files changed, 131 insertions, 74 deletions
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java b/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java index a959709657..4932c02573 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java @@ -88,18 +88,16 @@ abstract public class AbstractPortWithAuthProvider<X extends AbstractPortWithAut throw new IllegalConfigurationException( "Can't create port which requests SSL client certificates but doesn't use SSL transport."); } - } - @Override protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes) { super.validateChange(proxyForValidation, changedAttributes); Port<?> updated = (Port<?>)proxyForValidation; - boolean needClientCertificate = (Boolean) updated.getAttribute(NEED_CLIENT_AUTH); - boolean wantClientCertificate = (Boolean) updated.getAttribute(WANT_CLIENT_AUTH); + boolean needClientCertificate = updated.getAttribute(NEED_CLIENT_AUTH) == null ? false : (Boolean) updated.getAttribute(NEED_CLIENT_AUTH); + boolean wantClientCertificate = updated.getAttribute(WANT_CLIENT_AUTH) == null ? false : (Boolean) updated.getAttribute(WANT_CLIENT_AUTH); boolean requiresCertificate = needClientCertificate || wantClientCertificate; boolean usesSsl = updated.getTransports().contains(Transport.SSL); @@ -117,8 +115,5 @@ abstract public class AbstractPortWithAuthProvider<X extends AbstractPortWithAut throw new IllegalConfigurationException("Can't create port which requests SSL client certificates but doesn't use SSL transport."); } } - - - } } diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java b/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java index a235613c29..3e21db23c6 100644 --- a/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java @@ -20,13 +20,10 @@ */ package org.apache.qpid.server.model.port; -import java.util.Collections; import java.util.Map; -import java.util.Set; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; -import org.apache.qpid.server.model.Protocol; import org.apache.qpid.server.model.State; public class JmxPortImpl extends AbstractPortWithAuthProvider<JmxPortImpl> implements JmxPort<JmxPortImpl> diff --git a/java/broker-plugins/management-http/src/main/java/resources/addPort.html b/java/broker-plugins/management-http/src/main/java/resources/addPort.html index 348b18f355..c76a230382 100644 --- a/java/broker-plugins/management-http/src/main/java/resources/addPort.html +++ b/java/broker-plugins/management-http/src/main/java/resources/addPort.html @@ -78,7 +78,7 @@ <div id="formAddPort:fieldsProtocols"> <div class="clear"> <div class="formLabel-labelCell"> - <label for="formAddPort.protocols">Protocols*:</label> + <label for="formAddPort.protocols">Protocols:</label> </div> <div class="formLabel-controlCell"> <select id="formAddPort.protocols" @@ -86,11 +86,15 @@ data-dojo-props=" name: 'protocols', value: '', - label: 'protocol*:', - promptMessage: 'Protocol to be associated with this port', - title: 'Enter protocol to be associated with this port'"> + title: 'Select protocol(s) to be associated with this port'"> </select> </div> + <div id="formAddPort.protocols.tooltip" + data-dojo-type="dijit.Tooltip" + data-dojo-props="connectId: 'formAddPort.protocols', + label: 'Protocol(s) to be associated with the port'"> + </div> + </div> </div> @@ -144,9 +148,13 @@ placeHolder: 'TCP', value: '', multiple: true, - promptMessage: 'Transport(s)', - title: 'Select transports'"> + title: 'Select transport(s) to be associated with the port'"> </select> + <div id="formAddPort.transports.tooltip" + data-dojo-type="dijit.Tooltip" + data-dojo-props="connectId: 'formAddPort.transports', + label: 'Transport(s) to be associated with the port'"> + </div> </div> </div> </div> diff --git a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js index 0b08dde615..2eb0a9b808 100644 --- a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js +++ b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js @@ -23,12 +23,13 @@ define(["dojo/_base/xhr", "dojo/dom", "dojo/dom-construct", "dojo/dom-attr", + "dijit/registry", "qpid/common/properties", "qpid/common/metadata", "dojo/text!strings.html", "dojo/domReady!" ], - function (xhr, string, query, dom, domConstruct, domAttr, properties, metadata, template) + function (xhr, string, query, dom, domConstruct, domAttr, registry, properties, metadata, template) { var widgetconfigurer = { @@ -67,6 +68,32 @@ define(["dojo/_base/xhr", } } } + else if (widget instanceof dijit.Tooltip) + { + // If it is a tooltop, find the connected widget and use its name to lookup the default from the metadata. + if (typeof widget.get("qpid.originalLabel") == "undefined") + { + widget.set("qpid.originalLabel", widget.get("label")); + } + + var message = widget.get("qpid.originalLabel"); + var connectId = widget.get("connectId")[0]; + var connectWidget = registry.byId(connectId); + if (connectWidget) + { + var connectWidgetName = connectWidget.get("name"); + var defaultValue = metadata.getDefaultValueForAttribute(category, type, connectWidgetName); + if (defaultValue) + { + var newMessage = string.substitute(this.promptTemplateWithDefault, { 'default': defaultValue, 'prompt': message }); + + if (message != newMessage) + { + widget.set("label", newMessage); + } + } + } + } }, _processWidgetValue: function (widget, category, type) { diff --git a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js index 54391c78f6..1bf41ec730 100644 --- a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js +++ b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js @@ -137,6 +137,7 @@ define(["dojo/dom", "needClientAuthValue", "wantClientAuthValue", "trustStoresValue", + "authenticationProvider", "bindingAddress", "keyStore", "needClientAuth", @@ -183,6 +184,7 @@ define(["dojo/dom", var typeMetaData = metadata.getMetaData("Port", this.portData["type"]); + this.authenticationProvider.style.display = "authenticationProvider" in typeMetaData.attributes ? "block" : "none"; this.bindingAddress.style.display = "bindingAddress" in typeMetaData.attributes ? "block" : "none"; this.keyStore.style.display = "keyStore" in typeMetaData.attributes ? "block" : "none"; this.needClientAuth.style.display = "needClientAuth" in typeMetaData.attributes ? "block" : "none"; diff --git a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js index 8a862693cf..88425a6bab 100644 --- a/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js +++ b/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js @@ -23,7 +23,6 @@ define(["dojo/_base/xhr", "dojo/dom-construct", "dojo/_base/window", "dijit/registry", - "dojo/parser", "dojo/_base/array", "dojo/_base/event", 'dojo/_base/json', @@ -56,7 +55,7 @@ define(["dojo/_base/xhr", "dojox/grid/EnhancedGrid", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], - function (xhr, dom, construct, win, registry, parser, array, event, json, Memory, ObjectStore, FilteringSelect, domStyle, lang, util, metadata) { + function (xhr, dom, construct, win, registry, array, event, json, Memory, ObjectStore, FilteringSelect, domStyle, lang, util, metadata) { var addPort = {}; @@ -86,10 +85,12 @@ define(["dojo/_base/xhr", var transportsValues = metadata.extractUniqueListOfValues(transportsValidValues); util.setMultiSelectOptions(transportsMultiSelect, transportsValues.sort()); - toggleSslWidgets(newValue, transportsMultiSelect.value); + addPort._toggleSslWidgets(newValue, transportsMultiSelect.value); + util.applyMetadataToWidgets(registry.byId("addPort").domNode, "Port", newValue); + }; - var convertToPort = function convertToPort(formValues) + addPort._convertToPort = function(formValues) { var newPort = {}; newPort.name = dijit.byId("formAddPort.name").value; @@ -185,7 +186,7 @@ define(["dojo/_base/xhr", return newPort; }; - var toggleSslWidgets = function toggleSslWidgets(portType, transportType) + addPort._toggleSslWidgets = function(portType, transportType) { var clientAuthPanel = dojo.byId("formAddPort:fieldsClientAuth"); var transportSSLPanelNode = dom.byId("formAddPort:fieldsTransportSSL"); @@ -217,67 +218,90 @@ define(["dojo/_base/xhr", }; - xhr.get({url: "addPort.html", sync: true, load: function(data) { - var theForm; - node.innerHTML = data; - addPort.dialogNode = dom.byId("addPort"); - parser.instantiate([addPort.dialogNode]); - - //add the port types to formAddPort.type - var portTypeSelect = registry.byId("formAddPort.type"); - var supportedPortTypes = metadata.getTypesForCategory("Port"); - var portTypeSelectStore = util.makeTypeStore(supportedPortTypes); - portTypeSelect.set("store", portTypeSelectStore); - - //add handler for transports change - registry.byId("formAddPort.transports").on("change", function(newValue){ - var portType = portTypeSelect.get("value"); - toggleSslWidgets(portType, newValue); - }); - - - theForm = registry.byId("formAddPort"); - theForm.on("submit", function(e) { - - event.stop(e); - if(theForm.validate()){ + addPort._init = function() + { + xhr.get({url: "addPort.html", sync: true, load: function (data) + { + var theForm; + node.innerHTML = data; + addPort.dialogNode = dom.byId("addPort"); + }}); + } + + addPort._prepareForm = function() + { + //add the port types to formAddPort.type + var portTypeSelect = registry.byId("formAddPort.type"); + var supportedPortTypes = metadata.getTypesForCategory("Port"); + var portTypeSelectStore = util.makeTypeStore(supportedPortTypes); + portTypeSelect.set("store", portTypeSelectStore); + + //add handler for transports change + registry.byId("formAddPort.transports").on("change", function (newValue) + { + var portType = portTypeSelect.get("value"); + addPort._toggleSslWidgets(portType, newValue); + }); + + theForm = registry.byId("formAddPort"); + theForm.on("submit", function (e) + { + + event.stop(e); + if (theForm.validate()) + { - var newPort = convertToPort(theForm.getValues()); - if ((newPort.needClientAuth || newPort.wantClientAuth) && (!newPort.hasOwnProperty("trustStores") || newPort.trustStores.length==0)) - { - alert("A trust store must be selected when requesting client certificates."); - return false; - } - var that = this; + var newPort = addPort._convertToPort(theForm.getValues()); + if ((newPort.needClientAuth || newPort.wantClientAuth) && (!newPort.hasOwnProperty("trustStores") || newPort.trustStores.length == 0)) + { + alert("A trust store must be selected when requesting client certificates."); + return false; + } + var that = this; + + xhr.put({url: "api/latest/port/" + encodeURIComponent(newPort.name), sync: true, handleAs: "json", + headers: { "Content-Type": "application/json"}, + putData: json.toJson(newPort), + load: function (x) + { + that.success = true; + }, + error: function (error) + { + that.success = false; + that.failureReason = error; + }}); - xhr.put({url: "api/latest/port/"+encodeURIComponent(newPort.name), sync: true, handleAs: "json", - headers: { "Content-Type": "application/json"}, - putData: json.toJson(newPort), - load: function(x) {that.success = true; }, - error: function(error) {that.success = false; that.failureReason = error;}}); + if (this.success === true) + { + registry.byId("addPort").hide(); + } + else + { + util.xhrErrorHandler(this.failureReason); + } - if(this.success === true) - { - registry.byId("addPort").hide(); - } - else - { - util.xhrErrorHandler(this.failureReason); - } + return false; - return false; + } else + { + alert('Form contains invalid data. Please correct first'); + return false; + } - }else{ - alert('Form contains invalid data. Please correct first'); - return false; - } + }); + } - }); - }}); + addPort.show = function(portName, portType, providers, keystores, truststores) + { + if (!this.formPrepared) + { + this._prepareForm(); + this.formPrepared = true; + } - addPort.show = function(portName, portType, providers, keystores, truststores) { registry.byId("formAddPort").reset(); dojo.byId("formAddPort.id").value = ""; @@ -371,6 +395,8 @@ define(["dojo/_base/xhr", //authenticationProvider providerWidget.set("value", port.authenticationProvider ? port.authenticationProvider : ""); + providerWidget.set("disabled", ! ("authenticationProvider" in typeMetaData.attributes)); + dom.byId("formAddPort:fieldsAuthenticationProvider").style.display = "authenticationProvider" in typeMetaData.attributes ? "block" : "none"; //transports var transportsMultiSelect = dom.byId("formAddPort.transports"); @@ -444,5 +470,7 @@ define(["dojo/_base/xhr", }; + addPort._init(); + return addPort; }); |