You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2016/01/08 17:55:50 UTC
svn commit: r1723762 - in
/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources: ./
js/qpid/authorization/ js/qpid/management/ js/qpid/sasl/
js/qpid/sasl/cram-md5-hex/ js/qpid/sasl/cram-md5/ js/qpid/sasl/plain/
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org