diff options
author | John Arthorne | 2009-08-12 19:40:40 +0000 |
---|---|---|
committer | John Arthorne | 2009-08-12 19:40:40 +0000 |
commit | 8132e43c4cb2b9a72066cb13c0caf23ea5cae627 (patch) | |
tree | 5983eb16db757cd2cf43f1126f5fc3a497e15007 /bundles/org.eclipse.equinox.p2.ui | |
parent | 2a6150cecdf3bf6ce86eb638a7a72804c8fdd1b3 (diff) | |
download | rt.equinox.p2-8132e43c4cb2b9a72066cb13c0caf23ea5cae627.tar.gz rt.equinox.p2-8132e43c4cb2b9a72066cb13c0caf23ea5cae627.tar.xz rt.equinox.p2-8132e43c4cb2b9a72066cb13c0caf23ea5cae627.zip |
Bug 235526 [security] No prompt for installing unsigned content
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.ui')
3 files changed, 48 insertions, 2 deletions
diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java index 5568fe20f..fc929cb4d 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/ProvUIMessages.java @@ -268,6 +268,9 @@ public class ProvUIMessages extends NLS { public static String ServiceUI_LoginDetails; public static String ServiceUI_LoginRequired; public static String ServiceUI_OK; + public static String ServiceUI_unsigned_message; + public static String ServiceUI_unsigned_title; + public static String ServiceUI_warning_title; public static String UpdateOrInstallWizardPage_Size; public static String Updates_Label; public static String UpdateWizardPage_Description; diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties index 0788a2940..867d8422d 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/p2/ui/messages.properties @@ -45,6 +45,9 @@ ServiceUI_Cancel=Cancel ServiceUI_LoginDetails=Please provide login details for {0} ServiceUI_LoginRequired=Login required ServiceUI_OK=OK +ServiceUI_unsigned_message=Warning: You are installing software that contains unsigned content. The authenticity or validity of this software cannot be established. Do you want to continue with the installation? +ServiceUI_unsigned_title=Installing unsigned content +ServiceUI_warning_title=Security Warning UpdateIUOperationLabel=Update UpdateIUCommandLabel=Up&date... UpdateIUCommandTooltip=See if updates are available for the selected items diff --git a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ValidationDialogServiceUI.java b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ValidationDialogServiceUI.java index 6eb6eb946..78078b24f 100644 --- a/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ValidationDialogServiceUI.java +++ b/bundles/org.eclipse.equinox.p2.ui/src/org/eclipse/equinox/internal/provisional/p2/ui/ValidationDialogServiceUI.java @@ -11,7 +11,7 @@ package org.eclipse.equinox.internal.provisional.p2.ui; import java.security.cert.Certificate; -import org.eclipse.core.runtime.QualifiedName; +import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.equinox.internal.p2.ui.ProvUIActivator; import org.eclipse.equinox.internal.p2.ui.ProvUIMessages; @@ -19,16 +19,36 @@ import org.eclipse.equinox.internal.p2.ui.dialogs.TrustCertificateDialog; import org.eclipse.equinox.internal.p2.ui.dialogs.UserValidationDialog; import org.eclipse.equinox.internal.p2.ui.viewers.CertificateLabelProvider; import org.eclipse.equinox.internal.provisional.p2.core.IServiceUI; +import org.eclipse.equinox.internal.provisional.p2.core.IServiceUICheckUnsigned; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.*; import org.eclipse.jface.window.Window; import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; /** * The default GUI-based implementation of {@link IServiceUI}. */ -public class ValidationDialogServiceUI implements IServiceUI { +public class ValidationDialogServiceUI implements IServiceUI, IServiceUICheckUnsigned { + /** + * Subclassed to add a cancel button to the error dialog. + */ + static class OkCancelErrorDialog extends ErrorDialog { + + public OkCancelErrorDialog(Shell parentShell, String dialogTitle, String message, IStatus status, int displayMask) { + super(parentShell, dialogTitle, message, status, displayMask); + } + + protected void createButtonsForButtonBar(Composite parent) { + // create OK and Details buttons + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); + createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true); + createDetailsButton(parent); + } + } public static final QualifiedName SUPPRESS_AUTHENTICATION_JOB_MARKER = new QualifiedName(ProvUIActivator.PLUGIN_ID, "SUPPRESS_AUTHENTICATION_REQUESTS"); //$NON-NLS-1$ @@ -128,4 +148,24 @@ public class ValidationDialogServiceUI implements IServiceUI { } return result[0]; } + + public boolean promptForUnsignedContent(final String[] details) { + final boolean[] result = new boolean[] {false}; + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + public void run() { + Shell shell = ProvUI.getDefaultParentShell(); + OkCancelErrorDialog dialog = new OkCancelErrorDialog(shell, ProvUIMessages.ServiceUI_warning_title, null, createStatus(), IStatus.WARNING); + result[0] = dialog.open() == IDialogConstants.OK_ID; + } + + private IStatus createStatus() { + MultiStatus parent = new MultiStatus(ProvUIActivator.PLUGIN_ID, 0, ProvUIMessages.ServiceUI_unsigned_message, null); + for (int i = 0; i < details.length; i++) { + parent.add(new Status(IStatus.WARNING, ProvUIActivator.PLUGIN_ID, details[i])); + } + return parent; + } + }); + return result[0]; + } } |