From 99086b2e488c5fa014c04bc79efa88fb240685a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Wed, 22 Jan 2025 11:19:27 +0100 Subject: [PATCH 1/4] fix CLI and fix application shutdown --- .../slovensko/autogram/core/Autogram.java | 2 +- .../slovensko/autogram/ui/cli/CliApp.java | 15 +++++++++++---- .../slovensko/autogram/ui/cli/CliSettings.java | 1 + .../slovensko/autogram/ui/gui/GUIApp.java | 17 ++++++++++++----- .../slovensko/autogram/server/server.yml | 2 +- .../slovensko/autogram/AutogramTests.java | 1 + 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/digital/slovensko/autogram/core/Autogram.java b/src/main/java/digital/slovensko/autogram/core/Autogram.java index bd5e91a3b..c37fdd347 100644 --- a/src/main/java/digital/slovensko/autogram/core/Autogram.java +++ b/src/main/java/digital/slovensko/autogram/core/Autogram.java @@ -273,7 +273,7 @@ public boolean isPlainXmlEnabled() { return settings.isPlainXmlEnabled(); } - private void stopTokenSessionTimer() { + public void stopTokenSessionTimer() { if (tokenSessionTimer == null) return; diff --git a/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java b/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java index 973c1385e..3b7f00d9a 100644 --- a/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java +++ b/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java @@ -8,15 +8,17 @@ import java.io.File; import java.util.Arrays; +import java.util.Timer; import org.apache.commons.cli.CommandLine; public class CliApp { public static void start(CommandLine cmd) { + Autogram autogram = null; try { var settings = CliSettings.fromCmd(cmd); var ui = new CliUI(settings); - var autogram = new Autogram(ui, settings); + autogram = new Autogram(ui, settings); if (settings.getSource() == null) throw new SourceNotDefindedException(); @@ -29,24 +31,29 @@ public static void start(CommandLine cmd) { var source = settings.getSource(); var sourceList = source.isDirectory() ? source.listFiles() : new File[] { source }; + + var finalAutogram = autogram; var jobs = Arrays.stream(sourceList).filter(f -> f.isFile()) - .map(f -> SigningJob.buildFromFile(f, new SaveFileResponder(f, autogram, targetPathBuilder), + .map(f -> SigningJob.buildFromFile(f, new SaveFileResponder(f, finalAutogram, targetPathBuilder), settings.isPdfaCompliance(), settings.getSignatureLevel(), settings.isEn319132(), settings.getTspSource(), settings.isPlainXmlEnabled())) .toList(); if (settings.isPdfaCompliance()) { jobs.forEach(job -> { System.out.println("Checking PDF/A file compatibility for " + job.getDocument().getName()); - autogram.checkPDFACompliance(job); + finalAutogram.checkPDFACompliance(job); }); } ui.setJobsCount(jobs.size()); - jobs.forEach(autogram::sign); + autogram.stopTokenSessionTimer(); + } catch (AutogramException e) { System.err.println(CliUI.parseError(e)); + if (autogram != null) + autogram.stopTokenSessionTimer(); } } } diff --git a/src/main/java/digital/slovensko/autogram/ui/cli/CliSettings.java b/src/main/java/digital/slovensko/autogram/ui/cli/CliSettings.java index 2ec08fae6..dc9817d48 100644 --- a/src/main/java/digital/slovensko/autogram/ui/cli/CliSettings.java +++ b/src/main/java/digital/slovensko/autogram/ui/cli/CliSettings.java @@ -34,6 +34,7 @@ public static CliSettings fromCmd(CommandLine cmd) { settings.setTsaEnabled(settings.getTsaServer() != null); settings.setBulkEnabled(true); settings.setPlainXmlEnabled(cmd.hasOption("plain-xml")); + settings.setTokenSessionTimeout(5); return settings; } diff --git a/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java b/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java index 43c9c21b1..211bc2351 100644 --- a/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java +++ b/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java @@ -11,6 +11,7 @@ import javafx.scene.Scene; import javafx.stage.Stage; +import java.util.Timer; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -22,6 +23,7 @@ public class GUIApp extends Application { @Override public void start(Stage windowStage) throws Exception { AutogramServer server = null; + Autogram autogram = null; try { var userSettings = UserSettings.load(); @@ -29,8 +31,8 @@ public void start(Stage windowStage) throws Exception { setUserAgentStylesheet(getClass().getResource("idsk.css").toExternalForm()); var titleString = "Autogram"; - final Autogram autogram; autogram = new Autogram(new GUI(getHostServices(), userSettings), userSettings); + var finalAutogram = autogram; autogram.checkForUpdate(); autogram.initializeSignatureValidator(scheduledExecutorService, cachedExecutorService, userSettings.getTrustedList()); @@ -48,6 +50,7 @@ public void start(Stage windowStage) throws Exception { var thread = new Thread(server::stop); windowStage.setOnCloseRequest(event -> { thread.start(); + finalAutogram.stopTokenSessionTimer(); Platform.exit(); }); @@ -61,10 +64,12 @@ public void start(Stage windowStage) throws Exception { } } - if (server == null) + if (server == null) { windowStage.setOnCloseRequest(event -> { + finalAutogram.stopTokenSessionTimer(); Platform.exit(); }); + } GUIUtils.suppressDefaultFocus(windowStage, controller); windowStage.setTitle(titleString); @@ -74,12 +79,14 @@ public void start(Stage windowStage) throws Exception { } catch (Exception e) { //ak nastane chyba, zobrazíme chybové okno a ukončíme aplikáciu - final var serverFinal = server; //pomocná premenná, do lambda výrazu nižšie musí vstupovať finalna premenná + var serverFinal = server; //pomocná premenná, do lambda výrazu nižšie musí vstupovať finalna premenná + var finalAutogram = autogram; Platform.runLater(() -> { GUIUtils.showError(new UnrecognizedException(e), "Ukončiť",true); - if (serverFinal != null) { + if (serverFinal != null) new Thread(serverFinal::stop).start(); - } + + finalAutogram.stopTokenSessionTimer(); Platform.exit(); }); } diff --git a/src/main/resources/digital/slovensko/autogram/server/server.yml b/src/main/resources/digital/slovensko/autogram/server/server.yml index ec67bb90e..09508fc1a 100644 --- a/src/main/resources/digital/slovensko/autogram/server/server.yml +++ b/src/main/resources/digital/slovensko/autogram/server/server.yml @@ -13,7 +13,7 @@ info: license: name: EUPL url: https://github.com/slovensko-digital/autogram/blob/main/LICENSE - version: 2.2.0 + version: 2.3.0 servers: - url: http://localhost:37200 - url: / diff --git a/src/test/java/digital/slovensko/autogram/AutogramTests.java b/src/test/java/digital/slovensko/autogram/AutogramTests.java index 5c712ab48..f95c1753b 100644 --- a/src/test/java/digital/slovensko/autogram/AutogramTests.java +++ b/src/test/java/digital/slovensko/autogram/AutogramTests.java @@ -27,6 +27,7 @@ import java.security.KeyStore; import java.util.List; import java.util.Objects; +import java.util.Timer; import java.util.function.Consumer; import static org.mockito.ArgumentMatchers.any; From b18b57715096b321607f2e0a13d3137b5f3d74b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Mon, 27 Jan 2025 09:48:19 +0100 Subject: [PATCH 2/4] add shutdown method --- .../java/digital/slovensko/autogram/core/Autogram.java | 6 +++++- .../java/digital/slovensko/autogram/ui/cli/CliApp.java | 4 ++-- .../java/digital/slovensko/autogram/ui/gui/GUIApp.java | 9 +++++---- src/main/scripts/resources/uninstall.sh | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/digital/slovensko/autogram/core/Autogram.java b/src/main/java/digital/slovensko/autogram/core/Autogram.java index c37fdd347..b58f7679e 100644 --- a/src/main/java/digital/slovensko/autogram/core/Autogram.java +++ b/src/main/java/digital/slovensko/autogram/core/Autogram.java @@ -273,7 +273,7 @@ public boolean isPlainXmlEnabled() { return settings.isPlainXmlEnabled(); } - public void stopTokenSessionTimer() { + private void stopTokenSessionTimer() { if (tokenSessionTimer == null) return; @@ -295,4 +295,8 @@ private void resetTokenSessionTimer() { stopTokenSessionTimer(); startTokenSessionTimer(); } + + public void shutdown() { + stopTokenSessionTimer(); + } } diff --git a/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java b/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java index 3b7f00d9a..ccbf49eb5 100644 --- a/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java +++ b/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java @@ -48,12 +48,12 @@ public static void start(CommandLine cmd) { ui.setJobsCount(jobs.size()); jobs.forEach(autogram::sign); - autogram.stopTokenSessionTimer(); + autogram.shutdown(); } catch (AutogramException e) { System.err.println(CliUI.parseError(e)); if (autogram != null) - autogram.stopTokenSessionTimer(); + autogram.shutdown(); } } } diff --git a/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java b/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java index 211bc2351..c5d92c626 100644 --- a/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java +++ b/src/main/java/digital/slovensko/autogram/ui/gui/GUIApp.java @@ -11,7 +11,6 @@ import javafx.scene.Scene; import javafx.stage.Stage; -import java.util.Timer; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -50,7 +49,7 @@ public void start(Stage windowStage) throws Exception { var thread = new Thread(server::stop); windowStage.setOnCloseRequest(event -> { thread.start(); - finalAutogram.stopTokenSessionTimer(); + finalAutogram.shutdown(); Platform.exit(); }); @@ -66,7 +65,7 @@ public void start(Stage windowStage) throws Exception { if (server == null) { windowStage.setOnCloseRequest(event -> { - finalAutogram.stopTokenSessionTimer(); + finalAutogram.shutdown(); Platform.exit(); }); } @@ -86,7 +85,9 @@ public void start(Stage windowStage) throws Exception { if (serverFinal != null) new Thread(serverFinal::stop).start(); - finalAutogram.stopTokenSessionTimer(); + if (finalAutogram != null) + finalAutogram.shutdown(); + Platform.exit(); }); } diff --git a/src/main/scripts/resources/uninstall.sh b/src/main/scripts/resources/uninstall.sh index 3b1d11a1b..ef0e94926 100755 --- a/src/main/scripts/resources/uninstall.sh +++ b/src/main/scripts/resources/uninstall.sh @@ -7,6 +7,6 @@ TLS_DIR="$HOME/Library/Application Support/Autogram/tls" # Any of these might work # security remove-trusted-cert "$TLS_DIR/autogram-cert.pem" # security delete-certificate -c "localhost.arcicode.com" "$HOME/Library/Keychains/login.keychain-db" -security delete-certificate -Z $(openssl x509 -in "$TLS_DIR/autogram-cert.pem" -outform DER | shasum -a 1 ) "$HOME/Library/Keychains/login.keychain-db" +security delete-certificate -Z "$(openssl x509 -in "$TLS_DIR/autogram-cert.pem" -outform DER | shasum -a 1 )" "$HOME/Library/Keychains/login.keychain-db" rm -fr "$TLS_DIR" From 989823cccc49efd61d749eb5577754968bf41ecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Mon, 27 Jan 2025 09:50:47 +0100 Subject: [PATCH 3/4] double quote every variable in mac os sh functions --- src/main/scripts/macos-setup-keychain.sh | 6 +++--- src/main/scripts/resources/Autogram-post-image.sh | 4 ++-- .../mac-launcher/Resources/Scripts/cert-functions.sh | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/scripts/macos-setup-keychain.sh b/src/main/scripts/macos-setup-keychain.sh index 054c098bd..c7a6385f0 100755 --- a/src/main/scripts/macos-setup-keychain.sh +++ b/src/main/scripts/macos-setup-keychain.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -e -security unlock-keychain $APPLE_KEYCHAIN_PATH -security list-keychains -d user -s $APPLE_KEYCHAIN_PATH login.keychain -security default-keychain -s $APPLE_KEYCHAIN_PATH \ No newline at end of file +security unlock-keychain "$APPLE_KEYCHAIN_PATH" +security list-keychains -d user -s "$APPLE_KEYCHAIN_PATH" login.keychain +security default-keychain -s "$APPLE_KEYCHAIN_PATH" \ No newline at end of file diff --git a/src/main/scripts/resources/Autogram-post-image.sh b/src/main/scripts/resources/Autogram-post-image.sh index 77d961d0b..24e34aa35 100644 --- a/src/main/scripts/resources/Autogram-post-image.sh +++ b/src/main/scripts/resources/Autogram-post-image.sh @@ -13,6 +13,6 @@ chmod +x "$TARGET/MacOS/Autogram" # codesign changed executables ENTITLEMENTS=../../Autogram.entitlements if [[ "$JPACKAGE_MAC_SIGN" == "1" ]]; then - codesign -s "$APPLE_DEVELOPER_IDENTITY" --keychain $APPLE_KEYCHAIN_PATH --entitlements "$ENTITLEMENTS" --options=runtime --deep --timestamp --force "$TARGET/MacOS/Autogram" - codesign -s "$APPLE_DEVELOPER_IDENTITY" --keychain $APPLE_KEYCHAIN_PATH --entitlements "$ENTITLEMENTS" --options=runtime --deep --timestamp --force "$TARGET/MacOS/AutogramApp" + codesign -s "$APPLE_DEVELOPER_IDENTITY" --keychain "$APPLE_KEYCHAIN_PATH" --entitlements "$ENTITLEMENTS" --options=runtime --deep --timestamp --force "$TARGET/MacOS/Autogram" + codesign -s "$APPLE_DEVELOPER_IDENTITY" --keychain "$APPLE_KEYCHAIN_PATH" --entitlements "$ENTITLEMENTS" --options=runtime --deep --timestamp --force "$TARGET/MacOS/AutogramApp" fi \ No newline at end of file diff --git a/src/main/scripts/resources/mac-launcher/Resources/Scripts/cert-functions.sh b/src/main/scripts/resources/mac-launcher/Resources/Scripts/cert-functions.sh index f6cce634c..6eebf1ef0 100644 --- a/src/main/scripts/resources/mac-launcher/Resources/Scripts/cert-functions.sh +++ b/src/main/scripts/resources/mac-launcher/Resources/Scripts/cert-functions.sh @@ -36,11 +36,11 @@ copy_extension=copy [alt_names] DNS.1=loopback.autogram.slovensko.digital -" >$SSL_CONFIG_TMP +" >"$SSL_CONFIG_TMP" - cat $SSL_CONFIG_TMP + cat "$SSL_CONFIG_TMP" - /usr/bin/openssl req -nodes -x509 -newkey rsa:4096 -keyout "$TLS_DIR/autogram-key.pem" -out "$TLS_DIR/autogram-cert.pem" -sha256 -days 365 -config $SSL_CONFIG_TMP + /usr/bin/openssl req -nodes -x509 -newkey rsa:4096 -keyout "$TLS_DIR/autogram-key.pem" -out "$TLS_DIR/autogram-cert.pem" -sha256 -days 365 -config "$SSL_CONFIG_TMP" /usr/bin/openssl pkcs12 -export -in "$TLS_DIR/autogram-cert.pem" -inkey "$TLS_DIR/autogram-key.pem" -out "$TLS_DIR/autogram-pkcs12-cert.p12" -name "autogram-pkcs12-cert" -passout pass: @@ -52,5 +52,5 @@ DNS.1=loopback.autogram.slovensko.digital function remove_cert(){ TLS_DIR="$HOME/Library/Application Support/Autogram/tls" - security delete-certificate -Z $(openssl x509 -in "$TLS_DIR/autogram-cert.pem" -outform DER | shasum -a 1 ) "$HOME/Library/Keychains/login.keychain-db" + security delete-certificate -Z "$(openssl x509 -in "$TLS_DIR/autogram-cert.pem" -outform DER | shasum -a 1 )" "$HOME/Library/Keychains/login.keychain-db" } From b4a76411d9253c37da6a3ea9b3004fe9dd9c430a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ce=C4=BEuch?= Date: Mon, 27 Jan 2025 13:17:11 +0100 Subject: [PATCH 4/4] use finally in cliapp --- src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java b/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java index ccbf49eb5..261f94df9 100644 --- a/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java +++ b/src/main/java/digital/slovensko/autogram/ui/cli/CliApp.java @@ -48,10 +48,10 @@ public static void start(CommandLine cmd) { ui.setJobsCount(jobs.size()); jobs.forEach(autogram::sign); - autogram.shutdown(); - } catch (AutogramException e) { System.err.println(CliUI.parseError(e)); + + } finally { if (autogram != null) autogram.shutdown(); }