From 16e1fe68382468ae25ca0d7e0df6b687933c8c44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guitaut?= Date: Mon, 22 Oct 2012 17:13:00 +0200 Subject: [PATCH 1/2] Fixes download of local files. Download of local files was broken as #download! was explicitly called on the uploader. Use of #cache_stored_file! should work for any backend. Signature of CarrierWave::SecureFile::Downloader.call() has changed. It now accepts only one argument: an uploader instance. --- lib/carrierwave/securefile/downloader.rb | 78 ++++++++++-------------- 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/lib/carrierwave/securefile/downloader.rb b/lib/carrierwave/securefile/downloader.rb index c085954..38a4c1f 100644 --- a/lib/carrierwave/securefile/downloader.rb +++ b/lib/carrierwave/securefile/downloader.rb @@ -1,47 +1,35 @@ module CarrierWave - module SecureFile - module Downloader - - class << self - - def call(uploader_model, activerecord_record, file_field) - Rails.logger.debug "Downloading using #{CarrierWave::SecureFile.cryptable}..." - file = nil - downloader = uploader_model.new - uploaded_file = activerecord_record - filename = eval("uploaded_file.#{file_field.to_s}").to_s - begin - downloader.download!(filename) - file = downloader.file.path.to_s - rescue Exception => e - Rails.logger.debug "Unable to download file: #{e}" - end - - if File.exists? file - ext_file = file + ".x1" - File.rename(file,ext_file) - configuration = CarrierWave::SecureFile.configuration - if configuration.encryption_type.downcase.to_sym == :aes - aes_key = configuration.aes_key - if activerecord_record.respond_to? :aes_key - aes_key = activerecord_record.aes_key - end - bf = CarrierWave::SecureFile::AESFileDecrypt.new(aes_key, configuration.aes_iv) - bf.do ext_file, file - else - bf = CarrierWave::SecureFile.cryptable.new(configuration.cypher) - bf.decrypt_file ext_file, file - end - File.unlink ext_file - return { :file => file, :content_type => uploaded_file.content_type } - else - # return nil if no file was found + module SecureFile + module Downloader + class << self + def call(uploader_instance) + Rails.logger.debug "Downloading using #{CarrierWave::SecureFile.cryptable}..." + uploader_instance = uploader_instance.clone + begin + uploader_instance.cache_stored_file! + @file = uploader_instance.to_s + rescue Exception => e + Rails.logger.debug "Unable to download/copy file: #{e}" + end + unless File.exists? @file.to_s Rails.logger.debug "Unable to find the target file." - nil - end - end - - end - end - end -end \ No newline at end of file + return nil + end + ext_file = @file + ".x1" + File.rename @file, ext_file + configuration = CarrierWave::SecureFile.configuration + if configuration.encryption_type.downcase.to_sym == :aes + aes_key = uploader_instance.model.aes_key rescue configuration.aes_key + bf = CarrierWave::SecureFile::AESFileDecrypt.new(aes_key, configuration.aes_iv) + bf.do ext_file, @file + else + bf = CarrierWave::SecureFile.cryptable.new(configuration.cypher) + bf.decrypt_file ext_file, @file + end + File.unlink ext_file + { :file => @file, :content_type => uploader_instance.file.content_type } + end + end + end + end +end From 611f6cd1927d42b98a20d6c53d296a8b09e64eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guitaut?= Date: Mon, 25 Mar 2013 11:04:39 +0100 Subject: [PATCH 2/2] Use crypt19-rb instead of crypt19 that no longer exists. --- Gemfile | 2 +- Gemfile.lock | 4 ++-- carrierwave_securefile.gemspec | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 2692e11..0ffa231 100644 --- a/Gemfile +++ b/Gemfile @@ -13,4 +13,4 @@ group :development do end gem 'carrierwave', '>= 0.5.8' -gem 'crypt19', '1.2.1' \ No newline at end of file +gem 'crypt19-rb', '1.2.1' diff --git a/Gemfile.lock b/Gemfile.lock index 539d200..19082b0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,7 @@ GEM carrierwave (0.6.2) activemodel (>= 3.2.0) activesupport (>= 3.2.0) - crypt19 (1.2.1) + crypt19-rb (1.2.1) git (1.2.5) i18n (0.6.1) jeweler (1.6.4) @@ -29,7 +29,7 @@ PLATFORMS DEPENDENCIES bundler carrierwave (>= 0.5.8) - crypt19 (= 1.2.1) + crypt19-rb (= 1.2.1) jeweler (~> 1.6.4) rcov shoulda diff --git a/carrierwave_securefile.gemspec b/carrierwave_securefile.gemspec index 3249c0e..e51e355 100644 --- a/carrierwave_securefile.gemspec +++ b/carrierwave_securefile.gemspec @@ -46,14 +46,14 @@ Gem::Specification.new do |s| if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_runtime_dependency(%q, [">= 0.5.8"]) - s.add_runtime_dependency(%q, ["= 1.2.1"]) + s.add_runtime_dependency(%q, ["= 1.2.1"]) s.add_development_dependency(%q, [">= 0"]) s.add_development_dependency(%q, [">= 0"]) s.add_development_dependency(%q, ["~> 1.6.4"]) s.add_development_dependency(%q, [">= 0"]) else s.add_dependency(%q, [">= 0.5.8"]) - s.add_dependency(%q, ["= 1.2.1"]) + s.add_dependency(%q, ["= 1.2.1"]) s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, ["~> 1.6.4"]) @@ -61,7 +61,7 @@ Gem::Specification.new do |s| end else s.add_dependency(%q, [">= 0.5.8"]) - s.add_dependency(%q, ["= 1.2.1"]) + s.add_dependency(%q, ["= 1.2.1"]) s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, ["~> 1.6.4"])