From 895a82ad5b771a8eb664558d8e4ce475b210fc7d Mon Sep 17 00:00:00 2001 From: Jeff Ohrstrom Date: Wed, 5 Feb 2025 09:56:19 -0500 Subject: [PATCH] ensure filenames are not url encoded (#4107) --- .../path_selector/path_selector_data_table.js | 2 +- .../test/system/batch_connect_widgets_test.rb | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/app/javascript/path_selector/path_selector_data_table.js b/apps/dashboard/app/javascript/path_selector/path_selector_data_table.js index 7151dbb8f..dac07e321 100644 --- a/apps/dashboard/app/javascript/path_selector/path_selector_data_table.js +++ b/apps/dashboard/app/javascript/path_selector/path_selector_data_table.js @@ -184,7 +184,7 @@ export class PathSelectorTable { } setLastVisited(path, pathType = 'd') { - const item = { path: path, type: pathType }; + const item = { path: decodeURI(path), type: pathType }; if(path) { localStorage.setItem(this.storageKey(), JSON.stringify(item)); } diff --git a/apps/dashboard/test/system/batch_connect_widgets_test.rb b/apps/dashboard/test/system/batch_connect_widgets_test.rb index 15446992d..a06021fb5 100644 --- a/apps/dashboard/test/system/batch_connect_widgets_test.rb +++ b/apps/dashboard/test/system/batch_connect_widgets_test.rb @@ -188,6 +188,43 @@ def make_bc_app(dir, form) end end + test 'path_selector will not have URL encoded data' do + Dir.mktmpdir do |dir| + "#{dir}/app".tap { |d| Dir.mkdir(d) } + SysRouter.stubs(:base_path).returns(Pathname.new(dir)) + stub_scontrol + stub_sacctmgr + stub_git("#{dir}/app") + base_id = 'batch_connect_session_context_path' + filename = "#{Rails.root}/tmp/file with spaces" + FileUtils.touch(filename) + + form = <<~HEREDOC + --- + cluster: + - owens + form: + - path + attributes: + path: + widget: 'path_selector' + directory: "#{Rails.root}/tmp" + HEREDOC + + Pathname.new("#{dir}/app/").join('form.yml').write(form) + + visit new_batch_connect_session_context_url('sys/app') + + click_on 'Select Path' + sleep 0.5 + + find('span', text: 'file with spaces').click + find("##{base_id}_path_selector_button").click + + assert_equal(filename, find("##{base_id}").value) + end + end + test 'data-label-* allows select options to dynamically change the label of another form element' do Dir.mktmpdir do |dir| "#{dir}/app".tap { |d| Dir.mkdir(d) }