summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-09-05 10:31:02 +0000
committerKeith Wall <kwall@apache.org>2014-09-05 10:31:02 +0000
commit167c5e3c509592117f7f549529c2e225c63b2eda (patch)
tree8cad1ee20cf0794f07599927691d2a1202abec8c
parent0f6d85fef11f3002997a032588fe20ecbad76c63 (diff)
downloadqpid-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
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java9
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java3
-rw-r--r--java/broker-plugins/management-http/src/main/java/resources/addPort.html20
-rw-r--r--java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js29
-rw-r--r--java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js2
-rw-r--r--java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js142
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;
});