diff --git a/lib/redmine_dmsf/webdav/project_resource.rb b/lib/redmine_dmsf/webdav/project_resource.rb index 1f18b2e8..fc82acdc 100644 --- a/lib/redmine_dmsf/webdav/project_resource.rb +++ b/lib/redmine_dmsf/webdav/project_resource.rb @@ -118,7 +118,7 @@ module RedmineDmsf # Characters that MATCH this regex will be replaced with dots, no more than one dot in a row. INVALID_CHARACTERS = /[\/\\\?":<>#%\*\[\]]/.freeze # = / \ ? " : < > # % * [ ] - + def self.create_project_name(p) use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] if use_project_names diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 55358999..d68275db 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -178,7 +178,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest @project1.enable_module! :dmsf # Flag module enabled delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith assert_response 404 - p1name_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", nil, @jsmith assert_response :success @folder6.reload @@ -216,7 +216,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest @role.add_permission! :file_delete delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith assert_response 404 - p1name_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", nil, @jsmith assert_response :success @file1.reload diff --git a/test/integration/webdav/dmsf_webdav_get_test.rb b/test/integration/webdav/dmsf_webdav_get_test.rb index 5efe4c9c..027b22c1 100644 --- a/test/integration/webdav/dmsf_webdav_get_test.rb +++ b/test/integration/webdav/dmsf_webdav_get_test.rb @@ -67,7 +67,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) get '/dmsf/webdav', nil, @admin assert_response :success assert_no_match @project1.identifier, response.body @@ -98,7 +98,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin assert_response 404 get "/dmsf/webdav/#{project1_uri}/test.txt", nil, @admin diff --git a/test/integration/webdav/dmsf_webdav_head_test.rb b/test/integration/webdav/dmsf_webdav_head_test.rb index d76585d2..62bda4ea 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -35,7 +35,7 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' # Temporarily enable project names Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - @project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + @project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false DmsfFile.storage_path = File.expand_path '../../../fixtures/files', __FILE__ User.current = nil diff --git a/test/integration/webdav/dmsf_webdav_mkcol_test.rb b/test/integration/webdav/dmsf_webdav_mkcol_test.rb index 96a7760c..0f2e1685 100644 --- a/test/integration/webdav/dmsf_webdav_mkcol_test.rb +++ b/test/integration/webdav/dmsf_webdav_mkcol_test.rb @@ -106,7 +106,7 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest assert_response :success Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", nil, @jsmith assert_response 404 xml_http_request :mkcol, "/dmsf/webdav/#{project1_uri}/test3", nil, @jsmith diff --git a/test/integration/webdav/dmsf_webdav_move_test.rb b/test/integration/webdav/dmsf_webdav_move_test.rb index a6b0e49f..92d3ceba 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -140,7 +140,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest file = DmsfFile.find_by_id 1 Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) new_name = "#{file.name}.moved" assert_difference 'file.dmsf_file_revisions.count', +1 do xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{file.name}", nil, @@ -188,7 +188,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest folder = DmsfFolder.find_by_id 1 Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) assert_kind_of DmsfFile, file assert_kind_of DmsfFolder, folder diff --git a/test/integration/webdav/dmsf_webdav_options_test.rb b/test/integration/webdav/dmsf_webdav_options_test.rb index ec047e7b..add44259 100644 --- a/test/integration/webdav/dmsf_webdav_options_test.rb +++ b/test/integration/webdav/dmsf_webdav_options_test.rb @@ -156,7 +156,7 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1), /\W/) xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Other'}) assert_response 404 xml_http_request :options, "/dmsf/webdav/#{project1_uri}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Other'}) diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index 393a3c00..039a54a4 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -46,7 +46,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest # Temporarily enable project names to generate names for project1 Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - @project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + @project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false RedmineDmsf::Webdav::Cache.init_nullcache end @@ -267,7 +267,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest # Rename project1 @project1.name = 'Online Cookbook' @project1.save! - project1_new_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_new_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) # PROPSTATS for / is already cached, but a new PROPSTATS should be cached for project1 assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index 909740bd..5dc4dc3b 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -102,7 +102,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert file, 'Check for files existance' Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) assert_response 409 put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) @@ -157,7 +157,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert file, 'File test-1234 was not found in projects dmsf folder.' Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true - project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) assert_response 409 put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})