card 1.19.3 → 1.19.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/VERSION +1 -1
- data/card.gemspec +1 -3
- data/db/migrate_core_cards/20160914132636_fix_mod_files.rb +25 -0
- data/lib/card.rb +0 -2
- data/lib/card/content/diff.rb +3 -4
- data/lib/card/format/error.rb +1 -1
- data/mod/admin/set/self/admin.rb +2 -2
- data/mod/admin/set/self/trash.rb +9 -3
- data/mod/basic_types/set/type/html.rb +1 -1
- data/mod/bootstrap/set/all/bootstrap/layout.rb +58 -0
- data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +32 -0
- data/mod/carrierwave/lib/carrier_wave/cardmount.rb +0 -2
- data/mod/carrierwave/set/abstract/attachment/upload_cache.rb +2 -1
- data/mod/core/set/all/stages.rb +6 -4
- data/mod/history/lib/card/act.rb +8 -7
- data/mod/history/set/all/history.rb +10 -8
- data/mod/machines/set/abstract/script.rb +1 -1
- data/mod/machines/set/type/css.rb +1 -1
- data/mod/pointer/set/abstract/01_pointer.rb +1 -1
- data/mod/standard/file/credit_image/image-icon.png +0 -0
- data/mod/standard/file/credit_image/image-large.png +0 -0
- data/mod/standard/file/credit_image/image-medium.png +0 -0
- data/mod/standard/file/credit_image/image-small.png +0 -0
- data/mod/standard/file/favicon/image-icon.png +0 -0
- data/mod/standard/file/favicon/image-large.png +0 -0
- data/mod/standard/file/favicon/image-medium.png +0 -0
- data/mod/standard/file/favicon/image-small.png +0 -0
- data/mod/standard/file/logo/image-icon.png +0 -0
- data/mod/standard/file/logo/image-large.png +0 -0
- data/mod/standard/file/logo/image-medium.png +0 -0
- data/mod/standard/file/logo/image-small.png +0 -0
- data/mod/standard/set/self/recent.rb +2 -2
- data/spec/lib/card/diff_spec.rb +9 -9
- metadata +19 -156
- data/vendor/carrierwave/.gitignore +0 -19
- data/vendor/carrierwave/.rubocop.yml +0 -262
- data/vendor/carrierwave/.travis.yml +0 -58
- data/vendor/carrierwave/CHANGELOG.md +0 -81
- data/vendor/carrierwave/CONTRIBUTING.md +0 -37
- data/vendor/carrierwave/Gemfile +0 -5
- data/vendor/carrierwave/README.md +0 -995
- data/vendor/carrierwave/Rakefile +0 -26
- data/vendor/carrierwave/carrierwave.gemspec +0 -45
- data/vendor/carrierwave/cucumber.yml +0 -2
- data/vendor/carrierwave/features/caching.feature +0 -28
- data/vendor/carrierwave/features/download.feature +0 -20
- data/vendor/carrierwave/features/file_storage.feature +0 -37
- data/vendor/carrierwave/features/file_storage_overridden_filename.feature +0 -38
- data/vendor/carrierwave/features/file_storage_overridden_store_dir.feature +0 -38
- data/vendor/carrierwave/features/file_storage_reversing_processor.feature +0 -43
- data/vendor/carrierwave/features/fixtures/bork.txt +0 -1
- data/vendor/carrierwave/features/fixtures/monkey.txt +0 -1
- data/vendor/carrierwave/features/fixtures/upcased_bork.txt +0 -1
- data/vendor/carrierwave/features/mount_activerecord.feature +0 -46
- data/vendor/carrierwave/features/step_definitions/activerecord_steps.rb +0 -20
- data/vendor/carrierwave/features/step_definitions/caching_steps.rb +0 -12
- data/vendor/carrierwave/features/step_definitions/datamapper_steps.rb +0 -27
- data/vendor/carrierwave/features/step_definitions/download_steps.rb +0 -8
- data/vendor/carrierwave/features/step_definitions/file_steps.rb +0 -51
- data/vendor/carrierwave/features/step_definitions/general_steps.rb +0 -102
- data/vendor/carrierwave/features/step_definitions/mount_steps.rb +0 -17
- data/vendor/carrierwave/features/step_definitions/store_steps.rb +0 -16
- data/vendor/carrierwave/features/support/activerecord.rb +0 -18
- data/vendor/carrierwave/features/support/env.rb +0 -19
- data/vendor/carrierwave/features/versions_basics.feature +0 -50
- data/vendor/carrierwave/features/versions_caching_from_versions.feature +0 -32
- data/vendor/carrierwave/features/versions_nested_versions.feature +0 -70
- data/vendor/carrierwave/features/versions_overridden_filename.feature +0 -51
- data/vendor/carrierwave/features/versions_overriden_store_dir.feature +0 -41
- data/vendor/carrierwave/gemfiles/rails-4-0-stable.gemfile +0 -5
- data/vendor/carrierwave/gemfiles/rails-4-1-stable.gemfile +0 -5
- data/vendor/carrierwave/gemfiles/rails-4-2-stable.gemfile +0 -5
- data/vendor/carrierwave/gemfiles/rails-master.gemfile +0 -11
- data/vendor/carrierwave/lib/carrierwave.rb +0 -93
- data/vendor/carrierwave/lib/carrierwave/compatibility/paperclip.rb +0 -103
- data/vendor/carrierwave/lib/carrierwave/error.rb +0 -8
- data/vendor/carrierwave/lib/carrierwave/locale/cs.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/de.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/el.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/en.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/es.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/fr-CA.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/fr.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/id.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/ja.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/nb.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/nl.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/pl.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/pt-BR.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/pt-PT.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/ru.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/sk.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/tr.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/zh-CN.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/locale/zh-TW.yml +0 -14
- data/vendor/carrierwave/lib/carrierwave/mount.rb +0 -444
- data/vendor/carrierwave/lib/carrierwave/mounter.rb +0 -163
- data/vendor/carrierwave/lib/carrierwave/orm/activerecord.rb +0 -103
- data/vendor/carrierwave/lib/carrierwave/processing.rb +0 -2
- data/vendor/carrierwave/lib/carrierwave/processing/mini_magick.rb +0 -328
- data/vendor/carrierwave/lib/carrierwave/processing/rmagick.rb +0 -379
- data/vendor/carrierwave/lib/carrierwave/sanitized_file.rb +0 -348
- data/vendor/carrierwave/lib/carrierwave/storage.rb +0 -2
- data/vendor/carrierwave/lib/carrierwave/storage/abstract.rb +0 -43
- data/vendor/carrierwave/lib/carrierwave/storage/file.rb +0 -118
- data/vendor/carrierwave/lib/carrierwave/storage/fog.rb +0 -462
- data/vendor/carrierwave/lib/carrierwave/test/matchers.rb +0 -394
- data/vendor/carrierwave/lib/carrierwave/uploader.rb +0 -67
- data/vendor/carrierwave/lib/carrierwave/uploader/cache.rb +0 -207
- data/vendor/carrierwave/lib/carrierwave/uploader/callbacks.rb +0 -33
- data/vendor/carrierwave/lib/carrierwave/uploader/configuration.rb +0 -203
- data/vendor/carrierwave/lib/carrierwave/uploader/content_type_blacklist.rb +0 -48
- data/vendor/carrierwave/lib/carrierwave/uploader/content_type_whitelist.rb +0 -48
- data/vendor/carrierwave/lib/carrierwave/uploader/default_url.rb +0 -17
- data/vendor/carrierwave/lib/carrierwave/uploader/download.rb +0 -92
- data/vendor/carrierwave/lib/carrierwave/uploader/extension_blacklist.rb +0 -51
- data/vendor/carrierwave/lib/carrierwave/uploader/extension_whitelist.rb +0 -51
- data/vendor/carrierwave/lib/carrierwave/uploader/file_size.rb +0 -41
- data/vendor/carrierwave/lib/carrierwave/uploader/magic_mime_blacklist.rb +0 -94
- data/vendor/carrierwave/lib/carrierwave/uploader/magic_mime_whitelist.rb +0 -94
- data/vendor/carrierwave/lib/carrierwave/uploader/mountable.rb +0 -38
- data/vendor/carrierwave/lib/carrierwave/uploader/processing.rb +0 -88
- data/vendor/carrierwave/lib/carrierwave/uploader/proxy.rb +0 -86
- data/vendor/carrierwave/lib/carrierwave/uploader/remove.rb +0 -21
- data/vendor/carrierwave/lib/carrierwave/uploader/serialization.rb +0 -28
- data/vendor/carrierwave/lib/carrierwave/uploader/store.rb +0 -93
- data/vendor/carrierwave/lib/carrierwave/uploader/url.rb +0 -41
- data/vendor/carrierwave/lib/carrierwave/uploader/versions.rb +0 -295
- data/vendor/carrierwave/lib/carrierwave/utilities.rb +0 -6
- data/vendor/carrierwave/lib/carrierwave/utilities/uri.rb +0 -21
- data/vendor/carrierwave/lib/carrierwave/validations/active_model.rb +0 -78
- data/vendor/carrierwave/lib/carrierwave/version.rb +0 -3
- data/vendor/carrierwave/lib/generators/templates/uploader.rb +0 -49
- data/vendor/carrierwave/lib/generators/uploader_generator.rb +0 -7
- data/vendor/carrierwave/script/console +0 -10
- data/vendor/carrierwave/script/destroy +0 -14
- data/vendor/carrierwave/script/generate +0 -14
- data/vendor/carrierwave/spec/compatibility/paperclip_spec.rb +0 -138
- data/vendor/carrierwave/spec/fixtures/Uppercase.jpg +0 -1
- data/vendor/carrierwave/spec/fixtures/bork.ttxt +0 -1
- data/vendor/carrierwave/spec/fixtures/bork.txt +0 -1
- data/vendor/carrierwave/spec/fixtures/bork.txtt +0 -1
- data/vendor/carrierwave/spec/fixtures/case.JPG +0 -1
- data/vendor/carrierwave/spec/fixtures/landscape.jpg +0 -0
- data/vendor/carrierwave/spec/fixtures/multi_page.pdf +0 -0
- data/vendor/carrierwave/spec/fixtures/new.jpeg +0 -1
- data/vendor/carrierwave/spec/fixtures/new.txt +0 -1
- data/vendor/carrierwave/spec/fixtures/old.jpeg +0 -1
- data/vendor/carrierwave/spec/fixtures/old.txt +0 -1
- data/vendor/carrierwave/spec/fixtures/portrait.jpg +0 -0
- data/vendor/carrierwave/spec/fixtures/ruby.gif +0 -0
- data/vendor/carrierwave/spec/fixtures/sponsored.doc +0 -1
- data/vendor/carrierwave/spec/fixtures/test+.jpg +0 -1
- data/vendor/carrierwave/spec/fixtures/test.jpeg +0 -1
- data/vendor/carrierwave/spec/fixtures/test.jpg +0 -1
- data/vendor/carrierwave/spec/generators/uploader_generator_spec.rb +0 -19
- data/vendor/carrierwave/spec/mount_multiple_spec.rb +0 -913
- data/vendor/carrierwave/spec/mount_single_spec.rb +0 -793
- data/vendor/carrierwave/spec/orm/activerecord_spec.rb +0 -1556
- data/vendor/carrierwave/spec/processing/mini_magick_spec.rb +0 -210
- data/vendor/carrierwave/spec/processing/rmagick_spec.rb +0 -250
- data/vendor/carrierwave/spec/sanitized_file_spec.rb +0 -805
- data/vendor/carrierwave/spec/spec_helper.rb +0 -105
- data/vendor/carrierwave/spec/storage/file_spec.rb +0 -82
- data/vendor/carrierwave/spec/storage/fog_credentials.rb +0 -46
- data/vendor/carrierwave/spec/storage/fog_helper.rb +0 -428
- data/vendor/carrierwave/spec/storage/fog_spec.rb +0 -48
- data/vendor/carrierwave/spec/support/activerecord.rb +0 -31
- data/vendor/carrierwave/spec/support/file_utils_helper.rb +0 -15
- data/vendor/carrierwave/spec/uploader/cache_spec.rb +0 -324
- data/vendor/carrierwave/spec/uploader/callback_spec.rb +0 -30
- data/vendor/carrierwave/spec/uploader/configuration_spec.rb +0 -133
- data/vendor/carrierwave/spec/uploader/content_type_blacklist_spec.rb +0 -61
- data/vendor/carrierwave/spec/uploader/content_type_whitelist_spec.rb +0 -63
- data/vendor/carrierwave/spec/uploader/default_url_spec.rb +0 -77
- data/vendor/carrierwave/spec/uploader/download_spec.rb +0 -204
- data/vendor/carrierwave/spec/uploader/extension_blacklist_spec.rb +0 -112
- data/vendor/carrierwave/spec/uploader/extension_whitelist_spec.rb +0 -102
- data/vendor/carrierwave/spec/uploader/file_size_spec.rb +0 -52
- data/vendor/carrierwave/spec/uploader/mountable_spec.rb +0 -26
- data/vendor/carrierwave/spec/uploader/overrides_spec.rb +0 -71
- data/vendor/carrierwave/spec/uploader/paths_spec.rb +0 -18
- data/vendor/carrierwave/spec/uploader/processing_spec.rb +0 -159
- data/vendor/carrierwave/spec/uploader/proxy_spec.rb +0 -79
- data/vendor/carrierwave/spec/uploader/remove_spec.rb +0 -71
- data/vendor/carrierwave/spec/uploader/store_spec.rb +0 -400
- data/vendor/carrierwave/spec/uploader/url_spec.rb +0 -273
- data/vendor/carrierwave/spec/uploader/versions_spec.rb +0 -633
@@ -1,48 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
module ContentTypeWhitelist
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
before :cache, :check_content_type_whitelist!
|
8
|
-
end
|
9
|
-
|
10
|
-
##
|
11
|
-
# Override this method in your uploader to provide a whitelist of files content types
|
12
|
-
# which are allowed to be uploaded.
|
13
|
-
# Not only strings but Regexp are allowed as well.
|
14
|
-
#
|
15
|
-
# === Returns
|
16
|
-
#
|
17
|
-
# [NilClass, String, Regexp, Array[String, Regexp]] a whitelist of content types which are allowed to be uploaded
|
18
|
-
#
|
19
|
-
# === Examples
|
20
|
-
#
|
21
|
-
# def content_type_whitelist
|
22
|
-
# %w(text/json application/json)
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# Basically the same, but using a Regexp:
|
26
|
-
#
|
27
|
-
# def content_type_whitelist
|
28
|
-
# [/(text|application)\/json/]
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
def content_type_whitelist; end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def check_content_type_whitelist!(new_file)
|
36
|
-
content_type = new_file.content_type
|
37
|
-
if content_type_whitelist && !whitelisted_content_type?(content_type)
|
38
|
-
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.content_type_whitelist_error", content_type: content_type)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def whitelisted_content_type?(content_type)
|
43
|
-
Array(content_type_whitelist).any? { |item| content_type =~ /#{item}/ }
|
44
|
-
end
|
45
|
-
|
46
|
-
end # ContentTypeWhitelist
|
47
|
-
end # Uploader
|
48
|
-
end # CarrierWave
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
module DefaultUrl
|
4
|
-
|
5
|
-
def url(*args)
|
6
|
-
super || default_url(*args)
|
7
|
-
end
|
8
|
-
|
9
|
-
##
|
10
|
-
# Override this method in your uploader to provide a default url
|
11
|
-
# in case no file has been cached/stored yet.
|
12
|
-
#
|
13
|
-
def default_url(*args); end
|
14
|
-
|
15
|
-
end # DefaultPath
|
16
|
-
end # Uploader
|
17
|
-
end # CarrierWave
|
@@ -1,92 +0,0 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
|
3
|
-
module CarrierWave
|
4
|
-
module Uploader
|
5
|
-
module Download
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
include CarrierWave::Uploader::Callbacks
|
9
|
-
include CarrierWave::Uploader::Configuration
|
10
|
-
include CarrierWave::Uploader::Cache
|
11
|
-
|
12
|
-
class RemoteFile
|
13
|
-
def initialize(uri)
|
14
|
-
@uri = uri
|
15
|
-
end
|
16
|
-
|
17
|
-
def original_filename
|
18
|
-
filename = filename_from_header || File.basename(file.base_uri.path)
|
19
|
-
mime_type = MIME::Types[file.content_type].first
|
20
|
-
unless File.extname(filename).present? || mime_type.blank?
|
21
|
-
filename = "#{filename}.#{mime_type.extensions.first}"
|
22
|
-
end
|
23
|
-
filename
|
24
|
-
end
|
25
|
-
|
26
|
-
def respond_to?(*args)
|
27
|
-
super or file.respond_to?(*args)
|
28
|
-
end
|
29
|
-
|
30
|
-
def http?
|
31
|
-
@uri.scheme =~ /^https?$/
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def file
|
37
|
-
if @file.blank?
|
38
|
-
@file = Kernel.open(@uri.to_s, "User-Agent" => "CarrierWave/#{CarrierWave::VERSION}")
|
39
|
-
@file = @file.is_a?(String) ? StringIO.new(@file) : @file
|
40
|
-
end
|
41
|
-
@file
|
42
|
-
|
43
|
-
rescue StandardError => e
|
44
|
-
raise CarrierWave::DownloadError, "could not download file: #{e.message}"
|
45
|
-
end
|
46
|
-
|
47
|
-
def filename_from_header
|
48
|
-
if file.meta.include? 'content-disposition'
|
49
|
-
match = file.meta['content-disposition'].match(/filename="?([^"]+)/)
|
50
|
-
return match[1] unless match.nil? || match[1].empty?
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def method_missing(*args, &block)
|
55
|
-
file.send(*args, &block)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
##
|
60
|
-
# Caches the file by downloading it from the given URL.
|
61
|
-
#
|
62
|
-
# === Parameters
|
63
|
-
#
|
64
|
-
# [url (String)] The URL where the remote file is stored
|
65
|
-
#
|
66
|
-
def download!(uri)
|
67
|
-
processed_uri = process_uri(uri)
|
68
|
-
file = RemoteFile.new(processed_uri)
|
69
|
-
raise CarrierWave::DownloadError, "trying to download a file which is not served over HTTP" unless file.http?
|
70
|
-
cache!(file)
|
71
|
-
end
|
72
|
-
|
73
|
-
##
|
74
|
-
# Processes the given URL by parsing and escaping it. Public to allow overriding.
|
75
|
-
#
|
76
|
-
# === Parameters
|
77
|
-
#
|
78
|
-
# [url (String)] The URL where the remote file is stored
|
79
|
-
#
|
80
|
-
def process_uri(uri)
|
81
|
-
URI.parse(uri)
|
82
|
-
rescue URI::InvalidURIError
|
83
|
-
uri_parts = uri.split('?')
|
84
|
-
# regexp from Ruby's URI::Parser#regexp[:UNSAFE], with [] specifically removed
|
85
|
-
encoded_uri = URI.encode(uri_parts.shift, /[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,]/)
|
86
|
-
encoded_uri << '?' << URI.encode(uri_parts.join('?')) if uri_parts.any?
|
87
|
-
URI.parse(encoded_uri) rescue raise CarrierWave::DownloadError, "couldn't parse URL"
|
88
|
-
end
|
89
|
-
|
90
|
-
end # Download
|
91
|
-
end # Uploader
|
92
|
-
end # CarrierWave
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
module ExtensionBlacklist
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
before :cache, :check_extension_blacklist!
|
8
|
-
end
|
9
|
-
|
10
|
-
##
|
11
|
-
# Override this method in your uploader to provide a black list of extensions which
|
12
|
-
# are prohibited to be uploaded. Compares the file's extension case insensitive.
|
13
|
-
# Furthermore, not only strings but Regexp are allowed as well.
|
14
|
-
#
|
15
|
-
# When using a Regexp in the black list, `\A` and `\z` are automatically added to
|
16
|
-
# the Regexp expression, also case insensitive.
|
17
|
-
#
|
18
|
-
# === Returns
|
19
|
-
|
20
|
-
# [NilClass, String, Regexp, Array[String, Regexp]] a black list of extensions which are prohibited to be uploaded
|
21
|
-
#
|
22
|
-
# === Examples
|
23
|
-
#
|
24
|
-
# def extension_blacklist
|
25
|
-
# %w(swf tiff)
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# Basically the same, but using a Regexp:
|
29
|
-
#
|
30
|
-
# def extension_blacklist
|
31
|
-
# [/swf/, 'tiff']
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
|
35
|
-
def extension_blacklist; end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def check_extension_blacklist!(new_file)
|
40
|
-
extension = new_file.extension.to_s
|
41
|
-
if extension_blacklist && blacklisted_extension?(extension)
|
42
|
-
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.extension_blacklist_error", extension: new_file.extension.inspect, prohibited_types: Array(extension_blacklist).join(", "))
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def blacklisted_extension?(extension)
|
47
|
-
Array(extension_blacklist).any? { |item| extension =~ /\A#{item}\z/i }
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
module ExtensionWhitelist
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
before :cache, :check_extension_whitelist!
|
8
|
-
end
|
9
|
-
|
10
|
-
##
|
11
|
-
# Override this method in your uploader to provide a white list of extensions which
|
12
|
-
# are allowed to be uploaded. Compares the file's extension case insensitive.
|
13
|
-
# Furthermore, not only strings but Regexp are allowed as well.
|
14
|
-
#
|
15
|
-
# When using a Regexp in the white list, `\A` and `\z` are automatically added to
|
16
|
-
# the Regexp expression, also case insensitive.
|
17
|
-
#
|
18
|
-
# === Returns
|
19
|
-
#
|
20
|
-
# [NilClass, String, Regexp, Array[String, Regexp]] a white list of extensions which are allowed to be uploaded
|
21
|
-
#
|
22
|
-
# === Examples
|
23
|
-
#
|
24
|
-
# def extension_whitelist
|
25
|
-
# %w(jpg jpeg gif png)
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# Basically the same, but using a Regexp:
|
29
|
-
#
|
30
|
-
# def extension_whitelist
|
31
|
-
# [/jpe?g/, 'gif', 'png']
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
def extension_whitelist; end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def check_extension_whitelist!(new_file)
|
39
|
-
extension = new_file.extension.to_s
|
40
|
-
if extension_whitelist && !whitelisted_extension?(extension)
|
41
|
-
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.extension_whitelist_error", extension: new_file.extension.inspect, allowed_types: Array(extension_whitelist).join(", "))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def whitelisted_extension?(extension)
|
46
|
-
Array(extension_whitelist).any? { |item| extension =~ /\A#{item}\z/i }
|
47
|
-
end
|
48
|
-
|
49
|
-
end # ExtensionWhitelist
|
50
|
-
end # Uploader
|
51
|
-
end # CarrierWave
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
module FileSize
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
before :cache, :check_size!
|
8
|
-
end
|
9
|
-
|
10
|
-
##
|
11
|
-
# Override this method in your uploader to provide a Range of Size which
|
12
|
-
# are allowed to be uploaded.
|
13
|
-
# === Returns
|
14
|
-
#
|
15
|
-
# [NilClass, Range] a size range which are permitted to be uploaded
|
16
|
-
#
|
17
|
-
# === Examples
|
18
|
-
#
|
19
|
-
# def size_range
|
20
|
-
# 3256...5748
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
def size_range; end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def check_size!(new_file)
|
28
|
-
size = new_file.size
|
29
|
-
expected_size_range = size_range
|
30
|
-
if expected_size_range.is_a?(::Range)
|
31
|
-
if size < expected_size_range.min
|
32
|
-
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.min_size_error", :min_size => expected_size_range.min)
|
33
|
-
elsif size > expected_size_range.max
|
34
|
-
raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.max_size_error", :max_size => expected_size_range.max)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
end # FileSize
|
40
|
-
end # Uploader
|
41
|
-
end # CarrierWave
|
@@ -1,94 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
|
4
|
-
##
|
5
|
-
# This modules validates the content type of a file with the use of
|
6
|
-
# ruby-filemagic gem and a blacklist regular expression. If you want
|
7
|
-
# to use this, you'll need to require this file:
|
8
|
-
#
|
9
|
-
# require 'carrierwave/uploader/magic_mime_blacklist'
|
10
|
-
#
|
11
|
-
# And then include it in your uploader:
|
12
|
-
#
|
13
|
-
# class MyUploader < CarrierWave::Uploader::Base
|
14
|
-
# include CarrierWave::Uploader::MagicMimeBlacklist
|
15
|
-
#
|
16
|
-
# def blacklist_mime_type_pattern
|
17
|
-
# /image\//
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
module MagicMimeBlacklist
|
22
|
-
extend ActiveSupport::Concern
|
23
|
-
|
24
|
-
included do
|
25
|
-
begin
|
26
|
-
require "filemagic"
|
27
|
-
rescue LoadError => e
|
28
|
-
e.message << " (You may need to install the ruby-filemagic gem)"
|
29
|
-
raise e
|
30
|
-
end
|
31
|
-
|
32
|
-
before :cache, :check_blacklist_pattern!
|
33
|
-
end
|
34
|
-
|
35
|
-
##
|
36
|
-
# Override this method in your uploader to provide a black list pattern (regexp)
|
37
|
-
# of content-types which are prohibited to be uploaded.
|
38
|
-
# Compares the file's content-type.
|
39
|
-
#
|
40
|
-
# === Returns
|
41
|
-
#
|
42
|
-
# [Regexp] a black list regexp to match the content_type
|
43
|
-
#
|
44
|
-
# === Examples
|
45
|
-
#
|
46
|
-
# def blacklist_mime_type_pattern
|
47
|
-
# /(text|application)\/json/
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
def blacklist_mime_type_pattern; end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def check_blacklist_pattern!(new_file)
|
55
|
-
return if blacklist_mime_type_pattern.nil?
|
56
|
-
|
57
|
-
content_type = extract_content_type(new_file)
|
58
|
-
|
59
|
-
if content_type.match(blacklist_mime_type_pattern)
|
60
|
-
raise CarrierWave::IntegrityError,
|
61
|
-
I18n.translate(:"errors.messages.mime_type_pattern_black_list_error",
|
62
|
-
:content_type => content_type)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
##
|
67
|
-
# Extracts the content type of the given file
|
68
|
-
#
|
69
|
-
# === Returns
|
70
|
-
#
|
71
|
-
# [String] the extracted content type
|
72
|
-
#
|
73
|
-
def extract_content_type(new_file)
|
74
|
-
content_type = nil
|
75
|
-
|
76
|
-
File.open(new_file.path) do |fd|
|
77
|
-
data = fd.read(1024) || ""
|
78
|
-
content_type = filemagic.buffer(data)
|
79
|
-
end
|
80
|
-
|
81
|
-
content_type
|
82
|
-
end
|
83
|
-
|
84
|
-
##
|
85
|
-
# FileMagic object with the MAGIC_MIME_TYPE flag set
|
86
|
-
#
|
87
|
-
# @return [FileMagic] a filemagic object
|
88
|
-
def filemagic
|
89
|
-
@filemagic ||= FileMagic.new(FileMagic::MAGIC_MIME_TYPE)
|
90
|
-
end
|
91
|
-
|
92
|
-
end # MagicMimeblackList
|
93
|
-
end # Uploader
|
94
|
-
end # CarrierWave
|
@@ -1,94 +0,0 @@
|
|
1
|
-
module CarrierWave
|
2
|
-
module Uploader
|
3
|
-
|
4
|
-
##
|
5
|
-
# This modules validates the content type of a file with the use of
|
6
|
-
# ruby-filemagic gem and a whitelist regular expression. If you want
|
7
|
-
# to use this, you'll need to require this file:
|
8
|
-
#
|
9
|
-
# require 'carrierwave/uploader/magic_mime_whitelist'
|
10
|
-
#
|
11
|
-
# And then include it in your uploader:
|
12
|
-
#
|
13
|
-
# class MyUploader < CarrierWave::Uploader::Base
|
14
|
-
# include CarrierWave::Uploader::MagicMimeWhitelist
|
15
|
-
#
|
16
|
-
# def whitelist_mime_type_pattern
|
17
|
-
# /image\//
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
module MagicMimeWhitelist
|
22
|
-
extend ActiveSupport::Concern
|
23
|
-
|
24
|
-
included do
|
25
|
-
begin
|
26
|
-
require "filemagic"
|
27
|
-
rescue LoadError => e
|
28
|
-
e.message << " (You may need to install the ruby-filemagic gem)"
|
29
|
-
raise e
|
30
|
-
end
|
31
|
-
|
32
|
-
before :cache, :check_whitelist_pattern!
|
33
|
-
end
|
34
|
-
|
35
|
-
##
|
36
|
-
# Override this method in your uploader to provide a white list pattern (regexp)
|
37
|
-
# of content-types which are allowed to be uploaded.
|
38
|
-
# Compares the file's content-type.
|
39
|
-
#
|
40
|
-
# === Returns
|
41
|
-
#
|
42
|
-
# [Regexp] a white list regexp to match the content_type
|
43
|
-
#
|
44
|
-
# === Examples
|
45
|
-
#
|
46
|
-
# def whitelist_mime_type_pattern
|
47
|
-
# /(text|application)\/json/
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
def whitelist_mime_type_pattern; end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def check_whitelist_pattern!(new_file)
|
55
|
-
return if whitelist_mime_type_pattern.nil?
|
56
|
-
|
57
|
-
content_type = extract_content_type(new_file)
|
58
|
-
|
59
|
-
if !content_type.match(whitelist_mime_type_pattern)
|
60
|
-
raise CarrierWave::IntegrityError,
|
61
|
-
I18n.translate(:"errors.messages.mime_type_pattern_white_list_error",
|
62
|
-
:content_type => content_type)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
##
|
67
|
-
# Extracts the content type of the given file
|
68
|
-
#
|
69
|
-
# === Returns
|
70
|
-
#
|
71
|
-
# [String] the extracted content type
|
72
|
-
#
|
73
|
-
def extract_content_type(new_file)
|
74
|
-
content_type = nil
|
75
|
-
|
76
|
-
File.open(new_file.path) do |fd|
|
77
|
-
data = fd.read(1024) || ""
|
78
|
-
content_type = filemagic.buffer(data)
|
79
|
-
end
|
80
|
-
|
81
|
-
content_type
|
82
|
-
end
|
83
|
-
|
84
|
-
##
|
85
|
-
# FileMagic object with the MAGIC_MIME_TYPE flag set
|
86
|
-
#
|
87
|
-
# @return [FileMagic] a filemagic object
|
88
|
-
def filemagic
|
89
|
-
@filemagic ||= FileMagic.new(FileMagic::MAGIC_MIME_TYPE)
|
90
|
-
end
|
91
|
-
|
92
|
-
end # MagicMimeWhiteList
|
93
|
-
end # Uploader
|
94
|
-
end # CarrierWave
|