use fileuploader dynamic path method in uploads manager and add spec
This commit is contained in:
parent
1263367c3f
commit
07ec2c7bd0
|
@ -15,7 +15,7 @@ class FileUploader < GitlabUploader
|
|||
prepend ObjectStorage::Extension::RecordsUploads
|
||||
|
||||
MARKDOWN_PATTERN = %r{\!?\[.*?\]\(/uploads/(?<secret>[0-9a-f]{32})/(?<file>.*?)\)}
|
||||
DYNAMIC_PATH_PATTERN = %r{(?<secret>\h{32})/(?<identifier>.*)}
|
||||
DYNAMIC_PATH_PATTERN = %r{.*(?<secret>\h{32})/(?<identifier>.*)}
|
||||
|
||||
after :remove, :prune_store_dir
|
||||
|
||||
|
@ -67,6 +67,10 @@ class FileUploader < GitlabUploader
|
|||
SecureRandom.hex
|
||||
end
|
||||
|
||||
def self.extract_dynamic_path(path)
|
||||
DYNAMIC_PATH_PATTERN.match(path)
|
||||
end
|
||||
|
||||
def upload_paths(identifier)
|
||||
[
|
||||
File.join(secret, identifier),
|
||||
|
@ -143,7 +147,7 @@ class FileUploader < GitlabUploader
|
|||
return if apply_context!(value.uploader_context)
|
||||
|
||||
# fallback to the regex based extraction
|
||||
if matches = DYNAMIC_PATH_PATTERN.match(value.path)
|
||||
if matches = self.class.extract_dynamic_path(value.path)
|
||||
@secret = matches[:secret]
|
||||
@identifier = matches[:identifier]
|
||||
end
|
||||
|
|
|
@ -43,12 +43,7 @@ module Gitlab
|
|||
private
|
||||
|
||||
def add_upload(upload)
|
||||
secret, identifier = upload.split('/').last(2)
|
||||
|
||||
uploader_context = {
|
||||
secret: secret,
|
||||
identifier: identifier
|
||||
}
|
||||
uploader_context = FileUploader.extract_dynamic_path(upload).named_captures.symbolize_keys
|
||||
|
||||
UploadService.new(@project, File.open(upload, 'r'), FileUploader, uploader_context).execute
|
||||
end
|
||||
|
|
|
@ -64,8 +64,8 @@ describe Gitlab::ImportExport::UploadsManager do
|
|||
stub_feature_flags(import_export_object_storage: true)
|
||||
stub_uploads_object_storage(FileUploader)
|
||||
|
||||
FileUtils.mkdir_p(File.join(shared.export_path, 'uploads/random'))
|
||||
FileUtils.touch(File.join(shared.export_path, 'uploads/random', "dummy.txt"))
|
||||
FileUtils.mkdir_p(File.join(shared.export_path, 'uploads/72a497a02fe3ee09edae2ed06d390038'))
|
||||
FileUtils.touch(File.join(shared.export_path, 'uploads/72a497a02fe3ee09edae2ed06d390038', "dummy.txt"))
|
||||
end
|
||||
|
||||
it 'restores the file' do
|
||||
|
|
|
@ -124,6 +124,15 @@ describe FileUploader do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.extract_dynamic_path' do
|
||||
it 'works with hashed storage' do
|
||||
path = 'export/4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a/test/uploads/72a497a02fe3ee09edae2ed06d390038/dummy.txt'
|
||||
|
||||
expect(described_class.extract_dynamic_path(path)[:identifier]).to eq('dummy.txt')
|
||||
expect(described_class.extract_dynamic_path(path)[:secret]).to eq('72a497a02fe3ee09edae2ed06d390038')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#secret' do
|
||||
it 'generates a secret if none is provided' do
|
||||
expect(described_class).to receive(:generate_secret).and_return('secret')
|
||||
|
|
Loading…
Reference in New Issue