You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/04/23 22:54:24 UTC

svn commit: r1471141 [2/11] - in /qpid/branches/QPID-4659/qpid/java: ./ amqp-1-0-client-jms/ amqp-1-0-client/ amqp-1-0-common/ amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/ broker-plugins/access-control/src/main/java/org/apache/qpid...

Copied: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java (from r1465590, qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java)
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java?p2=qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java&p1=qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java&r1=1465590&r2=1471141&rev=1471141&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java Tue Apr 23 20:54:19 2013
@@ -85,13 +85,13 @@ public class HttpManagementUtil
     }
 
     public static void checkRequestAuthenticatedAndAccessAuthorized(HttpServletRequest request, Broker broker,
-            HttpManagementConfiguration management)
+            HttpManagementConfiguration managementConfig)
     {
         HttpSession session = request.getSession();
         Subject subject = getAuthorisedSubject(session);
         if (subject == null)
         {
-            subject = tryToAuthenticate(request, broker, management);
+            subject = tryToAuthenticate(request, managementConfig);
             if (subject == null)
             {
                 throw new SecurityException("Only authenticated users can access the management interface");
@@ -164,11 +164,11 @@ public class HttpManagementUtil
         session.setAttribute(ATTR_LOGIN_LOGOUT_REPORTER, new LoginLogoutReporter(logActor, subject));
     }
 
-    private static Subject tryToAuthenticate(HttpServletRequest request, Broker broker, HttpManagementConfiguration management)
+    private static Subject tryToAuthenticate(HttpServletRequest request, HttpManagementConfiguration managementConfig)
     {
         Subject subject = null;
         SocketAddress localAddress = getSocketAddress(request);
-        SubjectCreator subjectCreator = broker.getSubjectCreator(localAddress);
+        SubjectCreator subjectCreator = managementConfig.getSubjectCreator(localAddress);
         String remoteUser = request.getRemoteUser();
 
         if (remoteUser != null || subjectCreator.isAnonymousAuthenticationAllowed())
@@ -186,11 +186,11 @@ public class HttpManagementUtil
                     boolean isBasicAuthSupported = false;
                     if (request.isSecure())
                     {
-                        isBasicAuthSupported = management.isHttpsBasicAuthenticationEnabled();
+                        isBasicAuthSupported = managementConfig.isHttpsBasicAuthenticationEnabled();
                     }
                     else
                     {
-                        isBasicAuthSupported = management.isHttpBasicAuthenticationEnabled();
+                        isBasicAuthSupported = managementConfig.isHttpBasicAuthenticationEnabled();
                     }
                     if (isBasicAuthSupported)
                     {

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java Tue Apr 23 20:54:19 2013
@@ -21,9 +21,6 @@
 package org.apache.qpid.server.management.plugin.servlet.rest;
 
 import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.security.AccessControlException;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 
@@ -34,44 +31,22 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.server.logging.LogActor;
-import org.apache.qpid.server.logging.RootMessageLogger;
 import org.apache.qpid.server.logging.actors.CurrentActor;
 import org.apache.qpid.server.logging.actors.HttpManagementActor;
-import org.apache.qpid.server.management.plugin.HttpManagement;
-import org.apache.qpid.server.management.plugin.session.LoginLogoutReporter;
+import org.apache.qpid.server.management.plugin.HttpManagementConfiguration;
+import org.apache.qpid.server.management.plugin.HttpManagementUtil;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.security.SecurityManager;
-import org.apache.qpid.server.security.SubjectCreator;
-import org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
-import org.apache.qpid.server.security.auth.SubjectAuthenticationResult;
-import org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager;
 
 public abstract class AbstractServlet extends HttpServlet
 {
     private static final Logger LOGGER = Logger.getLogger(AbstractServlet.class);
 
-    /**
-     * Servlet context attribute holding a reference to a broker instance
-     */
-    public static final String ATTR_BROKER = "Qpid.broker";
-
-    /**
-     * Servlet context attribute holding a reference to plugin configuration
-     */
-    public static final String ATTR_MANAGEMENT = "Qpid.management";
-
-    private static final String ATTR_LOGIN_LOGOUT_REPORTER = "AbstractServlet.loginLogoutReporter";
-    private static final String ATTR_SUBJECT = "AbstractServlet.subject";
-    private static final String ATTR_LOG_ACTOR = "AbstractServlet.logActor";
-
     private Broker _broker;
-    private RootMessageLogger _rootLogger;
-    private HttpManagement _httpManagement;
+    private HttpManagementConfiguration _managementConfiguration;
 
     protected AbstractServlet()
     {
@@ -83,9 +58,8 @@ public abstract class AbstractServlet ex
     {
         ServletConfig servletConfig = getServletConfig();
         ServletContext servletContext = servletConfig.getServletContext();
-        _broker = (Broker)servletContext.getAttribute(ATTR_BROKER);
-        _rootLogger = _broker.getRootMessageLogger();
-        _httpManagement = (HttpManagement)servletContext.getAttribute(ATTR_MANAGEMENT);
+        _broker = HttpManagementUtil.getBroker(servletContext);
+        _managementConfiguration = HttpManagementUtil.getManagementConfiguration(servletContext);
         super.init();
     }
 
@@ -211,18 +185,18 @@ public abstract class AbstractServlet ex
         Subject subject;
         try
         {
-            subject = getAndCacheAuthorizedSubject(request);
+            subject = getAuthorisedSubject(request);
         }
-        catch (AccessControlException e)
+        catch (SecurityException e)
         {
-            sendError(resp, HttpServletResponse.SC_FORBIDDEN);
+            sendError(resp, HttpServletResponse.SC_UNAUTHORIZED);
             return;
         }
 
         SecurityManager.setThreadSubject(subject);
         try
         {
-            HttpManagementActor logActor = getLogActorAndCacheInSession(request);
+            HttpManagementActor logActor = HttpManagementUtil.getOrCreateAndCacheLogActor(request, _broker);
             CurrentActor.set(logActor);
             try
             {
@@ -256,187 +230,24 @@ public abstract class AbstractServlet ex
         }
     }
 
-    /**
-     * Gets the logged-in {@link Subject} by trying the following:
-     *
-     * <ul>
-     * <li>Get it from the session</li>
-     * <li>Get it from the request</li>
-     * <li>Log in using the username and password in the Authorization HTTP header</li>
-     * <li>Create a Subject representing the anonymous user.</li>
-     * </ul>
-     *
-     * If an authenticated subject is found it is cached in the http session.
-     */
-    private Subject getAndCacheAuthorizedSubject(HttpServletRequest request)
+    protected Subject getAuthorisedSubject(HttpServletRequest request)
     {
-        HttpSession session = request.getSession();
-        Subject subject = getAuthorisedSubjectFromSession(session);
-
-        if(subject != null)
-        {
-            return subject;
-        }
-
-        SubjectCreator subjectCreator = getSubjectCreator(request);
-        subject = authenticate(request, subjectCreator);
-        if (subject != null)
+        Subject subject = HttpManagementUtil.getAuthorisedSubject(request.getSession());
+        if (subject == null)
         {
-            authoriseManagement(request, subject);
-            setAuthorisedSubjectInSession(subject, request, session);
+            throw new SecurityException("Access to management rest interfaces is denied for un-authorised user");
         }
-        else
-        {
-            subject = subjectCreator.createSubjectWithGroups(AnonymousAuthenticationManager.ANONYMOUS_USERNAME);
-        }
-
         return subject;
     }
 
-    protected void authoriseManagement(HttpServletRequest request, Subject subject)
-    {
-        // TODO: We should eliminate SecurityManager.setThreadSubject in favour of Subject.doAs
-        SecurityManager.setThreadSubject(subject);  // Required for accessManagement check
-        LogActor actor = createHttpManagementActor(request);
-        CurrentActor.set(actor);
-        try
-        {
-            try
-            {
-                Subject.doAs(subject, new PrivilegedExceptionAction<Void>() // Required for proper logging of Subject
-                {
-                    @Override
-                    public Void run() throws Exception
-                    {
-                        boolean allowed = getSecurityManager().accessManagement();
-                        if (!allowed)
-                        {
-                            throw new AccessControlException("User is not authorised for management");
-                        }
-                        return null;
-                    }
-                });
-            }
-            catch (PrivilegedActionException e)
-            {
-                throw new RuntimeException("Unable to perform access check", e);
-            }
-        }
-        finally
-        {
-            try
-            {
-                CurrentActor.remove();
-            }
-            finally
-            {
-                SecurityManager.setThreadSubject(null);
-            }
-        }
-    }
-
-    private Subject authenticate(HttpServletRequest request, SubjectCreator subjectCreator)
-    {
-        Subject subject = null;
-
-        String remoteUser = request.getRemoteUser();
-        if(remoteUser != null)
-        {
-            subject = authenticateUserAndGetSubject(subjectCreator, remoteUser, null);
-        }
-        else
-        {
-            String header = request.getHeader("Authorization");
-
-            if (header != null)
-            {
-                String[] tokens = header.split("\\s");
-                if(tokens.length >= 2 && "BASIC".equalsIgnoreCase(tokens[0]))
-                {
-                    if(!isBasicAuthSupported(request))
-                    {
-                        //TODO: write a return response indicating failure?
-                        throw new IllegalArgumentException("BASIC Authorization is not enabled.");
-                    }
-
-                    subject = performBasicAuth(subject, subjectCreator, tokens[1]);
-                }
-            }
-        }
-
-        return subject;
-    }
-
-    private Subject performBasicAuth(Subject subject,SubjectCreator subjectCreator, String base64UsernameAndPassword)
-    {
-        String[] credentials = (new String(Base64.decodeBase64(base64UsernameAndPassword.getBytes()))).split(":",2);
-        if(credentials.length == 2)
-        {
-            subject = authenticateUserAndGetSubject(subjectCreator, credentials[0], credentials[1]);
-        }
-        else
-        {
-            //TODO: write a return response indicating failure?
-            throw new AccessControlException("Invalid number of credentials supplied: "
-                                            + credentials.length);
-        }
-        return subject;
-    }
-
-    private Subject authenticateUserAndGetSubject(SubjectCreator subjectCreator, String username, String password)
-    {
-        SubjectAuthenticationResult authResult = subjectCreator.authenticate(username, password);
-        if( authResult.getStatus() != AuthenticationStatus.SUCCESS)
-        {
-            //TODO: write a return response indicating failure?
-            throw new AccessControlException("Incorrect username or password");
-        }
-        Subject subject = authResult.getSubject();
-        return subject;
-    }
-
-    private boolean isBasicAuthSupported(HttpServletRequest req)
-    {
-        return req.isSecure()  ? _httpManagement.isHttpsBasicAuthenticationEnabled()
-                : _httpManagement.isHttpBasicAuthenticationEnabled();
-    }
-
-    private HttpManagementActor getLogActorAndCacheInSession(HttpServletRequest req)
-    {
-        HttpSession session = req.getSession();
-
-        HttpManagementActor actor = (HttpManagementActor) session.getAttribute(ATTR_LOG_ACTOR);
-        if(actor == null)
-        {
-            actor = createHttpManagementActor(req);
-            session.setAttribute(ATTR_LOG_ACTOR, actor);
-        }
-
-        return actor;
-    }
-
-    protected Subject getAuthorisedSubjectFromSession(HttpSession session)
-    {
-        return (Subject)session.getAttribute(ATTR_SUBJECT);
-    }
-
-    protected void setAuthorisedSubjectInSession(Subject subject, HttpServletRequest request, final HttpSession session)
-    {
-        session.setAttribute(ATTR_SUBJECT, subject);
-
-        LogActor logActor = createHttpManagementActor(request);
-        // Cause the user logon to be logged.
-        session.setAttribute(ATTR_LOGIN_LOGOUT_REPORTER, new LoginLogoutReporter(logActor, subject));
-    }
-
     protected Broker getBroker()
     {
         return _broker;
     }
 
-    protected SocketAddress getSocketAddress(HttpServletRequest request)
+    protected HttpManagementConfiguration getManagementConfiguration()
     {
-        return InetSocketAddress.createUnresolved(request.getServerName(), request.getServerPort());
+        return _managementConfiguration;
     }
 
     protected void sendError(final HttpServletResponse resp, int errorCode)
@@ -450,24 +261,4 @@ public abstract class AbstractServlet ex
             throw new RuntimeException("Failed to send error response code " + errorCode, e);
         }
     }
-
-    private HttpManagementActor createHttpManagementActor(HttpServletRequest request)
-    {
-        return new HttpManagementActor(_rootLogger, request.getRemoteAddr(), request.getRemotePort());
-    }
-
-    protected HttpManagement getManagement()
-    {
-        return _httpManagement;
-    }
-
-    protected SecurityManager getSecurityManager()
-    {
-        return _broker.getSecurityManager();
-    }
-
-    protected SubjectCreator getSubjectCreator(HttpServletRequest request)
-    {
-        return _broker.getSubjectCreator(getSocketAddress(request));
-    }
 }

Modified: qpid/branches/QPID-4659/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/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java Tue Apr 23 20:54:19 2013
@@ -31,9 +31,10 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.qpid.server.management.plugin.servlet.rest.action.ListAccessControlProviderAttributes;
 import org.apache.qpid.server.management.plugin.servlet.rest.action.ListAuthenticationProviderAttributes;
+import org.apache.qpid.server.management.plugin.servlet.rest.action.ListGroupProviderAttributes;
 import org.apache.qpid.server.management.plugin.servlet.rest.action.ListMessageStoreTypes;
-import org.apache.qpid.server.model.Broker;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.SerializationConfig;
 
@@ -53,6 +54,10 @@ public class HelperServlet extends Abstr
         _actions.put(listProviderAttributes.getName(), listProviderAttributes);
         Action listMessageStoreTypes = new ListMessageStoreTypes();
         _actions.put(listMessageStoreTypes.getName(), listMessageStoreTypes);
+        Action groupProviderAttributes = new ListGroupProviderAttributes();
+        _actions.put(groupProviderAttributes.getName(), groupProviderAttributes);
+        Action aclProviderAttributes = new ListAccessControlProviderAttributes();
+        _actions.put(aclProviderAttributes.getName(), aclProviderAttributes);
     }
 
     @Override
@@ -96,7 +101,7 @@ public class HelperServlet extends Abstr
             }
         }
 
-        Object output = action.perform(parameters, (Broker) getServletContext().getAttribute(ATTR_BROKER));
+        Object output = action.perform(parameters, getBroker());
         if (output == null)
         {
             response.setStatus(HttpServletResponse.SC_NOT_FOUND);

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/LogoutServlet.java Tue Apr 23 20:54:19 2013
@@ -29,13 +29,13 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import org.apache.qpid.server.management.plugin.HttpManagement;
+import org.apache.qpid.server.management.plugin.HttpManagementUtil;
 
 @SuppressWarnings("serial")
 public class LogoutServlet extends HttpServlet
 {
     public static final String RETURN_URL_INIT_PARAM = "qpid.webui_logout_redirect";
-    private String _returnUrl = HttpManagement.ENTRY_POINT_PATH;
+    private String _returnUrl = HttpManagementUtil.ENTRY_POINT_PATH;
 
     @Override
     public void init(ServletConfig config) throws ServletException

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/SaslServlet.java Tue Apr 23 20:54:19 2013
@@ -25,7 +25,10 @@ import org.codehaus.jackson.map.ObjectMa
 import org.codehaus.jackson.map.SerializationConfig;
 
 import org.apache.log4j.Logger;
-import org.apache.qpid.server.management.plugin.HttpManagement;
+import org.apache.qpid.server.logging.LogActor;
+import org.apache.qpid.server.management.plugin.HttpManagementConfiguration;
+import org.apache.qpid.server.management.plugin.HttpManagementUtil;
+import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.security.SubjectCreator;
 import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
 
@@ -38,7 +41,7 @@ import javax.servlet.http.HttpServletRes
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.security.AccessControlException;
+import java.net.SocketAddress;
 import java.security.Principal;
 import java.security.SecureRandom;
 import java.util.LinkedHashMap;
@@ -80,7 +83,7 @@ public class SaslServlet extends Abstrac
         String[] mechanisms = subjectCreator.getMechanisms().split(" ");
         Map<String, Object> outputObject = new LinkedHashMap<String, Object>();
 
-        final Subject subject = getAuthorisedSubjectFromSession(session);
+        final Subject subject = getAuthorisedSubject(request);
         if(subject != null)
         {
             Principal principal = AuthenticatedPrincipal.getAuthenticatedPrincipalFromSubject(subject);
@@ -195,8 +198,8 @@ public class SaslServlet extends Abstrac
 
     private void checkSaslAuthEnabled(HttpServletRequest request)
     {
-        boolean saslAuthEnabled;
-        HttpManagement management = getManagement();
+        boolean saslAuthEnabled = false;
+        HttpManagementConfiguration management = getManagementConfiguration();
         if (request.isSecure())
         {
             saslAuthEnabled = management.isHttpsSaslAuthenticationEnabled();
@@ -205,7 +208,6 @@ public class SaslServlet extends Abstrac
         {
             saslAuthEnabled = management.isHttpSaslAuthenticationEnabled();
         }
-
         if (!saslAuthEnabled)
         {
             throw new RuntimeException("Sasl authentication disabled.");
@@ -227,7 +229,7 @@ public class SaslServlet extends Abstrac
             session.removeAttribute(ATTR_ID);
             session.removeAttribute(ATTR_SASL_SERVER);
             session.removeAttribute(ATTR_EXPIRY);
-            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
 
             return;
         }
@@ -236,17 +238,15 @@ public class SaslServlet extends Abstrac
         {
             Subject subject = subjectCreator.createSubjectWithGroups(saslServer.getAuthorizationID());
 
-            try
-            {
-                authoriseManagement(request, subject);
-            }
-            catch (AccessControlException ace)
+            Broker broker = getBroker();
+            LogActor actor = HttpManagementUtil.getOrCreateAndCacheLogActor(request, broker);
+            if (!HttpManagementUtil.hasAccessToManagement(broker.getSecurityManager(), subject, actor))
             {
                 sendError(response, HttpServletResponse.SC_FORBIDDEN);
                 return;
             }
 
-            setAuthorisedSubjectInSession(subject, request, session);
+            HttpManagementUtil.saveAuthorisedSubject(request.getSession(), subject, actor);
             session.removeAttribute(ATTR_ID);
             session.removeAttribute(ATTR_SASL_SERVER);
             session.removeAttribute(ATTR_EXPIRY);
@@ -274,4 +274,16 @@ public class SaslServlet extends Abstrac
             mapper.writeValue(writer, outputObject);
         }
     }
+
+    private SubjectCreator getSubjectCreator(HttpServletRequest request)
+    {
+        SocketAddress localAddress = HttpManagementUtil.getSocketAddress(request);
+        return HttpManagementUtil.getManagementConfiguration(getServletContext()).getSubjectCreator(localAddress);
+    }
+
+    @Override
+    protected Subject getAuthorisedSubject(HttpServletRequest request)
+    {
+        return HttpManagementUtil.getAuthorisedSubject(request.getSession());
+    }
 }

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListMessageStoreTypes.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListMessageStoreTypes.java?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListMessageStoreTypes.java (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListMessageStoreTypes.java Tue Apr 23 20:54:19 2013
@@ -17,7 +17,7 @@ public class ListMessageStoreTypes imple
     @Override
     public Object perform(Map<String, Object> request, Broker broker)
     {
-        return broker.getAttribute(Broker.SUPPORTED_STORE_TYPES);
+        return broker.getAttribute(Broker.SUPPORTED_VIRTUALHOST_STORE_TYPES);
     }
 
 }

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html Tue Apr 23 20:54:19 2013
@@ -15,15 +15,16 @@
   ~ limitations under the License.
   -->
 <div class="dijitHidden">
-    <div data-dojo-type="dijit.Dialog" style="width:600px;" data-dojo-props="title:'Authentication Provider'" id="addAuthenticationProvider">
+    <div data-dojo-type="dijit.Dialog" data-dojo-props="title:'Authentication Provider'" id="addAuthenticationProvider">
         <form id="formAddAuthenticationProvider" method="post" dojoType="dijit.form.Form">
+            <div style="height:100px; width:420px; overflow: auto">
                 <table class="tableContainer-table tableContainer-table-horiz" width="100%" cellspacing="1">
                 <tr>
-                    <td class="tableContainer-labelCell" style="width: 300px;">Type*:</td>
+                    <td class="tableContainer-labelCell" style="width: 200px;">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-labelCell" style="width: 200px;">Name*:</td>
                     <td class="tableContainer-valueCell"><input type="text" required="true" name="name"
                         id="formAddAuthenticationProvider.name" placeholder="Name" regexp="^[\x20-\x2e\x30-\x7F]{1,255}$"
                         dojoType="dijit.form.ValidationTextBox" missingMessage="A name must be supplied" /></div></td>
@@ -31,8 +32,11 @@
                 </table>
                 <input type="hidden" id="formAddAuthenticationProvider.id" name="id"/>
                 <div id="addAuthenticationProvider.fieldSets"></div>
+            </div>
+            <div class="dijitDialogPaneActionBar">
                 <!-- submit buttons -->
                 <input type="submit" value="Save Authentication Provider" label="Save Authentication Provider" dojoType="dijit.form.Button" />
+            </div>
         </form>
     </div>
 </div>

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html Tue Apr 23 20:54:19 2013
@@ -32,11 +32,10 @@
                         dojoType="dijit.form.ValidationTextBox" missingMessage="A name must be supplied" /></td>
                 </tr>
             </table>
-            <br/>
-
+            <div class="dijitDialogPaneActionBar">
             <!-- submit buttons -->
             <input type="submit" value="Create Binding" label="Create Binding" dojoType="dijit.form.Button" />
-
+            </div>
         </form>
     </div>
 </div>

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html Tue Apr 23 20:54:19 2013
@@ -44,11 +44,10 @@
                     </td>
                 </tr>
             </table>
-            <br/>
-
+            <div class="dijitDialogPaneActionBar">
             <!-- submit buttons -->
             <input type="submit" value="Create Exchange" label="Create Exchange" dojoType="dijit.form.Button" />
-
+            </div>
         </form>
     </div>
 </div>

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html Tue Apr 23 20:54:19 2013
@@ -19,43 +19,33 @@
  -
  -->
 <div class="dijitHidden">
-    <div data-dojo-type="dijit.Dialog" style="width:600px;" data-dojo-props="title:'Port'" id="addPort">
+    <div data-dojo-type="dijit.Dialog" data-dojo-props="title:'Port'" id="addPort">
         <form id="formAddPort" method="post" dojoType="dijit.form.Form">
-            <div class="dijitDialogPaneContentArea">
+            <div style="height:320px; width:420px; overflow: auto">
             <div id="formAddPort:fields">
                 <input type="text" required="true" name="name" id="formAddPort.name" placeholder="Name"
                     data-dojo-props="label: 'Name*:'" dojoType="dijit.form.ValidationTextBox"
                     missingMessage="A name must be supplied" regexp="^[\x20-\x2e\x30-\x7F]{1,255}$"/>
-                <input data-dojo-type="dijit.form.NumberSpinner" id="formAddPort.port" required="true" data-dojo-props="label: 'Port Number*:'"
+                <input data-dojo-type="dijit.form.NumberSpinner" id="formAddPort.port" required="true" data-dojo-props="label: 'Port Number*:', placeHolder: 'Enter port number'"
                      name="port" smallDelta="1" constraints="{min:1,max:65535,places:0, pattern: '#####'}"
                      missingMessage="A port number must be supplied"  />
-                <select id="formAddPort.transports" data-dojo-type="dijit.form.FilteringSelect"
-                    data-dojo-props="name: 'transports',label: 'Transport:',searchAttr: 'name',required:false,placeHolder: 'TCP', value: '' "
-                    style="margin: 0;">
-                    <option value="TCP">TCP</option>
-                    <option value="SSL">SSL</option>
-                </select>
-                <select id="formAddPort.authenticationProvider" data-dojo-type="dijit.form.FilteringSelect" style="margin: 0;"
-                    data-dojo-props="name:'authenticationProvider',label:'Authentication Provider:', searchAttr: 'name', required: false, placeHolder: 'Default', value: '' ">
-                </select>
                 <select id="formAddPort.type" data-dojo-type="dijit.form.FilteringSelect"
-                    data-dojo-props="name: 'type', value: '',placeHolder: 'Select Port Type', label: 'Port Type:'">
+                    data-dojo-props="name: 'type', value: '',placeHolder: 'Select Port Type', label: 'Port Type*:'">
                     <option value="AMQP" selected="selected">AMQP</option>
                     <option value="JMX">JMX</option>
                     <option value="HTTP">HTTP</option>
                 </select>
             </div>
-            <div id="formAddPort:fieldsClientAuth">
-                <input id="formAddPort.needClientAuth" type="checkbox" name="needClientAuth"
-                   dojoType="dijit.form.CheckBox" data-dojo-props="label: 'Need SSL Client Certificate:'"/>
-                <input id="formAddPort.wantClientAuth" type="checkbox" name="wantClientAuth"
-                   dojoType="dijit.form.CheckBox" data-dojo-props="label: 'Want SSL Client Certificate:'"/>
+            <div id="formAddPort:fieldsAuthenticationProvider">
+                <select id="formAddPort.authenticationProvider" data-dojo-type="dijit.form.FilteringSelect"
+                    data-dojo-props="name:'authenticationProvider',label:'Authentication Provider*:', searchAttr: 'name', required: true, placeHolder: 'Select Provider'">
+                </select>
             </div>
             <div id="formAddPort:fieldsAMQP">
                 <input id="formAddPort.bindingAddress" type="text" name="bindingAddress" placeholder="*"
                    dojoType="dijit.form.TextBox" data-dojo-props="label: 'Binding address:'"/>
                 <input id="formAddPort.protocolsDefault" type="checkbox" checked="checked"
-                   dojoType="dijit.form.CheckBox" data-dojo-props="label: 'Support broker default AMQP versions:'"/>
+                   dojoType="dijit.form.CheckBox" data-dojo-props="label: 'Support default protocols:'"/>
                 <select id="formAddPort.protocolsAMQP" name="protocols" data-dojo-type="dijit.form.MultiSelect" multiple="true"
                     data-dojo-props="name: 'protocols', value: '', placeHolder: 'Select AMQP versions', label: 'AMQP versions:'"
                     missingMessage="AMQP protocol(s) must be supplied">
@@ -80,6 +70,37 @@
                     <option value="HTTPS">HTTPS</option>
                 </select>
             </div>
+            <div id="formAddPort:transport" >
+                 <select id="formAddPort.transports" data-dojo-type="dijit.form.FilteringSelect"
+                    data-dojo-props="name: 'transports',label: 'Transport:',searchAttr: 'name',required:false,placeHolder: 'TCP', value: '' "
+                    style="margin: 0;">
+                    <option value="TCP">TCP</option>
+                    <option value="SSL">SSL</option>
+                </select>
+            </div>
+            <div id="formAddPort:fieldsTransportSSL">
+                <select id="formAddPort.keyStore" data-dojo-type="dijit.form.FilteringSelect"
+                    data-dojo-props="name:'keyStore',label:'Key Store*:', searchAttr: 'name', placeHolder: 'Select keystore', value: '', required: true ">
+                </select>
+            </div>
+            <div id="formAddPort:fieldsClientAuth">
+                <div id="formAddPort:fieldsClientAuthCheckboxes">
+                 <input id="formAddPort.needClientAuth" type="checkbox" name="needClientAuth"
+                    dojoType="dijit.form.CheckBox" data-dojo-props="label: 'Need SSL Client Certificate:'" />
+                 <input id="formAddPort.wantClientAuth" type="checkbox" name="wantClientAuth"
+                    dojoType="dijit.form.CheckBox" data-dojo-props="label: 'Want SSL Client Certificate:'" />
+                </div>
+                <div><strong>Trust Stores:</strong></div>
+                <table id="formAddPort.trustStores" data-dojo-type="dojox.grid.EnhancedGrid"
+                        data-dojo-props="label:'Trust Stores:',plugins:{indirectSelection: true},rowSelector:'0px' " style="height: 100px; width:400px">
+                        <thead>
+                           <tr>
+                             <th field="name">Name</th>
+                             <th field="peersOnly">Peers Only</th>
+                           </tr>
+                         </thead>
+                </table>
+            </div>
             <input type="hidden" id="formAddPort.id" name="id"/>
             </div>
             <div class="dijitDialogPaneActionBar">

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html Tue Apr 23 20:54:19 2013
@@ -19,8 +19,9 @@
  -
  -->
 <div class="dijitHidden">
-    <div data-dojo-type="dijit.Dialog" style="width:600px;" data-dojo-props="title:'Add Queue'" id="addQueue">
+    <div data-dojo-type="dijit.Dialog" data-dojo-props="title:'Add Queue'" id="addQueue">
         <form id="formAddQueue" method="post" dojoType="dijit.form.Form">
+            <div  style="height:250px; width:600px; overflow: auto">
             <table cellpadding="0" cellspacing="2">
                 <tr>
                     <td valign="top"><strong>Queue Name*: </strong></td>
@@ -173,10 +174,11 @@
                     </tr>
                 </table>
             </div>
-            <br/>
+            </div>
+          <div class="dijitDialogPaneActionBar">
             <!-- submit buttons -->
             <input type="submit" value="Create Queue" label="Create Queue" dojoType="dijit.form.Button" />
-
+          </div>
         </form>
     </div>
 </div>

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html Tue Apr 23 20:54:19 2013
@@ -62,10 +62,11 @@
                 </div>
             </div>
 
-            <br/>
+            <div class="dijitDialogPaneActionBar">
             <!-- submit buttons -->
             <input type="submit" value="Save" label="Save" dojoType="dijit.form.Button" />
             <input type="hidden" id="formAddVirtualHost.id" name="id"/>
+            </div>
         </form>
     </div>
 </div>

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css Tue Apr 23 20:54:19 2013
@@ -43,7 +43,6 @@ button {
 	-moz-border-radius: 4px 4px 4px 4px;
 	-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
 	background-color: #E4F2FF;
-	background-image: url("../dojo/dijit/themes/claro/form/images/button.png");
 	background-position: center top;
 	background-repeat: repeat-x;
 	border: 1px solid #769DC0;

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html Tue Apr 23 20:54:19 2013
@@ -19,6 +19,8 @@
  -
  -->
 <div class="FileGroupManager">
+    <span style="">Path:</span><span class="path" style="position:absolute; left:6em"></span>
+    <br/>
     <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Groups'">
         <div class="groups"></div>
         <button data-dojo-type="dijit.form.Button" class="addGroupButton">Add Group</button>

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html Tue Apr 23 20:54:19 2013
@@ -24,6 +24,7 @@
     <link rel="stylesheet" href="dojo/dojox/grid/resources/claroGrid.css">
     <link rel="stylesheet" href="dojo/dojox/grid/enhanced/resources/claro/EnhancedGrid.css">
     <link rel="stylesheet" href="dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css">
+    <link rel="stylesheet" href="dojo/dojox/form/resources/CheckedMultiSelect.css">
     <link rel="stylesheet" href="css/common.css" media="screen">
     <script>
         function getContextPath()
@@ -65,7 +66,7 @@
                     "qpid/management/treeView",
                     "qpid/management/controller",
                     "qpid/common/footer",
-                    "qpid/authorization/sasl"]);
+                    "qpid/authorization/checkUser"]);
     </script>
 
 </head>
@@ -74,9 +75,9 @@
 <div id="pageLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline', gutters: false">
     <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">
         <div id="header" class="header" style="float: left; width: 300px"></div>
-        <div id="login" style="float: right"></div>
+        <div id="login" style="float: right; display:none"><strong>User: </strong> <span id="authenticatedUser"></span><a href="logout">[logout]</a></div>
     </div>
-    <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'leading', splitter: true">
+    <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'leading', splitter: true" style="width:20%">
         <div qpid-type="treeView" qpid-props="query: 'rest/structure'" ></div>
     </div>
     <div id="managedViews" data-dojo-type="dijit.layout.TabContainer" data-dojo-props="region:'center', tabPosition: 'top'">

Copied: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js (from r1465590, qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js)
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js?p2=qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js&p1=qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js&r1=1465590&r2=1471141&rev=1471141&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/checkUser.js Tue Apr 23 20:54:19 2013
@@ -19,60 +19,18 @@
  *
  */
 
-require(["dijit/form/DropDownButton",
-         "dijit/TooltipDialog",
-         "dijit/form/TextBox",
-         "dojo/_base/xhr",
-         "dojo/dom",
-         "dojo/dom-construct",
+require(["dojo/dom",
          "qpid/authorization/sasl",
-         "dojo/domReady!"], function(DropDownButton, TooltipDialog, TextBox, xhr, dom, domConstruct, sasl){
-
-var dialog = new TooltipDialog({
-    content:
-        '<strong><label for="username" style="display:inline-block;width:100px;">Username:</label></strong>' +
-        '<div data-dojo-type="dijit.form.TextBox" id="username"></div><br/>' +
-            '<strong><label for="pass" style="display:inline-block;width:100px;">Password:</label></strong>' +
-            '<div data-dojo-type="dijit.form.TextBox" type="password" id="pass"></div><br/>' +
-        '<button data-dojo-type="dijit.form.Button" type="submit" id="loginButton">Login</button>'
-});
-
-var button = new DropDownButton({
-    label: "Login",
-    dropDown: dialog
-});
-
-var usernameSpan = domConstruct.create("span", {
-    innerHTML: '<strong>User: </strong> <span id="authenticatedUser"></span><a href="logout">[logout]</a>',
-    style: { display: "none" }
-});
-
-
-var loginDiv = dom.byId("login");
-loginDiv.appendChild(usernameSpan);
-loginDiv.appendChild(button.domNode);
+         "dojo/domReady!"], function(dom, sasl){
 
 var updateUI = function updateUI(data)
 {
     if(data.user)
     {
-        dojo.byId("authenticatedUser").innerHTML = data.user;
-        dojo.style(button.domNode, {display: 'none'});
-        dojo.style(usernameSpan, {display: 'block'});
-    }
-    else
-    {
-        dojo.style(button.domNode, {display: 'block'});
-        dojo.style(usernameSpan, {display: 'none'});
+        dom.byId("authenticatedUser").innerHTML = data.user;
+        dom.byId("login").style.display = "block";
     }
 };
 
-dijit.byId("loginButton").on("click", function(){
-    sasl.authenticate(dojo.byId("username").value, dojo.byId("pass").value, updateUI);
-});
-
-dialog.startup();
-
 sasl.getUser(updateUI);
-
 });
\ No newline at end of file

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/sasl.js Tue Apr 23 20:54:19 2013
@@ -18,10 +18,7 @@
  * under the License.
  *
  */
-require(["dijit/form/DropDownButton", "dijit/TooltipDialog", "dijit/form/TextBox",
-                     "dojo/_base/xhr", "dojox/encoding/base64", "dojox/encoding/digests/_base", "dojox/encoding/digests/MD5"]);
-var button;
-var usernameSpan;
+define(["dojo/_base/xhr", "dojox/encoding/base64", "dojox/encoding/digests/_base", "dojox/encoding/digests/MD5"], function () {
 
 var encodeUTF8 = function encodeUTF8(str) {
     var byteArray = [];
@@ -49,8 +46,23 @@ var decodeUTF8 = function decodeUTF8(byt
     return decodeURIComponent(str);
 };
 
+var errorHandler = function errorHandler(error)
+{
+    if(error.status == 401)
+    {
+        alert("Authentication Failed");
+    }
+    else if(error.status == 403)
+    {
+        alert("Authorization Failed");
+    }
+    else
+    {
+        alert(error);
+    }
+}
 
-var saslPlain = function saslPlain(user, password)
+var saslPlain = function saslPlain(user, password, callbackFunction)
 {
     var responseArray = [ 0 ].concat(encodeUTF8( user )).concat( [ 0 ] ).concat( encodeUTF8( password ) );
     var plainResponse = dojox.encoding.base64.encode(responseArray);
@@ -65,25 +77,10 @@ var saslPlain = function saslPlain(user,
         },
         handleAs: "json",
         failOk: true
-    }).then(function()
-            {
-                updateAuthentication();
-            },
-            function(error)
-            {
-                if(error.status == 403)
-                {
-                    alert("Authentication Failed");
-                }
-                else
-                {
-                    alert(error);
-                }
-                updateAuthentication();
-            });
+    }).then(callbackFunction, errorHandler);
 };
 
-var saslCramMD5 = function saslCramMD5(user, password)
+var saslCramMD5 = function saslCramMD5(user, password, saslMechanism, callbackFunction)
 {
 
     // Using dojo.xhrGet, as very little information is being sent
@@ -91,7 +88,7 @@ var saslCramMD5 = function saslCramMD5(u
         // The URL of the request
         url: "rest/sasl",
         content: {
-            mechanism: "CRAM-MD5"
+            mechanism: saslMechanism
         },
         handleAs: "json",
         failOk: true
@@ -121,22 +118,7 @@ var saslCramMD5 = function saslCramMD5(u
                         },
                         handleAs: "json",
                         failOk: true
-                    }).then(function()
-                                        {
-                                            updateAuthentication();
-                                        },
-                                        function(error)
-                                        {
-                                            if(error.status == 403)
-                                            {
-                                                alert("Authentication Failed");
-                                            }
-                                            else
-                                            {
-                                                alert(error);
-                                            }
-                                            updateAuthentication();
-                                        });
+                    }).then(callbackFunction, errorHandler);
 
             },
             function(error)
@@ -163,86 +145,45 @@ var containsMechanism = function contain
     return false;
 };
 
-var doAuthenticate = function doAuthenticate()
+var SaslClient = {};
+
+SaslClient.authenticate = function(username, password, callbackFunction)
 {
     dojo.xhrGet({
-        // The URL of the request
         url: "rest/sasl",
-        handleAs: "json"
+        handleAs: "json",
+        failOk: true
     }).then(function(data)
             {
-                var mechMap = data.mechanisms;
-
-                if (containsMechanism(mechMap, "CRAM-MD5"))
-                {
-                    saslCramMD5(dojo.byId("username").value, dojo.byId("pass").value);
-                    updateAuthentication();
-                }
-                else if (containsMechanism(mechMap, "PLAIN"))
-                {
-                    saslPlain(dojo.byId("username").value, dojo.byId("pass").value);
-                    updateAuthentication();
-                }
-                else
-                {
-                    alert("No supported SASL mechanism offered: " + mechMap);
-                }
-            }
-        );
-
-
+               var mechMap = data.mechanisms;
+               if (containsMechanism(mechMap, "CRAM-MD5"))
+               {
+                   saslCramMD5(username, password, "CRAM-MD5", callbackFunction);
+               }
+               else if (containsMechanism(mechMap, "CRAM-MD5-HEX"))
+               {
+                   var hashedPassword = dojox.encoding.digests.MD5(password, dojox.encoding.digests.outputTypes.Hex);
+                   saslCramMD5(username, hashedPassword, "CRAM-MD5-HEX", callbackFunction);
+               }
+               else if (containsMechanism(mechMap, "PLAIN"))
+               {
+                   saslPlain(username, password, callbackFunction);
+               }
+               else
+               {
+                   alert("No supported SASL mechanism offered: " + mechMap);
+               }
+            }, errorHandler);
 };
 
-
-var updateAuthentication = function updateAuthentication()
+SaslClient.getUser = function(callbackFunction)
 {
     dojo.xhrGet({
-        // The URL of the request
         url: "rest/sasl",
-        handleAs: "json"
-    }).then(function(data)
-            {
-                if(data.user)
-                {
-                    dojo.byId("authenticatedUser").innerHTML = data.user;
-                    dojo.style(button.domNode, {display: 'none'});
-                    dojo.style(usernameSpan, {display: 'block'});
-                }
-                else
-                {
-                    dojo.style(button.domNode, {display: 'block'});
-                    dojo.style(usernameSpan, {display: 'none'});
-                }
-            }
-        );
+        handleAs: "json",
+        failOk: true
+    }).then(callbackFunction, errorHandler);
 };
 
-require(["dijit/form/DropDownButton", "dijit/TooltipDialog", "dijit/form/TextBox", "dojo/_base/xhr", "dojo/dom", "dojo/dom-construct", "dojo/domReady!"],
-        function(DropDownButton, TooltipDialog, TextBox, xhr, dom, domConstruct){
-    var dialog = new TooltipDialog({
-        content:
-            '<strong><label for="username" style="display:inline-block;width:100px;">Username:</label></strong>' +
-            '<div data-dojo-type="dijit.form.TextBox" id="username"></div><br/>' +
-        	'<strong><label for="pass" style="display:inline-block;width:100px;">Password:</label></strong>' +
-        	'<div data-dojo-type="dijit.form.TextBox" type="password" id="pass"></div><br/>' +
-            '<button data-dojo-type="dijit.form.Button" data-dojo-props="onClick:doAuthenticate" type="submit">Login</button>'
-    });
-
-    button = new DropDownButton({
-        label: "Login",
-        dropDown: dialog
-    });
-
-    usernameSpan = domConstruct.create("span", { innerHTML: '<strong>User: </strong> <span id="authenticatedUser"></span><a href="logout">[logout]</a>',
-                                                     style: { display: "none" }});
-
-
-    var loginDiv = dom.byId("login");
-    loginDiv.appendChild(usernameSpan);
-    loginDiv.appendChild(button.domNode);
-
-
-
-
-    updateAuthentication();
-});
\ No newline at end of file
+return SaslClient;
+});

Modified: qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1471141&r1=1471140&r2=1471141&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js (original)
+++ qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js Tue Apr 23 20:54:19 2013
@@ -33,7 +33,7 @@ define(["dojo/_base/xhr",
         "dijit/form/RadioButton",
         "dijit/form/CheckBox",
         "dojox/layout/TableContainer",
-        "dojox/layout/ScrollPane",
+        "dijit/layout/ContentPane",
         "dojox/validate/us",
         "dojox/validate/web",
         "dojo/domReady!"
@@ -141,7 +141,7 @@ define(["dojo/_base/xhr",
                return (type === "PlainPasswordFile" || type === "Base64MD5PasswordFile");
            };
 
-           util.showSetAttributesDialog = function(attributeWidgetFactories, data, putURL, dialogTitle)
+           util.showSetAttributesDialog = function(attributeWidgetFactories, data, putURL, dialogTitle, appendNameToUrl)
            {
               var layout = new dojox.layout.TableContainer({
                    cols: 1,
@@ -154,7 +154,7 @@ define(["dojo/_base/xhr",
               var form = new dijit.form.Form();
 
               var dialogContent = dom.create("div");
-              var dialogContentArea = dom.create("div", { "class": "dijitDialogPaneContentArea"});
+              var dialogContentArea = dom.create("div", {"style": {width: 600}});
               var dialogActionBar = dom.create("div", { "class": "dijitDialogPaneActionBar"} );
               dialogContent.appendChild(dialogContentArea);
               dialogContent.appendChild(dialogActionBar);
@@ -171,11 +171,17 @@ define(["dojo/_base/xhr",
                  var widget = attributeWidgetFactory.createWidget(data);
                  var name = attributeWidgetFactory.name ? attributeWidgetFactory.name : widget.name;
                  widgets[name] = widget;
-                 widget.initialValue = widget.value;
                  var dotPos = name.indexOf(".");
                  if (dotPos == -1)
                  {
-                   layout.addChild(widget);
+                   if (widget instanceof dijit.layout.ContentPane)
+                   {
+                     dialogContentArea.appendChild(widget.domNode);
+                   }
+                   else
+                   {
+                     layout.addChild(widget);
+                   }
                  }
                  else
                  {
@@ -197,7 +203,7 @@ define(["dojo/_base/xhr",
                      groups[groupName] = groupFieldContainer;
                      var groupTitle = attributeWidgetFactory.groupName ? attributeWidgetFactory.groupName :
                                          groupName.charAt(0).toUpperCase() + groupName.slice(1);
-                     var panel = new dijit.TitlePane({title: groupTitle, toggleable: false, content: groupFieldContainer.domNode});
+                     var panel = new dijit.TitlePane({title: groupTitle, content: groupFieldContainer.domNode});
                      dialogContentArea.appendChild(dom.create("br"));
                      dialogContentArea.appendChild(panel.domNode);
                    }
@@ -224,8 +230,7 @@ define(["dojo/_base/xhr",
               }
               var setAttributesDialog = new dijit.Dialog({
                  title: dialogTitle,
-                 content: form,
-                 style: "width: 600px; max-height: 80%"
+                 content: form
              });
              form.on("submit", function(e)
              {
@@ -235,23 +240,29 @@ define(["dojo/_base/xhr",
                  if(form.validate())
                  {
                    var values = {};
-                   for(var i in widgets)
+                   var formWidgets = form.getDescendants();
+                   for(var i in formWidgets)
                    {
-                       var widget = widgets[i];
+                       var widget = formWidgets[i];
                        var value = widget.value;
                        var propName = widget.name;
-                       if ((widget instanceof dijit.form.CheckBox || widget instanceof dijit.form.RadioButton))
-                       {
-                         values[ propName ] = widget.checked;
-                       }
-                       else if (value != widget.initialValue)
-                       {
-                         values[ propName ] = value ? value: null;
+                       if (propName && !widget.disabled){
+                           if ((widget instanceof dijit.form.CheckBox || widget instanceof dijit.form.RadioButton)) {
+                               if (widget.checked != widget.initialValue) {
+                                   values[ propName ] = widget.checked;
+                               }
+                           } else if (value != widget.initialValue) {
+                               values[ propName ] = value ? value: null;
+                           }
                        }
                    }
 
                      var that = this;
-                     xhr.put({url: putURL, sync: true, handleAs: "json",
+                     var url = putURL;
+                     if (appendNameToUrl){
+                       url = url + "/" + encodeURIComponent(values["name"]);
+                     }
+                     xhr.put({url: url , sync: true, handleAs: "json",
                               headers: { "Content-Type": "application/json"},
                               putData: json.toJson(values),
                               load: function(x) {that.success = true; },
@@ -280,15 +291,24 @@ define(["dojo/_base/xhr",
              });
              form.connectChildren(true);
              setAttributesDialog.startup();
-             setAttributesDialog.on("show", function(){
-               var data = geometry.position(dialogContentArea);
-               var maxHeight = win.getBox().h * 0.6;
-               if (data.h > maxHeight)
-               {
-                 dialogContentArea.style.height = maxHeight + "px";
-                 dialogContentArea.style.overflow= "auto";
-               }
-             })
+             var formWidgets = form.getDescendants();
+             var aproximateHeight = 0;
+             for(var i in formWidgets){
+                 var widget = formWidgets[i];
+                 var propName = widget.name;
+                 if (propName) {
+                     if ((widget instanceof dijit.form.CheckBox || widget instanceof dijit.form.RadioButton)) {
+                         widget.initialValue = widget.checked;
+                     } else {
+                         widget.initialValue = widget.value;
+                     }
+                     aproximateHeight += 30;
+                 }
+             }
+             var viewport = win.getBox();
+             var maxHeight = Math.max(Math.floor(viewport.h * 0.6), 100);
+             dialogContentArea.style.overflow= "auto";
+             dialogContentArea.style.height = Math.min(aproximateHeight, maxHeight ) + "px";
              setAttributesDialog.show();
            };
 



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