Skip to content

Commit

Permalink
Add description for encodings and encoding list
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickfav committed Aug 18, 2017
1 parent 40dab5e commit 3cda901
Show file tree
Hide file tree
Showing 15 changed files with 104 additions and 24 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* add proguard
* add column output
* add url encode flag
* add list of encodings

## v0.2.0
* add external seeding with random.org
Expand Down
25 changes: 13 additions & 12 deletions src/main/java/at/favre/tools/dice/RndTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import at.favre.tools.dice.encode.Base32Encoder;
import at.favre.tools.dice.encode.Encoder;
import at.favre.tools.dice.encode.Loader;
import at.favre.tools.dice.encode.EncoderHandler;
import at.favre.tools.dice.service.RandomOrgServiceHandler;
import at.favre.tools.dice.ui.Arg;
import at.favre.tools.dice.ui.CLIParser;
Expand All @@ -13,7 +13,6 @@
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RndTool {
Expand All @@ -29,8 +28,16 @@ public static void main(String[] args) {
}

static boolean execute(Arg arguments) {
Loader loader = new Loader();
List<Encoder> encoders = loader.load();
EncoderHandler loader = new EncoderHandler();
loader.load();

Encoder encoder = loader.findByName(arguments.encoding);

if (encoder == null) {
System.err.println("Given encoder '" + arguments.encoding + "' is not available.");
System.err.println("\nAvailable encoders:\n\n" + loader.returnRegistryInfo());
System.exit(2);
}

SecureRandom secureRandom = new SecureRandom();
if (arguments.urlencode) {
Expand Down Expand Up @@ -58,14 +65,8 @@ static boolean execute(Arg arguments) {

System.out.println();

for (Encoder encoder : encoders) {
if (Arrays.asList(encoder.names()).contains(arguments.encoding)) {
printRandoms(arguments, encoder, secureRandom);
return true;
}
}

return false;
printRandoms(arguments, encoder, secureRandom);
return true;
}

private static void printRandoms(Arg arguments, Encoder encoder, SecureRandom secureRandom) {
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/at/favre/tools/dice/encode/AByteEncoder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package at.favre.tools.dice.encode;

abstract class AByteEncoder implements Encoder {
@Override
public String getDescription() {
return "<TODO>";
}
}
9 changes: 7 additions & 2 deletions src/main/java/at/favre/tools/dice/encode/AEncoder.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package at.favre.tools.dice.encode;

public abstract class AEncoder implements Encoder {
abstract class AEncoder implements Encoder {

public String encodeInternal(byte[] array, String prefix, String postfix, String sep, ByteEncoder byteEncoder) {
String encodeInternal(byte[] array, String prefix, String postfix, String sep, ByteEncoder byteEncoder) {
StringBuilder sb = new StringBuilder(prefix);
for (int i = 0; i < array.length; i++) {
sb.append(byteEncoder.encodeByte(array[i])).append(sep).append(" ");
Expand All @@ -12,6 +12,11 @@ public String encodeInternal(byte[] array, String prefix, String postfix, String
return sb.toString();
}

@Override
public String getDescription() {
return "<TODO>";
}

interface ByteEncoder {
String encodeByte(byte b);
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/at/favre/tools/dice/encode/AlphabetEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,9 @@ public String encode(byte[] array) {
}
return sb.toString();
}

@Override
public String getDescription() {
return "<TODO>";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*
* See https://github.com/fzakaria/ascii85
*/
public class Ascii85Encoder implements Encoder {
public class Ascii85Encoder extends AByteEncoder {

@Override
public String encode(byte[] array) {
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/at/favre/tools/dice/encode/Base16Encoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/**
* Encodes in to base16 (ie. hex) e.g. <code>6e33a8f4c9f69e91</code>
*/
public class Base16Encoder implements Encoder {
public class Base16Encoder extends AByteEncoder {
private boolean lowerCase;

public Base16Encoder() {
Expand All @@ -26,4 +26,9 @@ public String encode(byte[] array) {
public String[] names() {
return new String[]{"base16", Arg.DEFAULT_ENCODING};
}

@Override
public String getDescription() {
return "Hex or Base16 encoding (lowercase) e.g 6e33a8f4c";
}
}
7 changes: 6 additions & 1 deletion src/main/java/at/favre/tools/dice/encode/Base32Encoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/**
* Encodes in to base32 e.g. <code>NHSMJ5VH6P5QRAT4EXAP2BDZ5Q</code>
*/
public class Base32Encoder implements Encoder {
public class Base32Encoder extends AByteEncoder {

@Override
public String encode(byte[] array) {
Expand All @@ -16,4 +16,9 @@ public String encode(byte[] array) {
public String[] names() {
return new String[]{"base32"};
}

@Override
public String getDescription() {
return "Base32 encoding without padding e.g NHSMJ5VH6P5QRAT4EXAP2BDZ5Q";
}
}
7 changes: 6 additions & 1 deletion src/main/java/at/favre/tools/dice/encode/Base64Encoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/**
* Encodes in to base64 e.g. <code>NUZDT6c7SOxz0YgRw3JGqc+BKnJM3fuH</code>
*/
public class Base64Encoder implements Encoder {
public class Base64Encoder extends AByteEncoder {

@Override
public String encode(byte[] array) {
Expand All @@ -16,4 +16,9 @@ public String encode(byte[] array) {
public String[] names() {
return new String[]{"base64"};
}

@Override
public String getDescription() {
return "Base64 encoding without padding e.g NUZDT6c7SOxz0YgRw3JGqc+BKnJM3fuH";
}
}
7 changes: 6 additions & 1 deletion src/main/java/at/favre/tools/dice/encode/BinaryEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
/**
* Encodes in to binary representation e.g. <code>010010011</code>
*/
public class BinaryEncoder implements Encoder {
public class BinaryEncoder extends AByteEncoder {

private final static int GROUP_LENGTH = 8;

Expand All @@ -29,4 +29,9 @@ public String encode(byte[] array) {
public String[] names() {
return new String[]{"binary", "base2", "bin", "bit"};
}

@Override
public String getDescription() {
return "Binary encoding in 8 bit groups e.g 010010011 110000011";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/**
* Encodes every byte as a decimal
*/
public class DecimalByteEncoder implements Encoder {
public class DecimalByteEncoder extends AByteEncoder {

@Override
public String encode(byte[] array) {
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/at/favre/tools/dice/encode/Encoder.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
package at.favre.tools.dice.encode;

/**
* Interface for encoding byte arrays to string
*/
public interface Encoder {
String encode(byte[] array);

/**
* The names or alias for a user select the encoder
*
* @return all available names
*/
String[] names();

/**
* User readable description what this encoder does
*
* @return description
*/
String getDescription();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.*;

public class Loader {
public class EncoderHandler {

public static final List<Encoder> ENCODERS = Collections.unmodifiableList(Arrays.asList(
new AlphaNumericEncoder(),
Expand Down Expand Up @@ -38,4 +38,28 @@ public List<Encoder> load() {

return ENCODERS;
}

public Encoder findByName(String name) {
if (name != null) {
for (Encoder encoder : ENCODERS) {
if (Arrays.asList(encoder.names()).contains(name)) {
return encoder;
}
}
}
return null;
}

public String returnRegistryInfo() {
StringBuilder sb = new StringBuilder();

for (Encoder encoder : ENCODERS) {
for (String name : encoder.names()) {
sb.append(name).append(", ");
}
sb.delete(sb.length() - 2, sb.length()).append("\n");
sb.append("\tDescription: ").append(encoder.getDescription()).append("\n");
}
return sb.toString();
}
}
3 changes: 2 additions & 1 deletion src/main/java/at/favre/tools/dice/ui/CLIParser.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package at.favre.tools.dice.ui;

import at.favre.tools.dice.encode.EncoderHandler;
import at.favre.tools.dice.util.CmdUtil;
import org.apache.commons.cli.*;

Expand Down Expand Up @@ -76,7 +77,7 @@ private static Options setupOptions() {
Options options = new Options();

Option count = Option.builder(ARG_COUNT).longOpt("count").argName("number").desc("How many randoms should be generated").hasArgs().build();
Option encodeing = Option.builder(ARG_ENCODING).longOpt("encoding").argName("string").hasArgs().desc("What output encode should be used").build();
Option encodeing = Option.builder(ARG_ENCODING).longOpt("encoding").argName("string").hasArgs().desc("What output encode should be used. Available encodings include:\n" + new EncoderHandler().returnRegistryInfo()).build();
Option seed = Option.builder(ARG_SEED).longOpt("seed").argName("string").hasArgs().desc("Uses the utf-8 byte representation to seed the SecureRandom.").build();
Option debugOpt = Option.builder(ARG_DEBUG).longOpt("debug").hasArg(false).desc("Prints additional info for debugging.").build();
Option onlineOpt = Option.builder(ARG_ONLINE).longOpt("offline").hasArg(false).desc("Skips request to Random.org to seed random generator (use when offline).").build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

public class LoaderTest {
public class EncoderHandlerTest {
@Test
public void load() throws Exception {
List<Encoder> encoders = new Loader().load();
List<Encoder> encoders = new EncoderHandler().load();

System.out.println(Arrays.toString(encoders.toArray()));

Expand Down

0 comments on commit 3cda901

Please sign in to comment.