You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2019/09/21 16:06:50 UTC
[jmeter] branch master updated: JOrphanUtils: add random
alphanumeric password generator
This is an automated email from the ASF dual-hosted git repository.
pmouawad pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git
The following commit(s) were added to refs/heads/master by this push:
new 94248f0 JOrphanUtils: add random alphanumeric password generator
94248f0 is described below
commit 94248f0d998c23ade211561f97154afdcb394772
Author: pmouawad <p....@ubik-ingenierie.com>
AuthorDate: Sat Sep 21 18:05:27 2019 +0200
JOrphanUtils: add random alphanumeric password generator
This resolves Bug 63760
https://bz.apache.org/bugzilla/show_bug.cgi?id=63760
---
src/jorphan/build.gradle.kts | 1 +
.../main/java/org/apache/jorphan/util/JOrphanUtils.java | 17 +++++++++++++++++
.../java/org/apache/jorphan/exec/TestKeyToolUtils.java | 4 ++--
.../java/org/apache/jorphan/util/TestJorphanUtils.java | 6 ++++++
.../apache/jmeter/protocol/http/proxy/ProxyControl.java | 5 ++---
xdocs/changes.xml | 1 +
6 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/src/jorphan/build.gradle.kts b/src/jorphan/build.gradle.kts
index e1372d2..6bd5e6a 100644
--- a/src/jorphan/build.gradle.kts
+++ b/src/jorphan/build.gradle.kts
@@ -25,4 +25,5 @@ dependencies {
implementation("commons-collections:commons-collections")
implementation("org.apache.commons:commons-lang3")
implementation("org.apache.commons:commons-math3")
+ implementation("org.apache.commons:commons-text")
}
diff --git a/src/jorphan/src/main/java/org/apache/jorphan/util/JOrphanUtils.java b/src/jorphan/src/main/java/org/apache/jorphan/util/JOrphanUtils.java
index e700bed..d301a2a 100644
--- a/src/jorphan/src/main/java/org/apache/jorphan/util/JOrphanUtils.java
+++ b/src/jorphan/src/main/java/org/apache/jorphan/util/JOrphanUtils.java
@@ -26,6 +26,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
+import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -35,6 +36,7 @@ import java.util.regex.Matcher;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.RandomStringGenerator;
/**
* This class contains frequently-used static utility methods.
@@ -46,6 +48,8 @@ import org.apache.commons.lang3.StringUtils;
public final class JOrphanUtils {
private static final int DEFAULT_CHUNK_SIZE = 4096;
+
+ private static final SecureRandom SECURE_RANDOM = new SecureRandom(new SecureRandom().generateSeed(128));
/**
* Private constructor to prevent instantiation.
*/
@@ -765,4 +769,17 @@ public final class JOrphanUtils {
}
return retVal.toString();
}
+
+ /**
+ * @param length Max length of password
+ * @return String random password
+ */
+ public static String generateRandomAlphanumericPassword(int length) {
+ char[][] pairs = {{'a','z'}, {'A','Z'}, {'0','9'}};
+ RandomStringGenerator pwdGenerator = new RandomStringGenerator.Builder()
+ .usingRandom(max -> SECURE_RANDOM.nextInt(max))
+ .withinRange(pairs)
+ .build();
+ return pwdGenerator.generate(length);
+ }
}
diff --git a/src/jorphan/src/test/java/org/apache/jorphan/exec/TestKeyToolUtils.java b/src/jorphan/src/test/java/org/apache/jorphan/exec/TestKeyToolUtils.java
index ef4dd96..0533b63 100644
--- a/src/jorphan/src/test/java/org/apache/jorphan/exec/TestKeyToolUtils.java
+++ b/src/jorphan/src/test/java/org/apache/jorphan/exec/TestKeyToolUtils.java
@@ -28,7 +28,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.jorphan.util.JOrphanUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -36,7 +36,7 @@ import org.junit.Test;
public class TestKeyToolUtils {
private File keystore;
- private String password = RandomStringUtils.randomAlphabetic(32);
+ private String password = JOrphanUtils.generateRandomAlphanumericPassword(32);
private int validity = 1;
@Before
diff --git a/src/jorphan/src/test/java/org/apache/jorphan/util/TestJorphanUtils.java b/src/jorphan/src/test/java/org/apache/jorphan/util/TestJorphanUtils.java
index 3d9189f..3b4f3f1 100644
--- a/src/jorphan/src/test/java/org/apache/jorphan/util/TestJorphanUtils.java
+++ b/src/jorphan/src/test/java/org/apache/jorphan/util/TestJorphanUtils.java
@@ -402,4 +402,10 @@ public class TestJorphanUtils {
assertEquals("11", JOrphanUtils.unsplit(new Object[] {null, 1}, 1));
assertEquals("-26738698", JOrphanUtils.unsplit(new Object[] {-26_738_698}, 1));
}
+
+ @Test
+ public void testGenerateRandomAlphanumericPassword() {
+ assertTrue("Password should be alphanumeric", JOrphanUtils.generateRandomAlphanumericPassword(20).matches("[A-Za-z0-9]+"));
+ assertEquals("Password should be alphanumeric", 20, JOrphanUtils.generateRandomAlphanumericPassword(20).length());
+ }
}
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
index 634a58d..aaec3e2 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
@@ -46,7 +46,6 @@ import java.util.prefs.Preferences;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.http.conn.ssl.AbstractVerifier;
import org.apache.jmeter.assertions.Assertion;
@@ -1498,7 +1497,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
}
if (keyStore == null) { // no existing file or not valid
- storePassword = RandomStringUtils.randomAlphanumeric(20); // Alphanum to avoid issues with command-line quoting
+ storePassword = JOrphanUtils.generateRandomAlphanumericPassword(20); // Alphanum to avoid issues with command-line quoting
keyPassword = storePassword; // we use same password for both
setPassword(storePassword);
log.info(
@@ -1563,7 +1562,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
}
if (keyStore == null) { // no existing file or not valid
- storePassword = RandomStringUtils.randomAlphanumeric(20); // Alphanum to avoid issues with command-line quoting
+ storePassword = JOrphanUtils.generateRandomAlphanumericPassword(20); // Alphanum to avoid issues with command-line quoting
keyPassword = storePassword; // we use same password for both
setPassword(storePassword);
log.info("Generating standard keypair in {}", CERT_PATH_ABS);
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
index ceeb021..e425518 100644
--- a/xdocs/changes.xml
+++ b/xdocs/changes.xml
@@ -134,6 +134,7 @@ to view the last release notes of version 5.1.1.
<li><bug>63480</bug>XPathAssertion and XPathAssertion2: Improve test coverage for input coming from variable. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
<li><bug>63452</bug>Tools / Import from cURL: Complete coverage of all command line options that are valid in JMeter use case. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
<li><bug>63419</bug>Tools / Import from cURL: Add ability to import a set of cURL commands from a file. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
+ <li><bug>63760</bug>JOrphanUtils: add random alphanumeric password generator</li>
</ul>
<ch_section>Non-functional changes</ch_section>