From f16abd3a5e4aa758893dee8c1254a8991c3b8769 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 11 Apr 2022 13:36:24 +0200 Subject: [PATCH 01/25] VKS-Java 0.1.2-SNAPSHOT --- version.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.gradle b/version.gradle index d67dc42..02cb6c0 100644 --- a/version.gradle +++ b/version.gradle @@ -4,8 +4,8 @@ allprojects { ext { - shortVersion = '0.1.1' - isSnapshot = false + shortVersion = '0.1.2' + isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 junitVersion = '5.8.2' From a35378e87068bbb0879c76ef02b311d00d19ec45 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 11 Apr 2022 13:54:24 +0200 Subject: [PATCH 02/25] Add command name and description for parent command --- vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java b/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java index c5cba18..b5b0df3 100644 --- a/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java +++ b/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java @@ -11,6 +11,8 @@ import picocli.CommandLine; import java.net.MalformedURLException; @CommandLine.Command( + name = "vks", + description = "Interact with Verifying Key Servers", subcommands = { CommandLine.HelpCommand.class, GetCmd.class, From 028daa6a739c678ccba9761a072935ffade89dfa Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sat, 23 Apr 2022 02:02:34 +0200 Subject: [PATCH 03/25] CLI: Set keys.openpgp.org as default keyserver --- vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java b/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java index b5b0df3..dec9f39 100644 --- a/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java +++ b/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java @@ -22,7 +22,7 @@ import java.net.MalformedURLException; ) public class VKSCLI { - String keyServer; + String keyServer = "https://keys.openpgp.org"; public static void main(String[] args) { int exitCode = execute(args); From fd191c1bb4756bb89b78bdbc22bd1109bd5cc079 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 00:57:35 +0200 Subject: [PATCH 04/25] Bump slf4j to 1.7.36 --- version.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index 02cb6c0..0aeb945 100644 --- a/version.gradle +++ b/version.gradle @@ -9,7 +9,7 @@ allprojects { minAndroidSdk = 10 javaSourceCompatibility = 1.8 junitVersion = '5.8.2' - slf4jVersion = '1.7.32' + slf4jVersion = '1.7.36' logbackVersion = '1.2.10' } } From ac101a14134b84474a7453724cd3b4470ec80eff Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 00:58:12 +0200 Subject: [PATCH 05/25] Bump logback to 1.2.11 --- version.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index 0aeb945..7aba544 100644 --- a/version.gradle +++ b/version.gradle @@ -10,6 +10,6 @@ allprojects { javaSourceCompatibility = 1.8 junitVersion = '5.8.2' slf4jVersion = '1.7.36' - logbackVersion = '1.2.10' + logbackVersion = '1.2.11' } } From 29cfade707c7927717262339b6235720eec1d10b Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:00:32 +0200 Subject: [PATCH 06/25] Update changelog --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71b8f3b..fac8a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,13 @@ SPDX-License-Identifier: Apache-2.0 # Changelog -## 0.1.0 +## 0.1.2-SNAPSHOT +- Bump `slf4j` to `1.7.36` +- Bump `logback` to `1.2.11` +- CLI: Set `keys.openpgp.org` as default key server +- Add name and description to parent command + +## 0.1.1 - Add `vks-java-cli`: CLI frontend for `vks-java` - Bump Bouncy Castle dependencies to `1.71` From d82b22131f5e272426f848f90af71af166e0d810 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:03:43 +0200 Subject: [PATCH 07/25] Add documentation to build.gradle files --- vks-java-cli/build.gradle | 1 + vks-java/build.gradle | 1 + 2 files changed, 2 insertions(+) diff --git a/vks-java-cli/build.gradle b/vks-java-cli/build.gradle index 4e96ef4..92033bd 100644 --- a/vks-java-cli/build.gradle +++ b/vks-java-cli/build.gradle @@ -13,6 +13,7 @@ repositories { } dependencies { + // JUnit testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" diff --git a/vks-java/build.gradle b/vks-java/build.gradle index 1f0b6f1..4d166d2 100644 --- a/vks-java/build.gradle +++ b/vks-java/build.gradle @@ -13,6 +13,7 @@ repositories { } dependencies { + // JUnit testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" From 80ff3cf47a71bfa22886a7fc6495199a331a1aab Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:03:54 +0200 Subject: [PATCH 08/25] Bump lombok to 1.18.24 --- version.gradle | 1 + vks-java/build.gradle | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/version.gradle b/version.gradle index 7aba544..d37f2ea 100644 --- a/version.gradle +++ b/version.gradle @@ -11,5 +11,6 @@ allprojects { junitVersion = '5.8.2' slf4jVersion = '1.7.36' logbackVersion = '1.2.11' + lombokVersion = '1.18.24' } } diff --git a/vks-java/build.gradle b/vks-java/build.gradle index 4d166d2..adf3786 100644 --- a/vks-java/build.gradle +++ b/vks-java/build.gradle @@ -24,10 +24,10 @@ dependencies { implementation "com.google.code.findbugs:jsr305:3.0.2" // Lombok (@SneakyThrows...) - compileOnly 'org.projectlombok:lombok:1.18.22' - annotationProcessor 'org.projectlombok:lombok:1.18.22' - testCompileOnly 'org.projectlombok:lombok:1.18.22' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.22' + compileOnly "org.projectlombok:lombok:$lombokVersion" + annotationProcessor "org.projectlombok:lombok:$lombokVersion" + testCompileOnly "org.projectlombok:lombok:$lombokVersion" + testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" // JSON implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.2.2' From b1d3b42d396300fdd7da987d6c1679459ec81464 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:04:51 +0200 Subject: [PATCH 09/25] Move jackson databind version to version.gradle --- version.gradle | 1 + vks-java/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index d37f2ea..e8b82d7 100644 --- a/version.gradle +++ b/version.gradle @@ -12,5 +12,6 @@ allprojects { slf4jVersion = '1.7.36' logbackVersion = '1.2.11' lombokVersion = '1.18.24' + jacksonDataBindVersion = '2.13.2.2' } } diff --git a/vks-java/build.gradle b/vks-java/build.gradle index adf3786..b78415d 100644 --- a/vks-java/build.gradle +++ b/vks-java/build.gradle @@ -30,7 +30,7 @@ dependencies { testAnnotationProcessor "org.projectlombok:lombok:$lombokVersion" // JSON - implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.2.2' + implementation "com.fasterxml.jackson.core:jackson-databind:$jacksonDataBindVersion" } test { From 1def42b54bfe9181423ade72cb2e1c9ab6068a21 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:06:16 +0200 Subject: [PATCH 10/25] Move bouncycastle version to version.gradle --- version.gradle | 1 + vks-java/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index e8b82d7..ca45aed 100644 --- a/version.gradle +++ b/version.gradle @@ -8,6 +8,7 @@ allprojects { isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 + bouncycastleVersion = '1.71' junitVersion = '5.8.2' slf4jVersion = '1.7.36' logbackVersion = '1.2.11' diff --git a/vks-java/build.gradle b/vks-java/build.gradle index b78415d..d3cc1c8 100644 --- a/vks-java/build.gradle +++ b/vks-java/build.gradle @@ -18,7 +18,7 @@ dependencies { testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" // Arrays.areEqual, Base64... - implementation("org.bouncycastle:bcutil-jdk15to18:1.71") + implementation "org.bouncycastle:bcutil-jdk15to18:$bouncycastleVersion" // @Nonnull, @Nullable... implementation "com.google.code.findbugs:jsr305:3.0.2" From 8aa68ccfb3e91934bcebaf9cdfee2c2201eb2f3b Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:07:04 +0200 Subject: [PATCH 11/25] Move jsr version to version.gradle --- version.gradle | 1 + vks-java/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index ca45aed..cb16165 100644 --- a/version.gradle +++ b/version.gradle @@ -10,6 +10,7 @@ allprojects { javaSourceCompatibility = 1.8 bouncycastleVersion = '1.71' junitVersion = '5.8.2' + jsrVersion = '3.0.2' slf4jVersion = '1.7.36' logbackVersion = '1.2.11' lombokVersion = '1.18.24' diff --git a/vks-java/build.gradle b/vks-java/build.gradle index d3cc1c8..61c30d2 100644 --- a/vks-java/build.gradle +++ b/vks-java/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation "org.bouncycastle:bcutil-jdk15to18:$bouncycastleVersion" // @Nonnull, @Nullable... - implementation "com.google.code.findbugs:jsr305:3.0.2" + implementation "com.google.code.findbugs:jsr305:$jsrVersion" // Lombok (@SneakyThrows...) compileOnly "org.projectlombok:lombok:$lombokVersion" From 03354a18a6df4ab216bac00363748323d1008545 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:08:04 +0200 Subject: [PATCH 12/25] Move picocli version to version.gradle --- version.gradle | 1 + vks-java-cli/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index cb16165..c303882 100644 --- a/version.gradle +++ b/version.gradle @@ -14,6 +14,7 @@ allprojects { slf4jVersion = '1.7.36' logbackVersion = '1.2.11' lombokVersion = '1.18.24' + picocliVersion = '4.6.3' jacksonDataBindVersion = '2.13.2.2' } } diff --git a/vks-java-cli/build.gradle b/vks-java-cli/build.gradle index 92033bd..bf714f8 100644 --- a/vks-java-cli/build.gradle +++ b/vks-java-cli/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation project(":vks-java") // CLI - implementation "info.picocli:picocli:4.6.3" + implementation "info.picocli:picocli:$picocliVersion" } application { From 6074feff9b8ea510ebb9c6d3d380051e501935d7 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Tue, 26 Apr 2022 01:08:59 +0200 Subject: [PATCH 13/25] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fac8a09..a729e32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ SPDX-License-Identifier: Apache-2.0 ## 0.1.2-SNAPSHOT - Bump `slf4j` to `1.7.36` - Bump `logback` to `1.2.11` +- Bump `lombok` to `1.18.24` - CLI: Set `keys.openpgp.org` as default key server - Add name and description to parent command From 327d2166485f510d5adad2dd6241a5023179d4f8 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 29 Apr 2022 16:40:59 +0200 Subject: [PATCH 14/25] VKS-Java 0.1.2 --- CHANGELOG.md | 2 +- version.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a729e32..b7fc49b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ SPDX-License-Identifier: Apache-2.0 # Changelog -## 0.1.2-SNAPSHOT +## 0.1.2 - Bump `slf4j` to `1.7.36` - Bump `logback` to `1.2.11` - Bump `lombok` to `1.18.24` diff --git a/version.gradle b/version.gradle index c303882..5451036 100644 --- a/version.gradle +++ b/version.gradle @@ -5,7 +5,7 @@ allprojects { ext { shortVersion = '0.1.2' - isSnapshot = true + isSnapshot = false minAndroidSdk = 10 javaSourceCompatibility = 1.8 bouncycastleVersion = '1.71' From 0a21cec1d30700ad268e802e8fd6775ff973d714 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 29 Apr 2022 16:44:42 +0200 Subject: [PATCH 15/25] VKS-Java 0.1.3-SNAPSHOT --- version.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.gradle b/version.gradle index 5451036..d7522b0 100644 --- a/version.gradle +++ b/version.gradle @@ -4,8 +4,8 @@ allprojects { ext { - shortVersion = '0.1.2' - isSnapshot = false + shortVersion = '0.1.3' + isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 bouncycastleVersion = '1.71' From 867eebe6849a6ae42a6c0860347ffb579dc03630 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 1 Aug 2022 17:25:21 +0200 Subject: [PATCH 16/25] Add woodpecker CI --- .reuse/dep5 | 5 +++++ .woodpecker/.build.yml | 12 ++++++++++++ .woodpecker/.reuse.yml | 7 +++++++ 3 files changed, 24 insertions(+) create mode 100644 .woodpecker/.build.yml create mode 100644 .woodpecker/.reuse.yml diff --git a/.reuse/dep5 b/.reuse/dep5 index b8bb6be..b613adc 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -13,3 +13,8 @@ Source: https://pgpainless.org Files: gradle* Copyright: 2015 the original author or authors. License: Apache-2.0 + +# Woodpecker build files +Files: .woodpecker/* +Copyright: 2022 the original author or authors. +License: Apache-2.0 diff --git a/.woodpecker/.build.yml b/.woodpecker/.build.yml new file mode 100644 index 0000000..f504b44 --- /dev/null +++ b/.woodpecker/.build.yml @@ -0,0 +1,12 @@ +pipeline: + run: + image: gradle:7.5-jdk8 + commands: + - git checkout $CI_COMMIT_BRANCH + # Code works + - gradle test + # Code is clean + - gradle check javadocAll + # Code has coverage + - gradle jacocoRootReport coveralls + secrets: [COVERALLS_REPO_TOKEN] diff --git a/.woodpecker/.reuse.yml b/.woodpecker/.reuse.yml new file mode 100644 index 0000000..58f17e6 --- /dev/null +++ b/.woodpecker/.reuse.yml @@ -0,0 +1,7 @@ +# Code is licensed properly +# See https://reuse.software/ +pipeline: + reuse: + image: fsfe/reuse:latest + commands: + - reuse lint \ No newline at end of file From f349c701fac8dc3cfccdeae9277854e8d164e280 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Mon, 1 Aug 2022 17:28:44 +0200 Subject: [PATCH 17/25] Add badges for CI and Coveralls --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7d8659d..7a6897f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ SPDX-License-Identifier: Apache-2.0 # Verifying Key Server - Client API for Java +[![status-badge](https://ci.codeberg.org/api/badges/PGPainless/vks-java/status.svg)](https://ci.codeberg.org/PGPainless/vks-java) +[![Coverage Status](https://coveralls.io/repos/github/pgpainless/vks-java/badge.svg?branch=main)](https://coveralls.io/github/pgpainless/vks-java?branch=main) +[![REUSE status](https://api.reuse.software/badge/github.com/pgpainless/vks-java)](https://api.reuse.software/info/github.com/pgpainless/vks-java) + Client-side API for fetching keys from - and publishing keys to - Verifying OpenPGP Key Servers (VKS). An example implementation of a Verifying Key Server is [Hagrid](https://gitlab.com/hagrid-keyserver/hagrid), which is running https://keys.openpgp.org. From e37921b4d445938f6e0faf7a094a6425f6af1dae Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 4 Aug 2022 00:49:08 +0200 Subject: [PATCH 18/25] Add support for i18n using resource bundles --- .../main/java/pgp/vks/client/cli/GetCmd.java | 20 +++++++++++---- .../client/cli/RequestVerificationCmd.java | 24 ++++++++++++------ .../java/pgp/vks/client/cli/UploadCmd.java | 25 +++++++++++++------ .../main/java/pgp/vks/client/cli/VKSCLI.java | 14 ++++++----- .../src/main/resources/msg_get.properties | 9 +++++++ .../src/main/resources/msg_get_de.properties | 12 +++++++++ .../src/main/resources/msg_help.properties | 5 ++++ .../src/main/resources/msg_help_de.properties | 6 +++++ .../msg_request_verification.properties | 11 ++++++++ .../msg_request_verification_de.properties | 14 +++++++++++ .../src/main/resources/msg_upload.properties | 8 ++++++ .../main/resources/msg_upload_de.properties | 11 ++++++++ .../src/main/resources/msg_vks.properties | 6 +++++ .../src/main/resources/msg_vks_de.properties | 6 +++++ 14 files changed, 145 insertions(+), 26 deletions(-) create mode 100644 vks-java-cli/src/main/resources/msg_get.properties create mode 100644 vks-java-cli/src/main/resources/msg_get_de.properties create mode 100644 vks-java-cli/src/main/resources/msg_help.properties create mode 100644 vks-java-cli/src/main/resources/msg_help_de.properties create mode 100644 vks-java-cli/src/main/resources/msg_request_verification.properties create mode 100644 vks-java-cli/src/main/resources/msg_request_verification_de.properties create mode 100644 vks-java-cli/src/main/resources/msg_upload.properties create mode 100644 vks-java-cli/src/main/resources/msg_upload_de.properties create mode 100644 vks-java-cli/src/main/resources/msg_vks.properties create mode 100644 vks-java-cli/src/main/resources/msg_vks_de.properties diff --git a/vks-java-cli/src/main/java/pgp/vks/client/cli/GetCmd.java b/vks-java-cli/src/main/java/pgp/vks/client/cli/GetCmd.java index 7f1fa9f..43ea165 100644 --- a/vks-java-cli/src/main/java/pgp/vks/client/cli/GetCmd.java +++ b/vks-java-cli/src/main/java/pgp/vks/client/cli/GetCmd.java @@ -11,8 +11,12 @@ import picocli.CommandLine; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; +import java.util.Locale; +import java.util.ResourceBundle; -@CommandLine.Command(name = "get", description = "Retrieve an OpenPGP certificate from the key server") +@CommandLine.Command( + name = "get", + resourceBundle = "msg_get") public class GetCmd implements Runnable { @CommandLine.Mixin @@ -22,16 +26,22 @@ public class GetCmd implements Runnable { Exclusive by; static class Exclusive { - @CommandLine.Option(names = {"-f", "--by-fingerprint"}, description = "Retrieve a key by its fingerprint (NOT prefixed with '0x')") + @CommandLine.Option(names = {"-f", "--by-fingerprint"}) String fingerprint; - @CommandLine.Option(names = {"-i", "--by-keyid"}, description = "Retrieve a key by its decimal key ID or that of one of its subkeys.") + @CommandLine.Option(names = {"-i", "--by-keyid"}) Long keyId; - @CommandLine.Option(names = {"-e", "--by-email"}, description = "Retrieve a key by email address.") + @CommandLine.Option(names = {"-e", "--by-email"}) String email; } + private final ResourceBundle msg; + + public GetCmd() { + msg = ResourceBundle.getBundle("msg_get", Locale.getDefault()); + } + public void run() { VKS vks; try { @@ -50,7 +60,7 @@ public class GetCmd implements Runnable { } else if (by.email != null) { inputStream = get.byEmail(by.email); } else { - throw new IllegalArgumentException("Missing --by-* option."); + throw new IllegalArgumentException(msg.getString("error.missing_by_option")); } int read; diff --git a/vks-java-cli/src/main/java/pgp/vks/client/cli/RequestVerificationCmd.java b/vks-java-cli/src/main/java/pgp/vks/client/cli/RequestVerificationCmd.java index 6767f7d..2fba390 100644 --- a/vks-java-cli/src/main/java/pgp/vks/client/cli/RequestVerificationCmd.java +++ b/vks-java-cli/src/main/java/pgp/vks/client/cli/RequestVerificationCmd.java @@ -12,23 +12,32 @@ import java.io.IOException; import java.net.MalformedURLException; import java.util.Arrays; import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; -@CommandLine.Command(name = "request-verification", description = "Request verification for unverified user-ids") +@CommandLine.Command( + name = "request-verification", + resourceBundle = "msg_request_verification") public class RequestVerificationCmd implements Runnable { @CommandLine.Mixin VKSCLI.KeyServerMixin keyServerMixin; - @CommandLine.Option(names = {"-t", "--token"}, description = "Access token. Can be retrieved by uploading the certificate.", + @CommandLine.Option(names = {"-t", "--token"}, required = true, arity = "1", paramLabel = "TOKEN") String token; - @CommandLine.Option(names = {"-l", "--locale"}, description = "Locale for the verification mail") + @CommandLine.Option(names = {"-l", "--locale"}) List locale = Arrays.asList("en_US", "en_GB"); - @CommandLine.Option(names = {"-e", "--email"}, description = "Email addresses to request a verification mail for", required = true, arity = "1..*") + @CommandLine.Option(names = {"-e", "--email"}, required = true, arity = "1..*") String[] addresses = new String[0]; + private final ResourceBundle msg; + + public RequestVerificationCmd() { + msg = ResourceBundle.getBundle("msg_request_verification", Locale.getDefault()); + } @Override public void run() { @@ -44,10 +53,9 @@ public class RequestVerificationCmd implements Runnable { RequestVerify.Response response = requestVerify .forEmailAddresses(addresses) .execute(token, locale); - - System.out.println("Verification E-Mails for key " + response.getKeyFingerprint() + " have been sent."); - System.out.println("Token: " + response.getToken()); - System.out.println("Status:"); + System.out.printf(msg.getString("output.mails_sent"), response.getKeyFingerprint()); + System.out.printf(msg.getString("output.token"), response.getToken()); + System.out.println(msg.getString("output.status")); for (String address : response.getStatus().keySet()) { System.out.println("\t" + address + "\t" + response.getStatus().get(address)); } diff --git a/vks-java-cli/src/main/java/pgp/vks/client/cli/UploadCmd.java b/vks-java-cli/src/main/java/pgp/vks/client/cli/UploadCmd.java index cba61bb..c3927bc 100644 --- a/vks-java-cli/src/main/java/pgp/vks/client/cli/UploadCmd.java +++ b/vks-java-cli/src/main/java/pgp/vks/client/cli/UploadCmd.java @@ -15,17 +15,26 @@ import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; -@CommandLine.Command(name = "upload", description = "Upload an OpenPGP certificate to the key server") +@CommandLine.Command( + name = "upload", + resourceBundle = "msg_upload") public class UploadCmd implements Runnable { @CommandLine.Mixin VKSCLI.KeyServerMixin keyServerMixin; - @CommandLine.Option(names = {"-r", "--request-verification"}, - description = "Request verification mails for unpublished email addresses") + @CommandLine.Option(names = {"-r", "--request-verification"}) boolean requestVerification; + private final ResourceBundle msg; + + public UploadCmd() { + msg = ResourceBundle.getBundle("msg_upload", Locale.getDefault()); + } + public void run() { VKS vks; try { @@ -51,11 +60,13 @@ public class UploadCmd implements Runnable { } } - System.out.println("Uploaded key " + response.getKeyFingerprint()); - System.out.println("Token: " + response.getToken()); + String msgUpload = String.format(msg.getString("output.uploaded_key"), + response.getKeyFingerprint(), response.getToken()); + System.out.println(msgUpload); + String msgStatus = msg.getString("output.status"); if (!requestVerification || unpublished.isEmpty()) { - System.out.println("Status:"); + System.out.println(msgStatus); for (String address : response.getStatus().keySet()) { Status status = response.getStatus().get(address); System.out.format("%-" + maxMailLen + "s %s\n", address, status); @@ -65,7 +76,7 @@ public class UploadCmd implements Runnable { RequestVerify.Response verifyResponse = vks.requestVerification().forEmailAddresses(unpublished.toArray(new String[0])) .execute(response.getToken()); - System.out.println("Status:"); + System.out.println(msgStatus); for (String address : verifyResponse.getStatus().keySet()) { Status status = response.getStatus().get(address); System.out.format("%-" + maxMailLen + "s %s\n", address, status); diff --git a/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java b/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java index dec9f39..142e192 100644 --- a/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java +++ b/vks-java-cli/src/main/java/pgp/vks/client/cli/VKSCLI.java @@ -9,10 +9,12 @@ import pgp.vks.client.VKSImpl; import picocli.CommandLine; import java.net.MalformedURLException; +import java.util.Locale; +import java.util.ResourceBundle; @CommandLine.Command( name = "vks", - description = "Interact with Verifying Key Servers", + resourceBundle = "msg_vks", subcommands = { CommandLine.HelpCommand.class, GetCmd.class, @@ -32,14 +34,15 @@ public class VKSCLI { } public static int execute(String[] args) { - return new CommandLine(VKSCLI.class) - .setExitCodeExceptionMapper(new CommandLine.IExitCodeExceptionMapper() { + CommandLine cmd = new CommandLine(VKSCLI.class); + cmd.setExitCodeExceptionMapper(new CommandLine.IExitCodeExceptionMapper() { @Override public int getExitCode(Throwable exception) { return 1; } - }) - .setCommandName("vkscli") + }); + cmd.getSubcommands().get("help").setResourceBundle(ResourceBundle.getBundle("msg_help", Locale.getDefault())); + return cmd.setCommandName("vkscli") .execute(args); } @@ -53,7 +56,6 @@ public class VKSCLI { VKSCLI parent; @CommandLine.Option(names = "--key-server", - description = "Address of the Verifying Key Server.\nDefaults to 'https://keys.openpgp.org'", paramLabel = "KEYSERVER") public void setKeyServer(String keyServer) { parent.keyServer = keyServer; diff --git a/vks-java-cli/src/main/resources/msg_get.properties b/vks-java-cli/src/main/resources/msg_get.properties new file mode 100644 index 0000000..70ab33d --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_get.properties @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Retrieve an OpenPGP certificate from the key server +by-fingerprint=Retrieve a key by its fingerprint (NOT prefixed with '0x') +by-keyid=Retrieve a key by its decimal key ID or that of one of its subkeys +by-email=Retrieve a key by email address +error.missing_by_option=Missing --by-* option. +key-server=Address of the Verifying Key Server.%nDefaults to 'https://keys.openpgp.org' diff --git a/vks-java-cli/src/main/resources/msg_get_de.properties b/vks-java-cli/src/main/resources/msg_get_de.properties new file mode 100644 index 0000000..b13c717 --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_get_de.properties @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Empfange ein OpenPGP Zertifikat vom Schlüsselserver +by-fingerprint=Finde das Zertifikat anhand seines Fingerabdrucks (OHNE Präfix '0x') +by-keyid=Finde das Zertifikat anhand seiner Schlüssel-ID oder der eines seiner Unterschlüssel +by-email=Finde das Zertifikat anhand einer E-Mail-Adresse +error.missing_by_option=Fehlende --by-* Option. +usage.synopsisHeading=Nutzung:\u0020 +usage.optionListHeading=Optionen:%n + +key-server=Adresse des verifizierenden Schlüsselservers.%nStandardmäßig: 'https://keys.openpgp.org' diff --git a/vks-java-cli/src/main/resources/msg_help.properties b/vks-java-cli/src/main/resources/msg_help.properties new file mode 100644 index 0000000..f288ae3 --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_help.properties @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Displays help information about the specified command +usage.synopsisHeading=Usage:\u0020 diff --git a/vks-java-cli/src/main/resources/msg_help_de.properties b/vks-java-cli/src/main/resources/msg_help_de.properties new file mode 100644 index 0000000..304bb42 --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_help_de.properties @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Zeige Hilfetext für den angegebenen Befehl +usage.synopsisHeading=Nutzung:\u0020 +usage.optionListHeading=Optionen:%n diff --git a/vks-java-cli/src/main/resources/msg_request_verification.properties b/vks-java-cli/src/main/resources/msg_request_verification.properties new file mode 100644 index 0000000..b8d64ae --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_request_verification.properties @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Request verification for unverified user-ids +token=Access token. Can be retrieved by uploading the certificate. +locale=Locale (language) for the verification mail +email=Email addresses to request a verification mail for +output.mails_sent=Verification E-Mails for certificate %s have been sent.%n +output.token=Token: %s%n +output.status=Status: +key-server=Address of the Verifying Key Server.%nDefaults to 'https://keys.openpgp.org' diff --git a/vks-java-cli/src/main/resources/msg_request_verification_de.properties b/vks-java-cli/src/main/resources/msg_request_verification_de.properties new file mode 100644 index 0000000..773630c --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_request_verification_de.properties @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Fordere Verifikation von unveröffentlichten Nutzeridentitäten an +token=Zugangstoken. Kann durch das Hochladen des Zertifikates erhalten werden. +locale=Gebietsschema (Sprache) für die E-Mail-Verifikation +email=E-Mail-Adresse für die eine Verifikation angefragt werden soll +output.mails_sent=E-Mail-Verifikationen für Zertifikat %s wurden versendet.%n%n +output.token=Zugangstoken: %s%n +output.status=Status: +usage.synopsisHeading=Nutzung:\u0020 +usage.optionListHeading=Optionen:%n + +key-server=Adresse des verifizierenden Schlüsselservers.%nStandardmäßig: 'https://keys.openpgp.org' diff --git a/vks-java-cli/src/main/resources/msg_upload.properties b/vks-java-cli/src/main/resources/msg_upload.properties new file mode 100644 index 0000000..d2fa507 --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_upload.properties @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Upload an OpenPGP certificate to the key server +request-verification=Request verification mails for unpublished email addresses +output.uploaded_key=Uploaded key: %s%nToken: %s +output.status=Status: +key-server=Address of the Verifying Key Server.%nDefaults to 'https://keys.openpgp.org' diff --git a/vks-java-cli/src/main/resources/msg_upload_de.properties b/vks-java-cli/src/main/resources/msg_upload_de.properties new file mode 100644 index 0000000..cb38d3d --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_upload_de.properties @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Lade ein OpenPGP Zertifikat auf den Schlüsselserver hoch +request-verification=Fordere E-Mailverifikation für unveröffentlichte E-Mail-Adressen an +output.uploaded_key=Hochgeladenes Zertifikat: %s%nToken: %s +output.status=Status: +usage.synopsisHeading=Nutzung:\u0020 +usage.optionListHeading=Optionen:%n + +key-server=Adresse des verifizierenden Schlüsselservers.%nStandardmäßig: 'https://keys.openpgp.org' diff --git a/vks-java-cli/src/main/resources/msg_vks.properties b/vks-java-cli/src/main/resources/msg_vks.properties new file mode 100644 index 0000000..5ba0b01 --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_vks.properties @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Interact with Verifying Key Servers +usage.synopsisHeading=Usage:\u0020 +usage.commandListHeading=Commands:%n diff --git a/vks-java-cli/src/main/resources/msg_vks_de.properties b/vks-java-cli/src/main/resources/msg_vks_de.properties new file mode 100644 index 0000000..5b3099d --- /dev/null +++ b/vks-java-cli/src/main/resources/msg_vks_de.properties @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2022 Paul Schaub +# +# SPDX-License-Identifier: Apache-2.0 +usage.header=Interagiere mit verifizierenden Schlüsselservern +usage.synopsisHeading=Nutzung:\u0020 +usage.commandListHeading=Befehle:%n From 1d65b4b3c219a6f980ffbfe61518b15024712ede Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 25 Nov 2022 15:54:05 +0100 Subject: [PATCH 19/25] Bump bc-util to 1.72 --- version.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index d7522b0..9ca88d9 100644 --- a/version.gradle +++ b/version.gradle @@ -8,7 +8,7 @@ allprojects { isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 - bouncycastleVersion = '1.71' + bouncycastleVersion = '1.72' junitVersion = '5.8.2' jsrVersion = '3.0.2' slf4jVersion = '1.7.36' From ec59e717fcffe8d160b5426a16e9da98ae1bb818 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 25 Nov 2022 15:54:46 +0100 Subject: [PATCH 20/25] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7fc49b..a0f02a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ SPDX-License-Identifier: Apache-2.0 # Changelog +## 0.1.3-SNAPSHOT +- Bump `bc-util` to `1.72` +- Add support for resource bundles for i18n + ## 0.1.2 - Bump `slf4j` to `1.7.36` - Bump `logback` to `1.2.11` From 09f45e86db60e961d2228ac759f90d31d3f5f3f0 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 7 Jul 2023 12:43:21 +0200 Subject: [PATCH 21/25] Bump jackson-databind to 2.15.2 --- version.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index 9ca88d9..6aa27fe 100644 --- a/version.gradle +++ b/version.gradle @@ -15,6 +15,6 @@ allprojects { logbackVersion = '1.2.11' lombokVersion = '1.18.24' picocliVersion = '4.6.3' - jacksonDataBindVersion = '2.13.2.2' + jacksonDataBindVersion = '2.15.2' } } From 3f68ae57259074a1443f5b5e938f6f20f7900872 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 7 Jul 2023 12:44:00 +0200 Subject: [PATCH 22/25] Bump bcpg to 1.75 --- version.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle b/version.gradle index 6aa27fe..0788c5c 100644 --- a/version.gradle +++ b/version.gradle @@ -8,7 +8,7 @@ allprojects { isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 - bouncycastleVersion = '1.72' + bouncycastleVersion = '1.75' junitVersion = '5.8.2' jsrVersion = '3.0.2' slf4jVersion = '1.7.36' From 23cc79aaa8145555eb42d7cd3ab573f32e77cdd2 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 7 Jul 2023 12:45:48 +0200 Subject: [PATCH 23/25] Update changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0f02a9..91e6339 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ SPDX-License-Identifier: Apache-2.0 # Changelog ## 0.1.3-SNAPSHOT -- Bump `bc-util` to `1.72` +- Bump `bc-util` to `1.75` +- Bump `jackson-databind` to `2.15.2` - Add support for resource bundles for i18n ## 0.1.2 @@ -23,4 +24,4 @@ SPDX-License-Identifier: Apache-2.0 ## 0.1.0 - Initial release - - `vks-java`: Client side API to communicate with Verifying Key Servers \ No newline at end of file + - `vks-java`: Client side API to communicate with Verifying Key Servers From 32a2909c53edda0cd9dbdf78bd450e9dbf2ac946 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 7 Jul 2023 12:47:27 +0200 Subject: [PATCH 24/25] VKS-Java 0.1.3 --- CHANGELOG.md | 2 +- version.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91e6339..2f77f3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ SPDX-License-Identifier: Apache-2.0 # Changelog -## 0.1.3-SNAPSHOT +## 0.1.3 - Bump `bc-util` to `1.75` - Bump `jackson-databind` to `2.15.2` - Add support for resource bundles for i18n diff --git a/version.gradle b/version.gradle index 0788c5c..db852c2 100644 --- a/version.gradle +++ b/version.gradle @@ -5,7 +5,7 @@ allprojects { ext { shortVersion = '0.1.3' - isSnapshot = true + isSnapshot = false minAndroidSdk = 10 javaSourceCompatibility = 1.8 bouncycastleVersion = '1.75' From 57434d80cf9dbabde5301f9f9ea9bb514d76a9c7 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 7 Jul 2023 12:48:59 +0200 Subject: [PATCH 25/25] VKS-Java 0.1.4-SNAPSHOT --- version.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.gradle b/version.gradle index db852c2..c9d1def 100644 --- a/version.gradle +++ b/version.gradle @@ -4,8 +4,8 @@ allprojects { ext { - shortVersion = '0.1.3' - isSnapshot = false + shortVersion = '0.1.4' + isSnapshot = true minAndroidSdk = 10 javaSourceCompatibility = 1.8 bouncycastleVersion = '1.75'