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]
