From b36990bb8a27a3390fedcbf06b953190b16b5d6a Mon Sep 17 00:00:00 2001 From: "vit.jonas@gmail.com" Date: Fri, 15 Jul 2011 13:45:06 +0000 Subject: [PATCH] * finished Issue 111: Garbled filenames on dmsf file forder in server side git-svn-id: http://redmine-dmsf.googlecode.com/svn/trunk/redmine_dmsf@204 5e329b0b-a2ee-ea63-e329-299493fc886d --- app/helpers/dmsf_helper.rb | 13 +++++++++++-- app/models/dmsf_file_revision.rb | 5 +++-- {app/helpers => lib}/dmsf_access_error.rb | 0 {app/helpers => lib}/dmsf_content_error.rb | 0 {app/helpers => lib}/dmsf_zip.rb | 0 5 files changed, 14 insertions(+), 4 deletions(-) rename {app/helpers => lib}/dmsf_access_error.rb (100%) rename {app/helpers => lib}/dmsf_content_error.rb (100%) rename {app/helpers => lib}/dmsf_zip.rb (100%) diff --git a/app/helpers/dmsf_helper.rb b/app/helpers/dmsf_helper.rb index bd111d16..5fd81552 100644 --- a/app/helpers/dmsf_helper.rb +++ b/app/helpers/dmsf_helper.rb @@ -17,6 +17,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require "tmpdir" +require "digest/md5" module DmsfHelper @@ -37,8 +38,16 @@ module DmsfHelper # get only the filename, not the whole path just_filename = File.basename(filename.gsub('\\\\', '/')) - # Finally, replace all non alphanumeric, hyphens or periods with underscore - just_filename.gsub(/[^\w\.\-]/,'_') + # replace all non alphanumeric, hyphens or periods with underscore + just_filename = just_filename.gsub(/[^\w\.\-]/,'_') + + unless just_filename =~ %r{^[a-zA-Z0-9_\.\-]*$} + # keep the extension if any + extension = $1 if just_filename =~ %r{(\.[a-zA-Z0-9]+)$} + just_filename = Digest::MD5.hexdigest(just_filename) << extension + end + + just_filename end def self.filetype_css(filename) diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index 954c4914..456d3f96 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -188,12 +188,13 @@ class DmsfFileRevision < ActiveRecord::Base end def new_storage_filename + raise DmsfAccessError, "File id is not set" unless self.file.id filename = DmsfHelper.sanitize_filename(self.name) timestamp = DateTime.now.strftime("%y%m%d%H%M%S") - while File.exist?(File.join(DmsfFile.storage_path, "#{timestamp}_#{self.id}_#{filename}")) + while File.exist?(File.join(DmsfFile.storage_path, "#{timestamp}_#{self.file.id}_#{filename}")) timestamp.succ! end - "#{timestamp}_#{file.id}_#{filename}" + "#{timestamp}_#{self.file.id}_#{filename}" end def copy_file_content(open_file) diff --git a/app/helpers/dmsf_access_error.rb b/lib/dmsf_access_error.rb similarity index 100% rename from app/helpers/dmsf_access_error.rb rename to lib/dmsf_access_error.rb diff --git a/app/helpers/dmsf_content_error.rb b/lib/dmsf_content_error.rb similarity index 100% rename from app/helpers/dmsf_content_error.rb rename to lib/dmsf_content_error.rb diff --git a/app/helpers/dmsf_zip.rb b/lib/dmsf_zip.rb similarity index 100% rename from app/helpers/dmsf_zip.rb rename to lib/dmsf_zip.rb