From 0de126d6b11f987d9cec19c2e7db8208548667db Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Tue, 30 Dec 2014 22:26:25 -0600 Subject: [PATCH] support for manifest files --- models/site.rb | 15 +++++++++++---- tests/site_file_tests.rb | 6 ++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/models/site.rb b/models/site.rb index b01eae14..e2713b0d 100644 --- a/models/site.rb +++ b/models/site.rb @@ -31,7 +31,7 @@ class Site < Sequel::Model } VALID_EXTENSIONS = %w{ html htm txt text css js jpg jpeg png gif svg md markdown eot ttf woff woff2 json - geojson csv tsv mf ico pdf asc key pgp xml mid midi + geojson csv tsv mf ico pdf asc key pgp xml mid midi manifest } MINIMUM_PASSWORD_LENGTH = 5 @@ -66,7 +66,7 @@ class Site < Sequel::Model SPAM_MATCH_REGEX = ENV['RACK_ENV'] == 'test' ? /pillz/ : /#{$config['spam_smart_filter'].join('|')}/i EMAIL_SANITY_REGEX = /.+@.+\..+/i - EDITABLE_FILE_EXT = /html|htm|txt|js|css|md/i + EDITABLE_FILE_EXT = /html|htm|txt|js|css|md|manifest/i BANNED_TIME = 2592000 # 30 days in seconds TITLE_MAX = 100 @@ -462,9 +462,16 @@ class Site < Sequel::Model def self.valid_file_type?(uploaded_file) mime_type = Magic.guess_file_mime_type uploaded_file[:tempfile].path + extname = File.extname uploaded_file[:filename] - return false unless (Site::VALID_MIME_TYPES.include?(mime_type) || mime_type =~ /text/) && - Site::VALID_EXTENSIONS.include?(File.extname(uploaded_file[:filename]).sub(/^./, '').downcase) + if extname == '' + extname = uploaded_file[:filename] + end + + unless (Site::VALID_MIME_TYPES.include?(mime_type) || mime_type =~ /text/) && + Site::VALID_EXTENSIONS.include?(extname.sub(/^./, '').downcase) + return false + end # clamdscan doesn't work on travis for testing return true if ENV['TRAVIS'] == 'true' diff --git a/tests/site_file_tests.rb b/tests/site_file_tests.rb index fb8c1871..30ac82e2 100644 --- a/tests/site_file_tests.rb +++ b/tests/site_file_tests.rb @@ -39,6 +39,12 @@ describe 'site_files' do File.exists?(@site.files_path('invalidutf8.html')).must_equal true end + it 'works with manifest files' do + $debug = true + upload 'files[]' => Rack::Test::UploadedFile.new('./tests/files/.manifest', 'text/plain') + File.exists?(@site.files_path('.manifest')).must_equal true + end + it 'succeeds with index.html file' do @site.site_changed.must_equal false upload 'files[]' => Rack::Test::UploadedFile.new('./tests/files/index.html', 'text/html')