1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2025-12-10 22:31:09 +01:00

SOP: Properly return error codes to the caller, error code 37 for invalid input args

This commit is contained in:
Paul Schaub 2021-03-05 14:15:54 +01:00
parent fb1c0d6ff3
commit 24c0cd8a96
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
11 changed files with 72 additions and 17 deletions

View file

@ -26,7 +26,7 @@ import org.pgpainless.sop.commands.Verify;
import org.pgpainless.sop.commands.Version;
import picocli.CommandLine;
@CommandLine.Command(
@CommandLine.Command(exitCodeOnInvalidInput = 69,
subcommands = {
Armor.class,
Dearmor.class,
@ -41,8 +41,14 @@ import picocli.CommandLine;
)
public class PGPainlessCLI implements Runnable {
public PGPainlessCLI() {
}
public static void main(String[] args) {
CommandLine.run(new PGPainlessCLI(), args);
int code = new CommandLine(new PGPainlessCLI())
.execute(args);
System.exit(code);
}
@Override

View file

@ -28,7 +28,8 @@ import java.util.Arrays;
import static org.pgpainless.sop.Print.err_ln;
@CommandLine.Command(name = "armor",
description = "Add ASCII Armor to standard input")
description = "Add ASCII Armor to standard input",
exitCodeOnInvalidInput = 37)
public class Armor implements Runnable {
private static final byte[] BEGIN_ARMOR = "-----BEGIN PGP".getBytes(StandardCharsets.UTF_8);

View file

@ -24,7 +24,8 @@ import java.io.IOException;
import static org.pgpainless.sop.Print.err_ln;
@CommandLine.Command(name = "dearmor",
description = "Remove ASCII Armor from standard input")
description = "Remove ASCII Armor from standard input",
exitCodeOnInvalidInput = 37)
public class Dearmor implements Runnable {
@Override

View file

@ -43,7 +43,8 @@ import org.pgpainless.key.OpenPgpV4Fingerprint;
import picocli.CommandLine;
@CommandLine.Command(name = "decrypt",
description = "Decrypt a message from standard input")
description = "Decrypt a message from standard input",
exitCodeOnInvalidInput = 37)
public class Decrypt implements Runnable {
private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

View file

@ -44,7 +44,8 @@ import org.pgpainless.util.Passphrase;
import picocli.CommandLine;
@CommandLine.Command(name = "encrypt",
description = "Encrypt a message from standard input")
description = "Encrypt a message from standard input",
exitCodeOnInvalidInput = 37)
public class Encrypt implements Runnable {
public enum Type {

View file

@ -29,7 +29,8 @@ import org.pgpainless.sop.Print;
import picocli.CommandLine;
@CommandLine.Command(name = "extract-cert",
description = "Extract a public key certificate from a secret key from standard input")
description = "Extract a public key certificate from a secret key from standard input",
exitCodeOnInvalidInput = 37)
public class ExtractCert implements Runnable {
@CommandLine.Option(names = "--no-armor",

View file

@ -38,7 +38,9 @@ import picocli.CommandLine;
import static org.pgpainless.sop.Print.err_ln;
import static org.pgpainless.sop.Print.print_ln;
@CommandLine.Command(name = "generate-key", description = "Generate a secret key")
@CommandLine.Command(name = "generate-key",
description = "Generate a secret key",
exitCodeOnInvalidInput = 37)
public class GenerateKey implements Runnable {
@CommandLine.Option(names = "--no-armor",
@ -51,6 +53,12 @@ public class GenerateKey implements Runnable {
@Override
public void run() {
if (userId.isEmpty()) {
print_ln("At least one user-id expected.");
System.exit(1);
return;
}
try {
KeyRingBuilderInterface.WithAdditionalUserIdOrPassphrase builder = PGPainless.generateKeyRing()
.withSubKey(KeySpec.getBuilder(KeyType.EDDSA(EdDSACurve._Ed25519))
@ -64,12 +72,6 @@ public class GenerateKey implements Runnable {
.withDefaultAlgorithms())
.withPrimaryUserId(userId.get(0));
if (userId.isEmpty()) {
print_ln("At least one user-id expected.");
System.exit(1);
return;
}
for (int i = 1; i < userId.size(); i++) {
builder.withAdditionalUserId(userId.get(i));
}

View file

@ -35,7 +35,8 @@ import static org.pgpainless.sop.Print.err_ln;
import static org.pgpainless.sop.Print.print_ln;
@CommandLine.Command(name = "sign",
description = "Create a detached signature on the data from standard input")
description = "Create a detached signature on the data from standard input",
exitCodeOnInvalidInput = 37)
public class Sign implements Runnable {
public enum Type {

View file

@ -43,7 +43,8 @@ import static org.pgpainless.sop.Print.err_ln;
import static org.pgpainless.sop.Print.print_ln;
@CommandLine.Command(name = "verify",
description = "Verify a detached signature over the data from standard input")
description = "Verify a detached signature over the data from standard input",
exitCodeOnInvalidInput = 37)
public class Verify implements Runnable {
private static final TimeZone tz = TimeZone.getTimeZone("UTC");

View file

@ -22,7 +22,8 @@ import java.util.Properties;
import picocli.CommandLine;
@CommandLine.Command(name = "version", description = "Display version information about the tool")
@CommandLine.Command(name = "version", description = "Display version information about the tool",
exitCodeOnInvalidInput = 37)
public class Version implements Runnable {
@Override