/hg/icedtea-web: All dialogs are able to accept answer from stan...

jvanek at icedtea.classpath.org jvanek at icedtea.classpath.org
Thu Jun 18 10:32:13 UTC 2015


changeset 7e1e9ab4824d in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=7e1e9ab4824d
author: Jiri Vanek <jvanek at redhat.com>
date: Thu Jun 18 12:29:34 2015 +0200

	All dialogs are able to accept answer from standard input and thus works in headless mode

	* netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java: turned headless/logic order. Headless is now only hanging output, not behavior.
	* netx/net/sourceforge/jnlp/resources/Messages.properties: Changed KSheadlesWarning added HeadlessDialogues AWPstdoutHint1-3 PAPstdinInfo and HDwrongValue keys for headless dialogues.
	* netx/net/sourceforge/jnlp/security/KeystorePasswordAttempter.java: headelss error changed to stdin reading. Shared code extracted to addPnewPassword
	* netx/net/sourceforge/jnlp/security/SecurityDialog.java: small refactroings createTitle, new methods, and one more abstraction upon getPanel
	* netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java: added and called processMessageInHeadless
	* netx/net/sourceforge/jnlp/security/dialogresults/AccessWarningPaneComplexReturn.java: added method returning string with all possible values
	* netx/net/sourceforge/jnlp/security/dialogresults/NamePassword.java: (readValue) got logic
	* netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java: implemented readFromStdIn and helpToStdIn
	* netx/net/sourceforge/jnlp/security/dialogs/AppletWarningPane.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/MissingPermissionsAttributePanel.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/MoreInfoPane.java:	same
	* netx/net/sourceforge/jnlp/security/dialogs/PasswordAuthenticationPane.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanel.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java: same
	* netx/net/sourceforge/jnlp/security/dialogs/remember/RememberDialog.java: logic of setOrUpdateRememberedState splited to two methods to allow headless to save added
	* netx/net/sourceforge/jnlp/security/dialogs/SecurityDialogPanel.java: written default getText method, which creates stdout message from already done gui implementations
	* netx/net/sourceforge/jnlp/util/logging/OutputController.java: added readLine method to allow simple reading of standard in
	* tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java: become NoStdOutErrTest.	Disabled most partiallYsignedTests. Hard to mock certVerifier and securityDelegate
	* tests/test-extensions/net/sourceforge/jnlp/util/logging/NoStdOutErrTest.java: enhanced to handle also stdout/err not jsut logger


diffstat:

 ChangeLog                                                                                                |   47 +++
 netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java                                            |    5 +-
 netx/net/sourceforge/jnlp/resources/Messages.properties                                                  |    8 +-
 netx/net/sourceforge/jnlp/security/KeystorePasswordAttempter.java                                        |   19 +-
 netx/net/sourceforge/jnlp/security/SecurityDialog.java                                                   |   86 ++++--
 netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java                                     |   67 +++++-
 netx/net/sourceforge/jnlp/security/dialogresults/AccessWarningPaneComplexReturn.java                     |    6 +
 netx/net/sourceforge/jnlp/security/dialogresults/NamePassword.java                                       |    3 +-
 netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java                                        |   20 +
 netx/net/sourceforge/jnlp/security/dialogs/AppletWarningPane.java                                        |    9 +
 netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java                                          |    9 +
 netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java                                            |   10 +
 netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java                                |    9 +
 netx/net/sourceforge/jnlp/security/dialogs/MissingPermissionsAttributePanel.java                         |   10 +
 netx/net/sourceforge/jnlp/security/dialogs/MoreInfoPane.java                                             |    9 +
 netx/net/sourceforge/jnlp/security/dialogs/PasswordAuthenticationPane.java                               |   11 +
 netx/net/sourceforge/jnlp/security/dialogs/SecurityDialogPanel.java                                      |   99 +++++++
 netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanel.java                |   10 +
 netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java |    9 +
 netx/net/sourceforge/jnlp/security/dialogs/remember/RememberDialog.java                                  |   18 +-
 netx/net/sourceforge/jnlp/util/logging/OutputController.java                                             |   12 +
 tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java                                   |  128 ++++++---
 tests/test-extensions/net/sourceforge/jnlp/util/logging/NoStdOutErrTest.java                             |   42 +++
 23 files changed, 561 insertions(+), 85 deletions(-)

diffs (truncated from 1129 to 500 lines):

diff -r 50571bdee6ed -r 7e1e9ab4824d ChangeLog
--- a/ChangeLog	Wed Jun 17 17:15:52 2015 +0200
+++ b/ChangeLog	Thu Jun 18 12:29:34 2015 +0200
@@ -1,3 +1,50 @@
+2015-06-18  Jiri Vanek  <jvanek at redhat.com>
+
+	All dialogs are able to accept answer from standard input and thus works in headless mode
+	* netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java: turned headless/logic
+	order. Headless is now only hanging output, not behavior.
+	* netx/net/sourceforge/jnlp/resources/Messages.properties: Changed KSheadlesWarning
+	added HeadlessDialogues AWPstdoutHint1-3 PAPstdinInfo and HDwrongValue keys
+	for headless dialogues.
+	* netx/net/sourceforge/jnlp/security/KeystorePasswordAttempter.java: headelss
+	error changed to stdin reading. Shared code extracted to addPnewPassword
+	* netx/net/sourceforge/jnlp/security/SecurityDialog.java: small refactroings
+	createTitle, new methods, and one more abstraction upon getPanel
+	* netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java: added
+	and called processMessageInHeadless
+	* netx/net/sourceforge/jnlp/security/dialogresults/AccessWarningPaneComplexReturn.java:
+	added method returning string with all possible values
+	* netx/net/sourceforge/jnlp/security/dialogresults/NamePassword.java: (readValue)
+	got logic
+	* netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java: implemented
+	readFromStdIn and helpToStdIn
+	* netx/net/sourceforge/jnlp/security/dialogs/AppletWarningPane.java: same
+	* netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java: same
+	* netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java: same
+	* netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java: same
+	* netx/net/sourceforge/jnlp/security/dialogs/MissingPermissionsAttributePanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/MoreInfoPane.java:	same
+	* netx/net/sourceforge/jnlp/security/dialogs/PasswordAuthenticationPane.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/AppTrustWarningPanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/apptrustwarningpanel/PartiallySignedAppTrustWarningPanel.java:
+	same
+	* netx/net/sourceforge/jnlp/security/dialogs/remember/RememberDialog.java: logic
+	of setOrUpdateRememberedState splited to two methods to allow headless to save
+	added 
+	* netx/net/sourceforge/jnlp/security/dialogs/SecurityDialogPanel.java: written
+	default getText method, which creates stdout message from already done gui implementations
+	* netx/net/sourceforge/jnlp/util/logging/OutputController.java: added readLine
+	method to allow simple reading of standard in
+	* tests/netx/unit/net/sourceforge/jnlp/security/SecurityDialogsTest.java:
+	become NoStdOutErrTest.	Disabled most partiallYsignedTests. Hard to mock
+	certVerifier and securityDelegate
+	* tests/test-extensions/net/sourceforge/jnlp/util/logging/NoStdOutErrTest.java:
+	enhanced to handle also stdout/err not jsut logger
+
+
 2015-06-16  Jiri Vanek  <jvanek at redhat.com>
 
 	All headless, xtrustatAll/None, shouldPrompt dialogue decisions moved into shared place
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java
--- a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java	Thu Jun 18 12:29:34 2015 +0200
@@ -832,8 +832,9 @@
         }
         //this call should endure even if (ever) will migration code be removed
         DirectoryValidator.DirectoryCheckResults r = new DirectoryValidator().ensureDirs();
-        if (!JNLPRuntime.isHeadless()) {
-            if (r.getFailures() > 0) {
+        if (r.getFailures() > 0) {
+            OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, r.getMessage());
+            if (!JNLPRuntime.isHeadless()) {
                 JOptionPane.showMessageDialog(null, r.getMessage());
             }
         }
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/resources/Messages.properties
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/resources/Messages.properties	Thu Jun 18 12:29:34 2015 +0200
@@ -525,8 +525,14 @@
 # KeyStores: set password
 KSresultUntilNow=Got {0} during keystore operation {1}. Attempts to unlock: {2}
 KSinvalidPassword=Invalid password?
-KSheadlesWarning=Headless mode currently does not support runtime-passwords
+KSheadlesWarning=Type new password and press ok. Give up by pressing return on empty line.
 KSnwPassHelp=Type new password and press ok. Give up by pressing anything else.
+HeadlessDialogues=Type `exit` to terminate ITW, or type one of the below values. Prefix answer by "R " to remember decision and by "RC " to do so for whole codebase.
+AWPstdoutHint1=You can type YES/NO or complex answer parseable by AccessWarningPaneComplexReturn.readValue.
+AWPstdoutHint2=eg: YES,D(not_found_browser,false,null,true,)M(firefox,false,null,false,)
+AWPstdoutHint3=where: global_answer,desktop_shortcut(browser_bin,fixJnlpHref,type:null_or_one_of{0},really_create)same_for_menu...
+PAPstdinInfo=Type NAME space PASSWORD. Sorry, no spaces in name, no security, keep your screen safe:
+HDwrongValue=Probably wrong value?
 
 # Deployment Configuration messages
 DCIncorrectValue=Property "{0}" has incorrect value "{1}". Possible values {2}.
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/KeystorePasswordAttempter.java
--- a/netx/net/sourceforge/jnlp/security/KeystorePasswordAttempter.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/KeystorePasswordAttempter.java	Thu Jun 18 12:29:34 2015 +0200
@@ -167,17 +167,20 @@
                     OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, s1);
                     OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, Translator.R("KSinvalidPassword"));
                     if (JNLPRuntime.isHeadless()) {
-                        OutputController.getLogger().log(Translator.R("KSheadlesWarning"));
-                        finish(firstEx);
+                        OutputController.getLogger().printOutLn(s1 + "\n" + Translator.R("KSheadlesWarning"));
+                        String s = OutputController.getLogger().readLine();
+                        if (s == null || s.trim().isEmpty()) {
+                            finish(firstEx);
+                        }
+                        //if input is null or empty , exception is thrown from finish method
+                        addPnewPassword(s, localPases);
                     } else {
                         String s = JOptionPane.showInputDialog(s1 + "\n" + Translator.R("KSnwPassHelp"));
                         if (s == null) {
                             finish(firstEx);
                         }
                         //if input is null, exception is thrown from finish method
-                        SavedPassword users = new SavedPassword(s.toCharArray());
-                        passes.add(users);
-                        localPases.add(users);
+                        addPnewPassword(s, localPases);
                     }
                     //user already read all messages, now show only last one
                     messages = "";
@@ -187,6 +190,12 @@
         return null;
     }
 
+    private void addPnewPassword(String s, List<SavedPassword> localPases) {
+        SavedPassword users = new SavedPassword(s.toCharArray());
+        passes.add(users);
+        localPases.add(users);
+    }
+
     private void finish(Exception ex) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException, IOException, CertificateException {
         if (ex instanceof KeyStoreException) {
             throw (KeyStoreException) ex;
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/SecurityDialog.java
--- a/netx/net/sourceforge/jnlp/security/SecurityDialog.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialog.java	Thu Jun 18 12:29:34 2015 +0200
@@ -223,24 +223,7 @@
     }
 
     private void initDialog() {
-        String dialogTitle = "";
-        if (dialogType == DialogType.CERT_WARNING) {
-            if (accessType == AccessType.VERIFIED)
-                dialogTitle = "Security Approval Required";
-            else
-                dialogTitle = "Security Warning";
-        } else if (dialogType == DialogType.MORE_INFO)
-            dialogTitle = "More Information";
-        else if (dialogType == DialogType.CERT_INFO)
-            dialogTitle = "Details - Certificate";
-        else if (dialogType == DialogType.ACCESS_WARNING)
-            dialogTitle = "Security Warning";
-        else if (dialogType == DialogType.APPLET_WARNING)
-            dialogTitle = "Applet Warning";
-        else if (dialogType == DialogType.PARTIALLYSIGNED_WARNING)
-            dialogTitle = "Security Warning";
-        else if (dialogType == DialogType.AUTHENTICATION)
-            dialogTitle = "Authentication Required";
+        String dialogTitle = createTitle();
 
         setTitle(dialogTitle);
         setModalityType(ModalityType.MODELESS);
@@ -277,6 +260,31 @@
         addWindowFocusListener(adapter);
     }
 
+    private String createTitle() {
+        return createTitle(dialogType, accessType);
+    }
+    private static String createTitle(DialogType dtype, AccessType atype) {
+        String dialogTitle = "";
+        if (dtype == DialogType.CERT_WARNING) {
+            if (atype == AccessType.VERIFIED)
+                dialogTitle = "Security Approval Required";
+            else
+                dialogTitle = "Security Warning";
+        } else if (dtype == DialogType.MORE_INFO)
+            dialogTitle = "More Information";
+        else if (dtype == DialogType.CERT_INFO)
+            dialogTitle = "Details - Certificate";
+        else if (dtype == DialogType.ACCESS_WARNING)
+            dialogTitle = "Security Warning";
+        else if (dtype == DialogType.APPLET_WARNING)
+            dialogTitle = "Applet Warning";
+        else if (dtype == DialogType.PARTIALLYSIGNED_WARNING)
+            dialogTitle = "Security Warning";
+        else if (dtype == DialogType.AUTHENTICATION)
+            dialogTitle = "Authentication Required";
+        return dialogTitle;
+    }
+
     public AccessType getAccessType() {
         return accessType;
     }
@@ -303,31 +311,35 @@
     /*
      * find appropriate JPanel to given Dialog, based on {@link DialogType}.
      */
-    private static SecurityDialogPanel getPanel(SecurityDialog sd) {
+    static SecurityDialogPanel getPanel(SecurityDialog sd) {
+        return getPanel(sd.dialogType, sd);
+    }
+    
+    static SecurityDialogPanel getPanel(DialogType type, SecurityDialog sd) {
         SecurityDialogPanel lpanel = null;
-        if (sd.dialogType == DialogType.CERT_WARNING) {
+        if (type == DialogType.CERT_WARNING) {
             lpanel = new CertWarningPane(sd, sd.certVerifier, (SecurityDelegate) sd.extras[0]);
-        } else if (sd.dialogType == DialogType.MORE_INFO) {
+        } else if (type == DialogType.MORE_INFO) {
             lpanel = new MoreInfoPane(sd, sd.certVerifier);
-        } else if (sd.dialogType == DialogType.CERT_INFO) {
+        } else if (type == DialogType.CERT_INFO) {
             lpanel = new CertsInfoPane(sd, sd.certVerifier);
-        } else if (sd.dialogType == DialogType.SINGLE_CERT_INFO) {
+        } else if (type == DialogType.SINGLE_CERT_INFO) {
             lpanel = new SingleCertInfoPane(sd, sd.certVerifier);
-        } else if (sd.dialogType == DialogType.ACCESS_WARNING) {
+        } else if (type == DialogType.ACCESS_WARNING) {
             lpanel = new AccessWarningPane(sd, sd.extras, sd.certVerifier);
-        } else if (sd.dialogType == DialogType.APPLET_WARNING) {
+        } else if (type == DialogType.APPLET_WARNING) {
             lpanel = new AppletWarningPane(sd, sd.certVerifier);
-        } else if (sd.dialogType == DialogType.PARTIALLYSIGNED_WARNING) {
+        } else if (type == DialogType.PARTIALLYSIGNED_WARNING) {
             lpanel = AppTrustWarningDialog.partiallySigned(sd, sd.file, (SecurityDelegate) sd.extras[0]);
-        } else if (sd.dialogType == DialogType.UNSIGNED_WARNING) {
+        } else if (type == DialogType.UNSIGNED_WARNING) {
             lpanel = AppTrustWarningDialog.unsigned(sd, sd.file); // Only necessary for applets on 'high security' or above
-        } else if (sd.dialogType == DialogType.AUTHENTICATION) {
+        } else if (type == DialogType.AUTHENTICATION) {
             lpanel = new PasswordAuthenticationPane(sd, sd.extras);
-        } else if (sd.dialogType == DialogType.UNSIGNED_EAS_NO_PERMISSIONS_WARNING) {
+        } else if (type == DialogType.UNSIGNED_EAS_NO_PERMISSIONS_WARNING) {
             lpanel = new MissingPermissionsAttributePanel(sd, sd.file.getTitle(), sd.file.getCodeBase().toExternalForm());
-        } else if (sd.dialogType == DialogType.MISSING_ALACA) {
+        } else if (type == DialogType.MISSING_ALACA) {
             lpanel = new MissingALACAttributePanel(sd, sd.file.getTitle(), (String) sd.extras[0], (String) sd.extras[1]);
-        } else if (sd.dialogType == DialogType.MATCHING_ALACA) {
+        } else if (type == DialogType.MATCHING_ALACA) {
             lpanel = AppTrustWarningDialog.matchingAlaca(sd, sd.file, (String) sd.extras[0], (String) sd.extras[1]);
         } else {
             throw new RuntimeException("Unknown value of " + sd.dialogType + ". Panel will be null. Tahts not allowed.");
@@ -410,4 +422,16 @@
         return  panel.getDefaultPositiveAnswer();
     }
 
+    String getText() {
+        return panel.getText();
+    }
+
+    DialogResult readFromStdIn(String what){
+        return panel.readFromStdIn(what);
+    }
+
+    String helpToStdIn(){
+        return panel.helpToStdIn();
+    }
+
 }
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java
--- a/netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/SecurityDialogMessageHandler.java	Thu Jun 18 12:29:34 2015 +0200
@@ -37,6 +37,8 @@
 
 package net.sourceforge.jnlp.security;
 
+import java.io.IOException;
+
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.security.AccessController;
@@ -45,7 +47,9 @@
 import java.util.concurrent.LinkedBlockingQueue;
 import net.sourceforge.jnlp.config.DeploymentConfiguration;
 import net.sourceforge.jnlp.runtime.JNLPRuntime;
+import net.sourceforge.jnlp.runtime.Translator;
 import net.sourceforge.jnlp.security.appletextendedsecurity.UnsignedAppletTrustConfirmation;
+import net.sourceforge.jnlp.security.dialogresults.BasicDialogValue;
 import net.sourceforge.jnlp.security.dialogs.remember.RememberDialog;
 import net.sourceforge.jnlp.security.dialogs.remember.RememberableDialog;
 import net.sourceforge.jnlp.security.dialogs.remember.SavedRememberAction;
@@ -124,9 +128,11 @@
             unlockMessagesClient(message);
         } else {
             
-            if (!shouldPromptUser() || isHeadless()) {
+            if (!shouldPromptUser()) {
                 message.userResponse =  dialog.getDefaultNegativeAnswer();
                 unlockMessagesClient(message);
+            } else if (isHeadless()) {
+                processMessageInHeadless(dialog, message);
             } else {
                 processMessageInGui(dialog, found, message);
             }
@@ -166,6 +172,65 @@
         dialog.setVisible(true);
     }
 
+    private void processMessageInHeadless(final SecurityDialog dialog, final SecurityDialogMessage message) {
+        try {
+            boolean keepGoing = true;
+            boolean repeatAll = true;
+            do {
+                try {
+                    if (repeatAll){
+                        OutputController.getLogger().printOutLn(dialog.getText());
+                    }
+                    OutputController.getLogger().printOutLn(Translator.R("HeadlessDialogues"));
+                    OutputController.getLogger().printOutLn(dialog.helpToStdIn());
+                    String s = OutputController.getLogger().readLine();
+                    if (s == null) {
+                         throw new IOException("Stream closed");
+                    }
+                    if (s.trim().toLowerCase().equals("exit")) {
+                        JNLPRuntime.exit(0);
+                    }
+                    boolean codebase = false;
+                    boolean remember = false;
+                    if (s.startsWith("RC ")){
+                        codebase = true;
+                        remember = true;
+                        s=s.substring(3);
+                    }
+                    if (s.startsWith("R ")){
+                        remember = true;
+                        s=s.substring(2);
+                    }
+                    message.userResponse = dialog.readFromStdIn(s);
+                    keepGoing = false;
+                    try {
+                        String value = BasicDialogValue.writeNUll();
+                        if (message.userResponse != null) {
+                            value = message.userResponse.writeValue();
+                        }
+                        RememberDialog.getInstance().setOrUpdateRememberedState(dialog, codebase, new SavedRememberAction(RememberDialog.createAction(remember, message.userResponse), value));
+                    } catch (Exception ex) {    
+                        OutputController.getLogger().log(OutputController.Level.ERROR_DEBUG, ex);
+                    }
+                } catch (IOException eex) {
+                    OutputController.getLogger().log(eex);
+                    keepGoing = false;
+                } catch (IllegalArgumentException eeex){
+                    OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, eeex.toString());
+                    OutputController.getLogger().log(OutputController.Level.ERROR_DEBUG, eeex);
+                    OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, Translator.R("HDwrongValue"));
+                    repeatAll = false;
+                } catch (Exception ex) {
+                    OutputController.getLogger().log(OutputController.Level.MESSAGE_ALL, ex.toString());
+                    OutputController.getLogger().log(OutputController.Level.ERROR_ALL, ex);
+                    repeatAll = true;
+                }
+            } while (keepGoing);
+        } finally {
+            unlockMessagesClient(message);
+        }
+    }
+
     protected void unlockMessagesClient(final SecurityDialogMessage msg) {
         /* Allow the client to continue on the other side */
         if (msg.toDispose != null) {
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogresults/AccessWarningPaneComplexReturn.java
--- a/netx/net/sourceforge/jnlp/security/dialogresults/AccessWarningPaneComplexReturn.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogresults/AccessWarningPaneComplexReturn.java	Thu Jun 18 12:29:34 2015 +0200
@@ -36,6 +36,7 @@
  */
 package net.sourceforge.jnlp.security.dialogresults;
 
+import java.util.EnumSet;
 import java.util.Objects;
 
 public class AccessWarningPaneComplexReturn implements DialogResult {
@@ -102,6 +103,11 @@
         public static enum Shortcut {
 
             BROWSER, GENERATED_JNLP, JNLP_HREF, JAVAWS_HTML;
+            
+            public static String allValues() {
+                EnumSet<Shortcut> all = EnumSet.of(BROWSER, GENERATED_JNLP, JNLP_HREF, JAVAWS_HTML);
+                return all.toString();
+            }
         }
 
         @Override
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogresults/NamePassword.java
--- a/netx/net/sourceforge/jnlp/security/dialogresults/NamePassword.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogresults/NamePassword.java	Thu Jun 18 12:29:34 2015 +0200
@@ -69,7 +69,8 @@
     
 
      public static NamePassword readValue(String s) {
-        throw new UnsupportedOperationException("Not supported yet."); 
+        int  i = s.indexOf(" ");
+        return new NamePassword(s.substring(0,i), s.substring(i+1).toCharArray());
     }
 
     @Override
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/AccessWarningPane.java	Thu Jun 18 12:29:34 2015 +0200
@@ -68,16 +68,19 @@
 import net.sourceforge.jnlp.ShortcutDesc;
 import net.sourceforge.jnlp.config.DeploymentConfiguration;
 import net.sourceforge.jnlp.runtime.JNLPRuntime;
+import net.sourceforge.jnlp.runtime.Translator;
 import net.sourceforge.jnlp.security.CertVerifier;
 import net.sourceforge.jnlp.security.SecurityDialog;
 import net.sourceforge.jnlp.security.SecurityDialogs.AccessType;
 import net.sourceforge.jnlp.security.dialogresults.AccessWarningPaneComplexReturn;
 import net.sourceforge.jnlp.security.dialogresults.BasicDialogValue;
 import net.sourceforge.jnlp.security.dialogresults.DialogResult;
+import net.sourceforge.jnlp.security.dialogresults.YesNo;
 import net.sourceforge.jnlp.security.dialogs.remember.RememberPanelResult;
 import net.sourceforge.jnlp.security.dialogs.remember.RememberableDialog;
 import net.sourceforge.jnlp.util.FileUtils;
 import net.sourceforge.jnlp.util.XDesktopEntry;
+import net.sourceforge.jnlp.util.docprovider.formatters.formatters.PlainTextFormatter;
 
 /**
  * Provides a panel to show inside a SecurityDialog. These dialogs are
@@ -519,4 +522,21 @@
         return new AccessWarningPaneComplexReturn(true);
     }
 
+    @Override
+    public DialogResult readFromStdIn(String what) {
+        return AccessWarningPaneComplexReturn.readValue(what);
+    }
+
+    @Override
+    public String helpToStdIn() {
+        if (parent.getAccessType() == AccessType.CREATE_DESTKOP_SHORTCUT){
+            return Translator.R("AWPstdoutHint1") + PlainTextFormatter.getLineSeparator()
+                    + Translator.R("AWPstdoutHint2") + PlainTextFormatter.getLineSeparator()
+                    + Translator.R("AWPstdoutHint3", AccessWarningPaneComplexReturn.ShortcutResult.Shortcut.allValues()) + PlainTextFormatter.getLineSeparator()
+                    + Translator.R("AWPstdoutHint1") + PlainTextFormatter.getLineSeparator();
+        } else {
+            return YesNo.yes().getAllowedValues().toString();
+        }
+    }
+    
 }
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogs/AppletWarningPane.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/AppletWarningPane.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/AppletWarningPane.java	Thu Jun 18 12:29:34 2015 +0200
@@ -126,4 +126,13 @@
         return YesNoCancel.yes();
     }
 
+    @Override
+    public DialogResult readFromStdIn(String what) {
+        return YesNoCancel.readValue(what);
+    }
+    @Override
+    public String helpToStdIn() {
+        return YesNoCancel.cancel().getAllowedValues().toString();
+    }
+
 }
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/CertWarningPane.java	Thu Jun 18 12:29:34 2015 +0200
@@ -374,5 +374,14 @@
     public DialogResult getDefaultPositiveAnswer() {
         return YesNoSandbox.yes();
     }
+    
+    @Override
+    public DialogResult readFromStdIn(String what) {
+        return YesNoSandbox.readValue(what);
+    }
+    @Override
+    public String helpToStdIn() {
+        return YesNoSandbox.sandbox().getAllowedValues().toString();
+    }
 
 }
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/CertsInfoPane.java	Thu Jun 18 12:29:34 2015 +0200
@@ -360,4 +360,14 @@
     public DialogResult getDefaultPositiveAnswer() {
         return new Yes();
     }
+    
+    @Override
+    public DialogResult readFromStdIn(String what) {
+        return Yes.readValue(what);
+    }
+    
+    @Override
+    public String helpToStdIn() {
+        return new Yes().getAllowedValues().toString();
+    }
 }
diff -r 50571bdee6ed -r 7e1e9ab4824d netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java
--- a/netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java	Wed Jun 17 17:15:52 2015 +0200
+++ b/netx/net/sourceforge/jnlp/security/dialogs/MissingALACAttributePanel.java	Thu Jun 18 12:29:34 2015 +0200
@@ -202,4 +202,13 @@
         return YesNo.yes();
     }
 
+    @Override


More information about the distro-pkg-dev mailing list