ruby-thumbor 2.0.1 → 4.0.2
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 +5 -5
- data/README.md +91 -0
- data/lib/ruby-thumbor.rb +2 -1
- data/lib/thumbor/cascade.rb +31 -27
- data/lib/thumbor/crypto_url.rb +154 -198
- data/lib/thumbor/version.rb +3 -1
- data/spec/spec_helper.rb +19 -3
- data/spec/thumbor/cascade_spec.rb +189 -366
- metadata +49 -71
- data/README.rdoc +0 -102
- data/spec/thumbor/crypto_url_spec.rb +0 -482
- data/spec/util/thumbor.rb +0 -7
@@ -1,482 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'json'
|
3
|
-
require 'ruby-thumbor'
|
4
|
-
require 'util/thumbor'
|
5
|
-
|
6
|
-
image_url = 'my.domain.com/some/image/url.jpg'
|
7
|
-
image_md5 = 'f33af67e41168e80fcc5b00f8bd8061a'
|
8
|
-
key = 'my-security-key'
|
9
|
-
|
10
|
-
describe Thumbor::CryptoURL do
|
11
|
-
subject { Thumbor::CryptoURL.new key }
|
12
|
-
|
13
|
-
describe '#new' do
|
14
|
-
it "should create a new instance passing key and keep it" do
|
15
|
-
expect(subject.computed_key).to eq('my-security-keym')
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#url_for' do
|
20
|
-
|
21
|
-
it "should return just the image hash if no arguments passed" do
|
22
|
-
url = subject.url_for :image => image_url
|
23
|
-
expect(url).to eq(image_md5)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should raise if no image passed" do
|
27
|
-
expect { subject.url_for Hash.new }.to raise_error(RuntimeError)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should return proper url for width-only" do
|
31
|
-
url = subject.url_for :image => image_url, :width => 300
|
32
|
-
expect(url).to eq('300x0/' << image_md5)
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should return proper url for height-only" do
|
36
|
-
url = subject.url_for :image => image_url, :height => 300
|
37
|
-
expect(url).to eq('0x300/' << image_md5)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should return proper url for width and height" do
|
41
|
-
url = subject.url_for :image => image_url, :width => 200, :height => 300
|
42
|
-
expect(url).to eq('200x300/' << image_md5)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should return proper smart url" do
|
46
|
-
url = subject.url_for :image => image_url, :width => 200, :height => 300, :smart => true
|
47
|
-
expect(url).to eq('200x300/smart/' << image_md5)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should return proper fit-in url" do
|
51
|
-
url = subject.url_for :image => image_url, :width => 200, :height => 300, :fit_in => true
|
52
|
-
expect(url).to eq('fit-in/200x300/' << image_md5)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should return proper flip url if no width and height" do
|
56
|
-
url = subject.url_for :image => image_url, :flip => true
|
57
|
-
expect(url).to eq('-0x0/' << image_md5)
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should return proper flop url if no width and height" do
|
61
|
-
url = subject.url_for :image => image_url, :flop => true
|
62
|
-
expect(url).to eq('0x-0/' << image_md5)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should return proper flip-flop url if no width and height" do
|
66
|
-
url = subject.url_for :image => image_url, :flip => true, :flop => true
|
67
|
-
expect(url).to eq('-0x-0/' << image_md5)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should return proper flip url if width" do
|
71
|
-
url = subject.url_for :image => image_url, :width => 300, :flip => true
|
72
|
-
expect(url).to eq('-300x0/' << image_md5)
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should return proper flop url if height" do
|
76
|
-
url = subject.url_for :image => image_url, :height => 300, :flop => true
|
77
|
-
expect(url).to eq('0x-300/' << image_md5)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should return horizontal align" do
|
81
|
-
url = subject.url_for :image => image_url, :halign => :left
|
82
|
-
expect(url).to eq('left/' << image_md5)
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should not return horizontal align if it is center" do
|
86
|
-
url = subject.url_for :image => image_url, :halign => :center
|
87
|
-
expect(url).to eq(image_md5)
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should return vertical align" do
|
91
|
-
url = subject.url_for :image => image_url, :valign => :top
|
92
|
-
expect(url).to eq('top/' << image_md5)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should not return vertical align if it is middle" do
|
96
|
-
url = subject.url_for :image => image_url, :valign => :middle
|
97
|
-
expect(url).to eq(image_md5)
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should return halign and valign properly" do
|
101
|
-
url = subject.url_for :image => image_url, :halign => :left, :valign => :top
|
102
|
-
expect(url).to eq('left/top/' << image_md5)
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should return meta properly" do
|
106
|
-
url = subject.url_for :image => image_url, :meta => true
|
107
|
-
expect(url).to eq('meta/' << image_md5)
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should return proper crop url" do
|
111
|
-
url = subject.url_for :image => image_url, :crop => [10, 20, 30, 40]
|
112
|
-
expect(url).to eq('10x20:30x40/' << image_md5)
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should ignore crop if all zeros" do
|
116
|
-
url = subject.url_for :image => image_url, :crop => [0, 0, 0, 0]
|
117
|
-
expect(url).to eq(image_md5)
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should have smart after halign and valign" do
|
121
|
-
url = subject.url_for :image => image_url, :halign => :left, :valign => :top, :smart => true
|
122
|
-
expect(url).to eq('left/top/smart/' << image_md5)
|
123
|
-
end
|
124
|
-
|
125
|
-
it "should ignore filters if empty" do
|
126
|
-
url = subject.url_for :image => image_url, :filters => []
|
127
|
-
expect(url).to eq(image_md5)
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should have trim without params" do
|
131
|
-
url = subject.url_for :image => image_url, :trim => true
|
132
|
-
expect(url).to eq('trim/' << image_md5)
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should have trim with direction param" do
|
136
|
-
url = subject.url_for :image => image_url, :trim => ['bottom-right']
|
137
|
-
expect(url).to eq('trim:bottom-right/' << image_md5)
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should have trim with direction and tolerance param" do
|
141
|
-
url = subject.url_for :image => image_url, :trim => ['bottom-right', 15]
|
142
|
-
expect(url).to eq('trim:bottom-right:15/' << image_md5)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should have the trim option as the first one" do
|
146
|
-
url = subject.url_for :image => image_url, :smart => true, :trim => true
|
147
|
-
|
148
|
-
expect(url).to eq('trim/smart/f33af67e41168e80fcc5b00f8bd8061a')
|
149
|
-
end
|
150
|
-
|
151
|
-
|
152
|
-
it "should have the right crop when cropping horizontally and given a left center" do
|
153
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 40, :height => 50, :center => [0, 50]
|
154
|
-
expect(url).to eq('0x0:80x100/40x50/' << image_md5)
|
155
|
-
end
|
156
|
-
|
157
|
-
it "should have the right crop when cropping horizontally and given a right center" do
|
158
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 40, :height => 50, :center => [100, 50]
|
159
|
-
expect(url).to eq('20x0:100x100/40x50/' << image_md5)
|
160
|
-
end
|
161
|
-
|
162
|
-
it "should have the right crop when cropping horizontally and given the actual center" do
|
163
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 40, :height => 50, :center => [50, 50]
|
164
|
-
expect(url).to eq('10x0:90x100/40x50/' << image_md5)
|
165
|
-
end
|
166
|
-
|
167
|
-
it "should have the right crop when cropping vertically and given a top center" do
|
168
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 50, :height => 40, :center => [50, 0]
|
169
|
-
expect(url).to eq('0x0:100x80/50x40/' << image_md5)
|
170
|
-
end
|
171
|
-
|
172
|
-
it "should have the right crop when cropping vertically and given a bottom center" do
|
173
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 50, :height => 40, :center => [50, 100]
|
174
|
-
expect(url).to eq('0x20:100x100/50x40/' << image_md5)
|
175
|
-
end
|
176
|
-
|
177
|
-
it "should have the right crop when cropping vertically and given the actual center" do
|
178
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 50, :height => 40, :center => [50, 50]
|
179
|
-
expect(url).to eq('0x10:100x90/50x40/' << image_md5)
|
180
|
-
end
|
181
|
-
|
182
|
-
it "should have the no crop when not necessary" do
|
183
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 50, :height => 50, :center => [50, 0]
|
184
|
-
expect(url).to eq('50x50/' << image_md5)
|
185
|
-
end
|
186
|
-
|
187
|
-
it "should blow up with a bad center" do
|
188
|
-
expect { subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 50, :height => 40, :center => 50 }.to raise_error(RuntimeError)
|
189
|
-
end
|
190
|
-
|
191
|
-
it "should have no crop with a missing original_height" do
|
192
|
-
url = subject.url_for :image => image_url, :original_width => 100, :width => 50, :height => 40, :center => [50, 50]
|
193
|
-
expect(url).to eq('50x40/' << image_md5)
|
194
|
-
end
|
195
|
-
|
196
|
-
it "should have no crop with a missing original_width" do
|
197
|
-
url = subject.url_for :image => image_url, :original_height => 100, :width => 50, :height => 40, :center => [50, 50]
|
198
|
-
expect(url).to eq('50x40/' << image_md5)
|
199
|
-
end
|
200
|
-
|
201
|
-
it "should have no crop with out a width and height" do
|
202
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :center => [50, 50]
|
203
|
-
expect(url).to eq(image_md5)
|
204
|
-
end
|
205
|
-
|
206
|
-
it "should use the original width with a missing width" do
|
207
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :height => 80, :center => [50, 50]
|
208
|
-
expect(url).to eq('0x10:100x90/0x80/' << image_md5)
|
209
|
-
end
|
210
|
-
|
211
|
-
it "should use the original height with a missing height" do
|
212
|
-
url = subject.url_for :image => image_url,:original_width => 100, :original_height => 100, :width => 80, :center => [50, 50]
|
213
|
-
expect(url).to eq('10x0:90x100/80x0/' << image_md5)
|
214
|
-
end
|
215
|
-
|
216
|
-
it "should have the right crop with a negative width" do
|
217
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => -50, :height => 40, :center => [50, 50]
|
218
|
-
expect(url).to eq('0x10:100x90/-50x40/' << image_md5)
|
219
|
-
end
|
220
|
-
|
221
|
-
it "should have the right crop with a negative height" do
|
222
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => 50, :height => -40, :center => [50, 50]
|
223
|
-
expect(url).to eq('0x10:100x90/50x-40/' << image_md5)
|
224
|
-
end
|
225
|
-
|
226
|
-
it "should have the right crop with a negative height and width" do
|
227
|
-
url = subject.url_for :image => image_url, :original_width => 100, :original_height => 100, :width => -50, :height => -40, :center => [50, 50]
|
228
|
-
expect(url).to eq('0x10:100x90/-50x-40/' << image_md5)
|
229
|
-
end
|
230
|
-
|
231
|
-
it "should handle string values" do
|
232
|
-
url = subject.url_for :image => image_url, :width => '40', :height => '50'
|
233
|
-
expect(url).to eq('40x50/' << image_md5)
|
234
|
-
end
|
235
|
-
|
236
|
-
it "should never mutate its arguments" do
|
237
|
-
opts = {:image => image_url, :width => '500'}
|
238
|
-
subject.url_for opts
|
239
|
-
expect(opts).to eq({:image => image_url, :width => '500'})
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
describe '#generate' do
|
244
|
-
it "should generate a proper url when only an image url is specified" do
|
245
|
-
url = subject.generate :image => image_url
|
246
|
-
|
247
|
-
expect(url).to eq("/964rCTkAEDtvjy_a572k7kRa0SU=/#{image_url}")
|
248
|
-
end
|
249
|
-
|
250
|
-
it "should create a new instance passing key and keep it" do
|
251
|
-
url = subject.generate :width => 300, :height => 200, :image => image_url
|
252
|
-
|
253
|
-
expect(url).to eq('/TQfyd3H36Z3srcNcLOYiM05YNO8=/300x200/my.domain.com/some/image/url.jpg')
|
254
|
-
end
|
255
|
-
|
256
|
-
it "should create a new instance passing key and keep it" do
|
257
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url
|
258
|
-
|
259
|
-
expect(url).to eq('/YBQEWd3g_WRMnVEG73zfzcr8Zj0=/meta/300x200/my.domain.com/some/image/url.jpg')
|
260
|
-
end
|
261
|
-
|
262
|
-
it "should create a new instance passing key and keep it" do
|
263
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true
|
264
|
-
|
265
|
-
expect(url).to eq('/jP89J0qOWHgPlm_lOA28GtOh5GU=/meta/300x200/smart/my.domain.com/some/image/url.jpg')
|
266
|
-
end
|
267
|
-
|
268
|
-
it "should create a new instance passing key and keep it" do
|
269
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :fit_in => true
|
270
|
-
|
271
|
-
expect(url).to eq('/zrrOh_TtTs4kiLLEQq1w4bcTYdc=/meta/fit-in/300x200/smart/my.domain.com/some/image/url.jpg')
|
272
|
-
end
|
273
|
-
|
274
|
-
it "should create a new instance passing key and keep it" do
|
275
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :fit_in => true, :flip => true
|
276
|
-
|
277
|
-
expect(url).to eq('/4t1XK1KH43cOb1QJ9tU00-W2_k8=/meta/fit-in/-300x200/smart/my.domain.com/some/image/url.jpg')
|
278
|
-
end
|
279
|
-
|
280
|
-
it "should create a new instance passing key and keep it" do
|
281
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :fit_in => true, :flip => true, :flop => true
|
282
|
-
|
283
|
-
expect(url).to eq('/HJnvjZU69PkPOhyZGu-Z3Uc_W_A=/meta/fit-in/-300x-200/smart/my.domain.com/some/image/url.jpg')
|
284
|
-
end
|
285
|
-
|
286
|
-
it "should create a new instance passing key and keep it" do
|
287
|
-
url = subject.generate :filters => ["quality(20)", "brightness(10)"], :image => image_url
|
288
|
-
|
289
|
-
expect(url).to eq('/q0DiFg-5-eFZIqyN3lRoCvg2K0s=/filters:quality(20):brightness(10)/my.domain.com/some/image/url.jpg')
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
describe "#generate :old => true" do
|
294
|
-
|
295
|
-
it "should create a new instance passing key and keep it" do
|
296
|
-
url = subject.generate :width => 300, :height => 200, :image => image_url, :old => true
|
297
|
-
|
298
|
-
expect(url).to eq('/qkLDiIbvtiks0Up9n5PACtmpOfX6dPXw4vP4kJU-jTfyF6y1GJBJyp7CHYh1H3R2/' << image_url)
|
299
|
-
end
|
300
|
-
|
301
|
-
it "should allow thumbor to decrypt it properly" do
|
302
|
-
url = subject.generate :width => 300, :height => 200, :image => image_url, :old => true
|
303
|
-
|
304
|
-
encrypted = url.split('/')[1]
|
305
|
-
|
306
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
307
|
-
|
308
|
-
expect(decrypted["horizontal_flip"]).to be_falsy
|
309
|
-
expect(decrypted["vertical_flip"]).to be_falsy
|
310
|
-
expect(decrypted["smart"]).to be_falsy
|
311
|
-
expect(decrypted["meta"]).to be_falsy
|
312
|
-
expect(decrypted["fit_in"]).to be_falsy
|
313
|
-
expect(decrypted["crop"]["left"]).to eq(0)
|
314
|
-
expect(decrypted["crop"]["top"]).to eq(0)
|
315
|
-
expect(decrypted["crop"]["right"]).to eq(0)
|
316
|
-
expect(decrypted["crop"]["bottom"]).to eq(0)
|
317
|
-
expect(decrypted["valign"]).to eq('middle')
|
318
|
-
expect(decrypted["halign"]).to eq('center')
|
319
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
320
|
-
expect(decrypted["width"]).to eq(300)
|
321
|
-
expect(decrypted["height"]).to eq(200)
|
322
|
-
|
323
|
-
end
|
324
|
-
|
325
|
-
it "should allow thumbor to decrypt it properly with meta" do
|
326
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :old => true
|
327
|
-
|
328
|
-
encrypted = url.split('/')[1]
|
329
|
-
|
330
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
331
|
-
|
332
|
-
expect(decrypted["meta"]).to be_truthy
|
333
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
334
|
-
expect(decrypted["width"]).to eq(300)
|
335
|
-
expect(decrypted["height"]).to eq(200)
|
336
|
-
|
337
|
-
end
|
338
|
-
|
339
|
-
it "should allow thumbor to decrypt it properly with smart" do
|
340
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :old => true
|
341
|
-
|
342
|
-
encrypted = url.split('/')[1]
|
343
|
-
|
344
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
345
|
-
|
346
|
-
expect(decrypted["meta"]).to be_truthy
|
347
|
-
expect(decrypted["smart"]).to be_truthy
|
348
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
349
|
-
expect(decrypted["width"]).to eq(300)
|
350
|
-
expect(decrypted["height"]).to eq(200)
|
351
|
-
|
352
|
-
end
|
353
|
-
|
354
|
-
it "should allow thumbor to decrypt it properly with fit-in" do
|
355
|
-
url = subject.generate :width => 300, :height => 200, :fit_in => true, :image => image_url, :old => true
|
356
|
-
|
357
|
-
encrypted = url.split('/')[1]
|
358
|
-
|
359
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
360
|
-
|
361
|
-
expect(decrypted["fit_in"]).to be_truthy
|
362
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
363
|
-
expect(decrypted["width"]).to eq(300)
|
364
|
-
expect(decrypted["height"]).to eq(200)
|
365
|
-
|
366
|
-
end
|
367
|
-
|
368
|
-
it "should allow thumbor to decrypt it properly with flip" do
|
369
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :flip => true, :old => true
|
370
|
-
|
371
|
-
encrypted = url.split('/')[1]
|
372
|
-
|
373
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
374
|
-
|
375
|
-
expect(decrypted["meta"]).to be_truthy
|
376
|
-
expect(decrypted["smart"]).to be_truthy
|
377
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
378
|
-
expect(decrypted["width"]).to eq(300)
|
379
|
-
expect(decrypted["height"]).to eq(200)
|
380
|
-
decrypted["flip_horizontally"] == true
|
381
|
-
|
382
|
-
end
|
383
|
-
|
384
|
-
it "should allow thumbor to decrypt it properly with flop" do
|
385
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :flip => true, :flop => true, :old => true
|
386
|
-
|
387
|
-
encrypted = url.split('/')[1]
|
388
|
-
|
389
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
390
|
-
|
391
|
-
expect(decrypted["meta"]).to be_truthy
|
392
|
-
expect(decrypted["smart"]).to be_truthy
|
393
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
394
|
-
expect(decrypted["width"]).to eq(300)
|
395
|
-
expect(decrypted["height"]).to eq(200)
|
396
|
-
decrypted["flip_horizontally"] == true
|
397
|
-
decrypted["flip_vertically"] == true
|
398
|
-
|
399
|
-
end
|
400
|
-
|
401
|
-
it "should allow thumbor to decrypt it properly with halign" do
|
402
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :flip => true, :flop => true,
|
403
|
-
:halign => :left, :old => true
|
404
|
-
|
405
|
-
encrypted = url.split('/')[1]
|
406
|
-
|
407
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
408
|
-
|
409
|
-
expect(decrypted["meta"]).to be_truthy
|
410
|
-
expect(decrypted["smart"]).to be_truthy
|
411
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
412
|
-
expect(decrypted["width"]).to eq(300)
|
413
|
-
expect(decrypted["height"]).to eq(200)
|
414
|
-
decrypted["flip_horizontally"] == true
|
415
|
-
decrypted["flip_vertically"] == true
|
416
|
-
decrypted["halign"] == "left"
|
417
|
-
|
418
|
-
end
|
419
|
-
|
420
|
-
it "should allow thumbor to decrypt it properly with valign" do
|
421
|
-
url = subject.generate :width => 300, :height => 200, :meta => true, :image => image_url, :smart => true, :flip => true, :flop => true,
|
422
|
-
:halign => :left, :valign => :top, :old => true
|
423
|
-
|
424
|
-
encrypted = url.split('/')[1]
|
425
|
-
|
426
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
427
|
-
|
428
|
-
expect(decrypted["meta"]).to be_truthy
|
429
|
-
expect(decrypted["smart"]).to be_truthy
|
430
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
431
|
-
expect(decrypted["width"]).to eq(300)
|
432
|
-
expect(decrypted["height"]).to eq(200)
|
433
|
-
decrypted["flip_horizontally"] == true
|
434
|
-
decrypted["flip_vertically"] == true
|
435
|
-
decrypted["halign"] == "left"
|
436
|
-
decrypted["valign"] == "top"
|
437
|
-
|
438
|
-
end
|
439
|
-
|
440
|
-
it "should allow thumbor to decrypt it properly with cropping" do
|
441
|
-
url = subject.generate :width => 300, :height => 200, :image => image_url, :crop => [10, 20, 30, 40], :old => true
|
442
|
-
|
443
|
-
encrypted = url.split('/')[1]
|
444
|
-
|
445
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
446
|
-
|
447
|
-
expect(decrypted["horizontal_flip"]).to be_falsy
|
448
|
-
expect(decrypted["vertical_flip"]).to be_falsy
|
449
|
-
expect(decrypted["smart"]).to be_falsy
|
450
|
-
expect(decrypted["meta"]).to be_falsy
|
451
|
-
expect(decrypted["crop"]["left"]).to eq(10)
|
452
|
-
expect(decrypted["crop"]["top"]).to eq(20)
|
453
|
-
expect(decrypted["crop"]["right"]).to eq(30)
|
454
|
-
expect(decrypted["crop"]["bottom"]).to eq(40)
|
455
|
-
expect(decrypted["valign"]).to eq('middle')
|
456
|
-
expect(decrypted["halign"]).to eq('center')
|
457
|
-
expect(decrypted["image_hash"]).to eq(image_md5)
|
458
|
-
expect(decrypted["width"]).to eq(300)
|
459
|
-
expect(decrypted["height"]).to eq(200)
|
460
|
-
|
461
|
-
end
|
462
|
-
|
463
|
-
it "should allow thumbor to decrypt it properly with filters" do
|
464
|
-
url = subject.generate :filters => ["quality(20)", "brightness(10)"], :image => image_url, :old => true
|
465
|
-
|
466
|
-
encrypted = url.split('/')[1]
|
467
|
-
|
468
|
-
decrypted = decrypt_in_thumbor(encrypted)
|
469
|
-
|
470
|
-
expect(decrypted["filters"]).to eq("quality(20):brightness(10)")
|
471
|
-
end
|
472
|
-
end
|
473
|
-
|
474
|
-
describe "without security key" do
|
475
|
-
subject { Thumbor::CryptoURL.new nil }
|
476
|
-
it "should generate a unsafe url" do
|
477
|
-
url = subject.generate :image => image_url
|
478
|
-
|
479
|
-
expect(url).to eq("/unsafe/#{image_url}")
|
480
|
-
end
|
481
|
-
end
|
482
|
-
end
|
data/spec/util/thumbor.rb
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
def decrypt_in_thumbor(str)
|
2
|
-
command = "python -c 'from thumbor.crypto import Cryptor; cr = Cryptor(\"my-security-keymy\"); print cr.decrypt(\"" << str << "\")'"
|
3
|
-
result = Array.new
|
4
|
-
IO.popen(command) { |f| result.push(f.gets) }
|
5
|
-
result = result.join('').strip
|
6
|
-
JSON.parse(result.gsub('"', "@@@").gsub("'", '"').gsub("@@@", '\\"').gsub('True', 'true').gsub('False', 'false').gsub('None', 'null'))
|
7
|
-
end
|