Author: orudyy
Date: Fri Jan  8 16:55:50 2016
New Revision: 1723762

URL: http://svn.apache.org/viewvc?rev=1723762&view=rev
Log:
QPID-6917: Change existing sasl client interfaces to give entire control over 
authentication procedure to implementation; change existing sasl imlementations 
to adhere to new interfaces

Added:
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/CredentialBasedSaslClient.js
Removed:
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/authorization/
Modified:
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/Authenticator.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/SaslClient.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/ShaSaslClient.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/UsernamePasswordProvider.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5-hex/SaslClient.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5/SaslClient.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/plain/SaslClient.js
    
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/login.html

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/index.html
 Fri Jan  8 16:55:50 2016
@@ -63,13 +63,15 @@
         require([
                     "dojo/parser",
                     "dojo/query",
-                    "qpid/authorization/checkUser",
                     "qpid/common/ConsoleHelper",
                     "qpid/management/Management",
                     "qpid/common/util",
                     "qpid/management/treeView",
                     "qpid/management/controller",
                     "qpid/common/updater",
+                    "dojox/html/entities",
+                    "dijit/registry",
+                    "dojo/dom",
                     "dijit/layout/BorderContainer",
                     "dijit/layout/TabContainer",
                     "dijit/layout/ContentPane",
@@ -77,18 +79,36 @@
                     "dijit/Menu",
                     "dijit/MenuItem",
                     "qpid/common/footer"
-                    ], function(parser, query, User, ConsoleHelper, 
Management, util, treeView, controller, updater){
+                    ], function(parser, query, ConsoleHelper, Management, 
util, treeView, controller, updater, entities, registry, dom){
                         parser.parse();
                         qpidManagementHelper = ConsoleHelper;
                         management = new Management("",util.xhrErrorHandler);
-                        management.init(function()
+                        management.authenticate().then(function(data)
                         {
-                            
updater.registerUpdateIntervalListener(management.userPreferences);
-                            qpidManagementHelper.management = management;
-                            User.getUserAndUpdateUI(management);
-                            controller.init(management);
-                            treeView.create(getContextPath() + 
'service/structure', management, query('div[qpid-type="treeView"]')[0]);
-                            dijit.Tooltip.defaultPosition = ["after-centered", 
"below-centered"];
+                          if(data.user)
+                          {
+                            var userName = entities.encode(String(data.user));
+                            var controlButton = 
registry.byId("authenticatedUserControls");
+                            if (controlButton)
+                            {
+                              controlButton.set("label", userName);
+                            }
+                            dom.byId("authenticatedUser").innerHTML = userName;
+                            dom.byId("login").style.display = "inline";
+                            management.init(function()
+                            {
+                              
updater.registerUpdateIntervalListener(management.userPreferences);
+                              qpidManagementHelper.management = management;
+                              controller.init(management);
+                              treeView.create(getContextPath() + 
'service/structure', management, query('div[qpid-type="treeView"]')[0]);
+                              dijit.Tooltip.defaultPosition = 
["after-centered", "below-centered"];
+                            });
+                          }
+                          else
+                          {
+                            alert("User identifier is not found! 
Re-authenticate!");
+                            window.location = "logout";
+                          }
                         });
                     });
     </script>

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
 Fri Jan  8 16:55:50 2016
@@ -24,10 +24,12 @@ define(["dojo/_base/lang",
         "dojo/io-query",
         "dojo/json",
         "dojo/promise/Promise",
+        "dojo/Deferred",
+        "qpid/sasl/Authenticator",
         "qpid/common/metadata",
         "qpid/common/timezone",
         "qpid/management/UserPreferences"],
-  function (lang, array, xhr, ioQuery, json, Promise, Metadata, Timezone, 
UserPreferences)
+  function (lang, array, xhr, ioQuery, json, Promise, Deferred, sasl, 
Metadata, Timezone, UserPreferences)
   {
 
     function shallowCopy(source, target, excludes)
@@ -482,5 +484,62 @@ define(["dojo/_base/lang",
         this.userPreferences.load(callback, callback);
     };
 
+    var saslServiceUrl = "service/sasl";
+
+    Management.prototype.getSaslStatus = function()
+    {
+        return this.get({url: saslServiceUrl});
+    }
+
+    Management.prototype.sendSaslResponse = function(response)
+    {
+        return this.submit({
+                              url: saslServiceUrl,
+                              data: response,
+                              headers: {},
+                              method: "POST"
+                           });
+    };
+
+    Management.prototype.authenticate = function(forceAuthentication)
+    {
+        var that = this;
+        var deferred = new Deferred();
+        var successCallback = function(data)
+                              {
+                                that.getSaslStatus().then(function(saslData)
+                                                          {
+                                                            if (saslData.user)
+                                                            {
+                                                                
deferred.resolve(saslData);
+                                                            }
+                                                            else
+                                                            {
+                                                                
deferred.reject({message: "User identifier is not found!"
+                                                                               
           + " Authentication failed!"});
+                                                            }
+                                                          },
+                                                          failureCallback);
+                              };
+        var failureCallback = function(data)
+                              {
+                                deferred.reject(data);
+                              };
+        this.getSaslStatus().then(function(data)
+                                             {
+                                                if (data.user && 
!forceAuthentication)
+                                                {
+                                                    deferred.resolve(data);
+                                                }
+                                                else
+                                                {
+                                                    
sasl.authenticate(data.mechanisms, that).then(successCallback,
+                                                                               
                   failureCallback);
+                                                }
+                                             },
+                                             failureCallback);
+        return deferred.promise;
+    };
+
     return Management;
   });

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/Authenticator.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/Authenticator.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/Authenticator.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/Authenticator.js
 Fri Jan  8 16:55:50 2016
@@ -18,71 +18,14 @@
  * under the License.
  *
  */
-define(["dojo/_base/lang"], function (lang)
+define(["dojo/_base/lang", "dojo/Deferred", "dojo/json"], function (lang, 
Deferred, json)
 {
-    var saslServiceUrl = "service/sasl";
-    var errorHandler = function errorHandler(error)
-    {
-        if (error.response)
-        {
-            if(error.response.status == 401)
-            {
-                alert("Authentication Failed");
-            }
-            else if(error.response.status == 403)
-            {
-                alert("Authorization Failed");
-            }
-            else
-            {
-                alert(error.message);
-            }
-        }
-        else
-        {
-            alert(error.message ? error.message : error);
-        }
-    }
-
-    var authenticate = function (management, saslClient, data, 
authenticationSuccessCallback, authenticationFailureCallback)
-    {
-        var response = null;
-        try
-        {
-            response = saslClient.getResponse(data);
-        }
-        catch(e)
-        {
-            authenticationFailureCallback(e);
-            return;
-        }
-
-        if (saslClient.isComplete())
-        {
-            authenticationSuccessCallback();
-        }
-        else
-        {
-            management.submit({
-                                  url: saslServiceUrl,
-                                  data: response,
-                                  headers: {},
-                                  method: "POST"
-                              }).then(function (challenge)
-                                      {
-                                        authenticate(management,
-                                                     saslClient,
-                                                     challenge,
-                                                     
authenticationSuccessCallback,
-                                                     
authenticationFailureCallback);
-                                      },
-                                      authenticationFailureCallback);
-        }
-    }
 
-    var loadSaslClients = function loadSaslClients(management, 
availableMechanisms, saslClients, onLastLoaded)
+    var loadSaslClients = function loadSaslClients(availableMechanisms, 
management, onLastLoaded, errorHandler)
     {
         var mechanisms = lang.clone(availableMechanisms);
+        var saslClients = [];
+
         var handleMechanisms = function handleMechanisms()
         {
             if (mechanisms.length == 0)
@@ -91,109 +34,95 @@ define(["dojo/_base/lang"], function (la
             }
             else
             {
-                loadSaslClients(management, mechanisms, saslClients, 
onLastLoaded);
+                loadSaslClient();
             }
         }
 
-        var mechanism = mechanisms.shift();
-        if (mechanism)
+        var loadSaslClient = function loadSaslClient()
         {
-          var url = "qpid/sasl/" + encodeURIComponent(mechanism.toLowerCase()) 
+ "/SaslClient";
-          management.get({url:"js/" + url + ".js",
-                          handleAs: "text",
-                          headers: { "Content-Type": "text/plain"}})
-                    .then(function(data)
-                          {
-                              require([url],
-                                      function(SaslClient)
-                                      {
-                                          try
-                                          {
-                                              var saslClient = new 
SaslClient();
-                                              
saslClient.initialized().then(function()
-                                                                            {
-                                                                               
 saslClients.push(saslClient);
-                                                                               
 handleMechanisms();
-                                                                            },
-                                                                            
function(e)
-                                                                            {
-                                                                               
 errorHandler("Unexpected error on " +
-                                                                               
              "loading of mechanism " +
-                                                                               
              mechanism + ": ", e);
-                                                                               
 handleMechanisms();
-                                                                            }
-                                                                           );
-
-                                          }
-                                          catch(e)
+            var mechanism = mechanisms.shift();
+            if (mechanism)
+            {
+              var url = "qpid/sasl/" + 
encodeURIComponent(mechanism.toLowerCase()) + "/SaslClient";
+              management.get({url:"js/" + url + ".js",
+                              handleAs: "text",
+                              headers: { "Content-Type": "text/plain"}})
+                        .then(function(data)
+                              {
+                                  require([url],
+                                          function(SaslClient)
                                           {
-                                              errorHandler("Unexpected error 
on loading of mechanism " + mechanism +
-                                                           ": ", e);
-                                              handleMechanisms();
-                                          }
-                                      });
-                          },
-                          function(data)
-                          {
-                              if (data.response.status != 404 )
+                                              try
+                                              {
+                                                  var saslClient = new 
SaslClient();
+                                                  saslClients.push(saslClient);
+                                              }
+                                              catch(e)
+                                              {
+                                                  console.error("Unexpected 
error on loading of mechanism " +
+                                                                mechanism + ": 
" + json.stringify(e));
+                                              }
+                                              finally
+                                              {
+                                                handleMechanisms();
+                                              }
+                                          });
+                              },
+                              function(data)
                               {
-                                  errorHandler("Unexpected error on loading 
mechanism " + mechanism + ": ", data);
+                                  if (data.response.status != 404 )
+                                  {
+                                      console.error("Unexpected error on 
loading mechanism " +
+                                                   mechanism +
+                                                   ": " +
+                                                   json.stringify(data));
+                                  }
+                                  handleMechanisms();
                               }
-                              handleMechanisms();
-                          }
-                    );
-        }
-        else
-        {
-            handleMechanisms();
+                        );
+            }
+            else
+            {
+                handleMechanisms();
+            }
         }
+
+        handleMechanisms();
     }
 
     return {
-              authenticate:   function(management, 
authenticationSuccessCallback)
-                              {
-                                  management.get({url: saslServiceUrl})
-                                            .then(function(data)
-                                                  {
-                                                     var saslClients = [];
-                                                     
loadSaslClients(management,
-                                                                     
data.mechanisms,
-                                                                     
saslClients,
-                                                                     function 
(saslClients)
-                                                                     {
-                                                                        
saslClients.sort(function(c1, c2)
-                                                                               
          {
-                                                                               
            return c2.getPriority() -
-                                                                               
                   c1.getPriority();
-                                                                               
          });
-                                                                        if 
(saslClients.length > 0)
-                                                                        {
-                                                                          var 
saslClient = saslClients[0];
-                                                                          
dojo.when(saslClient.getCredentials())
-                                                                              
.then(function(data)
-                                                                               
     {
-                                                                               
         authenticate(management,
-                                                                               
                      saslClient,
-                                                                               
                      data,
-                                                                               
                      authenticationSuccessCallback,
-                                                                               
                      errorHandler);
-                                                                               
     },
-                                                                               
     errorHandler);
-                                                                        }
-                                                                        else
-                                                                        {
-                                                                          
errorHandler("No SASL client available for " +
-                                                                               
        data.mechanisms);
-                                                                        }
-                                                                     });
-                                                  },
-                                                  errorHandler);
-                              },
-              getUser:        function(management, 
authenticationSuccessCallback)
+              authenticate:   function(mechanisms, management)
                               {
-                                  management.get({url: saslServiceUrl})
-                                            
.then(authenticationSuccessCallback,
-                                                  errorHandler);
+                                   var deferred = new Deferred();
+                                   var successCallback = function(data)
+                                                         {
+                                                           
deferred.resolve(data);
+                                                         };
+                                   var failureCallback = function(data)
+                                                         {
+                                                           
deferred.reject(data);
+                                                         };
+                                   loadSaslClients(mechanisms,
+                                                   management,
+                                                   function (saslClients)
+                                                   {
+                                                      if (saslClients.length > 
0)
+                                                      {
+                                                        
saslClients.sort(function(c1, c2)
+                                                                         {
+                                                                           
return c2.getPriority() - c1.getPriority();
+                                                                         });
+                                                        
saslClients[0].authenticate(management).then(successCallback,
+                                                                               
                      failureCallback);
+                                                      }
+                                                      else
+                                                      {
+                                                        
failureCallback({message:"No SASL client available for " +
+                                                                               
       data.mechanisms});
+                                                      }
+                                                   },
+                                                   failureCallback);
+                                   return deferred.promise;
                               }
            };
 });

Added: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/CredentialBasedSaslClient.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/CredentialBasedSaslClient.js?rev=1723762&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/CredentialBasedSaslClient.js
 (added)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/CredentialBasedSaslClient.js
 Fri Jan  8 16:55:50 2016
@@ -0,0 +1,126 @@
+/*
+ * 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/declare",
+        "dojo/_base/lang",
+        "dojox/encoding/base64",
+        "dojo/json",
+        "dojo/request/script",
+        "dojox/uuid/generateRandomUuid",
+        "dojo/Deferred",
+        "qpid/sasl/SaslClient"],
+       function(declare, lang, base64, json, script, uuid, Deferred, 
SaslClient)
+       {
+         return declare("qpid.sasl.CredentialBasedSaslClient",
+                        [SaslClient],
+                        {
+                            getResponse:      function(challenge)
+                                              {
+                                                  // summary:
+                                                  //        Generates response 
for given challenge
+                                                  // description:
+                                                  //        Handles given 
challenge represented as
+                                                  //       JSON object and 
generates response in
+                                                  //       JSON format.
+                                                  //       Method can be 
called multiple times
+                                                  //       for different 
challenges.
+                                                  //       Throws exception on 
various errors or
+                                                  //       authentication 
failures.
+                                                  // returns: JSON objectSa
+                                                  throw new 
TypeError("abstract");
+                                              },
+                            isComplete:       function()
+                                              {
+                                                  // summary:
+                                                  //        Returns true when 
no more response generation is required.
+                                                  // description:
+                                                  //        Returns true when 
challenge handling is complete
+                                                  // returns: boolean
+                                                  throw new 
TypeError("abstract");
+                                              },
+                            getCredentials:   function()
+                                              {
+                                                  // summary:
+                                                  //        Returns initial 
credentials
+                                                  //       to start 
authentication
+                                                  // description:
+                                                  //        Provides initial 
credentials as Promise or
+                                                  //        JSON object to 
start authentication process
+                                                  // returns: promise
+                                                  throw new 
TypeError("abstract");
+                                              },
+                            toString:         function()
+                                              {
+                                                  return "[object 
CredentialBasedSaslClient]";
+                                              },
+                            authenticate:     function (management)
+                                              {
+                                                  var deferred = new 
Deferred();
+                                                  var successCallback = 
function(data)
+                                                                        {
+                                                                          
deferred.resolve(data);
+                                                                        };
+                                                  var failureCallback = 
function(data)
+                                                                        {
+                                                                          
deferred.reject(data);
+                                                                        };
+
+                                                  var saslClient = this;
+                                                  var processChallenge = 
function processChallenge(challenge)
+                                                  {
+                                                    if 
(saslClient.isComplete())
+                                                    {
+                                                        successCallback(true);
+                                                        return;
+                                                    }
+
+                                                    var response = null;
+                                                    try
+                                                    {
+                                                        response = 
saslClient.getResponse(challenge);
+                                                    }
+                                                    catch(e)
+                                                    {
+                                                        failureCallback(e);
+                                                        return;
+                                                    }
+
+                                                    if 
(saslClient.isComplete() && (response == null || response == undefined))
+                                                    {
+                                                        successCallback(true);
+                                                    }
+                                                    else
+                                                    {
+                                                        
management.sendSaslResponse(response)
+                                                                  
.then(function(challenge)
+                                                                        {
+                                                                          
processChallenge(challenge);
+                                                                        });
+                                                    }
+                                                  };
+
+                                                  
dojo.when(this.getCredentials()).then(function(data)
+                                                                               
         {
+                                                                               
            processChallenge(data);
+                                                                               
         },
+                                                                               
         failureCallback);
+                                                  return deferred.promise;
+                                              }
+                        });
+       });

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/SaslClient.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/SaslClient.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/SaslClient.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/SaslClient.js
 Fri Jan  8 16:55:50 2016
@@ -38,28 +38,15 @@ define(["dojo/_base/lang"],
                                                       // returns: string
                                                       throw new 
TypeError("abstract");
                                                   },
-                                getResponse:      function(challenge)
+                                authenticate:     function(management)
                                                   {
                                                       // summary:
-                                                      //        Generates 
response for given challenge
+                                                      //        Authenticates 
and invokes callback function
+                                                      //                       
           on successful authentication
                                                       // description:
-                                                      //        Handles given 
challenge represented as
-                                                      //       JSON object and 
generates response in
-                                                      //       JSON format.
-                                                      //       Method can be 
called multiple times
-                                                      //       for different 
challenges.
-                                                      //       Throws 
exception on various errors or
-                                                      //       authentication 
failures.
-                                                      // returns: JSON objectSa
-                                                      throw new 
TypeError("abstract");
-                                                  },
-                                isComplete:       function()
-                                                  {
-                                                      // summary:
-                                                      //        Returns true 
when response for last challenge is generated.
-                                                      // description:
-                                                      //        Returns true 
when challenge handling is complete
-                                                      // returns: boolean
+                                                      //        Performs SASL 
authentication as required by algorithm
+                                                      //        and returns 
promise
+                                                      // returns: promise
                                                       throw new 
TypeError("abstract");
                                                   },
                                 getPriority:      function()
@@ -78,28 +65,6 @@ define(["dojo/_base/lang"],
                                                       // returns: string
                                                       //        Returns 
`[object SaslClient]`.
                                                       return "[object 
SaslClient]";
-                                                  },
-                                initialized:      function()
-                                                  {
-                                                      // summary:
-                                                      //        Finish 
instance initialization.
-                                                      // description:
-                                                      //        Method must be 
called once before
-                                                      //        getResponse in 
order to finish initialization.
-                                                      //        
dojo/promise/Promise is returned
-                                                      // returns: promise
-                                                      throw new 
TypeError("abstract");
-                                                  },
-                                getCredentials:   function()
-                                                  {
-                                                      // summary:
-                                                      //        Returns 
initial credentials
-                                                      //       to start 
authentication
-                                                      // description:
-                                                      //        Provides 
initial credentials as Promise or
-                                                      //        JSON object to 
start authentication process
-                                                      // returns: promise
-                                                      throw new 
TypeError("abstract");
                                                   }
                                 });
        });

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/ShaSaslClient.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/ShaSaslClient.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/ShaSaslClient.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/ShaSaslClient.js
 Fri Jan  8 16:55:50 2016
@@ -24,7 +24,7 @@ define(["dojo/_base/declare",
         "dojo/request/script",
         "dojox/uuid/generateRandomUuid",
         "dojo/Deferred",
-        "qpid/sasl/SaslClient",
+        "qpid/sasl/CredentialBasedSaslClient",
         "qpid/sasl/UsernamePasswordProvider"],
         function(declare, lang, base64, json, script, uuid, Deferred, 
SaslClient, UsernamePasswordProvider)
         {
@@ -101,7 +101,7 @@ define(["dojo/_base/declare",
           var digest = null;
           var hmac = null;
           var gs2_header= "n,,";
-          var deferred = new Deferred();
+          var initialized = new Deferred();
           return declare("qpid.sasl.ShaSaslClient",
                          [SaslClient],
                          {
@@ -123,28 +123,27 @@ define(["dojo/_base/declare",
                                                         
script.get("js/crypto-js/enc-base64-min.js").then(
                                                           function()
                                                           {
-                                                            
deferred.resolve("initialized");
+                                                            
initialized.resolve(true);
                                                           },
                                                           function(error)
                                                           {
-                                                            
deferred.reject("initialization failure: " + error);
+                                                            
initialized.reject(error);
                                                             
scriptLoadError(error);
                                                           }
                                                          );
                                                       },
                                                       function(error)
                                                       {
-                                                        
deferred.reject("error");
+                                                        
initialized.reject("error");
                                                         scriptLoadError(error);
                                                       }
                                                     );
                                                  },
-                             initialized:        function() { return 
deferred.promise; },
                              getMechanismName:   function() { return 
this._mechanism;},
                              isComplete:         function() { return 
this._state == "completed";},
                              getResponse:        function(data)
                                                  {
-                                                    if 
(deferred.promise.isResolved())
+                                                    if 
(initialized.promise.isResolved())
                                                     {
                                                         return 
this._getResponse(data);
                                                     }
@@ -242,7 +241,25 @@ define(["dojo/_base/declare",
                              toString:           function() { return 
"[SaslClient" + this.getMechanismName() + "]";},
                              getCredentials:     function()
                                                  {
-                                                    return 
UsernamePasswordProvider.get();
+                                                    var credentials = new 
Deferred();
+                                                    var successHandler = 
function(data)
+                                                                         {
+                                                                            
credentials.resolve(data);
+                                                                         };
+                                                    var errorHandler = 
function(data)
+                                                                       {
+                                                                        
credentials.reject(data)
+                                                                       };
+                                                    
initialized.then(function(initData)
+                                                                     {
+                                                                       
dojo.when(UsernamePasswordProvider.get())
+                                                                           
.then(function(data)
+                                                                               
  {
+                                                                               
    successHandler(data);
+                                                                               
  },
+                                                                               
  errorHandler);
+                                                                     
},errorHandler);
+                                                    return credentials.promise;
                                                  }
                  }
           );

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/UsernamePasswordProvider.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/UsernamePasswordProvider.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/UsernamePasswordProvider.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/UsernamePasswordProvider.js
 Fri Jan  8 16:55:50 2016
@@ -25,6 +25,14 @@ define(["dijit/registry",
             return {
                         get: function()
                              {
+                                 if (registry.byId("username") == null)
+                                 {
+                                    // it is not a login page
+                                    // redirecting to login.html
+                                    window.location = "login.html";
+                                    return;
+                                 }
+
                                  return {
                                             username: 
registry.byId("username").value,
                                             password: 
registry.byId("password").value

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5-hex/SaslClient.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5-hex/SaslClient.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5-hex/SaslClient.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5-hex/SaslClient.js
 Fri Jan  8 16:55:50 2016
@@ -28,11 +28,10 @@ define(["dojo/_base/declare",
             return declare("qpid.sasl.SaslClientCramMD5Hex", 
[SaslClientCramMD5],{
                  getMechanismName:   function() {return "CRAM-MD5-HEX";},
                  getPriority:        function() {return 2;},
-                 _initial:           function(data)
+                 initialize:         function(username, password)
                                      {
-                                        var hashedPassword = 
MD5(data.password, digestsBase.outputTypes.Hex);
-                                        this._password = hashedPassword;
-                                        this._username = data.username;
+                                        var hashedPassword = MD5(password, 
digestsBase.outputTypes.Hex);
+                                        this.inherited(arguments, [username, 
hashedPassword]);
                                      },
                  toString:           function() { return 
"[SaslClientCramMD5Hex]";}
             });

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5/SaslClient.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5/SaslClient.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5/SaslClient.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/cram-md5/SaslClient.js
 Fri Jan  8 16:55:50 2016
@@ -22,18 +22,14 @@ define(["dojo/_base/declare",
         "dojox/encoding/base64",
         "dojox/encoding/digests/_base",
         "dojox/encoding/digests/MD5",
-        "dojo/Deferred",
-        "qpid/sasl/SaslClient",
+        "qpid/sasl/CredentialBasedSaslClient",
         "qpid/sasl/UsernamePasswordProvider"],
-       function(declare, lang, base64, digestsBase, MD5, Deferred, SaslClient, 
UsernamePasswordProvider)
+       function(declare, lang, base64, digestsBase, MD5, SaslClient, 
UsernamePasswordProvider)
        {
-           var deferred = new Deferred();
-           deferred.resolve("initialized");
            return declare("qpid.sasl.SaslClientCramMD5",
                           [SaslClient],
                           {
                               _state:            "initial",
-                              initialized:       function() { return 
deferred.promise;},
                               getMechanismName:  function() {return 
"CRAM-MD5";},
                               isComplete:        function() {return 
this._state == "completed";},
                               getPriority:       function() {return 3;},
@@ -41,7 +37,7 @@ define(["dojo/_base/declare",
                                                  {
                                                     if (this._state == 
"initial")
                                                     {
-                                                      this._initial(data);
+                                                      
this.initialize(data.username, data.password);
                                                       this._state = 
"initiated";
                                                       return {
                                                                  mechanism: 
this.getMechanismName()
@@ -65,35 +61,30 @@ define(["dojo/_base/declare",
                                                       var id = data.id;
 
                                                       var response = 
base64.encode(this._encodeUTF8( digest ));
-                                                      this._state = 
"generated";
+                                                      this._state = 
"completed";
                                                       return {
                                                                  id: id,
                                                                  response: 
response
                                                              };
                                                     }
-                                                    else if (this._state == 
"generated")
-                                                    {
-                                                      this._state = 
"completed";
-                                                      return null;
-                                                    }
                                                     else
                                                     {
                                                       throw {message: 
"Unexpected state '" + this._state +
                                                                       ". 
Cannot handle challenge!"};
                                                     }
-                                                             },
-                              toString:           function() { return 
"[SaslClientCramMD5]";},
-                              getCredentials:     function()
-                                                  {
+                                                 },
+                              toString:          function() { return 
"[SaslClientCramMD5]";},
+                              getCredentials:    function()
+                                                 {
                                                       return 
UsernamePasswordProvider.get();
-                                                  },
-                              _initial   :        function(data)
-                                                  {
-                                                     this._password = 
data.password;
-                                                     this._username = 
data.username;
-                                                  },
-                              _encodeUTF8:        function (str)
-                                                  {
+                                                 },
+                              initialize   :     function(username, password)
+                                                 {
+                                                     this._password = password;
+                                                     this._username = username;
+                                                 },
+                              _encodeUTF8:       function (str)
+                                                 {
                                                       var byteArray = [];
                                                       for (var i = 0; i < 
str.length; i++)
                                                       {
@@ -111,7 +102,7 @@ define(["dojo/_base/declare",
                                                           }
                                                       }
                                                       return byteArray;
-                                                  }
+                                                 }
             });
        }
 );
\ No newline at end of file

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/plain/SaslClient.js
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/plain/SaslClient.js?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/plain/SaslClient.js
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/sasl/plain/SaslClient.js
 Fri Jan  8 16:55:50 2016
@@ -20,17 +20,13 @@
 define(["dojo/_base/declare",
         "dojo/_base/lang",
         "dojox/encoding/base64",
-        "dojo/Deferred",
-        "qpid/sasl/SaslClient",
+        "qpid/sasl/CredentialBasedSaslClient",
         "qpid/sasl/UsernamePasswordProvider"],
-       function(declare, lang, base64, Deferred, SaslClient, 
UsernamePasswordProvider)
+       function(declare, lang, base64, SaslClient, UsernamePasswordProvider)
        {
-            var deferred = new Deferred();
-            deferred.resolve("initialized");
             return declare("qpid.sasl.SaslClientPlain", [SaslClient], {
                  _state:             "initial",
                  getMechanismName:   function() {return "PLAIN";},
-                 initialized:        function() { return deferred.promise; },
                  isComplete:         function() {return this._state == 
"completed";},
                  getPriority:        function() {return 1;},
                  getResponse:        function(challenge)
@@ -41,17 +37,12 @@ define(["dojo/_base/declare",
                                                                     
.concat([0])
                                                                     
.concat(this._encodeUTF8(challenge.password));
                                              var plainResponse = 
base64.encode(responseArray);
-                                             this._state = "generated"
+                                             this._state = "completed"
                                              return  {
                                                          mechanism: 
this.getMechanismName(),
                                                          response: 
plainResponse
                                                      };
                                          }
-                                         else if (this._state == "generated")
-                                         {
-                                             this._state = "completed";
-                                             return null;
-                                         }
                                          else
                                          {
                                              throw {message: "Unexpected state 
'" + this._state +

Modified: 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/login.html
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/login.html?rev=1723762&r1=1723761&r2=1723762&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/login.html
 (original)
+++ 
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/login.html
 Fri Jan  8 16:55:50 2016
@@ -80,19 +80,48 @@
             <div data-dojo-type="dijit.form.Form" method="POST" id="loginForm">
                 <script type="dojo/on" data-dojo-event="submit" 
data-dojo-args="e">
                     e.preventDefault()
-                    if(this.validate()){
-                        
require(["qpid/sasl/Authenticator","qpid/management/Management"], 
function(sasl, Management){
-                            var management = new Management();
-                            var redirectIfAuthenticated = function 
redirectIfAuthenticated(){
-                                sasl.getUser(management, function(data){
-                                    if(data.user){
-                                        window.location = "index.html";
-                                    }
-                                });
-                            };
+                    if(this.validate())
+                    {
+                        require(["qpid/management/Management", "dojo/json"],
+                                function(Management, json)
+                                {
+                                    var redirectIfAuthenticated = function 
redirectIfAuthenticated(data)
+                                    {
+                                        if(data.user)
+                                        {
 
-                            sasl.authenticate(management, 
redirectIfAuthenticated);
-                        });
+                                            window.location = "index.html";
+                                        }
+                                        else
+                                        {
+                                            alert("User identifier is not 
found! Authentication failed!");
+                                        }
+                                    };
+                                    var errorHandler = function 
errorHandler(error)
+                                    {
+                                        if (error.response)
+                                        {
+                                            if(error.response.status == 401)
+                                            {
+                                                alert("Authentication Failed");
+                                            }
+                                            else if(error.response.status == 
403)
+                                            {
+                                                alert("Authorization Failed");
+                                            }
+                                            else
+                                            {
+                                                alert(error.message);
+                                            }
+                                        }
+                                        else
+                                        {
+                                            alert(error.message ? 
error.message : "Authentication failed:" + json.stringify(error));
+                                        }
+                                    };
+                                    var management = new Management("", 
errorHandler);
+                                    
management.authenticate(true).then(redirectIfAuthenticated);
+                                });
                     }
                     return false;
                 </script>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to