You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2013/03/11 19:29:46 UTC

svn commit: r1455273 [1/2] - in /qpid/trunk/qpid/java: broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ broker-plu...

Author: orudyy
Date: Mon Mar 11 18:29:45 2013
New Revision: 1455273

URL: http://svn.apache.org/r1455273
Log:
QPID-4638: Add UI to add/delete/update authentication providers into java broker web management console

Added:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/Action.java
      - copied, changed from r1455200, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PasswordFileAuthenticationProviderAttributeDescriptions.properties
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationProviderAttributeDescriptions.properties
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/util/ResourceBundleLoader.java
      - copied, changed from r1455200, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java
Modified:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showAuthProvider.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractPrincipalDatabaseAuthManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/Base64MD5PasswordFileAuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PlainPasswordFileAuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManagerFactory.java
    qpid/trunk/qpid/java/broker/src/main/resources/initial-store.json
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Mon Mar 11 18:29:45 2013
@@ -36,6 +36,7 @@ import org.apache.qpid.server.logging.me
 import org.apache.qpid.server.management.plugin.servlet.DefinedFileServlet;
 import org.apache.qpid.server.management.plugin.servlet.FileServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.AbstractServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.HelperServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LogRecordsServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet;
@@ -303,6 +304,7 @@ public class HttpManagement extends Abst
         root.addServlet(new ServletHolder(FileServlet.INSTANCE), "*.json");
         root.addServlet(new ServletHolder(FileServlet.INSTANCE), "*.txt");
         root.addServlet(new ServletHolder(FileServlet.INSTANCE), "*.xsl");
+        root.addServlet(new ServletHolder(new HelperServlet()), "/rest/helper");
 
         final SessionManager sessionManager = root.getSessionHandler().getSessionManager();
 

Copied: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/Action.java (from r1455200, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/Action.java?p2=qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/Action.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java&r1=1455200&r2=1455273&rev=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/Action.java Mon Mar 11 18:29:45 2013
@@ -15,17 +15,18 @@
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
  *  under the License.
+ *
+ *
  */
-package org.apache.qpid.server.plugin;
+package org.apache.qpid.server.management.plugin.servlet.rest;
 
 import java.util.Map;
 
-import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
+import org.apache.qpid.server.model.Broker;
 
 
-public interface AuthenticationManagerFactory
+public interface Action
 {
-    public static final String ATTRIBUTE_TYPE =  "authenticationProviderType";
-
-    AuthenticationManager createInstance(Map<String, Object> attributes);
+    String getName();
+    Object perform(Map<String, Object> request, Broker broker);
 }

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java?rev=1455273&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java Mon Mar 11 18:29:45 2013
@@ -0,0 +1,109 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ *
+ */
+package org.apache.qpid.server.management.plugin.servlet.rest;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.qpid.server.management.plugin.servlet.rest.action.ListAuthenticationProviderAttributes;
+import org.apache.qpid.server.model.Broker;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
+
+public class HelperServlet extends AbstractServlet
+{
+    private static final String PARAM_ACTION = "action";
+
+    private Map<String, Action> _actions;
+    private ObjectMapper _mapper;
+
+    public HelperServlet()
+    {
+        _mapper = new ObjectMapper();
+        _mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
+        _actions = new HashMap<String, Action>();
+        Action listProviderAttributes = new ListAuthenticationProviderAttributes();
+        _actions.put(listProviderAttributes.getName(), listProviderAttributes);
+    }
+
+    @Override
+    protected void doGetWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws ServletException,
+            IOException
+    {
+        perform(request, response);
+    }
+
+    @Override
+    protected void doPostWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws ServletException,
+            IOException
+    {
+        perform(request, response);
+    }
+
+    private void perform(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+    {
+        String actionName = request.getParameter(PARAM_ACTION);
+        Action action = _actions.get(actionName);
+        if (action == null)
+        {
+            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        @SuppressWarnings("unchecked")
+        Enumeration<String> names = request.getParameterNames();
+        while (names.hasMoreElements())
+        {
+            String name = (String) names.nextElement();
+            String[] values = request.getParameterValues(name);
+            if (values.length == 1)
+            {
+                parameters.put(name, values[0]);
+            }
+            else
+            {
+                parameters.put(name, values);
+            }
+        }
+
+        Object output = action.perform(parameters, (Broker) getServletContext().getAttribute(ATTR_BROKER));
+        if (output == null)
+        {
+            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+            return;
+        }
+        response.setContentType("application/json");
+        final Writer writer = new BufferedWriter(response.getWriter());
+        _mapper.writeValue(writer, output);
+
+        response.setStatus(HttpServletResponse.SC_OK);
+
+    }
+}

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java?rev=1455273&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java Mon Mar 11 18:29:45 2013
@@ -0,0 +1,76 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ *
+ */
+package org.apache.qpid.server.management.plugin.servlet.rest.action;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.qpid.server.management.plugin.servlet.rest.Action;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
+import org.apache.qpid.server.plugin.QpidServiceLoader;
+
+public class ListAuthenticationProviderAttributes implements Action
+{
+    private static final String ATTRIBUTES = "attributes";
+    private static final String DESCRIPTIONS = "descriptions";
+    private Map<String, AuthenticationManagerFactory> _factories;
+
+    public ListAuthenticationProviderAttributes()
+    {
+        _factories = new TreeMap<String, AuthenticationManagerFactory>();
+        Iterable<AuthenticationManagerFactory> factories = new QpidServiceLoader<AuthenticationManagerFactory>()
+                .instancesOf(AuthenticationManagerFactory.class);
+        for (AuthenticationManagerFactory factory : factories)
+        {
+            _factories.put(factory.getType(), factory);
+        }
+    }
+
+    @Override
+    public String getName()
+    {
+        return ListAuthenticationProviderAttributes.class.getSimpleName();
+    }
+
+    @Override
+    public Object perform(Map<String, Object> request, Broker broker)
+    {
+        Map<String, Object> attributes = new TreeMap<String, Object>();
+        for (String providerType : _factories.keySet())
+        {
+            AuthenticationManagerFactory factory = _factories.get(providerType);
+
+            Map<String, Object> data = new HashMap<String, Object>();
+            data.put(ATTRIBUTES, factory.getAttributeNames());
+            Map<String, String> resources = factory.getAttributeDescriptions();
+            if (resources != null)
+            {
+                data.put(DESCRIPTIONS, resources);
+            }
+
+            attributes.put(factory.getType(), data);
+        }
+        return attributes;
+    }
+
+}

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html?rev=1455273&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html Mon Mar 11 18:29:45 2013
@@ -0,0 +1,38 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<div class="dijitHidden">
+    <div data-dojo-type="dijit.Dialog" style="width:600px;" data-dojo-props="title:'Authentication Provider'" id="addAuthenticationProvider">
+        <form id="formAddAuthenticationProvider" method="post" dojoType="dijit.form.Form">
+                <table class="tableContainer-table tableContainer-table-horiz" width="100%" cellspacing="1">
+                <tr>
+                    <td class="tableContainer-labelCell" style="width: 300px;">Type*:</td>
+                    <td class="tableContainer-valueCell"><div id="addAuthenticationProvider.selectAuthenticationProviderDiv"></div></td>
+                </tr>
+                <tr>
+                    <td class="tableContainer-labelCell" style="width: 300px;">Name*:</td>
+                    <td class="tableContainer-valueCell"><input type="text" required="true" name="name"
+                        id="formAddAuthenticationProvider.name" placeholder="Name"
+                        dojoType="dijit.form.ValidationTextBox" missingMessage="A name must be supplied" /></div></td>
+                </tr>
+                </table>
+                <input type="hidden" id="formAddAuthenticationProvider.id" name="id"/>
+                <div id="addAuthenticationProvider.fieldSets"></div>
+                <!-- submit buttons -->
+                <input type="submit" value="Save Authentication Provider" label="Save Authentication Provider" dojoType="dijit.form.Button" />
+        </form>
+    </div>
+</div>

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js Mon Mar 11 18:29:45 2013
@@ -117,5 +117,10 @@ define(["dojo/_base/xhr"],
                }
            }
 
+           util.isProviderManagingUsers = function(type)
+           {
+               return (type === "PlainPasswordFileAuthenticationProvider" || type === "Base64MD5PasswordFileAuthenticationProvider");
+           };
+
            return util;
        });
\ No newline at end of file

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js Mon Mar 11 18:29:45 2013
@@ -27,10 +27,14 @@ define(["dojo/_base/xhr",
         "qpid/common/util",
         "qpid/common/UpdatableStore",
         "dojox/grid/EnhancedGrid",
+        "qpid/management/addAuthenticationProvider",
+        "dojo/_base/event",
+        "dijit/registry",
+        "dojo/dom-style",
         "dojox/grid/enhanced/plugins/Pagination",
         "dojox/grid/enhanced/plugins/IndirectSelection",
         "dojo/domReady!"],
-       function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid) {
+       function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, addAuthenticationProvider, event, registry, domStyle) {
 
            function AuthenticationProvider(name, parent, controller) {
                this.name = name;
@@ -55,29 +59,68 @@ define(["dojo/_base/xhr",
                             contentPane.containerNode.innerHTML = data;
                             parser.parse(contentPane.containerNode);
 
-                            that.authProviderAdapter = new AuthProviderUpdater(contentPane.containerNode, that.modelObj, that.controller);
+                            that.authProviderUpdater = new AuthProviderUpdater(contentPane.containerNode, that.modelObj, that.controller, that);
 
-                            updater.add( that.authProviderAdapter );
+                            updater.add( that.authProviderUpdater );
 
-                            that.authProviderAdapter.update();
+                            that.authProviderUpdater.update();
 
+                            var editButton = query(".editAuthenticationProviderButton", contentPane.containerNode)[0];
+                            var editWidget = registry.byNode(editButton);
+                            connect.connect(editWidget, "onClick",
+                                            function(evt){
+                                                event.stop(evt);
+                                                addAuthenticationProvider.show(that.name);
+                                            });
+
+                            var deleteButton = query(".deleteAuthenticationProviderButton", contentPane.containerNode)[0];
+                            var deleteWidget = registry.byNode(deleteButton);
+                            connect.connect(deleteWidget, "onClick",
+                                            function(evt){
+                                                event.stop(evt);
+                                                that.deleteAuthenticationProvider();
+                                            });
                         }});
            };
 
            AuthenticationProvider.prototype.close = function() {
-               updater.remove( this.authProviderAdapter );
+               updater.remove( this.authProviderUpdater);
+               if (this.authProviderUpdater.details)
+               {
+                   updater.remove(this.authProviderUpdater.details.authDatabaseUpdater);
+               }
            };
 
-           function AuthProviderUpdater(node, authProviderObj, controller)
+           AuthenticationProvider.prototype.deleteAuthenticationProvider = function() {
+               if(confirm("Are you sure you want to delete authentication provider '" + this.name + "'?")) {
+                   var query = "rest/authenticationprovider/" +encodeURIComponent(this.name);
+                   this.success = true
+                   var that = this;
+                   xhr.del({url: query, sync: true, handleAs: "json"}).then(
+                       function(data) {
+                           that.close();
+                           that.contentPane.onClose()
+                           that.controller.tabContainer.removeChild(that.contentPane);
+                           that.contentPane.destroyRecursive();
+                       },
+                       function(error) {that.success = false; that.failureReason = error;});
+                   if(!this.success ) {
+                       alert("Error:" + this.failureReason);
+                   }
+               }
+           };
+
+           function AuthProviderUpdater(node, authProviderObj, controller, authenticationProvider)
            {
                this.controller = controller;
                this.name = query(".name", node)[0];
                this.type = query(".type", node)[0];
+               this.authenticationProvider = authenticationProvider;
                /*this.state = dom.byId("state");
                this.durable = dom.byId("durable");
                this.lifetimePolicy = dom.byId("lifetimePolicy");
                */
-               this.query = "rest/authenticationprovider/"+encodeURIComponent(authProviderObj.name);
+               this.query = "rest/authenticationprovider/" + encodeURIComponent(authProviderObj.name);
 
                var that = this;
 
@@ -90,20 +133,28 @@ define(["dojo/_base/xhr",
 
                              that.updateHeader();
 
-                             require(["qpid/management/authenticationprovider/"+that.authProviderData.category],
-                                 function(SpecificProvider) {
-                                 that.details = new SpecificProvider(node, authProviderObj, controller);
-                                 that.details.update();
-                             });
-
+                             var editButton = query(".editAuthenticationProviderButton", node)[0];
+                             var editWidget = registry.byNode(editButton);
+                             var hideEdit = (that.authProviderData.type === 'AnonymousAuthenticationManager' || that.authProviderData.type === 'ExternalAuthenticationManager')
+                             domStyle.set(editWidget.domNode, "display", hideEdit ? "none": "");
+
+                             if (util.isProviderManagingUsers(that.authProviderData.type))
+                             {
+                                 require(["qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager"],
+                                     function(PrincipalDatabaseAuthenticationManager) {
+                                     that.details = new PrincipalDatabaseAuthenticationManager(node, data[0], controller, that);
+                                     that.details.update();
+                                 });
+                             }
                          });
 
            }
 
            AuthProviderUpdater.prototype.updateHeader = function()
            {
+               this.authenticationProvider.name = this.authProviderData[ "name" ]
                this.name.innerHTML = this.authProviderData[ "name" ];
-               this.type.innerHTML = this.authProviderData[ "authenticationProviderType" ];
+               this.type.innerHTML = this.authProviderData[ "type" ];
     /*           this.state.innerHTML = this.brokerData[ "state" ];
                this.durable.innerHTML = this.brokerData[ "durable" ];
                this.lifetimePolicy.innerHTML = this.brokerData[ "lifetimePolicy" ];

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js Mon Mar 11 18:29:45 2013
@@ -27,10 +27,12 @@ define(["dojo/_base/xhr",
         "qpid/common/util",
         "qpid/common/UpdatableStore",
         "dojox/grid/EnhancedGrid",
+        "dijit/registry",
+        "qpid/management/addAuthenticationProvider",
         "dojox/grid/enhanced/plugins/Pagination",
         "dojox/grid/enhanced/plugins/IndirectSelection",
         "dojo/domReady!"],
-       function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid) {
+       function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, addAuthenticationProvider) {
 
            function Broker(name, parent, controller) {
                this.name = name;
@@ -62,6 +64,20 @@ define(["dojo/_base/xhr",
 
                             that.brokerUpdater.update();
 
+                            var addProviderButton = query(".addAuthenticationProvider", contentPane.containerNode)[0];
+                            connect.connect(registry.byNode(addProviderButton), "onClick", function(evt){ addAuthenticationProvider.show(); });
+
+                            var deleteProviderButton = query(".deleteAuthenticationProvider", contentPane.containerNode)[0];
+                            connect.connect(registry.byNode(deleteProviderButton), "onClick",
+                                    function(evt){
+                                        util.deleteGridSelections(
+                                                that.brokerUpdater,
+                                                that.brokerUpdater.authenticationProvidersGrid.grid,
+                                                "rest/authenticationprovider",
+                                                "Are you sure you want to delete authentication provider");
+                                }
+                            );
+
                         }});
            };
 
@@ -121,6 +137,36 @@ define(["dojo/_base/xhr",
                                                         });
                                                 });
 
+                             var gridProperties = {
+                                     keepSelection: true,
+                                     plugins: {
+                                               indirectSelection: true
+                                      }};
+
+                             that.authenticationProvidersGrid =
+                                 new UpdatableStore(that.brokerData.authenticationproviders, query(".broker-authentication-providers")[0],
+                                                 [ { name: "Name",    field: "name",      width: "100%"},
+                                                     { name: "Type", field: "type", width: "300px"},
+                                                     { name: "User Management", field: "type", width: "200px",
+                                                             formatter: function(val){
+                                                                 return "<input type='radio' disabled='disabled' "+(util.isProviderManagingUsers(val)?"checked='checked'": "")+" />";
+                                                             }
+                                                     },
+                                                     { name: "Default", field: "name", width: "100px",
+                                                         formatter: function(val){
+                                                             return "<input type='radio' disabled='disabled' "+(val == that.brokerData.defaultAuthenticationProvider ? "checked='checked'": "")+" />";
+                                                         }
+                                                 }
+                                                 ], function(obj) {
+                                                         connect.connect(obj.grid, "onRowDblClick", obj.grid,
+                                                         function(evt){
+                                                             var idx = evt.rowIndex,
+                                                                 theItem = this.getItem(idx);
+                                                             var name = obj.dataStore.getValue(theItem,"name");
+                                                             that.controller.show("authenticationprovider", name, brokerObj);
+                                                         });
+                                                 }, gridProperties, EnhancedGrid);
+
                          });
 
                xhr.get({url: "rest/logrecords", sync: properties.useSyncGet, handleAs: "json"})
@@ -186,7 +232,7 @@ define(["dojo/_base/xhr",
 
                                                                                        that.portsGrid.update(that.brokerData.ports);
 
-
+                                                                                       that.authenticationProvidersGrid.update(that.brokerData.authenticationproviders);
                                                                                    });
 
 

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js?rev=1455273&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js Mon Mar 11 18:29:45 2013
@@ -0,0 +1,268 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+define(["dojo/_base/xhr",
+        "dojo/dom",
+        "dojo/dom-construct",
+        "dojo/_base/window",
+        "dijit/registry",
+        "dojo/parser",
+        "dojo/_base/array",
+        "dojo/_base/event",
+        'dojo/_base/json',
+        "dojo/store/Memory",
+        "dijit/form/FilteringSelect",
+        "dojo/_base/connect",
+        "dojo/dom-style",
+        /* dojox/ validate resources */
+        "dojox/validate/us", "dojox/validate/web",
+        /* basic dijit classes */
+        "dijit/Dialog",
+        "dijit/form/CheckBox", "dijit/form/Textarea",
+        "dijit/form/TextBox",
+        "dijit/form/ValidationTextBox",
+        "dijit/form/Button",
+        "dijit/form/Form",
+        /* basic dojox classes */
+        "dojox/form/BusyButton", "dojox/form/CheckedMultiSelect",
+        "dojox/layout/TableContainer",
+        "dojo/domReady!"],
+    function (xhr, dom, construct, win, registry, parser, array, event, json, Memory, FilteringSelect, connect, domStyle) {
+
+        var addAuthenticationProvider = {};
+
+        var node = construct.create("div", null, win.body(), "last");
+
+        var convertToAuthenticationProvider = function convertToAuthenticationProvider(formValues)
+        {
+            var newProvider = {};
+
+            newProvider.name = dijit.byId("formAddAuthenticationProvider.name").value;
+            newProvider.type = dijit.byId("authenticationProviderType").value;
+            var id = dojo.byId("formAddAuthenticationProvider.id").value;
+            if (id)
+            {
+                newProvider.id = id;
+            }
+            for(var propName in formValues)
+            {
+                if(formValues.hasOwnProperty(propName))
+                {
+                    if(formValues[ propName ] !== "") {
+                        newProvider[ propName ] = formValues[propName];
+                    }
+
+                }
+            }
+            return newProvider;
+        }
+
+        var showFieldSets = function showFieldSets(providerType, fieldSets)
+        {
+            for(var key in fieldSets)
+            {
+                var layout = fieldSets[key];
+                var disabled = key != providerType;
+                var displayValue = key == providerType ? "block" : "none";
+                var widgets = layout.getDescendants();
+                array.forEach(widgets, function(widget)
+                {
+                    widget.set("disabled", disabled);
+                });
+
+                domStyle.set(fieldSets[key].domNode, "display", displayValue);
+            }
+            if (fieldSets[providerType])
+            {
+                fieldSets[providerType].getParent().resize();
+            }
+        }
+
+        var getAuthenticationProviderWidgetId = function getAuthenticationProviderWidgetId(providerType, attribute)
+        {
+            return "ap_" + providerType + "Field" + attribute;
+        }
+
+        var loadProviderAndDisplayForm = function loadProviderAndDisplayForm(providerName, dialog)
+        {
+            if (providerName)
+            {
+                xhr.get({
+                    url: "rest/authenticationprovider/" + encodeURIComponent(providerName),
+                    handleAs: "json"
+                }).then(
+                   function(data) {
+                       var provider = data[0];
+                       var providerType = provider.type;
+                       var nameField = dijit.byId("formAddAuthenticationProvider.name");
+                       nameField.set("value", provider.name);
+                       nameField.set("disabled", true);
+                       dialog.providerChooser.set("value", providerType);
+                       dialog.providerChooser.set("disabled", true);
+                       dojo.byId("formAddAuthenticationProvider.id").value=provider.id;
+                       for(var attribute in provider)
+                       {
+                           if (provider.hasOwnProperty(attribute))
+                           {
+                               var widject = dijit.byId(getAuthenticationProviderWidgetId(providerType, attribute));
+                               if (widject)
+                               {
+                                   widject.set("value", provider[attribute]);
+                               }
+                           }
+                       }
+                       registry.byId("addAuthenticationProvider").show();
+               });
+            }
+            else
+            {
+                registry.byId("addAuthenticationProvider").show();
+            }
+        }
+
+        xhr.get({url: "addAuthenticationProvider.html",
+                 sync: true,
+                 load:  function(data) {
+                            var theForm;
+                            node.innerHTML = data;
+                            addAuthenticationProvider.dialogNode = dom.byId("addAuthenticationProvider");
+                            parser.instantiate([addAuthenticationProvider.dialogNode]);
+                            theForm = registry.byId("formAddAuthenticationProvider");
+                            theForm.on("submit", function(e) {
+
+                                event.stop(e);
+                                if(theForm.validate()){
+
+                                    var newAuthenticationManager = convertToAuthenticationProvider(theForm.getValues());
+                                    var that = this;
+
+                                    xhr.put({url: "rest/authenticationprovider/" + encodeURIComponent(newAuthenticationManager.name),
+                                             sync: true, handleAs: "json",
+                                             headers: { "Content-Type": "application/json"},
+                                             putData: json.toJson(newAuthenticationManager),
+                                             load: function(x) {that.success = true; },
+                                             error: function(error) {that.success = false; that.failureReason = error;}});
+
+                                    if(this.success === true)
+                                    {
+                                        registry.byId("addAuthenticationProvider").hide();
+                                    }
+                                    else
+                                    {
+                                        alert("Error:" + this.failureReason);
+                                    }
+                                    return false;
+                                }else{
+                                    alert('Form contains invalid data.  Please correct first');
+                                    return false;
+                                }
+                            });
+                        }});
+
+        addAuthenticationProvider.show = function(providerName) {
+            var that = this;
+            registry.byId("formAddAuthenticationProvider").reset();
+            dojo.byId("formAddAuthenticationProvider.id").value="";
+            registry.byId("formAddAuthenticationProvider.name").set("disabled", false);
+            if (this.providerChooser)
+            {
+                this.providerChooser.set("disabled", false);
+            }
+
+            if (!that.hasOwnProperty("providerFieldSets"))
+            {
+                xhr.get({
+                    url: "rest/helper?action=ListAuthenticationProviderAttributes",
+                    handleAs: "json"
+                }).then(
+                   function(data) {
+                       var providers =  [];
+                       var providerIndex = 0;
+                       that.providerFieldSetsContainer = dom.byId("addAuthenticationProvider.fieldSets");
+                       that.providerFieldSets = [];
+
+                       for (var providerType in data) {
+                           if (data.hasOwnProperty(providerType)) {
+                               providers[providerIndex++] = {id: providerType, name: providerType};
+
+                               var attributes = data[providerType].attributes;
+                               var resources = data[providerType].descriptions;
+                               var layout = new dojox.layout.TableContainer( {
+                                   id: providerType + "FieldSet",
+                                   cols: 1,
+                                   "labelWidth": "300",
+                                   showLabels: true,
+                                   orientation: "horiz"
+                               });
+                               for(var i=0; i < attributes.length; i++) {
+                                   if ("type" == attributes[i])
+                                   {
+                                       continue;
+                                   }
+                                   var labelValue = attributes[i];
+                                   if (resources && resources[attributes[i]])
+                                   {
+                                       labelValue = resources[attributes[i]];
+                                   }
+                                   var text = new dijit.form.TextBox({
+                                       label: labelValue + ":",
+                                       id: getAuthenticationProviderWidgetId(providerType, attributes[i]),
+                                       name: attributes[i]
+                                   });
+                                   layout.addChild(text);
+                               }
+                               layout.placeAt("addAuthenticationProvider.fieldSets");
+                               that.providerFieldSets[providerType]=layout;
+                               layout.startup();
+                           }
+                       }
+
+                       var providersStore = new Memory({ data: providers });
+                       if(that.providerChooser) {
+                           that.providerChooser.destroy( false );
+                       }
+
+                       var providersDiv = dom.byId("addAuthenticationProvider.selectAuthenticationProviderDiv");
+                       var input = construct.create("input", {id: "addAuthenticationProviderType"}, providersDiv);
+
+                       that.providerChooser = new FilteringSelect({ id: "authenticationProviderType",
+                                                                 name: "type",
+                                                                 store: providersStore,
+                                                                 searchAttr: "name"}, input);
+                       connect.connect(that.providerChooser, "onChange",
+                           function(event)
+                           {
+                               showFieldSets(that.providerChooser.value, that.providerFieldSets);
+                           }
+                       );
+                       var providerType = providers[0].name;
+                       that.providerChooser.set("value", providerType);
+                       showFieldSets(providerType, that.providerFieldSets);
+                       loadProviderAndDisplayForm(providerName, that)
+               });
+            }
+            else
+            {
+                loadProviderAndDisplayForm(providerName, that);
+            }
+        }
+
+        return addAuthenticationProvider;
+    });
\ No newline at end of file

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js Mon Mar 11 18:29:45 2013
@@ -44,7 +44,7 @@ define(["dojo/_base/xhr",
         "dijit/form/DateTextBox",
         "dojo/domReady!"],
     function (xhr, dom, parser, query, construct, connect, win, event, json, registry, util, properties, updater, UpdatableStore, EnhancedGrid) {
-        function DatabaseAuthManager(containerNode, authProviderObj, controller) {
+        function DatabaseAuthManager(containerNode, authProviderObj, controller, authenticationManagerUpdater) {
             var node = construct.create("div", null, containerNode, "last");
             var that = this;
             this.name = authProviderObj.name;
@@ -55,8 +55,7 @@ define(["dojo/_base/xhr",
                                         parser.parse(node);
 
 
-                                        that.authDatabaseUpdater= new AuthProviderUpdater(node, authProviderObj, controller);
-
+                                        that.authDatabaseUpdater= new AuthProviderUpdater(node, authProviderObj, controller, authenticationManagerUpdater);
                                         updater.add( that.authDatabaseUpdater);
 
                                         that.authDatabaseUpdater.update();
@@ -73,17 +72,18 @@ define(["dojo/_base/xhr",
             updater.remove( this.authDatabaseUpdater );
         };
 
-        function AuthProviderUpdater(node, authProviderObj, controller)
+        function AuthProviderUpdater(node, authProviderObj, controller, authenticationManagerUpdater)
         {
             this.controller = controller;
-            this.query = "rest/authenticationprovider/"+encodeURIComponent(authProviderObj.name);
+            this.query = "rest/authenticationprovider?id="+encodeURIComponent(authProviderObj.id);
             this.name = authProviderObj.name;
+            this.authenticationManagerUpdater = authenticationManagerUpdater;
             var that = this;
 
             xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"})
                .then(function(data) {
                      that.authProviderData = data[0];
-
+                     that.name = data[0].name
                      util.flattenStatistics( that.authProviderData );
 
                      var userDiv = query(".users")[0];
@@ -116,13 +116,13 @@ define(["dojo/_base/xhr",
                                                     theItem = this.getItem(idx);
                                                     var name = obj.dataStore.getValue(theItem,"name");
                                                     var id = obj.dataStore.getValue(theItem,"id");
-                                                    setPassword.show(authProviderObj.name, {name: name, id: id});
+                                                    setPassword.show(that.name, {name: name, id: id});
                                                 });
                                         }, gridProperties, EnhancedGrid);
 
 
                      var addUserButton = query(".addUserButton", node)[0];
-                     connect.connect(registry.byNode(addUserButton), "onClick", function(evt){ addUser.show(authProviderObj.name) });
+                     connect.connect(registry.byNode(addUserButton), "onClick", function(evt){ addUser.show(that.name) });
 
                      var deleteMessagesButton = query(".deleteUserButton", node)[0];
                                                 var deleteWidget = registry.byNode(deleteMessagesButton);
@@ -176,10 +176,13 @@ define(["dojo/_base/xhr",
             xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"})
                 .then(function(data) {
                     that.authProviderData = data[0];
+                    that.name = data[0].name
                     util.flattenStatistics( that.authProviderData );
 
                     that.usersGrid.update(that.authProviderData.users);
 
+                    that.authenticationManagerUpdater.authProviderData = data[0];
+                    that.authenticationManagerUpdater.updateHeader();
                 });
 
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showAuthProvider.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showAuthProvider.html?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showAuthProvider.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showAuthProvider.html Mon Mar 11 18:29:45 2013
@@ -22,4 +22,7 @@
     <span style="">Name:</span><span class="name" style="position:absolute; left:6em"></span>
     <br/>
     <span style="">Type:</span><span class="type" style="position:absolute; left:6em"></span>
+    <br/>
+    <button data-dojo-type="dijit.form.Button" class="editAuthenticationProviderButton">Edit</button>
+    <button data-dojo-type="dijit.form.Button" class="deleteAuthenticationProviderButton">Delete</button>
 </div>
\ No newline at end of file

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html Mon Mar 11 18:29:45 2013
@@ -36,7 +36,12 @@
         <div class="broker-ports"></div>
     </div>
     <br/>
-
+    <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Authentication Providers'">
+        <div class="broker-authentication-providers"></div>
+        <button data-dojo-type="dijit.form.Button" class="addAuthenticationProvider">Add Provider</button>
+        <button data-dojo-type="dijit.form.Button" class="deleteAuthenticationProvider">Delete Provider</button>
+    </div>
+    <br/>
     <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Log File',  open: false">
         <div class="broker-logfile"></div>
     </div>

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java Mon Mar 11 18:29:45 2013
@@ -39,8 +39,8 @@ public interface AuthenticationProvider 
     public static final String TIME_TO_LIVE = "timeToLive";
     public static final String CREATED = "created";
     public static final String UPDATED = "updated";
-    public static final String CATEGORY = "category";
-    public static final String TYPE = "authenticationProviderType";
+
+    public static final String TYPE = "type";
 
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
             Collections.unmodifiableList(
@@ -53,8 +53,8 @@ public interface AuthenticationProvider 
                                   TIME_TO_LIVE,
                                   CREATED,
                                   UPDATED,
-                                  CATEGORY,
-                                  TYPE));
+                                  TYPE
+                                  ));
     //children
     Collection<VirtualHostAlias> getVirtualHostPortBindings();
 

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java Mon Mar 11 18:29:45 2013
@@ -44,6 +44,7 @@ public interface Broker extends Configur
     String PROCESS_PID = "processPid";
     String PRODUCT_VERSION = "productVersion";
     String SUPPORTED_STORE_TYPES = "supportedStoreTypes";
+    String SUPPORTED_AUTHENTICATION_PROVIDERS = "supportedAuthenticationProviders";
     String CREATED = "created";
     String DURABLE = "durable";
     String ID = "id";
@@ -103,6 +104,7 @@ public interface Broker extends Configur
                               PROCESS_PID,
                               PRODUCT_VERSION,
                               SUPPORTED_STORE_TYPES,
+                              SUPPORTED_AUTHENTICATION_PROVIDERS,
                               CREATED,
                               DURABLE,
                               ID,

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java Mon Mar 11 18:29:45 2013
@@ -69,14 +69,16 @@ public abstract class AuthenticationProv
 
     private GroupPrincipalAccessor _groupAccessor;
 
-    protected String _category;
+    protected Collection<String> _supportedAttributes;
+    Map<String, AuthenticationManagerFactory> _factories;
 
-    private AuthenticationProviderAdapter(UUID id, Broker broker, final T authManager, Map<String, Object> attributes)
+    private AuthenticationProviderAdapter(UUID id, Broker broker, final T authManager, Map<String, Object> attributes, Collection<String> attributeNames)
     {
         super(id, null, attributes, broker.getTaskExecutor());
         _authManager = authManager;
         _broker = broker;
-        _category = authManager instanceof PrincipalDatabaseAuthenticationManager? PrincipalDatabaseAuthenticationManager.class.getSimpleName() : AuthenticationManager.class.getSimpleName() ;
+        _supportedAttributes = createSupportedAttributes(attributeNames);
+        _factories = getAuthenticationManagerFactories();
         addParent(Broker.class, broker);
     }
 
@@ -156,17 +158,13 @@ public abstract class AuthenticationProv
     @Override
     public Collection<String> getAttributeNames()
     {
-        return AuthenticationProvider.AVAILABLE_ATTRIBUTES;
+        return _supportedAttributes;
     }
 
     @Override
     public Object getAttribute(String name)
     {
-        if(CATEGORY.equals(name))
-        {
-            return _category;
-        }
-        else if(CREATED.equals(name))
+        if(CREATED.equals(name))
         {
             // TODO
         }
@@ -224,7 +222,6 @@ public abstract class AuthenticationProv
                     throw new IntegrityViolationException("Authentication provider '" + providerName + "' is set on port " + port.getName());
                 }
             }
-
             return true;
         }
         else if(desiredState == State.ACTIVE)
@@ -255,28 +252,74 @@ public abstract class AuthenticationProv
         _groupAccessor = groupAccessor;
     }
 
-    public AuthenticationManager createAuthenticationManager(Map<String, Object> attributes)
+    @Override
+    protected void changeAttributes(Map<String, Object> attributes)
+    {
+        AuthenticationManager manager = validateAttributes(attributes);
+        manager.initialise();
+        _authManager = (T)manager;
+        String type = (String)attributes.get(AuthenticationManagerFactory.ATTRIBUTE_TYPE);
+        AuthenticationManagerFactory managerFactory = _factories.get(type);
+        _supportedAttributes = createSupportedAttributes(managerFactory.getAttributeNames());
+        super.changeAttributes(attributes);
+    }
+
+    private Map<String, AuthenticationManagerFactory> getAuthenticationManagerFactories()
     {
         QpidServiceLoader<AuthenticationManagerFactory> loader = new QpidServiceLoader<AuthenticationManagerFactory>();
         Iterable<AuthenticationManagerFactory> factories = loader.atLeastOneInstanceOf(AuthenticationManagerFactory.class);
+        Map<String, AuthenticationManagerFactory> factoryMap = new HashMap<String, AuthenticationManagerFactory>();
         for (AuthenticationManagerFactory factory : factories)
         {
-            AuthenticationManager manager = factory.createInstance(attributes);
-            if (manager != null)
-            {
-                return manager;
-            }
+            factoryMap.put(factory.getType(), factory);
         }
-        return null;
+        return factoryMap;
+    }
+
+    protected Collection<String> createSupportedAttributes(Collection<String> factoryAttributes)
+    {
+        List<String> attributesNames = new ArrayList<String>(AVAILABLE_ATTRIBUTES);
+        if (factoryAttributes != null)
+        {
+            attributesNames.addAll(factoryAttributes);
+        }
+        return Collections.unmodifiableCollection(attributesNames);
+    }
+
+    protected AuthenticationManager validateAttributes(Map<String, Object> attributes)
+    {
+        String newName = (String)attributes.get(NAME);
+        String currentName = getName();
+        if (!currentName.equals(newName))
+        {
+            throw new IllegalConfigurationException("Changing the name of authentication provider is not supported");
+        }
+        String newType = (String)attributes.get(AuthenticationManagerFactory.ATTRIBUTE_TYPE);
+        String currentType = (String)getAttribute(AuthenticationManagerFactory.ATTRIBUTE_TYPE);
+        if (!currentType.equals(newType))
+        {
+            throw new IllegalConfigurationException("Changing the type of authentication provider is not supported");
+        }
+        AuthenticationManagerFactory managerFactory = _factories.get(newType);
+        if (managerFactory == null)
+        {
+            throw new IllegalConfigurationException("Cannot find authentication provider factory for type " + newType);
+        }
+        AuthenticationManager manager = managerFactory.createInstance(attributes);
+        if (manager == null)
+        {
+            throw new IllegalConfigurationException("Cannot change authentication provider " + newName + " of type " + newType + " with the given attributes");
+        }
+        return manager;
     }
 
     public static class SimpleAuthenticationProviderAdapter extends AuthenticationProviderAdapter<AuthenticationManager>
     {
 
         public SimpleAuthenticationProviderAdapter(
-                UUID id, Broker broker, AuthenticationManager authManager, Map<String, Object> attributes)
+                UUID id, Broker broker, AuthenticationManager authManager, Map<String, Object> attributes, Collection<String> attributeNames)
         {
-            super(id, broker,authManager, attributes);
+            super(id, broker,authManager, attributes, attributeNames);
         }
 
         @Override
@@ -287,21 +330,7 @@ public abstract class AuthenticationProv
             throw new UnsupportedOperationException();
         }
 
-        @Override
-        protected void changeAttributes(Map<String, Object> attributes)
-        {
-            AuthenticationManager manager = createAuthenticationManager(attributes);
-            if (manager == null)
-            {
-                throw new IllegalConfigurationException("Cannot create authentication manager from " + attributes);
-            }
-            if (manager instanceof PrincipalDatabaseAuthenticationManager)
-            {
-                throw new IllegalConfigurationException("Cannot change the category of the authentication provider");
-            }
-            _authManager = manager;
-            super.changeAttributes(attributes);
-        }
+
 
     }
 
@@ -310,9 +339,9 @@ public abstract class AuthenticationProv
             implements PasswordCredentialManagingAuthenticationProvider
     {
         public PrincipalDatabaseAuthenticationManagerAdapter(
-                UUID id, Broker broker, PrincipalDatabaseAuthenticationManager authManager, Map<String, Object> attributes)
+                UUID id, Broker broker, PrincipalDatabaseAuthenticationManager authManager, Map<String, Object> attributes, Collection<String> attributeNames)
         {
-            super(id, broker, authManager, attributes);
+            super(id, broker, authManager, attributes, attributeNames);
         }
 
         @Override
@@ -333,7 +362,6 @@ public abstract class AuthenticationProv
         {
             if(getSecurityManager().authoriseUserOperation(Operation.DELETE, username))
             {
-
                 getPrincipalDatabase().deletePrincipal(new UsernamePrincipal(username));
             }
             else
@@ -431,19 +459,15 @@ public abstract class AuthenticationProv
         }
 
         @Override
-        protected void changeAttributes(Map<String, Object> attributes)
+        protected void childAdded(ConfiguredObject child)
         {
-            AuthenticationManager manager = createAuthenticationManager(attributes);
-            if (manager == null)
-            {
-                throw new IllegalConfigurationException("Cannot create authentication manager from " + attributes);
-            }
-            if (!(manager instanceof PrincipalDatabaseAuthenticationManager))
-            {
-                throw new IllegalConfigurationException("Cannot change the category of the authentication provider");
-            }
-            _authManager = (PrincipalDatabaseAuthenticationManager)manager;
-            super.changeAttributes(attributes);
+            // no-op, prevent storing users in the broker store
+        }
+
+        @Override
+        protected void childRemoved(ConfiguredObject child)
+        {
+            // no-op, as per above, users are not in the store
         }
 
         private class PrincipalAdapter extends AbstractAdapter implements User

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java Mon Mar 11 18:29:45 2013
@@ -20,6 +20,10 @@
  */
 package org.apache.qpid.server.model.adapter;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -36,10 +40,17 @@ import org.apache.qpid.server.model.adap
 public class AuthenticationProviderFactory
 {
     private final Iterable<AuthenticationManagerFactory> _factories;
+    private Collection<String> _supportedAuthenticationProviders;
 
     public AuthenticationProviderFactory(QpidServiceLoader<AuthenticationManagerFactory> authManagerFactoryServiceLoader)
     {
         _factories = authManagerFactoryServiceLoader.atLeastOneInstanceOf(AuthenticationManagerFactory.class);
+        List<String> supportedAuthenticationProviders = new ArrayList<String>();
+        for (AuthenticationManagerFactory factory : _factories)
+        {
+            supportedAuthenticationProviders.add(factory.getType());
+        }
+        _supportedAuthenticationProviders = Collections.unmodifiableCollection(supportedAuthenticationProviders);
     }
 
     /**
@@ -60,11 +71,11 @@ public class AuthenticationProviderFacto
                 if (manager instanceof PrincipalDatabaseAuthenticationManager)
                 {
                     authenticationProvider = new PrincipalDatabaseAuthenticationManagerAdapter(id, broker,
-                            (PrincipalDatabaseAuthenticationManager) manager, attributes);
+                            (PrincipalDatabaseAuthenticationManager) manager, attributes, factory.getAttributeNames());
                 }
                 else
                 {
-                    authenticationProvider = new SimpleAuthenticationProviderAdapter(id, broker, manager, attributes);
+                    authenticationProvider = new SimpleAuthenticationProviderAdapter(id, broker, manager, attributes, factory.getAttributeNames());
                 }
                 authenticationProvider.setGroupAccessor(groupPrincipalAccessor);
                 return authenticationProvider;
@@ -74,4 +85,8 @@ public class AuthenticationProviderFacto
         throw new IllegalArgumentException("No authentication provider factory found for configuration attributes " + attributes);
     }
 
+    public Collection<String> getSupportedAuthenticationProviders()
+    {
+        return _supportedAuthenticationProviders;
+    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Mon Mar 11 18:29:45 2013
@@ -55,6 +55,8 @@ import org.apache.qpid.server.model.Trus
 import org.apache.qpid.server.model.UUIDGenerator;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.security.auth.manager.Base64MD5PasswordFileAuthenticationManagerFactory;
+import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory;
 import org.apache.qpid.server.security.group.FileGroupManager;
 import org.apache.qpid.server.security.group.GroupManager;
 import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
@@ -152,7 +154,7 @@ public class BrokerAdapter extends Abstr
 
     private final Map<String, VirtualHost> _vhostAdapters = new HashMap<String, VirtualHost>();
     private final Map<Integer, Port> _portAdapters = new HashMap<Integer, Port>();
-    private final Map<String, AuthenticationProvider> _authenticationProviders = new HashMap<String, AuthenticationProvider>();
+    private final Map<UUID, AuthenticationProvider> _authenticationProviders = new HashMap<UUID, AuthenticationProvider>();
     private final Map<String, GroupProvider> _groupProviders = new HashMap<String, GroupProvider>();
     private final Map<UUID, ConfiguredObject> _plugins = new HashMap<UUID, ConfiguredObject>();
     private final Map<UUID, KeyStore> _keyStores = new HashMap<UUID, KeyStore>();
@@ -456,11 +458,46 @@ public class BrokerAdapter extends Abstr
 
     private AuthenticationProvider createAuthenticationProvider(Map<String, Object> attributes)
     {
-        // it's cheap to create the groupPrincipalAccessor on the fly
-        GroupPrincipalAccessor groupPrincipalAccessor = new GroupPrincipalAccessor(_groupProviders.values());
+        String type = (String)attributes.get(AuthenticationProvider.TYPE);
+        if (type == null)
+        {
+            throw new IllegalConfigurationException("Authentication provider type is not specified");
+        }
+
+        AuthenticationProvider authenticationProvider = null;
+        synchronized (_authenticationProviders)
+        {
+            // a temporary restriction to prevent creation of several instances
+            // of PlainPasswordFileAuthenticationProvider/Base64MD5PasswordFileAuthenticationProvider
+            // due to current limitation of JMX management which cannot cope
+            // with several user management MBeans as MBEan type is used as a name.
+
+            // TODO: Remove this check after fixing the JMX management
+            if (type.equals(PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE)
+                    || type.equals(Base64MD5PasswordFileAuthenticationManagerFactory.PROVIDER_TYPE))
+            {
+
+                for (AuthenticationProvider provider : _authenticationProviders.values())
+                {
+                    String providerType = (String) provider.getAttribute(AuthenticationProvider.TYPE);
+                    if (providerType.equals(PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE)
+                            || providerType.equals(Base64MD5PasswordFileAuthenticationManagerFactory.PROVIDER_TYPE))
+                    {
+                        throw new IllegalConfigurationException("Authentication provider managing users alredy exists ["
+                                + provider.getName() + "]. Only one instance is allowed.");
+                    }
+                }
+
+            }
 
-        AuthenticationProvider authenticationProvider = _authenticationProviderFactory.create(UUID.randomUUID(), this, attributes, groupPrincipalAccessor);
-        addAuthenticationProvider(authenticationProvider);
+            // it's cheap to create the groupPrincipalAccessor on the fly
+            GroupPrincipalAccessor groupPrincipalAccessor = new GroupPrincipalAccessor(_groupProviders.values());
+
+            authenticationProvider = _authenticationProviderFactory.create(UUID.randomUUID(), this, attributes,
+                    groupPrincipalAccessor);
+            addAuthenticationProvider(authenticationProvider);
+        }
+        authenticationProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
         return authenticationProvider;
     }
 
@@ -472,11 +509,18 @@ public class BrokerAdapter extends Abstr
         String name = authenticationProvider.getName();
         synchronized (_authenticationProviders)
         {
-            if(_authenticationProviders.containsKey(name))
+            if (_authenticationProviders.containsKey(authenticationProvider.getId()))
             {
-                throw new IllegalConfigurationException("Cannot add AuthenticationProvider because one with name " + name + " already exists");
+                throw new IllegalConfigurationException("Cannot add AuthenticationProvider because one with id " + authenticationProvider.getId() + " already exists");
             }
-            _authenticationProviders.put(name, authenticationProvider);
+            for (AuthenticationProvider provider : _authenticationProviders.values())
+            {
+                if (provider.getName().equals(name))
+                {
+                    throw new IllegalConfigurationException("Cannot add AuthenticationProvider because one with name " + name + " already exists");
+                }
+            }
+            _authenticationProviders.put(authenticationProvider.getId(), authenticationProvider);
         }
         authenticationProvider.addChangeListener(this);
     }
@@ -604,6 +648,10 @@ public class BrokerAdapter extends Abstr
         {
             // TODO
         }
+        else if(SUPPORTED_AUTHENTICATION_PROVIDERS.equals(name))
+        {
+            return _authenticationProviderFactory.getSupportedAuthenticationProviders();
+        }
         else if (DEFAULT_AUTHENTICATION_PROVIDER.equals(name))
         {
             return _defaultAuthenticationProvider == null ? null : _defaultAuthenticationProvider.getName();
@@ -634,7 +682,7 @@ public class BrokerAdapter extends Abstr
         AuthenticationProvider removedAuthenticationProvider = null;
         synchronized (_authenticationProviders)
         {
-            removedAuthenticationProvider = _authenticationProviders.remove(authenticationProvider.getName());
+            removedAuthenticationProvider = _authenticationProviders.remove(authenticationProvider.getId());
         }
         return removedAuthenticationProvider != null;
     }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/AuthenticationManagerFactory.java Mon Mar 11 18:29:45 2013
@@ -18,14 +18,41 @@
  */
 package org.apache.qpid.server.plugin;
 
+import java.util.Collection;
 import java.util.Map;
 
+import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
 
-
 public interface AuthenticationManagerFactory
 {
-    public static final String ATTRIBUTE_TYPE =  "authenticationProviderType";
+    public static final String ATTRIBUTE_TYPE = AuthenticationProvider.TYPE;
+
+    /**
+     * Returns the authentication provider type
+     * @return authentication provider type
+     */
+    String getType();
 
+    /**
+     * Creates authentication manager from the provided attributes
+     *
+     * @param attributes
+     *            attributes to create authentication manager
+     * @return authentication manager instance
+     */
     AuthenticationManager createInstance(Map<String, Object> attributes);
+
+    /**
+     * Get the names of attributes the authentication manager which can be passed into {@link #createInstance(Map)} to create the
+     * authentication manager
+     *
+     * @return the collection of attribute names
+     */
+    Collection<String> getAttributeNames();
+
+    /**
+     * @return returns human readable descriptions for the attributes
+     */
+    Map<String, String> getAttributeDescriptions();
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractPrincipalDatabaseAuthManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractPrincipalDatabaseAuthManagerFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractPrincipalDatabaseAuthManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractPrincipalDatabaseAuthManagerFactory.java Mon Mar 11 18:29:45 2013
@@ -20,6 +20,9 @@
 package org.apache.qpid.server.security.auth.manager;
 
 import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.log4j.Logger;
@@ -33,10 +36,16 @@ import org.apache.qpid.server.security.a
  */
 public abstract class AbstractPrincipalDatabaseAuthManagerFactory implements AuthenticationManagerFactory
 {
+    public static final String RESOURCE_BUNDLE = "org.apache.qpid.server.security.auth.manager.PasswordFileAuthenticationProviderAttributeDescriptions";
     public static final String ATTRIBUTE_PATH = "path";
 
     private static final Logger LOGGER = Logger.getLogger(AbstractPrincipalDatabaseAuthManagerFactory.class);
 
+    public static final Collection<String> ATTRIBUTES = Collections.unmodifiableList(Arrays.asList(
+            ATTRIBUTE_TYPE,
+            ATTRIBUTE_PATH));
+
+
     @Override
     public AuthenticationManager createInstance(Map<String, Object> attributes)
     {
@@ -65,7 +74,11 @@ public abstract class AbstractPrincipalD
         return new PrincipalDatabaseAuthenticationManager(principalDatabase);
     }
 
-    abstract String getType();
-
     abstract PrincipalDatabase createPrincipalDatabase();
+
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return ATTRIBUTES;
+    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManagerFactory.java Mon Mar 11 18:29:45 2013
@@ -19,6 +19,8 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
@@ -37,4 +39,21 @@ public class AnonymousAuthenticationMana
         return null;
     }
 
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return Collections.<String>singletonList(ATTRIBUTE_TYPE);
+    }
+
+    @Override
+    public String getType()
+    {
+        return PROVIDER_TYPE;
+    }
+
+    @Override
+    public Map<String, String> getAttributeDescriptions()
+    {
+        return null;
+    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/Base64MD5PasswordFileAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/Base64MD5PasswordFileAuthenticationManagerFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/Base64MD5PasswordFileAuthenticationManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/Base64MD5PasswordFileAuthenticationManagerFactory.java Mon Mar 11 18:29:45 2013
@@ -20,15 +20,18 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
+import java.util.Map;
+
 import org.apache.qpid.server.security.auth.database.Base64MD5PasswordFilePrincipalDatabase;
 import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
+import org.apache.qpid.server.util.ResourceBundleLoader;
 
 public class Base64MD5PasswordFileAuthenticationManagerFactory extends AbstractPrincipalDatabaseAuthManagerFactory
 {
     public static final String PROVIDER_TYPE = "Base64MD5PasswordFileAuthenticationProvider";
 
     @Override
-    String getType()
+    public String getType()
     {
         return PROVIDER_TYPE;
     }
@@ -39,4 +42,10 @@ public class Base64MD5PasswordFileAuthen
         return new Base64MD5PasswordFilePrincipalDatabase();
     }
 
+    @Override
+    public Map<String, String> getAttributeDescriptions()
+    {
+        return ResourceBundleLoader.getResources(RESOURCE_BUNDLE);
+    }
+
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManagerFactory.java Mon Mar 11 18:29:45 2013
@@ -19,6 +19,8 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
@@ -37,4 +39,22 @@ public class ExternalAuthenticationManag
         return null;
     }
 
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return Collections.<String>singletonList(ATTRIBUTE_TYPE);
+    }
+
+    @Override
+    public String getType()
+    {
+        return PROVIDER_TYPE;
+    }
+
+    @Override
+    public Map<String, String> getAttributeDescriptions()
+    {
+        return null;
+    }
+
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java?rev=1455273&r1=1455272&r2=1455273&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManagerFactory.java Mon Mar 11 18:29:45 2013
@@ -19,6 +19,8 @@
  */
 package org.apache.qpid.server.security.auth.manager;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
@@ -36,4 +38,22 @@ public class KerberosAuthenticationManag
         }
         return null;
     }
+
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return Collections.<String>singletonList(ATTRIBUTE_TYPE);
+    }
+
+    @Override
+    public String getType()
+    {
+        return PROVIDER_TYPE;
+    }
+
+    @Override
+    public Map<String, String> getAttributeDescriptions()
+    {
+        return null;
+    }
 }

Added: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PasswordFileAuthenticationProviderAttributeDescriptions.properties
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PasswordFileAuthenticationProviderAttributeDescriptions.properties?rev=1455273&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PasswordFileAuthenticationProviderAttributeDescriptions.properties (added)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PasswordFileAuthenticationProviderAttributeDescriptions.properties Mon Mar 11 18:29:45 2013
@@ -0,0 +1,19 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+
+path=File location*
\ No newline at end of file



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