Remove methods from ObfuscateFilename and spec (#3347)

* Remove methods from ObfuscateFilename

* Spec ObfuscateFilename
remotes/1727458204337373841/tmp_refs/heads/signup-info-prompt
Akihiko Odaki 2017-05-30 01:14:16 +09:00 committed by Eugen Rochko
parent 7bf2d6cb06
commit 922fb74197
2 changed files with 37 additions and 13 deletions

View File

@ -4,19 +4,13 @@ module ObfuscateFilename
extend ActiveSupport::Concern
class_methods do
def obfuscate_filename(*args)
before_action { obfuscate_filename(*args) }
def obfuscate_filename(path)
before_action do
file = params.dig(*path)
next if file.nil?
file.original_filename = SecureRandom.hex(8) + File.extname(file.original_filename)
end
end
end
def obfuscate_filename(path)
file = params.dig(*path)
return if file.nil?
file.original_filename = secure_token + File.extname(file.original_filename)
end
def secure_token(length = 16)
SecureRandom.hex(length / 2)
end
end

View File

@ -0,0 +1,30 @@
# frozen_string_literal: true
require 'rails_helper'
describe ApplicationController, type: :controller do
controller do
include ObfuscateFilename
obfuscate_filename :file
def file
render plain: params[:file]&.original_filename
end
end
before do
routes.draw { get 'file' => 'anonymous#file' }
end
it 'obfusticates filename if the given parameter is specified' do
file = fixture_file_upload('files/imports.txt', 'text/plain')
post 'file', params: { file: file }
expect(response.body).to end_with '.txt'
expect(response.body).not_to include 'imports'
end
it 'does nothing if the given parameter is not specified' do
post 'file'
end
end