diff options
author | Alex Rudyy <orudyy@apache.org> | 2015-02-17 14:37:53 +0000 |
---|---|---|
committer | Alex Rudyy <orudyy@apache.org> | 2015-02-17 14:37:53 +0000 |
commit | 9b0b08e1bf468b07e95637d51d53a0a5baf77f67 (patch) | |
tree | 6909443956b2ccfa20d2d3654bbeeb4b23527b15 | |
parent | e15f00f8565cccda1e63869ca7c1a64d16af29ae (diff) | |
download | qpid-python-9b0b08e1bf468b07e95637d51d53a0a5baf77f67.tar.gz |
QPID-6364: Introduce attribute annotation property 'secureValueFilter' to mask only secure values matching the filter.
Set secureValueFilter on keystores/trustores to mask only data URLs.
Stop applying oversize when actuals attributes are requested.
Update corresponding keystore/truststore UI tp show actual values for non data URLs.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1660391 13f79535-47bb-0310-9956-ffa450edef68
16 files changed, 279 insertions, 155 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java index b9a4b32acb..3ec60604c3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java @@ -44,6 +44,7 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; +import java.util.regex.Pattern; import javax.security.auth.Subject; @@ -1136,8 +1137,9 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im if(attr != null && (attr.isAutomated() || attr.isDerived())) { Object value = attr.getValue((X)this); - if(value != null && attr.isSecure() && - !SecurityManager.isSystemProcess()) + Pattern secureValueFilter = attr.getSecureValueFilter(); + if(value != null && attr.isSecure() && !SecurityManager.isSystemProcess() && + (secureValueFilter == null || secureValueFilter.matcher(value.toString()).matches())) { return SECURE_VALUES.get(value.getClass()); } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java index 9fca898dc0..342b7ac0ba 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java @@ -28,6 +28,7 @@ import java.lang.reflect.Type; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.regex.Pattern; import org.apache.log4j.Logger; @@ -37,6 +38,7 @@ public class ConfiguredAutomatedAttribute<C extends ConfiguredObject, T> extend private final ManagedAttribute _annotation; private final Method _validValuesMethod; + private final Pattern _secureValuePattern; ConfiguredAutomatedAttribute(final Class<C> clazz, final Method getter, @@ -53,6 +55,16 @@ public class ConfiguredAutomatedAttribute<C extends ConfiguredObject, T> extend validValuesMethod = getValidValuesMethod(validValue, clazz); } _validValuesMethod = validValuesMethod; + + String secureValueFilter = _annotation.secureValueFilter(); + if (secureValueFilter == null || "".equals(secureValueFilter)) + { + _secureValuePattern = null; + } + else + { + _secureValuePattern = Pattern.compile(secureValueFilter); + } } private Method getValidValuesMethod(final String validValue, final Class<C> clazz) @@ -140,6 +152,11 @@ public class ConfiguredAutomatedAttribute<C extends ConfiguredObject, T> extend return _annotation.description(); } + public Pattern getSecureValueFilter() + { + return _secureValuePattern; + } + public Collection<String> validValues() { if(_validValuesMethod != null) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java index 71488edb8c..20fd0264c6 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredDerivedAttribute.java @@ -21,10 +21,12 @@ package org.apache.qpid.server.model; import java.lang.reflect.Method; +import java.util.regex.Pattern; public class ConfiguredDerivedAttribute<C extends ConfiguredObject, T> extends ConfiguredObjectAttribute<C,T> { private final DerivedAttribute _annotation; + private final Pattern _secureValuePattern; ConfiguredDerivedAttribute(final Class<C> clazz, final Method getter, @@ -32,6 +34,16 @@ public class ConfiguredDerivedAttribute<C extends ConfiguredObject, T> extends { super(clazz, getter); _annotation = annotation; + + String secureValueFilter = _annotation.secureValueFilter(); + if (secureValueFilter == null || "".equals(secureValueFilter)) + { + _secureValuePattern = null; + } + else + { + _secureValuePattern = Pattern.compile(secureValueFilter); + } } public boolean isAutomated() @@ -72,4 +84,10 @@ public class ConfiguredDerivedAttribute<C extends ConfiguredObject, T> extends return _annotation.description(); } + @Override + public Pattern getSecureValueFilter() + { + return _secureValuePattern; + } + } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java index 73b7839a8e..4f15d612f9 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectAttribute.java @@ -22,6 +22,7 @@ package org.apache.qpid.server.model; import java.lang.reflect.Method; import java.lang.reflect.Type; +import java.util.regex.Pattern; public abstract class ConfiguredObjectAttribute<C extends ConfiguredObject, T> extends ConfiguredObjectAttributeOrStatistic<C,T> { @@ -49,6 +50,8 @@ public abstract class ConfiguredObjectAttribute<C extends ConfiguredObject, T> e public abstract String getDescription(); + public abstract Pattern getSecureValueFilter(); + public T convert(final Object value, C object) { final AttributeValueConverter<T> converter = getConverter(); diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java index e5c17a17e4..6de6bf25c3 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/DerivedAttribute.java @@ -32,4 +32,5 @@ public @interface DerivedAttribute boolean persist() default false; String description() default ""; boolean oversize() default false; + String secureValueFilter() default ""; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java index 05b2c610ba..2f96299703 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java @@ -37,4 +37,5 @@ public @interface ManagedAttribute String[] validValues() default {}; boolean oversize() default false; String oversizedAltText() default ""; + String secureValueFilter() default ""; } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java index 0607f4b3d3..8b6a83d443 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/FileKeyStore.java @@ -62,7 +62,7 @@ public interface FileKeyStore<X extends FileKeyStore<X>> extends KeyStore<X> @ManagedAttribute(defaultValue = "${this:path}") String getDescription(); - @ManagedAttribute( mandatory = true, secure = true, oversize = true, oversizedAltText = OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT) + @ManagedAttribute( mandatory = true, secure = true, oversize = true, oversizedAltText = OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT, secureValueFilter = "^data\\:.*") String getStoreUrl(); @DerivedAttribute diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/NonJavaKeyStore.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/NonJavaKeyStore.java index 78509182b5..f239b83f27 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/NonJavaKeyStore.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/NonJavaKeyStore.java @@ -31,7 +31,7 @@ public interface NonJavaKeyStore<X extends NonJavaKeyStore<X>> extends KeyStore< @ManagedAttribute(defaultValue = "${this:subjectName}") String getDescription(); - @ManagedAttribute( mandatory = true, secure = true, oversize = true, oversizedAltText = OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT ) + @ManagedAttribute( mandatory = true, secure = true, oversize = true, oversizedAltText = OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT, secureValueFilter = "^data\\:.*") String getPrivateKeyUrl(); @ManagedAttribute( mandatory = true, oversize = true, oversizedAltText = OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT ) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 331b50ea7c..d02b85df7f 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -169,7 +169,7 @@ public class ConfiguredObjectToMapConverter value = confObject.getAttribute(name); } - if(attribute.isOversized() && !extractAsConfig) + if(attribute.isOversized() && !extractAsConfig && !useActualValues) { String valueString = String.valueOf(value); if(valueString.length() > oversizeThreshold) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js index f603c96ff3..767191bcd0 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js @@ -44,6 +44,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe fileReaderSupported: window.FileReader ? true : false, displayWarningWhenFileReaderUnsupported: false, isDebug: false, + uploaded: false, buildRendering: function() { @@ -127,6 +128,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe }, _fileClearButtonClicked: function(event) { + this.uploaded = false; this.uploader.reset(); this.set("value", this._resetValue); }, @@ -134,20 +136,17 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe { var serverPathValue = this.resourceLocation.get("value") || this._resetValue; this.set("value", serverPathValue); + if (this.uploaded ) + { + this.uploaded = !serverPathValue; + } }, _setValueAttr: function(newValue, priorityChange) { - var isDataUrl = newValue && newValue.indexOf("data:") == 0; + var isDataUrl = this.uploaded || ( newValue && newValue.indexOf("data:") == 0 ); if (isDataUrl) { - this.uploadData.style.display = "block"; - this.selectedFileStatus.className = "loadedIcon"; - this.selectedFile.innerHTML = this.selectedFileName || "uploaded data"; - this.resourceLocation.set("value", ""); - this.resourceLocation.setDisabled(true); - this.resourceLocation.set("required", false); - this.clearButton.setDisabled(false); - this.selectedFileStatus.className = "loadedIcon"; + this._initUploaded(true); } else { @@ -172,6 +171,25 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe _setPlaceHolderAttr: function(newValue) { this.resourceLocation.set("placeHolder", newValue); + }, + _setUploadedAttr: function(uploaded) + { + this.uploaded = uploaded; + this._initUploaded(uploaded); + }, + _initUploaded: function(uploaded) + { + if (uploaded) + { + this.uploadData.style.display = "block"; + this.selectedFileStatus.className = "loadedIcon"; + this.selectedFile.innerHTML = this.selectedFileName || "uploaded data"; + this.resourceLocation.set("value", ""); + this.resourceLocation.setDisabled(true); + this.resourceLocation.set("required", false); + this.clearButton.setDisabled(false); + this.selectedFileStatus.className = "loadedIcon"; + } } } ); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js index 5a42f12870..da37acec82 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js @@ -81,11 +81,11 @@ define(["dojo/_base/lang", show: function(effectiveData) { this.effectiveData = effectiveData; + this._destroyTypeFields(this.containerNode); this.storeForm.reset(); if (effectiveData) { - this._destroyTypeFields(this.containerNode); this._initFields(effectiveData); } this.storeName.set("disabled", effectiveData == null ? false : true); @@ -185,11 +185,6 @@ define(["dojo/_base/lang", { typeUI.show({containerNode:typeFieldsContainer, parent: that, data: that.initialData, effectiveData: that.effectiveData}); util.applyMetadataToWidgets(typeFieldsContainer, category, type); - if (that.effectiveData) - { - typeUI.update(that.effectiveData); - that.effectiveData = undefined; - } } catch(e) { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js index b4c45d8f99..dfe8e5059a 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js @@ -18,30 +18,41 @@ * under the License. * */ -define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"], - function (dom, query, array, registry, util, metadata) +define(["dojo/dom", + "dojo/query", + "dojo/_base/array", + "dijit/registry", + "qpid/common/util", + "qpid/common/metadata", + "dojo/parser", + "dojo/text!store/filekeystore/add.html", + "dojo/domReady!"], + function (dom, query, array, registry, util, metadata, parser, template) { var addKeyStore = { - init: function() - { - }, show: function(data) { var that=this; - util.parseHtmlIntoDiv(data.containerNode, "store/filekeystore/add.html"); - this.containerNode = data.containerNode; + data.containerNode.innerHTML = template; + parser.parse(this.containerNode).then(function(instances) + { + that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); - this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); + if (!window.FileReader) + { + that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; + that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", ""); + } - this.addButton = data.parent.addButton; + if (data.effectiveData) + { + that.update(data.effectiveData); + } - if (!window.FileReader) - { - this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; - this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); - } + util.applyMetadataToWidgets(data.containerNode, "KeyStore", "FileKeyStore"); + }); }, update: function(effectiveData) { @@ -53,28 +64,38 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm if (name in attributes ) { var attribute = attributes[name]; - if (attribute.secure || attribute.oversize) - { - item.set("required", false); - item.set("placeHolder", effectiveData[name]); - } - else + var value = effectiveData[name]; + if (value) { - item.set("value", effectiveData[name]); + if (attribute.secure) + { + if (!/^\*+/.test(value) ) + { + item.set("value", value); + } + else + { + item.set("required", false); + if (name == "storeUrl") + { + item.set("uploaded", true) + } + else + { + item.set("placeHolder", value); + } + } + } + else + { + item.set("value", value); + } } } }); } }; - try - { - addKeyStore.init(); - } - catch(e) - { - console.warn(e); - } return addKeyStore; } ); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js index e04ee1a835..5893ce0d2d 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js @@ -18,31 +18,42 @@ * under the License. * */ -define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"], - function (dom, query, array, registry, util, metadata) +define(["dojo/dom", + "dojo/query", + "dojo/_base/array", + "dijit/registry", + "qpid/common/util", + "qpid/common/metadata", + "dojo/parser", + "dojo/text!store/filetruststore/add.html", + "dojo/domReady!"], + function (dom, query, array, registry, util, metadata, parser, template) { var addTrustStore = { - init: function() - { - }, show: function(data) { var that=this; - util.parseHtmlIntoDiv(data.containerNode, "store/filetruststore/add.html"); - this.containerNode = data.containerNode; + data.containerNode.innerHTML = template; + parser.parse(this.containerNode).then(function(instances) + { + that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); - this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); + if (!window.FileReader) + { + // Fall back for IE8/9 which do not support FileReader + that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; + that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", ""); + } - this.addButton = data.parent.addButton; + if (data.effectiveData) + { + that.update(data.effectiveData); + } - if (!window.FileReader) - { - // Fall back for IE8/9 which do not support FileReader - this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; - this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); - } + util.applyMetadataToWidgets(data.containerNode, "TrustStore", "FileTrustStore"); + }); }, update: function(effectiveData) { @@ -54,14 +65,25 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm if (name in attributes ) { var attribute = attributes[name]; - if (attribute.secure || attribute.oversize) - { - item.set("required", false); - item.set("placeHolder", effectiveData[name]); - } - else + var value = effectiveData[name]; + if (value) { - item.set("value", effectiveData[name]); + if (attribute.secure) + { + if (!/^\*+/.test(value) ) + { + item.set("value", value); + } + else + { + item.set("placeHolder", value); + item.set("required", false); + } + } + else + { + item.set("value", value); + } } } }); @@ -69,14 +91,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm } }; - try - { - addTrustStore.init(); - } - catch(e) - { - console.warn(e); - } return addTrustStore; } ); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js index 0d74699d79..5c25ae2cc6 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js @@ -18,64 +18,85 @@ * under the License. * */ -define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata", "qpid/common/ResourceWidget"], - function (dom, query, array, registry, util, metadata) +define(["dojo/dom", + "dojo/query", + "dojo/_base/array", + "dijit/registry", + "qpid/common/util", + "qpid/common/metadata", + "dojo/parser", + "dojo/text!store/nonjavakeystore/add.html", + "qpid/common/ResourceWidget", + "dojo/domReady!"], + function (dom, query, array, registry, util, metadata, parser, template) { var addKeyStore = { - init: function() - { - }, show: function(data) { var that=this; - util.parseHtmlIntoDiv(data.containerNode, "store/nonjavakeystore/add.html"); - - this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); - this.addButton = data.parent.addButton; this.containerNode = data.containerNode; - - if (!window.FileReader) + data.containerNode.innerHTML = template; + parser.parse(this.containerNode).then(function(instances) { - this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; - this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); - } + that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); + + if (!window.FileReader) + { + that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; + that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", ""); + } + + if (data.effectiveData) + { + that.update(data.effectiveData); + } + + util.applyMetadataToWidgets(data.containerNode, "KeyStore", "NonJavaKeyStore"); + }); }, update: function(effectiveData) { - if (effectiveData) - { - var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; - var widgets = registry.findWidgets(this.containerNode); - array.forEach(widgets, function(item) + var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; + var widgets = registry.findWidgets(this.containerNode); + array.forEach(widgets, function(item) + { + var name = item.id.replace("addStore.",""); + if (name in attributes ) { - var name = item.id.replace("addStore.",""); - if (name in attributes ) + var attribute = attributes[name]; + var value = effectiveData[name]; + if (value) { - var attribute = attributes[name]; - if (attribute.oversize || attribute.secure) + if (attribute.secure) { - item.set("required", false); - item.set("placeHolder", effectiveData[name]); + if (!/^\*+/.test(value) ) + { + item.set("value", value); + } + else + { + item.set("required", false); + if (name == "privateKeyUrl") + { + item.set("uploaded", true) + } + else + { + item.set("placeHolder", value); + } + } } else { - item.set("value", effectiveData[name]); + item.set("value", value); } } - }); - } + } + }); } }; - try - { - addKeyStore.init(); - } - catch(e) - { - console.warn(e); - } return addKeyStore; } ); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js index 53e3b43082..550c388910 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js @@ -18,64 +18,77 @@ * under the License. * */ -define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"], - function (dom, query, array, registry, util, metadata) +define(["dojo/dom", + "dojo/query", + "dojo/_base/array", + "dijit/registry", + "qpid/common/util", + "qpid/common/metadata", + "dojo/parser", + "dojo/text!store/nonjavatruststore/add.html", + "dojo/domReady!"], + function (dom, query, array, registry, util, metadata, parser, template) { var addKeyStore = { - init: function() - { - }, show: function(data) { var that=this; - util.parseHtmlIntoDiv(data.containerNode, "store/nonjavatruststore/add.html"); - - this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); - this.addButton = data.parent.addButton; this.containerNode = data.containerNode; - - if (!window.FileReader) + data.containerNode.innerHTML = template; + parser.parse(this.containerNode).then(function(instances) { - this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; - this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); - } + that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); + + if (!window.FileReader) + { + that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; + that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", ""); + } + + if (data.effectiveData) + { + that.update(data.effectiveData); + } + + util.applyMetadataToWidgets(data.containerNode, "TrustStore", "NonJavaTrustStore"); + }); }, update: function(effectiveData) { - if (effectiveData) - { - var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes; - var widgets = registry.findWidgets(this.containerNode); - array.forEach(widgets, function(item) + var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes; + var widgets = registry.findWidgets(this.containerNode); + array.forEach(widgets, function(item) + { + var name = item.id.replace("addStore.",""); + if (name in attributes ) { - var name = item.id.replace("addStore.",""); - if (name in attributes ) + var attribute = attributes[name]; + var value = effectiveData[name]; + if (value) { - var attribute = attributes[name]; - if (attribute.oversize || attribute.secure) + if (attribute.secure) { - item.set("required", false); - item.set("placeHolder", effectiveData[name]); + if (!/^\*+/.test(value) ) + { + item.set("value", value); + } + else + { + item.set("placeHolder", value); + item.set("required", false); + } } else { - item.set("value", effectiveData[name]); + item.set("value", value); } } - }); - } + } + }); } }; - try - { - addKeyStore.init(); - } - catch(e) - { - console.warn(e); - } return addKeyStore; } ); diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java index a3bf1ab3cb..fbf00339ce 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java @@ -55,7 +55,7 @@ public class KeyStoreRestTest extends QpidRestTestCase Map<String, Object> keystore = keyStores.get(0); assertEquals("Unexpected name", TestBrokerConfiguration.ENTRY_NAME_SSL_KEYSTORE, keystore.get(KeyStore.NAME)); - assertEquals("unexpected path to key store", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.STORE_URL)); + assertEquals("unexpected path to key store", ConfiguredObject.OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT, keystore.get(FileKeyStore.STORE_URL)); assertEquals("unexpected (dummy) password of default systests key store", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.PASSWORD)); assertEquals("unexpected type of default systests key store", java.security.KeyStore.getDefaultType(), keystore.get(FileKeyStore.KEY_STORE_TYPE)); assertFalse("should not be a certificateAlias attribute", keystore.containsKey(FileKeyStore.CERTIFICATE_ALIAS)); @@ -77,7 +77,7 @@ public class KeyStoreRestTest extends QpidRestTestCase Map<String, Object> keystore = keyStores.get(0); assertEquals("Unexpected name", name, keystore.get(KeyStore.NAME)); - assertEquals("unexpected path to key store", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.STORE_URL)); + assertEquals("unexpected path to key store", TestSSLConstants.KEYSTORE, keystore.get(FileKeyStore.STORE_URL)); assertEquals("unexpected password", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.PASSWORD)); assertEquals("unexpected alias", certAlias, keystore.get(FileKeyStore.CERTIFICATE_ALIAS)); } @@ -125,7 +125,7 @@ public class KeyStoreRestTest extends QpidRestTestCase List<Map<String, Object>> keyStores = assertNumberOfKeyStores(1); Map<String, Object> keystore = keyStores.get(0); assertEquals("Unexpected name", TestBrokerConfiguration.ENTRY_NAME_SSL_KEYSTORE, keystore.get(KeyStore.NAME)); - assertEquals("unexpected path to key store", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.STORE_URL)); + assertEquals("unexpected path to key store", ConfiguredObject.OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT, keystore.get(FileKeyStore.STORE_URL)); assertEquals("unexpected (dummy) password of default systests key store", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.PASSWORD)); assertFalse("should not be a certificateAlias attribute", keystore.containsKey(FileKeyStore.CERTIFICATE_ALIAS)); } @@ -151,7 +151,7 @@ public class KeyStoreRestTest extends QpidRestTestCase Map<String, Object> keystore = keyStores.get(0); assertEquals("Unexpected name", name, keystore.get(KeyStore.NAME)); - assertEquals("unexpected data", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.STORE_URL)); + assertEquals("unexpected data", TestSSLConstants.UNTRUSTED_KEYSTORE, keystore.get(FileKeyStore.STORE_URL)); assertEquals("unexpected password", AbstractConfiguredObject.SECURED_STRING_VALUE, keystore.get(FileKeyStore.PASSWORD)); assertEquals("unexpected alias", null, keystore.get(FileKeyStore.CERTIFICATE_ALIAS)); } |