el_finder 1.0.3 → 1.0.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.
- data/README.rdoc +18 -4
- data/lib/el_finder/connector.rb +27 -6
- data/lib/el_finder/pathname.rb +30 -4
- data/lib/el_finder/version.rb +1 -1
- data/test/{test_el_finder_image_size.rb → el_finder/test_image_size.rb} +5 -5
- data/test/{test_el_finder_mime_type.rb → el_finder/test_mime_type.rb} +1 -1
- data/test/{test_el_finder_pathname.rb → el_finder/test_pathname.rb} +28 -4
- data/test/el_finder_test_case.rb +22 -0
- data/test/files/sample.zip +0 -0
- data/test/test_el_finder.rb +2 -392
- data/test/test_el_finder_archivers.rb +106 -0
- data/test/test_el_finder_extractors.rb +102 -0
- data/test/test_el_finder_hash.rb +19 -0
- data/test/test_el_finder_permissions.rb +362 -0
- metadata +22 -10
@@ -0,0 +1,362 @@
|
|
1
|
+
require 'el_finder_test_case'
|
2
|
+
|
3
|
+
class TestElFinder < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include ElFinderTestCase
|
6
|
+
|
7
|
+
################################################################################
|
8
|
+
|
9
|
+
def test_default_permissions
|
10
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
11
|
+
|
12
|
+
assert_equal true, r[:cwd][:read]
|
13
|
+
assert_equal true, r[:cwd][:write]
|
14
|
+
assert_equal false, r[:cwd][:rm]
|
15
|
+
|
16
|
+
r[:cdc].each do |e|
|
17
|
+
assert_equal true, e[:read]
|
18
|
+
assert_equal true, e[:write]
|
19
|
+
assert_equal true, e[:rm]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_custom_permissions_on_root
|
24
|
+
@elfinder.options = {
|
25
|
+
:perms => {
|
26
|
+
'.' => {:read => false},
|
27
|
+
}
|
28
|
+
}
|
29
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
30
|
+
assert_match(/access denied/i, r[:error])
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_custom_permissions
|
34
|
+
@elfinder.options = {
|
35
|
+
:perms => {
|
36
|
+
'foo' => {:rm => false},
|
37
|
+
/.*.png$/ => {:rm => false},
|
38
|
+
/^pjkh/ => {:read => false},
|
39
|
+
'README.txt' => {:write => false},
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
44
|
+
|
45
|
+
r[:cdc].each do |e|
|
46
|
+
case e[:name]
|
47
|
+
when 'elfinder.png'
|
48
|
+
assert_equal true, e[:read]
|
49
|
+
assert_equal true, e[:write]
|
50
|
+
assert_equal false, e[:rm]
|
51
|
+
when 'foo'
|
52
|
+
assert_equal true, e[:read]
|
53
|
+
assert_equal true, e[:write]
|
54
|
+
assert_equal false, e[:rm]
|
55
|
+
when 'pjkh.png'
|
56
|
+
assert_equal false, e[:read]
|
57
|
+
assert_equal true, e[:write]
|
58
|
+
assert_equal false, e[:rm]
|
59
|
+
when 'README.txt'
|
60
|
+
assert_equal true, e[:read]
|
61
|
+
assert_equal false, e[:write]
|
62
|
+
assert_equal true, e[:rm]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_custom_permissions_multiple_matches_prefers_false
|
68
|
+
@elfinder.options = {
|
69
|
+
:perms => {
|
70
|
+
'pjkh.png' => {:read => false},
|
71
|
+
/pjkh/ => {:read => true},
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
76
|
+
|
77
|
+
r[:cdc].each do |e|
|
78
|
+
case e[:name]
|
79
|
+
when 'pjkh.png'
|
80
|
+
assert_equal false, e[:read]
|
81
|
+
assert_equal true, e[:write]
|
82
|
+
assert_equal true, e[:rm]
|
83
|
+
else
|
84
|
+
assert_equal true, e[:read]
|
85
|
+
assert_equal true, e[:write]
|
86
|
+
assert_equal true, e[:rm]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_custom_permissions_in_subdirectories
|
92
|
+
@elfinder.options = {
|
93
|
+
:perms => {
|
94
|
+
%r{foo/s.*} => {:read => false}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
99
|
+
h, r = @elfinder.run(:cmd => 'open', :target => r[:cdc].find{|e| e[:name] == 'foo'}[:hash])
|
100
|
+
|
101
|
+
r[:cdc].each do |e|
|
102
|
+
case e[:name]
|
103
|
+
when 'sandy.txt', 'sam.txt'
|
104
|
+
assert_equal false, e[:read]
|
105
|
+
else
|
106
|
+
assert_equal true, e[:read]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_open_permissions
|
112
|
+
@elfinder.options = {
|
113
|
+
:perms => {
|
114
|
+
'foo' => {:read => false}
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
119
|
+
target = r[:cdc].find{|e| e[:name] == 'foo'}
|
120
|
+
h1, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
|
121
|
+
assert_match(/access denied/i, r[:error])
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_mkdir_permissions
|
125
|
+
@elfinder.options = {
|
126
|
+
:perms => {
|
127
|
+
'foo' => {:write => false}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
131
|
+
target = r[:cdc].find{|e| e[:name] == 'foo'}
|
132
|
+
h1, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
|
133
|
+
|
134
|
+
h, r = @elfinder.run(:cmd => 'mkdir', :current => r[:cwd][:hash], :name => 'dir1')
|
135
|
+
assert !File.directory?(File.join(@vroot, 'foo', 'dir1'))
|
136
|
+
assert_nil r[:select]
|
137
|
+
assert_match(/access denied/i, r[:error])
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_mkfile_permissions
|
141
|
+
@elfinder.options = {
|
142
|
+
:perms => {
|
143
|
+
'foo' => {:write => false}
|
144
|
+
}
|
145
|
+
}
|
146
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
147
|
+
target = r[:cdc].find{|e| e[:name] == 'foo'}
|
148
|
+
h1, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
|
149
|
+
|
150
|
+
h, r = @elfinder.run(:cmd => 'mkfile', :current => r[:cwd][:hash], :name => 'file1')
|
151
|
+
assert !File.file?(File.join(@vroot, 'foo', 'file1'))
|
152
|
+
assert_nil r[:select]
|
153
|
+
assert_match(/access denied/i, r[:error])
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_rename_permissions_file_rm_false
|
157
|
+
@elfinder.options = {
|
158
|
+
:perms => {
|
159
|
+
'README.txt' => {:rm => false}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
164
|
+
target = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
165
|
+
h1, r = @elfinder.run(:cmd => 'rename', :target => target[:hash], :current => r[:cwd][:hash], :name => 'file1')
|
166
|
+
assert File.file?(File.join(@vroot, 'README.txt'))
|
167
|
+
assert !File.file?(File.join(@vroot, 'file1'))
|
168
|
+
assert_nil r[:select]
|
169
|
+
assert_match(/access denied/i, r[:error])
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_rename_permissions_dir_write_false
|
173
|
+
@elfinder.options = {
|
174
|
+
:perms => {
|
175
|
+
'.' => {:write => false}
|
176
|
+
}
|
177
|
+
}
|
178
|
+
|
179
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
180
|
+
target = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
181
|
+
h1, r = @elfinder.run(:cmd => 'rename', :target => target[:hash], :current => r[:cwd][:hash], :name => 'file1')
|
182
|
+
assert File.file?(File.join(@vroot, 'README.txt'))
|
183
|
+
assert !File.file?(File.join(@vroot, 'file1'))
|
184
|
+
assert_nil r[:select]
|
185
|
+
assert_match(/access denied/i, r[:error])
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_upload_permissions
|
189
|
+
@elfinder.options = {
|
190
|
+
:perms => {
|
191
|
+
'.' => {:write => false}
|
192
|
+
}
|
193
|
+
}
|
194
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
195
|
+
uploads = []
|
196
|
+
uploads << File.open(File.join(@vroot, 'foo/philip.txt'))
|
197
|
+
h, r = @elfinder.run(:cmd => 'upload', :upload => uploads, :current => r[:cwd][:hash])
|
198
|
+
assert !File.exist?(File.join(@vroot, 'philip.txt'))
|
199
|
+
assert_nil r[:select]
|
200
|
+
assert_match(/access denied/i, r[:error])
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_paste_permissions_on_dst
|
204
|
+
@elfinder.options = {
|
205
|
+
:perms => {
|
206
|
+
'foo' => {:write => false}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
210
|
+
targets = r[:cdc].select{|e| e[:mime] != 'directory'}
|
211
|
+
dst = r[:cdc].find{|e| e[:name] == 'foo'}
|
212
|
+
|
213
|
+
h, r = @elfinder.run(:cmd => 'paste', :targets => targets.map{|e| e[:hash]}, :dst => dst[:hash])
|
214
|
+
assert_match(/access denied/i, r[:error])
|
215
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'README.txt'))
|
216
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'pjkh.png'))
|
217
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'elfinder.png'))
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_paste_permissions_on_target
|
221
|
+
@elfinder.options = {
|
222
|
+
:perms => {
|
223
|
+
'README.txt' => {:read => false}
|
224
|
+
}
|
225
|
+
}
|
226
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
227
|
+
targets = r[:cdc].select{|e| e[:mime] != 'directory'}
|
228
|
+
dst = r[:cdc].find{|e| e[:name] == 'foo'}
|
229
|
+
|
230
|
+
h, r = @elfinder.run(:cmd => 'paste', :targets => targets.map{|e| e[:hash]}, :dst => dst[:hash])
|
231
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'README.txt'))
|
232
|
+
assert File.exist?(File.join(@vroot, 'foo', 'pjkh.png'))
|
233
|
+
assert File.exist?(File.join(@vroot, 'foo', 'elfinder.png'))
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_rm_permissions_file_rm_false
|
237
|
+
@elfinder.options = {
|
238
|
+
:perms => {
|
239
|
+
/.*\.png/ => {:rm => false}
|
240
|
+
}
|
241
|
+
}
|
242
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
243
|
+
h, r = @elfinder.run(:cmd => 'rm', :targets => r[:cdc].map{|e| e[:hash]})
|
244
|
+
|
245
|
+
assert !File.exist?(File.join(@vroot, 'README.txt'))
|
246
|
+
assert File.exist?(File.join(@vroot, 'pjkh.png'))
|
247
|
+
assert File.exist?(File.join(@vroot, 'elfinder.png'))
|
248
|
+
assert !File.exist?(File.join(@vroot, 'foo'))
|
249
|
+
|
250
|
+
assert_match(/unable to be removed/i, r[:error])
|
251
|
+
assert_match(/access denied/i, r[:errorData].to_s)
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_rm_permissions_chmod_perm_hack
|
255
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
256
|
+
File.unlink(File.join(@vroot, 'pjkh.png'))
|
257
|
+
h, r = @elfinder.run(:cmd => 'rm', :targets => r[:cdc].map{|e| e[:hash]})
|
258
|
+
|
259
|
+
assert_match(/unable to be removed/i, r[:error])
|
260
|
+
assert_match(/pjkh.png.*remove failed/i, r[:errorData].to_s)
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_duplicate_permissions_file
|
264
|
+
@elfinder.options = {
|
265
|
+
:perms => {
|
266
|
+
'README.txt' => {:read => false}
|
267
|
+
}
|
268
|
+
}
|
269
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
270
|
+
duplicate = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
271
|
+
h, r = @elfinder.run(:cmd => 'duplicate', :target => duplicate[:hash])
|
272
|
+
assert !File.exist?(File.join(@vroot, 'README copy 1.txt'))
|
273
|
+
assert_match(/access denied/i, r[:error])
|
274
|
+
assert_match(/unable to read/i, r[:errorData].to_s)
|
275
|
+
end
|
276
|
+
|
277
|
+
def test_duplicate_permissions_directory
|
278
|
+
@elfinder.options = {
|
279
|
+
:perms => {
|
280
|
+
'.' => {:write => false}
|
281
|
+
}
|
282
|
+
}
|
283
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
284
|
+
duplicate = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
285
|
+
h, r = @elfinder.run(:cmd => 'duplicate', :target => duplicate[:hash])
|
286
|
+
assert !File.exist?(File.join(@vroot, 'README copy 1.txt'))
|
287
|
+
assert_match(/access denied/i, r[:error])
|
288
|
+
assert_match(/unable to write/i, r[:errorData].to_s)
|
289
|
+
end
|
290
|
+
|
291
|
+
|
292
|
+
def test_read_file_permissions
|
293
|
+
@elfinder.options = {
|
294
|
+
:perms => {
|
295
|
+
'README.txt' => {:read => false}
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
300
|
+
target = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
301
|
+
h, r = @elfinder.run(:cmd => 'read', :target => target[:hash])
|
302
|
+
|
303
|
+
assert_nil r[:content]
|
304
|
+
assert_match(/access denied/i, r[:error])
|
305
|
+
end
|
306
|
+
|
307
|
+
def test_edit_permissions_write
|
308
|
+
@elfinder.options = {
|
309
|
+
:perms => {
|
310
|
+
'README.txt' => {:write => false}
|
311
|
+
}
|
312
|
+
}
|
313
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
314
|
+
file = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
315
|
+
h, r = @elfinder.run(:cmd => 'edit', :target => file[:hash], :content => 'Hello')
|
316
|
+
assert_match(/access denied/i, r[:error])
|
317
|
+
assert_not_equal 'Hello', File.read(File.join(@vroot, 'README.txt'))
|
318
|
+
end
|
319
|
+
|
320
|
+
def test_edit_permissions_read
|
321
|
+
@elfinder.options = {
|
322
|
+
:perms => {
|
323
|
+
'README.txt' => {:read => false}
|
324
|
+
}
|
325
|
+
}
|
326
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
327
|
+
file = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
328
|
+
h, r = @elfinder.run(:cmd => 'edit', :target => file[:hash], :content => 'Hello')
|
329
|
+
assert_match(/access denied/i, r[:error])
|
330
|
+
assert_not_equal 'Hello', File.read(File.join(@vroot, 'README.txt'))
|
331
|
+
end
|
332
|
+
|
333
|
+
def test_resize_permissions_write
|
334
|
+
@elfinder.options = {
|
335
|
+
:perms => {
|
336
|
+
'pjkh.png' => {:write => false}
|
337
|
+
}
|
338
|
+
}
|
339
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
340
|
+
file = r[:cdc].find{|e| e[:name] == 'pjkh.png'}
|
341
|
+
h, r = @elfinder.run(:cmd => 'resize', :target => file[:hash], :current => r[:cwd][:hash], :width => '50', :height => '25')
|
342
|
+
assert_match(/access denied/i, r[:error])
|
343
|
+
assert File.exist?(File.join(@vroot, 'pjkh.png'))
|
344
|
+
assert_equal '100x100', ElFinder::ImageSize.for(File.join(@vroot, 'pjkh.png')).to_s
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_resize_permissions_read
|
348
|
+
@elfinder.options = {
|
349
|
+
:perms => {
|
350
|
+
'pjkh.png' => {:read => false}
|
351
|
+
}
|
352
|
+
}
|
353
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
354
|
+
file = r[:cdc].find{|e| e[:name] == 'pjkh.png'}
|
355
|
+
h, r = @elfinder.run(:cmd => 'resize', :target => file[:hash], :current => r[:cwd][:hash], :width => '50', :height => '25')
|
356
|
+
assert_match(/access denied/i, r[:error])
|
357
|
+
assert File.exist?(File.join(@vroot, 'pjkh.png'))
|
358
|
+
assert_equal '100x100', ElFinder::ImageSize.for(File.join(@vroot, 'pjkh.png')).to_s
|
359
|
+
end
|
360
|
+
|
361
|
+
|
362
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: el_finder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 4
|
10
|
+
version: 1.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Philip Hallstrom
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-11 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,10 @@ files:
|
|
57
57
|
- lib/el_finder/mime_type.rb
|
58
58
|
- lib/el_finder/pathname.rb
|
59
59
|
- lib/el_finder/version.rb
|
60
|
+
- test/el_finder/test_image_size.rb
|
61
|
+
- test/el_finder/test_mime_type.rb
|
62
|
+
- test/el_finder/test_pathname.rb
|
63
|
+
- test/el_finder_test_case.rb
|
60
64
|
- test/files/README.txt
|
61
65
|
- test/files/elfinder.png
|
62
66
|
- test/files/foo/philip.txt
|
@@ -64,10 +68,12 @@ files:
|
|
64
68
|
- test/files/foo/sandy.txt
|
65
69
|
- test/files/foo/tom.txt
|
66
70
|
- test/files/pjkh.png
|
71
|
+
- test/files/sample.zip
|
67
72
|
- test/test_el_finder.rb
|
68
|
-
- test/
|
69
|
-
- test/
|
70
|
-
- test/
|
73
|
+
- test/test_el_finder_archivers.rb
|
74
|
+
- test/test_el_finder_extractors.rb
|
75
|
+
- test/test_el_finder_hash.rb
|
76
|
+
- test/test_el_finder_permissions.rb
|
71
77
|
has_rdoc: true
|
72
78
|
homepage: http://github.com/phallstrom/el_finder
|
73
79
|
licenses: []
|
@@ -103,6 +109,10 @@ signing_key:
|
|
103
109
|
specification_version: 3
|
104
110
|
summary: elFinder server side connector for Ruby.
|
105
111
|
test_files:
|
112
|
+
- test/el_finder/test_image_size.rb
|
113
|
+
- test/el_finder/test_mime_type.rb
|
114
|
+
- test/el_finder/test_pathname.rb
|
115
|
+
- test/el_finder_test_case.rb
|
106
116
|
- test/files/README.txt
|
107
117
|
- test/files/elfinder.png
|
108
118
|
- test/files/foo/philip.txt
|
@@ -110,7 +120,9 @@ test_files:
|
|
110
120
|
- test/files/foo/sandy.txt
|
111
121
|
- test/files/foo/tom.txt
|
112
122
|
- test/files/pjkh.png
|
123
|
+
- test/files/sample.zip
|
113
124
|
- test/test_el_finder.rb
|
114
|
-
- test/
|
115
|
-
- test/
|
116
|
-
- test/
|
125
|
+
- test/test_el_finder_archivers.rb
|
126
|
+
- test/test_el_finder_extractors.rb
|
127
|
+
- test/test_el_finder_hash.rb
|
128
|
+
- test/test_el_finder_permissions.rb
|