Confirm side-loaded plugin installs
This commit is contained in:
@@ -146,7 +146,7 @@ fn render_plugin_install_confirmation(
|
||||
.text_xs()
|
||||
.truncate()
|
||||
.text_color(rgb(colors::MUTED))
|
||||
.child(high_risk_permissions_label(pending)),
|
||||
.child(plugin_install_confirmation_label(pending)),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
@@ -427,12 +427,16 @@ fn plugin_audit_action_label(action: &PluginAuditAction) -> &'static str {
|
||||
}
|
||||
}
|
||||
|
||||
fn high_risk_permissions_label(pending: &PendingPluginInstall) -> String {
|
||||
fn plugin_install_confirmation_label(pending: &PendingPluginInstall) -> String {
|
||||
if !pending.requires_high_risk_confirmation() {
|
||||
return "Local package from disk requires confirmation.".to_string();
|
||||
}
|
||||
|
||||
let permissions = pending
|
||||
.high_risk_permissions()
|
||||
.iter()
|
||||
.map(|permission| permission.as_str())
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ");
|
||||
format!("High risk permissions: {permissions}")
|
||||
format!("Local package from disk. High risk permissions: {permissions}")
|
||||
}
|
||||
|
||||
@@ -34,6 +34,10 @@ impl PendingPluginInstall {
|
||||
pub(super) fn high_risk_permissions(&self) -> &[PluginPermission] {
|
||||
&self.high_risk_permissions
|
||||
}
|
||||
|
||||
pub(super) fn requires_high_risk_confirmation(&self) -> bool {
|
||||
!self.high_risk_permissions.is_empty()
|
||||
}
|
||||
}
|
||||
|
||||
impl PendingPluginUninstall {
|
||||
@@ -98,7 +102,8 @@ impl ElyShell {
|
||||
return;
|
||||
};
|
||||
|
||||
self.install_plugin_package(pending.package, true, cx);
|
||||
let high_risk_confirmed = pending.requires_high_risk_confirmation();
|
||||
self.install_plugin_package(pending.package, true, high_risk_confirmed, cx);
|
||||
}
|
||||
|
||||
pub(super) fn cancel_plugin_install(&mut self, cx: &mut Context<Self>) {
|
||||
@@ -172,7 +177,7 @@ impl ElyShell {
|
||||
cx: &mut Context<Self>,
|
||||
) {
|
||||
match result {
|
||||
Ok(package) => self.install_plugin_package(package, false, cx),
|
||||
Ok(package) => self.install_plugin_package(package, false, false, cx),
|
||||
Err(error) => {
|
||||
self.plugin_install_error = Some(error.to_string());
|
||||
self.pending_plugin_install = None;
|
||||
@@ -184,12 +189,13 @@ impl ElyShell {
|
||||
fn install_plugin_package(
|
||||
&mut self,
|
||||
package: VerifiedPluginPackage,
|
||||
local_package_confirmed: bool,
|
||||
high_risk_confirmed: bool,
|
||||
cx: &mut Context<Self>,
|
||||
) {
|
||||
let high_risk_permissions =
|
||||
package.manifest().high_risk_permissions().cloned().collect::<Vec<_>>();
|
||||
if !high_risk_confirmed && !high_risk_permissions.is_empty() {
|
||||
if !local_package_confirmed || (!high_risk_confirmed && !high_risk_permissions.is_empty()) {
|
||||
self.pending_plugin_install =
|
||||
Some(PendingPluginInstall::new(package, high_risk_permissions));
|
||||
self.plugin_install_error = None;
|
||||
|
||||
Reference in New Issue
Block a user