summaryrefslogtreecommitdiffstats
path: root/zellij-server
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-06-14 13:44:46 +0200
committerGitHub <noreply@github.com>2023-06-14 13:44:46 +0200
commitf19334754cf1f8e6bd48bb9cdd905a2d5147e30e (patch)
tree6d29a1a05518c109bfc734edf34f3d178051196b /zellij-server
parent59239cc1133179e2825d98b5c2be7c6c3bfdcc9c (diff)
fix(plugins): allow loading relative urls (#2539)
* fix(plugins): allow loading relative urls * style(fmt): rustfmt
Diffstat (limited to 'zellij-server')
-rw-r--r--zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__start_or_reload_plugin.snap11
-rw-r--r--zellij-server/src/plugins/zellij_exports.rs13
-rw-r--r--zellij-server/src/route.rs11
-rw-r--r--zellij-server/src/screen.rs8
4 files changed, 23 insertions, 20 deletions
diff --git a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__start_or_reload_plugin.snap b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__start_or_reload_plugin.snap
index 173b0ce46..72364a88e 100644
--- a/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__start_or_reload_plugin.snap
+++ b/zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__start_or_reload_plugin.snap
@@ -1,13 +1,16 @@
---
source: zellij-server/src/plugins/./unit/plugin_tests.rs
-assertion_line: 2496
+assertion_line: 2889
expression: "format!(\"{:#?}\", new_tab_event)"
---
Some(
StartOrReloadPluginPane(
- File(
- "/path/to/my/plugin.wasm",
- ),
+ RunPlugin {
+ _allow_exec_host_cmd: false,
+ location: File(
+ "/path/to/my/plugin.wasm",
+ ),
+ },
None,
),
)
diff --git a/zellij-server/src/plugins/zellij_exports.rs b/zellij-server/src/plugins/zellij_exports.rs
index d4153ec8a..08d54c848 100644
--- a/zellij-server/src/plugins/zellij_exports.rs
+++ b/zellij-server/src/plugins/zellij_exports.rs
@@ -26,7 +26,7 @@ use zellij_utils::{
input::{
actions::Action,
command::{RunCommand, RunCommandAction, TerminalAction},
- layout::Layout,
+ layout::{Layout, RunPlugin, RunPluginLocation},
plugins::PluginType,
},
serde,
@@ -946,10 +946,19 @@ fn host_start_or_reload_plugin(env: &ForeignFunctionEnv) {
env.plugin_env.name()
)
};
+ let cwd = std::env::current_dir().unwrap_or_else(|_| PathBuf::from("."));
wasi_read_string(&env.plugin_env.wasi_env)
.and_then(|url| Url::parse(&url).map_err(|e| anyhow!("Failed to parse url: {}", e)))
.and_then(|url| {
- let action = Action::StartOrReloadPlugin(url);
+ RunPluginLocation::parse(url.as_str(), Some(cwd))
+ .map_err(|e| anyhow!("Failed to parse plugin location: {}", e))
+ })
+ .and_then(|run_plugin_location| {
+ let run_plugin = RunPlugin {
+ location: run_plugin_location,
+ _allow_exec_host_cmd: false,
+ };
+ let action = Action::StartOrReloadPlugin(run_plugin);
apply_action!(action, error_msg, env);
Ok(())
})
diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs
index 2d78ae745..7ff859462 100644
--- a/zellij-server/src/route.rs
+++ b/zellij-server/src/route.rs
@@ -17,7 +17,7 @@ use zellij_utils::{
actions::{Action, SearchDirection, SearchOption},
command::TerminalAction,
get_mode_info,
- layout::{Layout, RunPluginLocation},
+ layout::Layout,
},
ipc::{
ClientAttributes, ClientToServerMsg, ExitReason, IpcReceiverWithContext, ServerToClientMsg,
@@ -615,14 +615,9 @@ pub(crate) fn route_action(
))
.with_context(err_context)?;
},
- Action::StartOrReloadPlugin(url) => {
- let run_plugin_location =
- RunPluginLocation::parse(url.as_str()).with_context(err_context)?;
+ Action::StartOrReloadPlugin(run_plugin) => {
senders
- .send_to_screen(ScreenInstruction::StartOrReloadPluginPane(
- run_plugin_location,
- None,
- ))
+ .send_to_screen(ScreenInstruction::StartOrReloadPluginPane(run_plugin, None))
.with_context(err_context)?;
},
Action::LaunchOrFocusPlugin(run_plugin, should_float) => {
diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs
index 7401d9d77..811777481 100644
--- a/zellij-server/src/screen.rs
+++ b/zellij-server/src/screen.rs
@@ -260,7 +260,7 @@ pub enum ScreenInstruction {
NewTiledPluginPane(RunPluginLocation, Option<String>, ClientId), // Option<String> is
// optional pane title
NewFloatingPluginPane(RunPluginLocation, Option<String>, ClientId), // Option<String> is an
- StartOrReloadPluginPane(RunPluginLocation, Option<String>),
+ StartOrReloadPluginPane(RunPlugin, Option<String>),
// optional pane title
AddPlugin(
Option<bool>, // should_float
@@ -2573,14 +2573,10 @@ pub(crate) fn screen_thread_main(
size,
))?;
},
- ScreenInstruction::StartOrReloadPluginPane(run_plugin_location, pane_title) => {
+ ScreenInstruction::StartOrReloadPluginPane(run_plugin, pane_title) => {
let tab_index = screen.active_tab_indices.values().next().unwrap_or(&1);
let size = Size::default();
let should_float = Some(false);
- let run_plugin = RunPlugin {
- _allow_exec_host_cmd: false,
- location: run_plugin_location,
- };
screen
.bus
.senders