image_vise 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fd6c51aedf4fe76ee330a75a0a967da91397452
4
- data.tar.gz: 7ce66027f5c46d4812591884efea60047ceefca7
3
+ metadata.gz: 493e78593a4399614a6db7dc12b6718941e4de04
4
+ data.tar.gz: 31e96d402674418e02c1a3bc9a88810889af16c8
5
5
  SHA512:
6
- metadata.gz: f5ef54f0cd31ebde260bcb9f580dabf303e3bf10a9b451bea1eb0999a89cb71c3b8a55124bb86313fbaba4f5f25143250fabaf78318758f6426fb8c4a8a43a6c
7
- data.tar.gz: ccd3a779a38de87d4f7e35c9d11cebeef2b8c748a3fbd5331716c749f1e7d4d223ace28bc352ba5b7447630b85330ee030fd229b3b0784b34f8e1ccdd257a214
6
+ metadata.gz: 7a14f2987b638ec2cead4ac87e269ad131fd1d1409834b5b0b0efddbd464a3e434e6a24bad127249b6173ccd655e2957fc23d48b4f5490564e4833c93dbb2181
7
+ data.tar.gz: 67d3fc0181b7935f24c9a48afb5ff90afc813e6abc5fc2e627c41c0c51f0f4dc45326ec300fab03114647d98e8950ca64f42ac3a4bf4b5640c6c127621030c9b
data/SECURITY.md CHANGED
@@ -10,12 +10,12 @@ For checking HMAC values `Rack::Utils.secure_compare` constant-time comparison i
10
10
 
11
11
  ## Cache bypass protection for randomized query string params
12
12
 
13
- ImageVise forbids _any_ query string params except `sig` and `q`. This to prevent the same processing
14
- URL from being requested repeatedly with the same params but with a different query string param appended,
15
- like this:
13
+ ImageVise defaults to using paths. If you have a way to forbid query strings on the fronting CDN
14
+ or proxy server we suggest you to do so, to prevent randomized URLs from filling up your cache
15
+ and extreme amounts of processing from happening.
16
16
 
17
- * `/thm?q=xYz&sig=abc&exploit=123`
18
- * `/thm?q=xYz&sig=abc&exploit=234`
17
+ * `/image/<pipeline>/<sig>?&random=123`
18
+ * `/image/<pipeline>/<sig>?&random=456`
19
19
 
20
20
  These URLs would in fact resolve to the same source image and pipeline, but would not be stored in an upstream
21
21
  CDN cache because the query string params contain extra data.
@@ -41,4 +41,4 @@ ImageVise does not set RMagick limits by itself. You should
41
41
  ## Processing time constraints
42
42
 
43
43
  If you are using forking, there will be a timeout used for how long the forked child process may run,
44
- which is the default timeout used in ExceptionalFork.
44
+ which is the default timeout used in ExceptionalFork.
data/image_vise.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: image_vise 0.1.1 ruby lib
5
+ # stub: image_vise 0.1.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "image_vise"
9
- s.version = "0.1.1"
9
+ s.version = "0.1.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Julik Tarkhanov"]
14
- s.date = "2016-10-22"
14
+ s.date = "2016-10-26"
15
15
  s.description = "Image processing via URLs"
16
16
  s.email = "me@julik.nl"
17
17
  s.extra_rdoc_files = [
@@ -61,6 +61,7 @@ Gem::Specification.new do |s|
61
61
  "spec/image_vise/srgb_spec.rb",
62
62
  "spec/image_vise/strip_metadata_spec.rb",
63
63
  "spec/image_vise_spec.rb",
64
+ "spec/layers-with-blending.psd",
64
65
  "spec/spec_helper.rb",
65
66
  "spec/test_server.rb",
66
67
  "spec/waterside_magic_hour.jpg",
@@ -289,9 +289,14 @@ class ImageVise::RenderEngine
289
289
  # @return [void]
290
290
  def apply_pipeline(source_file_path, pipeline, source_file_type, render_to_path)
291
291
  render_file_type = source_file_type
292
- magick_image = Magick::Image.read(source_file_path)[0]
293
- pipeline.apply!(magick_image)
294
292
 
293
+ # Load the first frame of the animated GIF _or_ the blended compatibility layer from Photoshop
294
+ image_list = Magick::Image.read(source_file_path)
295
+ magick_image = image_list.first
296
+
297
+ # Apply the pipeline
298
+ pipeline.apply!(magick_image)
299
+
295
300
  # If processing the image has created an alpha channel, use PNG always.
296
301
  # Otherwise, keep the original format for as far as the supported formats list goes.
297
302
  render_file_type = PNG_FILE_TYPE if magick_image.alpha?
@@ -300,7 +305,8 @@ class ImageVise::RenderEngine
300
305
  magick_image.format = render_file_type.ext
301
306
  magick_image.write(render_to_path)
302
307
  ensure
303
- ImageVise.destroy(magick_image)
308
+ # destroy all the loaded images explicitly
309
+ (image_list || []).map {|img| ImageVise.destroy(img) }
304
310
  end
305
311
 
306
312
  end
data/lib/image_vise.rb CHANGED
@@ -8,7 +8,7 @@ require 'base64'
8
8
  require 'rack'
9
9
 
10
10
  class ImageVise
11
- VERSION = '0.1.1'
11
+ VERSION = '0.1.2'
12
12
  S_MUTEX = Mutex.new
13
13
  private_constant :S_MUTEX
14
14
 
@@ -264,6 +264,27 @@ describe ImageVise::RenderEngine do
264
264
  expect(last_response.headers['Content-Type']).to eq('image/png')
265
265
  end
266
266
 
267
+ it 'destroys all the loaded PSD layers' do
268
+ uri = Addressable::URI.parse(public_url_psd_multilayer)
269
+ ImageVise.add_allowed_host!(uri.host)
270
+ ImageVise.add_secret_key!('l33tness')
271
+
272
+ p = ImageVise::Pipeline.new.geom(geometry_string: '220x220')
273
+ image_request = ImageVise::ImageRequest.new(src_url: uri.to_s, pipeline: p)
274
+
275
+ class << app
276
+ def source_file_type_permitted?(type); true; end
277
+ def raise_exceptions?; true; end
278
+ end
279
+
280
+ # For each layer loaded into the ImageList
281
+ expect(ImageVise).to receive(:destroy).and_call_original.exactly(5).times
282
+
283
+ get image_request.to_path_params('l33tness')
284
+
285
+ expect(last_response.status).to eq(200)
286
+ end
287
+
267
288
  it 'outputs a converted TIFF file as a PNG' do
268
289
  uri = Addressable::URI.parse(public_url_tif)
269
290
  ImageVise.add_allowed_host!(uri.host)
Binary file
data/spec/spec_helper.rb CHANGED
@@ -84,6 +84,10 @@ RSpec.configure do | config |
84
84
  'http://localhost:9001/waterside_magic_hour.psd'
85
85
  end
86
86
 
87
+ def public_url_psd_multilayer
88
+ 'http://localhost:9001/layers-with-blending.psd'
89
+ end
90
+
87
91
  def public_url_tif
88
92
  'http://localhost:9001/waterside_magic_hour_gray.tif'
89
93
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_vise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-22 00:00:00.000000000 Z
11
+ date: 2016-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: patron
@@ -304,6 +304,7 @@ files:
304
304
  - spec/image_vise/srgb_spec.rb
305
305
  - spec/image_vise/strip_metadata_spec.rb
306
306
  - spec/image_vise_spec.rb
307
+ - spec/layers-with-blending.psd
307
308
  - spec/spec_helper.rb
308
309
  - spec/test_server.rb
309
310
  - spec/waterside_magic_hour.jpg