diff --git a/crates/ely_app/src/shell/internal_pages/plugins.rs b/crates/ely_app/src/shell/internal_pages/plugins.rs index 11601dd..0f0151e 100644 --- a/crates/ely_app/src/shell/internal_pages/plugins.rs +++ b/crates/ely_app/src/shell/internal_pages/plugins.rs @@ -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::>() .join(", "); - format!("High risk permissions: {permissions}") + format!("Local package from disk. High risk permissions: {permissions}") } diff --git a/crates/ely_app/src/shell/plugins.rs b/crates/ely_app/src/shell/plugins.rs index 56b1b06..8008204 100644 --- a/crates/ely_app/src/shell/plugins.rs +++ b/crates/ely_app/src/shell/plugins.rs @@ -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) { @@ -172,7 +177,7 @@ impl ElyShell { cx: &mut Context, ) { 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, ) { let high_risk_permissions = package.manifest().high_risk_permissions().cloned().collect::>(); - 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;