From 3e80a2cac58078c18c2db628d086e4c1b6a80458 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Fri, 5 Mar 2021 15:05:21 +0100 Subject: [PATCH] Setting.check_cache for each WebDAV request call --- lib/redmine_dmsf/webdav/resource_proxy.rb | 2 ++ .../webdav/dmsf_webdav_head_test.rb | 8 +++-- .../webdav/dmsf_webdav_propfind_test.rb | 35 ++++++++++++------- .../webdav/dmsf_webdav_put_test.rb | 33 ++++++++++++----- test/integration_test.rb | 5 --- 5 files changed, 55 insertions(+), 28 deletions(-) diff --git a/lib/redmine_dmsf/webdav/resource_proxy.rb b/lib/redmine_dmsf/webdav/resource_proxy.rb index eaca6c02..47383bf3 100644 --- a/lib/redmine_dmsf/webdav/resource_proxy.rb +++ b/lib/redmine_dmsf/webdav/resource_proxy.rb @@ -35,6 +35,8 @@ module RedmineDmsf attr_reader :read_only def initialize(path, request, response, options) + # Check the settings cache for each request + Setting.check_cache # Return 404 - NotFound if WebDAV is not enabled unless Setting.plugin_redmine_dmsf['dmsf_webdav'] raise NotFound diff --git a/test/integration/webdav/dmsf_webdav_head_test.rb b/test/integration/webdav/dmsf_webdav_head_test.rb index 0ded6fda..dc542b64 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -39,7 +39,9 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin assert_response :not_found - head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + head "/dmsf/webdav/#{project1_uri}", params: nil, headers: @admin assert_response :success end end @@ -56,7 +58,9 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :conflict - head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + head "/dmsf/webdav/#{project1_uri}/test.txt", params: nil, headers: @admin assert_response :success end end diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index 9b32c270..60e5e5c2 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -63,8 +63,10 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert !response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/") assert !response.body.include?("#{@project1.identifier}") # but the project name should match - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") - assert response.body.include?("#{@project1_name}") + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/") + assert response.body.include?("#{project1_name}") end end @@ -96,10 +98,13 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) assert_response :not_found - process :propfind, "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + process :propfind, "/dmsf/webdav/#{project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '0' }) assert_response :multi_status - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") - assert response.body.include?("#{@project1_name}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/") + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + assert response.body.include?("#{project1_name}") end end @@ -127,21 +132,27 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1', 'dmsf_webdav' => '1'} do process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) assert_response :not_found - process :propfind, "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + process :propfind, "/dmsf/webdav/#{project1_uri}", params: nil, headers: @admin.merge!({ HTTP_DEPTH: '1'}) assert_response :multi_status # Project - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/") + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/") # Folders - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/") + project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + project1_uri = Addressable::URI.escape(project1_name) + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@folder1.title}/") assert response.body.include?("#{@folder1.title}") - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@folder6.title}/") assert response.body.include?("#{@folder6.title}") # Files - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@file1.name}") assert response.body.include?("#{@file1.name}") - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@file9.name}") assert response.body.include?("#{@file9.name}") - assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}") + assert response.body.include?("http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@file10.name}") assert response.body.include?("#{@file10.name}") end end diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index 4ed5d610..16396f26 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -218,7 +218,10 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert_response :no_content put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", params: '1234', headers: @admin.merge!({ content_type: :text }) assert_response :no_content - with_settings plugin_redmine_dmsf: {'dmsf_webdav_ignore' => '.dump$', 'dmsf_webdav' => '1'} do + with_settings plugin_redmine_dmsf: { + 'dmsf_webdav_use_project_names' => nil, + 'dmsf_webdav_ignore' => '.dump$', + 'dmsf_webdav' => '1'} do put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) assert_response :no_content end @@ -253,7 +256,10 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert_response :created end - with_settings plugin_redmine_dmsf: {'dmsf_webdav_disable_versioning' => '.dump$', 'dmsf_webdav' => '1'} do + with_settings plugin_redmine_dmsf: { + 'dmsf_webdav_use_project_names' => nil, + 'dmsf_webdav_disable_versioning' => '.dump$', + 'dmsf_webdav' => '1'} do put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials assert_response :success file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump') @@ -301,7 +307,10 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_ignore_1b_files_on - with_settings plugin_redmine_dmsf: {'dmsf_webdav_ignore_1b_file_for_authentication' => '1', 'dmsf_webdav' => '1'} do + with_settings plugin_redmine_dmsf: { + 'dmsf_webdav_use_project_names' => nil, + 'dmsf_webdav_ignore_1b_file_for_authentication' => '1', + 'dmsf_webdav' => '1'} do put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', headers: @jsmith.merge!({ content_type: :text }) assert_response :no_content @@ -309,7 +318,10 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_ignore_1b_files_off - with_settings plugin_redmine_dmsf: {'dmsf_webdav_ignore_1b_file_for_authentication' => nil, 'dmsf_webdav' => '1'} do + with_settings plugin_redmine_dmsf: { + 'dmsf_webdav_use_project_names' => nil, + 'dmsf_webdav_ignore_1b_file_for_authentication' => nil, + 'dmsf_webdav' => '1'} do put "/dmsf/webdav/#{@project1.identifier}/1bfile.txt", params: '1', headers: @jsmith.merge!({ content_type: :text }) assert_response :created @@ -317,11 +329,14 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_files_exceeded_max_attachment_size - Setting.attachment_max_size = '1' - file_content = 'x' * 2.kilobytes - put "/dmsf/webdav/#{@project1.identifier}/2kbfile.txt", params: file_content, - headers: @jsmith.merge!({ content_type: :text }) - assert_response :unprocessable_entity + with_settings attachment_max_size: '1', plugin_redmine_dmsf: { + 'dmsf_webdav_use_project_names' => nil, + 'dmsf_webdav' => '1'} do + file_content = 'x' * 2.kilobytes + put "/dmsf/webdav/#{@project1.identifier}/2kbfile.txt", params: file_content, + headers: @jsmith.merge!({ content_type: :text }) + assert_response :unprocessable_entity + end end end \ No newline at end of file diff --git a/test/integration_test.rb b/test/integration_test.rb index 3ec77637..c5855231 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -36,10 +36,6 @@ module RedmineDmsf @someone = credentials('someone', 'foo') @anonymous = credentials('') @project1 = Project.find 1 - with_settings plugin_redmine_dmsf: {'dmsf_webdav_use_project_names' => '1'} do - @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) - end - @project1_uri = Addressable::URI.escape(@project1_name) @project2 = Project.find 2 @project3 = Project.find 3 [@project1, @project2, @project3].each do |project| @@ -62,7 +58,6 @@ module RedmineDmsf @role.add_permission! :view_dmsf_files @role.add_permission! :file_manipulation @role.add_permission! :file_delete - Setting.clear_cache Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil