/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