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