You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2014/09/05 12:31:03 UTC

svn commit: r1622677 - in /qpid/trunk/qpid/java: broker-core/src/main/java/org/apache/qpid/server/model/port/ broker-plugins/management-http/src/main/java/resources/ broker-plugins/management-http/src/main/java/resources/js/qpid/common/ broker-plugins/...

Author: kwall
Date: Fri Sep  5 10:31:02 2014
New Revision: 1622677

URL: http://svn.apache.org/r1622677
Log:
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

Modified:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java?rev=1622677&r1=1622676&r2=1622677&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPortWithAuthProvider.java Fri Sep  5 10:31:02 2014
@@ -88,18 +88,16 @@ abstract public class AbstractPortWithAu
             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 AbstractPortWithAu
                 throw new IllegalConfigurationException("Can't create port which requests SSL client certificates but doesn't use SSL transport.");
             }
         }
-
-
-
     }
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java?rev=1622677&r1=1622676&r2=1622677&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/JmxPortImpl.java Fri Sep  5 10:31:02 2014
@@ -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>

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html?rev=1622677&r1=1622676&r2=1622677&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html Fri Sep  5 10:31:02 2014
@@ -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>

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js?rev=1622677&r1=1622676&r2=1622677&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/widgetconfigurer.js Fri Sep  5 10:31:02 2014
@@ -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)
      {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js?rev=1622677&r1=1622676&r2=1622677&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js Fri Sep  5 10:31:02 2014
@@ -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";

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js?rev=1622677&r1=1622676&r2=1622677&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js Fri Sep  5 10:31:02 2014
@@ -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);
-                });
+        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)
+          {
 
-                theForm = registry.byId("formAddPort");
-                theForm.on("submit", function(e) {
+            event.stop(e);
+            if (theForm.validate())
+            {
 
-                    event.stop(e);
-                    if(theForm.validate()){
+              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;
+                }});
+
+              if (this.success === true)
+              {
+                registry.byId("addPort").hide();
+              }
+              else
+              {
+                util.xhrErrorHandler(this.failureReason);
+              }
 
-                        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;
+              return false;
 
-                        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);
-                        }
-
-                        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;
     });



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org