Browse Source

Remove methods from ObfuscateFilename and spec (#3347)

* Remove methods from ObfuscateFilename

* Spec ObfuscateFilename
closed-social-v3
Akihiko Odaki 7 years ago
committed by Eugen Rochko
parent
commit
922fb74197
2 changed files with 37 additions and 13 deletions
  1. +7
    -13
      app/controllers/concerns/obfuscate_filename.rb
  2. +30
    -0
      spec/controllers/concerns/obfuscate_filename_spec.rb

+ 7
- 13
app/controllers/concerns/obfuscate_filename.rb View File

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

+ 30
- 0
spec/controllers/concerns/obfuscate_filename_spec.rb 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

Loading…
Cancel
Save