Setting.check_cache for each WebDAV request call

This commit is contained in:
karel.picman@lbcfree.net 2021-03-05 15:05:21 +01:00
parent 36d87d3f57
commit 3e80a2cac5
5 changed files with 55 additions and 28 deletions

View File

@ -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

View File

@ -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

View File

@ -63,8 +63,10 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert !response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</d:href>")
assert !response.body.include?("<d:displayname>#{@project1.identifier}</d:displayname>")
# but the project name should match
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</d:href>")
assert response.body.include?("<d:displayname>#{@project1_name}</d:displayname>")
project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_uri = Addressable::URI.escape(project1_name)
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/</d:href>")
assert response.body.include?("<d:displayname>#{project1_name}</d:displayname>")
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?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</d:href>")
assert response.body.include?("<d:displayname>#{@project1_name}</d:displayname>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/</d:href>")
project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
assert response.body.include?("<d:displayname>#{project1_name}</d:displayname>")
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?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</d:href>")
project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_uri = Addressable::URI.escape(project1_name)
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/</d:href>")
# Folders
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/</d:href>")
project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_uri = Addressable::URI.escape(project1_name)
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@folder1.title}/</d:href>")
assert response.body.include?("<d:displayname>#{@folder1.title}</d:displayname>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/</d:href>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@folder6.title}/</d:href>")
assert response.body.include?("<d:displayname>#{@folder6.title}</d:displayname>")
# Files
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}</d:href>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@file1.name}</d:href>")
assert response.body.include?("<d:displayname>#{@file1.name}</d:displayname>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}</d:href>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@file9.name}</d:href>")
assert response.body.include?("<d:displayname>#{@file9.name}</d:displayname>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}</d:href>")
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_uri}/#{@file10.name}</d:href>")
assert response.body.include?("<d:displayname>#{@file10.name}</d:displayname>")
end
end

View File

@ -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

View File

@ -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