|
| 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