totpgenerator

Generate TOTP verification codes based on encrypted GPG files.
git clone git://git.wimdupont.com/totpgenerator.git
Log | Files | Refs | README | LICENSE

commit ef25e1307fb90fd9c8e842adf03411153fa86ce7
parent d817fef363749b29f3d119f3759a05fd868b51ed
Author: Wim Dupont <wim@wimdupont.com>
Date:   Tue, 28 Feb 2023 22:57:42 +0100

focus on input window

Diffstat:
Msrc/main/java/com/wimdupont/service/GpgUtil.java | 28++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/wimdupont/service/GpgUtil.java b/src/main/java/com/wimdupont/service/GpgUtil.java @@ -18,7 +18,9 @@ import org.bouncycastle.openpgp.operator.bc.BcPBESecretKeyDecryptorBuilder; import org.bouncycastle.openpgp.operator.bc.BcPGPDigestCalculatorProvider; import org.bouncycastle.openpgp.operator.bc.BcPublicKeyDataDecryptorFactory; +import javax.swing.JLabel; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.JPasswordField; import java.io.ByteArrayOutputStream; import java.io.Console; @@ -68,20 +70,34 @@ public class GpgUtil { .orElseThrow(() -> new RuntimeException("File not found")); } - System.out.println("Type in GPG password."); + return decryptFile(new FileInputStream(file.getAbsolutePath()), getPassword()); + } + + public static char[] getPassword() { + String prompt = "Enter password"; Console cons = System.console(); char[] pwd; if (cons != null) { + System.out.println(prompt); pwd = cons.readPassword(); } else { - final JPasswordField passwordField = new JPasswordField(); - pwd = JOptionPane.showConfirmDialog(null, passwordField, "Enter password", - JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION - ? (passwordField.getPassword()) : new char[0]; + JPanel panel = new JPanel(); + final JPasswordField passwordField = new JPasswordField(10); + panel.add(new JLabel("Password")); + panel.add(passwordField); + JOptionPane pane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION) { + @Override + public void selectInitialValue() { + passwordField.requestFocusInWindow(); + } + }; + pane.createDialog(null, prompt).setVisible(true); + pwd = passwordField.getPassword().length == 0 ? new char[0] : passwordField.getPassword(); } - return decryptFile(new FileInputStream(file.getAbsolutePath()), pwd); + return pwd; } + private Properties loadProperties() { final Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("/application.properties");