Skip to content

Commit 512f343

Browse files
authored
Merge pull request #145 from hackvertor/main
This Custom Action creates a random string based on a regex class from the user
2 parents ae4fbb5 + 072e602 commit 512f343

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
id: e7f1e32a-390c-4517-8595-b86a9a9e8cc8
2+
name: Random characters based on regex
3+
function: CUSTOM_ACTION
4+
location: REPEATER
5+
source: |+
6+
/**
7+
* Creates a random string in the output log or replaces the $random placeholder in the request.
8+
* The string is generated using a regular expression class received from the user input dialog.
9+
* @author Gareth Heyes
10+
**/
11+
var patternStr = javax.swing.JOptionPane.showInputDialog(null, "Enter regex pattern like [a-z]{4} or [0-5]{10}", "Random chars based on regex", javax.swing.JOptionPane.QUESTION_MESSAGE);
12+
if (patternStr == null) {
13+
logging.logToOutput("No pattern entered, cancelled.");
14+
return;
15+
}
16+
17+
var randomCharsBasedOnRegex = (Function<String, String>)(pattern -> {
18+
var m = Pattern.compile("(\\[[^\\]]+\\])\\{(\\d+)\\}").matcher(pattern);
19+
if (!m.matches()) throw new IllegalArgumentException("Only [chars]{n} supported");
20+
var charClass = m.group(1);
21+
var count = Integer.parseInt(m.group(2));
22+
var inner = charClass.substring(1, charClass.length() - 1);
23+
var chars = new ArrayList<Character>();
24+
for (int i = 0; i < inner.length();) {
25+
if (i + 2 < inner.length() && inner.charAt(i + 1) == '-') {
26+
char start = inner.charAt(i);
27+
char end = inner.charAt(i + 2);
28+
for (char c = start; c <= end; c++) chars.add(c);
29+
i += 3;
30+
} else {
31+
chars.add(inner.charAt(i));
32+
i++;
33+
}
34+
}
35+
var sb = new StringBuilder();
36+
var rand = new Random();
37+
for (int i = 0; i < count; i++) sb.append(chars.get(rand.nextInt(chars.size())));
38+
return sb.toString();
39+
});
40+
41+
var generated = randomCharsBasedOnRegex.apply(patternStr);
42+
43+
if(requestResponse.request().toString().contains("$random")) {
44+
httpEditor.requestPane().replace("$random", generated);
45+
} else {
46+
logging.logToOutput("Random chars: " + generated);
47+
}
48+

0 commit comments

Comments
 (0)