carrierwave 1.2.1 → 2.1.1
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.
Potentially problematic release.
This version of carrierwave might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/README.md +80 -26
- data/lib/carrierwave/downloader/base.rb +83 -0
- data/lib/carrierwave/downloader/remote_file.rb +65 -0
- data/lib/carrierwave/locale/en.yml +1 -1
- data/lib/carrierwave/mount.rb +25 -19
- data/lib/carrierwave/mounter.rb +71 -48
- data/lib/carrierwave/orm/activerecord.rb +14 -8
- data/lib/carrierwave/processing/mini_magick.rb +101 -114
- data/lib/carrierwave/processing/rmagick.rb +18 -4
- data/lib/carrierwave/sanitized_file.rb +37 -22
- data/lib/carrierwave/storage/file.rb +7 -3
- data/lib/carrierwave/storage/fog.rb +83 -20
- data/lib/carrierwave/storage.rb +1 -0
- data/lib/carrierwave/uploader/cache.rb +23 -15
- data/lib/carrierwave/uploader/configuration.rb +29 -14
- data/lib/carrierwave/uploader/content_type_whitelist.rb +1 -1
- data/lib/carrierwave/uploader/download.rb +2 -79
- data/lib/carrierwave/uploader/mountable.rb +6 -0
- data/lib/carrierwave/uploader/proxy.rb +2 -2
- data/lib/carrierwave/uploader/serialization.rb +1 -1
- data/lib/carrierwave/uploader/store.rb +13 -2
- data/lib/carrierwave/uploader/url.rb +2 -2
- data/lib/carrierwave/uploader/versions.rb +50 -13
- data/lib/carrierwave/validations/active_model.rb +3 -3
- data/lib/carrierwave/version.rb +1 -1
- data/lib/carrierwave.rb +24 -0
- data/lib/generators/templates/uploader.rb +0 -2
- metadata +123 -26
- data/lib/carrierwave/uploader/magic_mime_blacklist.rb +0 -94
- data/lib/carrierwave/uploader/magic_mime_whitelist.rb +0 -94
@@ -7,7 +7,7 @@ module CarrierWave
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
def serializable_hash(options = nil)
|
10
|
-
{"url" => url}.merge Hash[versions.map { |name, version| [name, { "url" => version.url }] }]
|
10
|
+
{"url" => url}.merge Hash[versions.map { |name, version| [name.to_s, { "url" => version.url }] }]
|
11
11
|
end
|
12
12
|
|
13
13
|
def as_json(options=nil)
|
@@ -7,6 +7,15 @@ module CarrierWave
|
|
7
7
|
include CarrierWave::Uploader::Configuration
|
8
8
|
include CarrierWave::Uploader::Cache
|
9
9
|
|
10
|
+
included do
|
11
|
+
prepend Module.new {
|
12
|
+
def initialize(*)
|
13
|
+
super
|
14
|
+
@file, @filename, @cache_id, @identifier = nil
|
15
|
+
end
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
10
19
|
##
|
11
20
|
# Override this in your Uploader to change the filename.
|
12
21
|
#
|
@@ -52,7 +61,7 @@ module CarrierWave
|
|
52
61
|
#
|
53
62
|
def store!(new_file=nil)
|
54
63
|
cache!(new_file) if new_file && ((@cache_id != parent_cache_id) || @cache_id.nil?)
|
55
|
-
if !cache_only
|
64
|
+
if !cache_only && @file && @cache_id
|
56
65
|
with_callbacks(:store, new_file) do
|
57
66
|
new_file = storage.store!(@file)
|
58
67
|
if delete_tmp_file_after_storage
|
@@ -60,7 +69,8 @@ module CarrierWave
|
|
60
69
|
cache_storage.delete_dir!(cache_path(nil))
|
61
70
|
end
|
62
71
|
@file = new_file
|
63
|
-
@cache_id = nil
|
72
|
+
@cache_id = @identifier = nil
|
73
|
+
@staged = false
|
64
74
|
end
|
65
75
|
end
|
66
76
|
end
|
@@ -75,6 +85,7 @@ module CarrierWave
|
|
75
85
|
def retrieve_from_store!(identifier)
|
76
86
|
with_callbacks(:retrieve_from_store, identifier) do
|
77
87
|
@file = storage.retrieve!(identifier)
|
88
|
+
@identifier = identifier
|
78
89
|
end
|
79
90
|
end
|
80
91
|
|
@@ -15,8 +15,8 @@ module CarrierWave
|
|
15
15
|
# [String] the location where this file is accessible via a url
|
16
16
|
#
|
17
17
|
def url(options = {})
|
18
|
-
if file.respond_to?(:url)
|
19
|
-
file.method(:url).arity
|
18
|
+
if file.respond_to?(:url) && !(tmp_url = file.url).blank?
|
19
|
+
file.method(:url).arity.zero? ? tmp_url : file.url(options)
|
20
20
|
elsif file.respond_to?(:path)
|
21
21
|
path = encode_path(file.path.sub(File.expand_path(root), ''))
|
22
22
|
|
@@ -19,6 +19,13 @@ module CarrierWave
|
|
19
19
|
after :remove, :remove_versions!
|
20
20
|
after :retrieve_from_cache, :retrieve_versions_from_cache!
|
21
21
|
after :retrieve_from_store, :retrieve_versions_from_store!
|
22
|
+
|
23
|
+
prepend Module.new {
|
24
|
+
def initialize(*)
|
25
|
+
super
|
26
|
+
@versions = nil
|
27
|
+
end
|
28
|
+
}
|
22
29
|
end
|
23
30
|
|
24
31
|
module ClassMethods
|
@@ -77,7 +84,7 @@ module CarrierWave
|
|
77
84
|
# value from the parent class unless explicitly overwritten
|
78
85
|
def self.enable_processing(value=nil)
|
79
86
|
self.enable_processing = value if value
|
80
|
-
if !@enable_processing.nil?
|
87
|
+
if defined?(@enable_processing) && !@enable_processing.nil?
|
81
88
|
@enable_processing
|
82
89
|
else
|
83
90
|
superclass.enable_processing
|
@@ -213,16 +220,18 @@ module CarrierWave
|
|
213
220
|
# Recreate versions and reprocess them. This can be used to recreate
|
214
221
|
# versions if their parameters somehow have changed.
|
215
222
|
#
|
216
|
-
def recreate_versions!(*
|
223
|
+
def recreate_versions!(*names)
|
217
224
|
# Some files could possibly not be stored on the local disk. This
|
218
225
|
# doesn't play nicely with processing. Make sure that we're only
|
219
226
|
# processing a cached file
|
220
227
|
#
|
221
228
|
# The call to store! will trigger the necessary callbacks to both
|
222
229
|
# process this version and all sub-versions
|
223
|
-
|
224
|
-
|
225
|
-
|
230
|
+
|
231
|
+
if names.any?
|
232
|
+
set_versions_to_cache_and_store(names)
|
233
|
+
store!(file)
|
234
|
+
reset_versions_to_cache_and_store
|
226
235
|
else
|
227
236
|
cache! if !cached?
|
228
237
|
store!
|
@@ -230,6 +239,39 @@ module CarrierWave
|
|
230
239
|
end
|
231
240
|
|
232
241
|
private
|
242
|
+
|
243
|
+
def set_versions_to_cache_and_store(names)
|
244
|
+
@versions_to_cache = source_versions_of(names)
|
245
|
+
@versions_to_store = active_versions_with_names_in(@versions_to_cache + names)
|
246
|
+
end
|
247
|
+
|
248
|
+
def reset_versions_to_cache_and_store
|
249
|
+
@versions_to_cache, @versions_to_store = nil, nil
|
250
|
+
end
|
251
|
+
|
252
|
+
def versions_to_cache
|
253
|
+
@versions_to_cache || dependent_versions
|
254
|
+
end
|
255
|
+
|
256
|
+
def versions_to_store
|
257
|
+
@versions_to_store || active_versions
|
258
|
+
end
|
259
|
+
|
260
|
+
def source_versions_of(requested_names)
|
261
|
+
versions.inject([]) do |sources, (name, uploader)|
|
262
|
+
next sources unless requested_names.include?(name)
|
263
|
+
next sources unless source_name = uploader.class.version_options[:from_version]
|
264
|
+
|
265
|
+
sources << [source_name, versions[source_name]]
|
266
|
+
end.uniq
|
267
|
+
end
|
268
|
+
|
269
|
+
def active_versions_with_names_in(names)
|
270
|
+
active_versions.select do |pretendent_name, uploader|
|
271
|
+
names.include?(pretendent_name)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
233
275
|
def assign_parent_cache_id(file)
|
234
276
|
active_versions.each do |name, uploader|
|
235
277
|
uploader.parent_cache_id = @cache_id
|
@@ -263,19 +305,14 @@ module CarrierWave
|
|
263
305
|
end
|
264
306
|
|
265
307
|
def cache_versions!(new_file)
|
266
|
-
|
308
|
+
versions_to_cache.each do |name, v|
|
267
309
|
v.send(:cache_id=, @cache_id)
|
268
310
|
v.cache!(new_file)
|
269
311
|
end
|
270
312
|
end
|
271
313
|
|
272
|
-
def store_versions!(new_file
|
273
|
-
|
274
|
-
active = Hash[active_versions]
|
275
|
-
versions.each { |v| active[v].try(:store!, new_file) } unless active.empty?
|
276
|
-
else
|
277
|
-
active_versions.each { |name, v| v.store!(new_file) }
|
278
|
-
end
|
314
|
+
def store_versions!(new_file)
|
315
|
+
versions_to_store.each { |name, v| v.store!(new_file) }
|
279
316
|
end
|
280
317
|
|
281
318
|
def remove_versions!
|
@@ -11,7 +11,7 @@ module CarrierWave
|
|
11
11
|
class ProcessingValidator < ::ActiveModel::EachValidator
|
12
12
|
|
13
13
|
def validate_each(record, attribute, value)
|
14
|
-
|
14
|
+
record.__send__("#{attribute}_processing_errors").each do |e|
|
15
15
|
message = (e.message == e.class.to_s) ? :carrierwave_processing_error : e.message
|
16
16
|
record.errors.add(attribute, message)
|
17
17
|
end
|
@@ -21,7 +21,7 @@ module CarrierWave
|
|
21
21
|
class IntegrityValidator < ::ActiveModel::EachValidator
|
22
22
|
|
23
23
|
def validate_each(record, attribute, value)
|
24
|
-
|
24
|
+
record.__send__("#{attribute}_integrity_errors").each do |e|
|
25
25
|
message = (e.message == e.class.to_s) ? :carrierwave_integrity_error : e.message
|
26
26
|
record.errors.add(attribute, message)
|
27
27
|
end
|
@@ -31,7 +31,7 @@ module CarrierWave
|
|
31
31
|
class DownloadValidator < ::ActiveModel::EachValidator
|
32
32
|
|
33
33
|
def validate_each(record, attribute, value)
|
34
|
-
|
34
|
+
record.__send__("#{attribute}_download_errors").each do |e|
|
35
35
|
message = (e.message == e.class.to_s) ? :carrierwave_download_error : e.message
|
36
36
|
record.errors.add(attribute, message)
|
37
37
|
end
|
data/lib/carrierwave/version.rb
CHANGED
data/lib/carrierwave.rb
CHANGED
@@ -34,6 +34,26 @@ if defined?(Merb)
|
|
34
34
|
Dir.glob(File.join(Merb.load_paths[:uploaders])).each {|f| require f }
|
35
35
|
end
|
36
36
|
|
37
|
+
elsif defined?(Jets)
|
38
|
+
|
39
|
+
module CarrierWave
|
40
|
+
class Turbine < Jets::Turbine
|
41
|
+
initializer "carrierwave.setup_paths" do |app|
|
42
|
+
CarrierWave.root = Jets.root.to_s
|
43
|
+
CarrierWave.tmp_path = "/tmp/carrierwave"
|
44
|
+
CarrierWave.configure do |config|
|
45
|
+
config.cache_dir = "/tmp/carrierwave/uploads/tmp"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
initializer "carrierwave.active_record" do
|
50
|
+
ActiveSupport.on_load :active_record do
|
51
|
+
require 'carrierwave/orm/activerecord'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
37
57
|
elsif defined?(Rails)
|
38
58
|
|
39
59
|
module CarrierWave
|
@@ -52,6 +72,10 @@ elsif defined?(Rails)
|
|
52
72
|
require 'carrierwave/orm/activerecord'
|
53
73
|
end
|
54
74
|
end
|
75
|
+
|
76
|
+
config.before_eager_load do
|
77
|
+
CarrierWave::Storage::Fog.eager_load
|
78
|
+
end
|
55
79
|
end
|
56
80
|
end
|
57
81
|
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
2
|
-
|
3
2
|
# Include RMagick or MiniMagick support:
|
4
3
|
# include CarrierWave::RMagick
|
5
4
|
# include CarrierWave::MiniMagick
|
@@ -45,5 +44,4 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
45
44
|
# def filename
|
46
45
|
# "something.jpg" if original_filename
|
47
46
|
# end
|
48
|
-
|
49
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carrierwave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Nicklas
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,42 +16,98 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 5.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 5.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 5.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 5.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: mini_mime
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.1.3
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.1.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: image_processing
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mimemagic
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.3.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.3.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: addressable
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.6'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.6'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: ssrf_filter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.0'
|
55
111
|
- !ruby/object:Gem::Dependency
|
56
112
|
name: pg
|
57
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +128,14 @@ dependencies:
|
|
72
128
|
requirements:
|
73
129
|
- - ">="
|
74
130
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
131
|
+
version: 5.0.0
|
76
132
|
type: :development
|
77
133
|
prerelease: false
|
78
134
|
version_requirements: !ruby/object:Gem::Requirement
|
79
135
|
requirements:
|
80
136
|
- - ">="
|
81
137
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
138
|
+
version: 5.0.0
|
83
139
|
- !ruby/object:Gem::Dependency
|
84
140
|
name: cucumber
|
85
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,35 +179,49 @@ dependencies:
|
|
123
179
|
- !ruby/object:Gem::Version
|
124
180
|
version: '0'
|
125
181
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: fog
|
182
|
+
name: fog-aws
|
127
183
|
requirement: !ruby/object:Gem::Requirement
|
128
184
|
requirements:
|
129
185
|
- - ">="
|
130
186
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
187
|
+
version: '0'
|
132
188
|
type: :development
|
133
189
|
prerelease: false
|
134
190
|
version_requirements: !ruby/object:Gem::Requirement
|
135
191
|
requirements:
|
136
192
|
- - ">="
|
137
193
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
194
|
+
version: '0'
|
139
195
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
196
|
+
name: fog-google
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '1.7'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.7'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: fog-local
|
141
211
|
requirement: !ruby/object:Gem::Requirement
|
142
212
|
requirements:
|
143
213
|
- - ">="
|
144
214
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
215
|
+
version: '0'
|
146
216
|
type: :development
|
147
217
|
prerelease: false
|
148
218
|
version_requirements: !ruby/object:Gem::Requirement
|
149
219
|
requirements:
|
150
220
|
- - ">="
|
151
221
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
222
|
+
version: '0'
|
153
223
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
224
|
+
name: fog-rackspace
|
155
225
|
requirement: !ruby/object:Gem::Requirement
|
156
226
|
requirements:
|
157
227
|
- - ">="
|
@@ -164,6 +234,34 @@ dependencies:
|
|
164
234
|
- - ">="
|
165
235
|
- !ruby/object:Gem::Version
|
166
236
|
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: mini_magick
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: 3.6.0
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 3.6.0
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: rmagick
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - "~>"
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '2.16'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - "~>"
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '2.16'
|
167
265
|
- !ruby/object:Gem::Dependency
|
168
266
|
name: timecop
|
169
267
|
requirement: !ruby/object:Gem::Requirement
|
@@ -218,6 +316,8 @@ files:
|
|
218
316
|
- README.md
|
219
317
|
- lib/carrierwave.rb
|
220
318
|
- lib/carrierwave/compatibility/paperclip.rb
|
319
|
+
- lib/carrierwave/downloader/base.rb
|
320
|
+
- lib/carrierwave/downloader/remote_file.rb
|
221
321
|
- lib/carrierwave/error.rb
|
222
322
|
- lib/carrierwave/locale/en.yml
|
223
323
|
- lib/carrierwave/mount.rb
|
@@ -243,8 +343,6 @@ files:
|
|
243
343
|
- lib/carrierwave/uploader/extension_blacklist.rb
|
244
344
|
- lib/carrierwave/uploader/extension_whitelist.rb
|
245
345
|
- lib/carrierwave/uploader/file_size.rb
|
246
|
-
- lib/carrierwave/uploader/magic_mime_blacklist.rb
|
247
|
-
- lib/carrierwave/uploader/magic_mime_whitelist.rb
|
248
346
|
- lib/carrierwave/uploader/mountable.rb
|
249
347
|
- lib/carrierwave/uploader/processing.rb
|
250
348
|
- lib/carrierwave/uploader/proxy.rb
|
@@ -263,7 +361,7 @@ homepage: https://github.com/carrierwaveuploader/carrierwave
|
|
263
361
|
licenses:
|
264
362
|
- MIT
|
265
363
|
metadata: {}
|
266
|
-
post_install_message:
|
364
|
+
post_install_message:
|
267
365
|
rdoc_options:
|
268
366
|
- "--main"
|
269
367
|
require_paths:
|
@@ -272,16 +370,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
272
370
|
requirements:
|
273
371
|
- - ">="
|
274
372
|
- !ruby/object:Gem::Version
|
275
|
-
version: 2.
|
373
|
+
version: 2.2.2
|
276
374
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
277
375
|
requirements:
|
278
376
|
- - ">="
|
279
377
|
- !ruby/object:Gem::Version
|
280
378
|
version: '0'
|
281
379
|
requirements: []
|
282
|
-
|
283
|
-
|
284
|
-
signing_key:
|
380
|
+
rubygems_version: 3.1.2
|
381
|
+
signing_key:
|
285
382
|
specification_version: 4
|
286
383
|
summary: Ruby file upload library
|
287
384
|
test_files: []
|
@@ -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
|