From 79bf827fa68962714e11792391159d93a69494a9 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Thu, 13 Mar 2025 00:07:26 +0800 Subject: [PATCH] feat: subcommand key --- .../me/hatter/tools/jwtutil/JwtCliUtil.java | 24 +++++++++++++ .../me/hatter/tools/jwtutil/JwtUtilMain.java | 22 +++++++++++- .../me/hatter/tools/jwtutil/SubCommand.java | 8 +++++ .../jwtutil/commands/HelpSubCommand.java | 17 ++++++++++ .../commands/KeyGenerateSubCommand.java | 28 +++++++++++++++ .../tools/jwtutil/commands/KeySubCommand.java | 34 +++++++++++++++++++ 6 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/hatter/tools/jwtutil/JwtCliUtil.java create mode 100644 src/main/java/me/hatter/tools/jwtutil/SubCommand.java create mode 100644 src/main/java/me/hatter/tools/jwtutil/commands/HelpSubCommand.java create mode 100644 src/main/java/me/hatter/tools/jwtutil/commands/KeyGenerateSubCommand.java create mode 100644 src/main/java/me/hatter/tools/jwtutil/commands/KeySubCommand.java diff --git a/src/main/java/me/hatter/tools/jwtutil/JwtCliUtil.java b/src/main/java/me/hatter/tools/jwtutil/JwtCliUtil.java new file mode 100644 index 0000000..fc0947e --- /dev/null +++ b/src/main/java/me/hatter/tools/jwtutil/JwtCliUtil.java @@ -0,0 +1,24 @@ +package me.hatter.tools.jwtutil; + +import java.util.List; + +public class JwtCliUtil { + + public static void executeSubCommand(List subCommands, String[] args) { + final String arg0 = args[0]; + final String[] leftArgs = subStringArray1(args); + for (SubCommand subCommand : subCommands) { + if (subCommand.matches(arg0)) { + subCommand.execute(leftArgs); + } + } + System.err.println("[ERROR] Unknown sub command: " + arg0); + } + + + private static String[] subStringArray1(String[] args) { + final String[] newArgs = new String[args.length - 1]; + System.arraycopy(args, 1, newArgs, 0, newArgs.length); + return newArgs; + } +} diff --git a/src/main/java/me/hatter/tools/jwtutil/JwtUtilMain.java b/src/main/java/me/hatter/tools/jwtutil/JwtUtilMain.java index 14deebd..b7d0cba 100644 --- a/src/main/java/me/hatter/tools/jwtutil/JwtUtilMain.java +++ b/src/main/java/me/hatter/tools/jwtutil/JwtUtilMain.java @@ -1,8 +1,28 @@ package me.hatter.tools.jwtutil; +import me.hatter.tools.jwtutil.commands.HelpSubCommand; +import me.hatter.tools.jwtutil.commands.KeySubCommand; + +import java.util.ArrayList; +import java.util.List; + public class JwtUtilMain { + static List SUB_COMMANDS = new ArrayList<>(); + + static { + SUB_COMMANDS.add(new HelpSubCommand()); + SUB_COMMANDS.add(new KeySubCommand()); + } + public static void main(String[] args) { - System.out.println("jwt-util v0.0.1"); + if (args == null || args.length == 0) { + System.out.println("jwt-util v0.0.1"); + System.out.println("\n"); + System.out.println("jwt-util --help for help"); + return; + } + + JwtCliUtil.executeSubCommand(SUB_COMMANDS, args); } } diff --git a/src/main/java/me/hatter/tools/jwtutil/SubCommand.java b/src/main/java/me/hatter/tools/jwtutil/SubCommand.java new file mode 100644 index 0000000..7527c31 --- /dev/null +++ b/src/main/java/me/hatter/tools/jwtutil/SubCommand.java @@ -0,0 +1,8 @@ +package me.hatter.tools.jwtutil; + +public interface SubCommand { + + boolean matches(String arg0); + + void execute(String[] args); +} diff --git a/src/main/java/me/hatter/tools/jwtutil/commands/HelpSubCommand.java b/src/main/java/me/hatter/tools/jwtutil/commands/HelpSubCommand.java new file mode 100644 index 0000000..c5357da --- /dev/null +++ b/src/main/java/me/hatter/tools/jwtutil/commands/HelpSubCommand.java @@ -0,0 +1,17 @@ +package me.hatter.tools.jwtutil.commands; + +import me.hatter.tools.jwtutil.SubCommand; + +import java.util.Arrays; + +public class HelpSubCommand implements SubCommand { + @Override + public boolean matches(String arg0) { + return Arrays.asList("help", "-h", "--help").contains(arg0); + } + + @Override + public void execute(String[] args) { + System.out.println("help message ..."); + } +} diff --git a/src/main/java/me/hatter/tools/jwtutil/commands/KeyGenerateSubCommand.java b/src/main/java/me/hatter/tools/jwtutil/commands/KeyGenerateSubCommand.java new file mode 100644 index 0000000..2e789d9 --- /dev/null +++ b/src/main/java/me/hatter/tools/jwtutil/commands/KeyGenerateSubCommand.java @@ -0,0 +1,28 @@ +package me.hatter.tools.jwtutil.commands; + +import me.hatter.tools.commons.security.key.KeyPairTool; +import me.hatter.tools.commons.security.key.KeyUtil; +import me.hatter.tools.commons.security.key.PKType; +import me.hatter.tools.jwtutil.SubCommand; + +import java.security.KeyPair; + +public class KeyGenerateSubCommand implements SubCommand { + @Override + public boolean matches(String arg0) { + return "generate".equals(arg0); + } + + @Override + public void execute(String[] args) { + final KeyPair kp = KeyPairTool.ins(PKType.RSA2048).generateKeyPair().getKeyPair(); + + System.out.println(KeyUtil.serializePublicKeyToPEM(kp.getPublic())); + System.out.println(KeyUtil.serializePrivateKeyToPEM(kp.getPrivate())); + + final KeyPair kp2 = KeyPairTool.ins(PKType.secp256r1).generateKeyPair().getKeyPair(); + + System.out.println(KeyUtil.serializePublicKeyToPEM(kp2.getPublic())); + System.out.println(KeyUtil.serializePrivateKeyToPEM(kp2.getPrivate())); + } +} diff --git a/src/main/java/me/hatter/tools/jwtutil/commands/KeySubCommand.java b/src/main/java/me/hatter/tools/jwtutil/commands/KeySubCommand.java new file mode 100644 index 0000000..0e93388 --- /dev/null +++ b/src/main/java/me/hatter/tools/jwtutil/commands/KeySubCommand.java @@ -0,0 +1,34 @@ +package me.hatter.tools.jwtutil.commands; + +import me.hatter.tools.commons.security.key.KeyPairTool; +import me.hatter.tools.commons.security.key.KeyUtil; +import me.hatter.tools.commons.security.key.PKType; +import me.hatter.tools.jwtutil.JwtCliUtil; +import me.hatter.tools.jwtutil.SubCommand; + +import java.security.KeyPair; +import java.util.ArrayList; +import java.util.List; + +public class KeySubCommand implements SubCommand { + private static List SUB_COMMANDS = new ArrayList<>(); + + static { + SUB_COMMANDS.add(new KeyGenerateSubCommand()); + } + + @Override + public boolean matches(String arg0) { + return "key".equals(arg0); + } + + @Override + public void execute(String[] args) { + if (args.length == 0) { + System.out.println("jwt-util key --help for help"); + return; + } + + JwtCliUtil.executeSubCommand(SUB_COMMANDS, args); + } +}