el_finder 1.0.0 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/Gemfile +4 -0
- data/{README.txt → README.rdoc} +5 -1
- data/Rakefile +7 -9
- data/el_finder.gemspec +24 -0
- data/lib/el_finder.rb +0 -4
- data/lib/el_finder/connector.rb +178 -48
- data/lib/el_finder/image_size.rb +2 -2
- data/lib/el_finder/pathname.rb +9 -0
- data/lib/el_finder/version.rb +3 -0
- data/test/test_el_finder.rb +329 -2
- data/test/test_el_finder_pathname.rb +24 -0
- metadata +28 -56
- data/History.txt +0 -19
- data/Manifest.txt +0 -22
data/.gitignore
ADDED
data/Gemfile
ADDED
data/{README.txt → README.rdoc}
RENAMED
@@ -21,10 +21,14 @@ open-source file manager for web, written in JavaScript using jQuery UI.
|
|
21
21
|
|
22
22
|
== Requirements:
|
23
23
|
|
24
|
-
The gem, by default, relies upon the '
|
24
|
+
The gem, by default, relies upon the 'image_size' ruby gem and ImageMagick's 'mogrify' command.
|
25
25
|
These requirements can be changed by implementing custom methods for determining image size
|
26
26
|
and resizing of an image.
|
27
27
|
|
28
|
+
NOTE: There is another ruby gem 'imagesize' that also defines the class ImageSize and requires 'image_size'
|
29
|
+
If you have that one installed, elfinder will fail. Make sure you only have 'image_size' installed if you use
|
30
|
+
the defaults.
|
31
|
+
|
28
32
|
== Install:
|
29
33
|
|
30
34
|
* Install elFinder (http://elrte.org/redmine/projects/elfinder/wiki/Install_EN)
|
data/Rakefile
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
|
3
|
-
require '
|
4
|
-
|
3
|
+
require 'bundler'
|
4
|
+
Bundler::GemHelper.install_tasks
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
require 'rake/testtask'
|
7
|
+
Rake::TestTask.new(:test) do |test|
|
8
|
+
test.libs << 'lib' << 'test'
|
9
|
+
test.pattern = 'test/**/test_*.rb'
|
10
|
+
test.verbose = true
|
11
11
|
end
|
12
|
-
|
13
|
-
# vim: syntax=ruby
|
data/el_finder.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "el_finder/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "el_finder"
|
7
|
+
s.version = ElFinder::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Philip Hallstrom"]
|
10
|
+
s.email = ["philip@pjkh.com"]
|
11
|
+
s.homepage = "http://github.com/phallstrom/el_finder"
|
12
|
+
s.summary = %q{elFinder server side connector for Ruby.}
|
13
|
+
s.description = %q{Ruby library to provide server side functionality for elFinder. elFinder is an open-source file manager for web, written in JavaScript using jQuery UI.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "el_finder"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency('image_size', '>= 1.0.0')
|
23
|
+
|
24
|
+
end
|
data/lib/el_finder.rb
CHANGED
data/lib/el_finder/connector.rb
CHANGED
@@ -16,6 +16,8 @@ module ElFinder
|
|
16
16
|
:archivers => [],
|
17
17
|
:extractors => [],
|
18
18
|
:home => 'Home',
|
19
|
+
:default_perms => {:read => true, :write => true, :rm => true},
|
20
|
+
:perms => []
|
19
21
|
}
|
20
22
|
|
21
23
|
#
|
@@ -24,15 +26,9 @@ module ElFinder
|
|
24
26
|
|
25
27
|
raise(RuntimeError, "Missing required :url option") unless @options.key?(:url)
|
26
28
|
raise(RuntimeError, "Missing required :root option") unless @options.key?(:root)
|
27
|
-
|
28
|
-
|
29
|
-
raise(RuntimeError, "
|
30
|
-
|
31
|
-
@image_size_handler = @options.delete(:image_size_handler)
|
32
|
-
raise(RuntimeError, "Image Size Handler is invalid") unless @image_size_handler.nil? || @image_size_handler.respond_to?(:for)
|
33
|
-
|
34
|
-
@image_resize_handler = @options.delete(:image_resize_handler)
|
35
|
-
raise(RuntimeError, "Image Resize Handler is invalid") unless @image_resize_handler.nil? || @image_resize_handler.respond_to?(:resize)
|
29
|
+
raise(RuntimeError, "Mime Handler is invalid") unless mime_handler.respond_to?(:for)
|
30
|
+
raise(RuntimeError, "Image Size Handler is invalid") unless image_size_handler.nil? || image_size_handler.respond_to?(:for)
|
31
|
+
raise(RuntimeError, "Image Resize Handler is invalid") unless image_resize_handler.nil? || image_resize_handler.respond_to?(:resize)
|
36
32
|
|
37
33
|
@root = ElFinder::Pathname.new(options[:root])
|
38
34
|
|
@@ -43,6 +39,7 @@ module ElFinder
|
|
43
39
|
#
|
44
40
|
def run(params = {})
|
45
41
|
@params = params.dup
|
42
|
+
@response[:errorData] = {}
|
46
43
|
|
47
44
|
if VALID_COMMANDS.include?(@params[:cmd])
|
48
45
|
|
@@ -52,11 +49,15 @@ module ElFinder
|
|
52
49
|
@targets = @params[:targets].map{|t| from_hash(t)}
|
53
50
|
end
|
54
51
|
|
52
|
+
|
53
|
+
|
55
54
|
send("_#{@params[:cmd]}")
|
56
55
|
else
|
57
56
|
invalid_request
|
58
57
|
end
|
59
58
|
|
59
|
+
@response.delete(:errorData) if @response[:errorData].empty?
|
60
|
+
|
60
61
|
return @headers, @response
|
61
62
|
end # of run
|
62
63
|
|
@@ -70,6 +71,13 @@ module ElFinder
|
|
70
71
|
pathname = ElFinder::Pathname.new_with_root(@root, Base64.decode64(hash))
|
71
72
|
end # of from_hash
|
72
73
|
|
74
|
+
#
|
75
|
+
def options=(opts = {})
|
76
|
+
opts.each_pair do |k,v|
|
77
|
+
@options[k.to_sym] = v
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
73
81
|
################################################################################
|
74
82
|
protected
|
75
83
|
|
@@ -79,7 +87,15 @@ module ElFinder
|
|
79
87
|
|
80
88
|
if target.nil?
|
81
89
|
_open(@root)
|
82
|
-
|
90
|
+
return
|
91
|
+
end
|
92
|
+
|
93
|
+
if perms_for(target)[:read] == false
|
94
|
+
@response[:error] = 'Access Denied'
|
95
|
+
return
|
96
|
+
end
|
97
|
+
|
98
|
+
if target.file?
|
83
99
|
command_not_implemented
|
84
100
|
elsif target.directory?
|
85
101
|
@response[:cwd] = cwd_for(target)
|
@@ -89,10 +105,8 @@ module ElFinder
|
|
89
105
|
@response[:tree] = {
|
90
106
|
:name => @options[:home],
|
91
107
|
:hash => to_hash(@root),
|
92
|
-
:
|
93
|
-
|
94
|
-
:dirs => tree_for(@root)
|
95
|
-
}
|
108
|
+
:dirs => tree_for(@root),
|
109
|
+
}.merge(perms_for(@root))
|
96
110
|
end
|
97
111
|
|
98
112
|
if @params[:init]
|
@@ -117,6 +131,11 @@ module ElFinder
|
|
117
131
|
|
118
132
|
#
|
119
133
|
def _mkdir
|
134
|
+
if perms_for(@current)[:write] == false
|
135
|
+
@response[:error] = 'Access Denied'
|
136
|
+
return
|
137
|
+
end
|
138
|
+
|
120
139
|
dir = @current + @params[:name]
|
121
140
|
if !dir.exist? && dir.mkdir
|
122
141
|
@params[:tree] = true
|
@@ -129,6 +148,11 @@ module ElFinder
|
|
129
148
|
|
130
149
|
#
|
131
150
|
def _mkfile
|
151
|
+
if perms_for(@current)[:write] == false
|
152
|
+
@response[:error] = 'Access Denied'
|
153
|
+
return
|
154
|
+
end
|
155
|
+
|
132
156
|
file = @current + @params[:name]
|
133
157
|
if !file.exist? && FileUtils.touch(file)
|
134
158
|
@response[:select] = [to_hash(file)]
|
@@ -141,6 +165,19 @@ module ElFinder
|
|
141
165
|
#
|
142
166
|
def _rename
|
143
167
|
to = @current + @params[:name]
|
168
|
+
|
169
|
+
perms_for_target = perms_for(@target)
|
170
|
+
if perms_for_target[:rm] == false
|
171
|
+
@response[:error] = 'Access Denied'
|
172
|
+
return
|
173
|
+
end
|
174
|
+
|
175
|
+
perms_for_current = perms_for(@current)
|
176
|
+
if perms_for_current[:write] == false
|
177
|
+
@response[:error] = 'Access Denied'
|
178
|
+
return
|
179
|
+
end
|
180
|
+
|
144
181
|
if to.exist?
|
145
182
|
@response[:error] = "Unable to rename #{@target.ftype}. '#{to.basename}' already exists"
|
146
183
|
elsif @target.rename(to)
|
@@ -154,10 +191,15 @@ module ElFinder
|
|
154
191
|
|
155
192
|
#
|
156
193
|
def _upload
|
194
|
+
if perms_for(@current)[:write] == false
|
195
|
+
@response[:error] = 'Access Denied'
|
196
|
+
return
|
197
|
+
end
|
198
|
+
|
157
199
|
select = []
|
158
200
|
@params[:upload].to_a.each do |file|
|
159
201
|
dst = @current + @options[:original_filename_method].call(file)
|
160
|
-
|
202
|
+
FileUtils.mv(file.path, dst)
|
161
203
|
select << to_hash(dst)
|
162
204
|
end
|
163
205
|
@response[:select] = select
|
@@ -171,20 +213,30 @@ module ElFinder
|
|
171
213
|
|
172
214
|
#
|
173
215
|
def _paste
|
216
|
+
if perms_for(from_hash(@params[:dst]))[:write] == false
|
217
|
+
@response[:error] = 'Access Denied'
|
218
|
+
return
|
219
|
+
end
|
220
|
+
|
174
221
|
@targets.to_a.each do |src|
|
175
|
-
|
176
|
-
|
177
|
-
@response[:
|
178
|
-
|
179
|
-
@response[:errorData][src.basename] = "already exists in '#{dst.dirname.relative_path_from(@root)}'"
|
222
|
+
if perms_for(src)[:read] == false || (@params[:cut].to_i > 0 && perms_for(src)[:rm] == false)
|
223
|
+
@response[:error] ||= 'Some files were not copied.'
|
224
|
+
@response[:errorData][src.basename.to_s] = "Access Denied"
|
225
|
+
return
|
180
226
|
else
|
181
|
-
|
182
|
-
|
227
|
+
dst = from_hash(@params[:dst]) + src.basename
|
228
|
+
if dst.exist?
|
229
|
+
@response[:error] ||= 'Some files were unable to be copied'
|
230
|
+
@response[:errorData][src.basename.to_s] = "already exists in '#{dst.dirname.relative_path_from(@root)}'"
|
183
231
|
else
|
184
|
-
if
|
185
|
-
|
232
|
+
if @params[:cut].to_i > 0
|
233
|
+
src.rename(dst)
|
186
234
|
else
|
187
|
-
|
235
|
+
if src.directory?
|
236
|
+
FileUtils.cp_r(src, dst)
|
237
|
+
else
|
238
|
+
FileUtils.copy(src, dst)
|
239
|
+
end
|
188
240
|
end
|
189
241
|
end
|
190
242
|
end
|
@@ -198,7 +250,9 @@ module ElFinder
|
|
198
250
|
if @targets.empty?
|
199
251
|
@response[:error] = "No files were selected for removal"
|
200
252
|
else
|
201
|
-
|
253
|
+
@targets.to_a.each do |target|
|
254
|
+
remove_target(target)
|
255
|
+
end
|
202
256
|
@params[:tree] = true
|
203
257
|
_open(@current)
|
204
258
|
end
|
@@ -206,6 +260,17 @@ module ElFinder
|
|
206
260
|
|
207
261
|
#
|
208
262
|
def _duplicate
|
263
|
+
if perms_for(@target)[:read] == false
|
264
|
+
@response[:error] = 'Access Denied'
|
265
|
+
@response[:errorData][@target.basename.to_s] = 'Unable to read'
|
266
|
+
return
|
267
|
+
end
|
268
|
+
if perms_for(@target.dirname)[:write] == false
|
269
|
+
@response[:error] = 'Access Denied'
|
270
|
+
@response[:errorData][@target.dirname.to_s] = 'Unable to write'
|
271
|
+
return
|
272
|
+
end
|
273
|
+
|
209
274
|
duplicate = @target.duplicate
|
210
275
|
if @target.directory?
|
211
276
|
FileUtils.cp_r(@target, duplicate)
|
@@ -218,13 +283,21 @@ module ElFinder
|
|
218
283
|
|
219
284
|
#
|
220
285
|
def _read
|
221
|
-
@
|
286
|
+
if perms_for(@target)[:read] == true
|
287
|
+
@response[:content] = @target.read
|
288
|
+
else
|
289
|
+
@response[:error] = 'Access Denied'
|
290
|
+
end
|
222
291
|
end # of read
|
223
292
|
|
224
293
|
#
|
225
294
|
def _edit
|
226
|
-
@target
|
227
|
-
|
295
|
+
if perms_for(@target)[:write] == true
|
296
|
+
@target.open('w') { |f| f.write @params[:content] }
|
297
|
+
@response[:file] = cdc_for(@target)
|
298
|
+
else
|
299
|
+
@response[:error] = 'Access Denied'
|
300
|
+
end
|
228
301
|
end # of edit
|
229
302
|
|
230
303
|
#
|
@@ -244,13 +317,17 @@ module ElFinder
|
|
244
317
|
|
245
318
|
#
|
246
319
|
def _resize
|
247
|
-
if
|
320
|
+
if image_resize_handler.nil?
|
248
321
|
command_not_implemented
|
249
322
|
else
|
250
323
|
if @target.file?
|
251
|
-
|
252
|
-
|
253
|
-
|
324
|
+
if perms_for(@target)[:write] == true
|
325
|
+
image_resize_handler.resize(@target, :width => @params[:width].to_i, :height => @params[:height].to_i)
|
326
|
+
@response[:select] = [to_hash(@target)]
|
327
|
+
_open(@current)
|
328
|
+
else
|
329
|
+
@response[:error] = 'Access Denied'
|
330
|
+
end
|
254
331
|
else
|
255
332
|
@response[:error] = "Unable to resize file. It does not exist"
|
256
333
|
end
|
@@ -260,19 +337,51 @@ module ElFinder
|
|
260
337
|
################################################################################
|
261
338
|
private
|
262
339
|
|
340
|
+
#
|
341
|
+
def remove_target(target)
|
342
|
+
if target.directory?
|
343
|
+
target.children.each do |child|
|
344
|
+
remove_target(child)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
if perms_for(target)[:rm] == false
|
348
|
+
@response[:error] ||= 'Some files/directories were unable to be removed'
|
349
|
+
@response[:errorData][target.basename.to_s] = "Access Denied"
|
350
|
+
else
|
351
|
+
begin
|
352
|
+
target.unlink
|
353
|
+
rescue
|
354
|
+
@response[:error] ||= 'Some files/directories were unable to be removed'
|
355
|
+
@response[:errorData][target.basename.to_s] = "Remove failed"
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
#
|
361
|
+
def mime_handler
|
362
|
+
@options[:mime_handler]
|
363
|
+
end
|
364
|
+
|
365
|
+
#
|
366
|
+
def image_size_handler
|
367
|
+
@options[:image_size_handler]
|
368
|
+
end
|
369
|
+
|
370
|
+
#
|
371
|
+
def image_resize_handler
|
372
|
+
@options[:image_resize_handler]
|
373
|
+
end
|
374
|
+
|
263
375
|
#
|
264
376
|
def cwd_for(pathname)
|
265
377
|
{
|
266
378
|
:name => pathname.basename.to_s,
|
267
379
|
:hash => to_hash(pathname),
|
268
380
|
:mime => 'directory',
|
269
|
-
:rel => (@options[:home] + '/' + pathname.relative_path_from(@root)),
|
381
|
+
:rel => (@options[:home] + '/' + pathname.relative_path_from(@root).to_s),
|
270
382
|
:size => 0,
|
271
383
|
:date => pathname.mtime.to_s,
|
272
|
-
|
273
|
-
:write => pathname.writable?,
|
274
|
-
:rm => (pathname != @root && pathname.writable?),
|
275
|
-
}
|
384
|
+
}.merge(perms_for(pathname))
|
276
385
|
end
|
277
386
|
|
278
387
|
# TODO - Implement link, linkTo, and parent
|
@@ -281,10 +390,8 @@ module ElFinder
|
|
281
390
|
:name => pathname.basename.to_s,
|
282
391
|
:hash => to_hash(pathname),
|
283
392
|
:date => pathname.mtime.to_s,
|
284
|
-
:read => pathname.readable?,
|
285
|
-
:write => pathname.writable?,
|
286
|
-
:rm => pathname.writable?,
|
287
393
|
}
|
394
|
+
response.merge! perms_for(pathname)
|
288
395
|
|
289
396
|
if pathname.directory?
|
290
397
|
response.merge!(
|
@@ -300,14 +407,14 @@ module ElFinder
|
|
300
407
|
elsif pathname.file?
|
301
408
|
response.merge!(
|
302
409
|
:size => pathname.size,
|
303
|
-
:mime =>
|
304
|
-
:url => (@options[:url] + '/' + pathname.relative_path_from(@root))
|
410
|
+
:mime => mime_handler.for(pathname),
|
411
|
+
:url => (@options[:url] + '/' + pathname.relative_path_from(@root).to_s)
|
305
412
|
)
|
306
413
|
|
307
|
-
if response[:mime] =~ /image/ &&
|
414
|
+
if pathname.readable? && response[:mime] =~ /image/ && !image_size_handler.nil? && !image_resize_handler.nil?
|
308
415
|
response.merge!(
|
309
416
|
:resize => true,
|
310
|
-
:dim =>
|
417
|
+
:dim => image_size_handler.for(pathname)
|
311
418
|
)
|
312
419
|
end
|
313
420
|
|
@@ -321,12 +428,35 @@ module ElFinder
|
|
321
428
|
root.children.select{ |child| child.directory? }.sort_by{|e| e.basename.to_s.downcase}.map { |child|
|
322
429
|
{:name => child.basename.to_s,
|
323
430
|
:hash => to_hash(child),
|
324
|
-
:read => child.readable?,
|
325
|
-
:write => child.writable?,
|
326
431
|
:dirs => tree_for(child),
|
327
|
-
}
|
432
|
+
}.merge(perms_for(child))
|
328
433
|
}
|
329
434
|
end # of tree_for
|
435
|
+
|
436
|
+
#
|
437
|
+
def perms_for(pathname, options = {})
|
438
|
+
skip = [options[:skip]].flatten
|
439
|
+
response = {}
|
440
|
+
|
441
|
+
response[:read] = pathname.readable? if pathname.exist?
|
442
|
+
response[:read] &&= specific_perm_for(pathname, :read)
|
443
|
+
response[:read] &&= @options[:default_perms][:read]
|
444
|
+
|
445
|
+
response[:write] = pathname.writable? if pathname.exist?
|
446
|
+
response[:write] &&= specific_perm_for(pathname, :write)
|
447
|
+
response[:write] &&= @options[:default_perms][:write]
|
448
|
+
|
449
|
+
response[:rm] = pathname != @root
|
450
|
+
response[:rm] &&= specific_perm_for(pathname, :rm)
|
451
|
+
response[:rm] &&= @options[:default_perms][:rm]
|
452
|
+
|
453
|
+
response
|
454
|
+
end # of perms_for
|
455
|
+
|
456
|
+
#
|
457
|
+
def specific_perm_for(pathname, perm)
|
458
|
+
@options[:perms].select{ |k,v| pathname.relative_path_from(@root).to_s.send((k.is_a?(String) ? :== : :match), k) }.none?{|e| e.last[perm] == false}
|
459
|
+
end # of specific_perm_for
|
330
460
|
|
331
461
|
#
|
332
462
|
def invalid_request
|
data/lib/el_finder/image_size.rb
CHANGED
data/lib/el_finder/pathname.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'fileutils'
|
1
2
|
require 'pathname'
|
2
3
|
|
3
4
|
module ElFinder
|
@@ -14,6 +15,14 @@ module ElFinder
|
|
14
15
|
self.class.new(super(*args).to_s)
|
15
16
|
end
|
16
17
|
|
18
|
+
#
|
19
|
+
def rename(to)
|
20
|
+
super(to)
|
21
|
+
rescue Errno::EXDEV
|
22
|
+
FileUtils.move(self.to_s, to.to_s)
|
23
|
+
@path = to.to_s
|
24
|
+
end
|
25
|
+
|
17
26
|
#
|
18
27
|
def self.new_with_root(root, path = '')
|
19
28
|
new(superclass.new(File.join(root, path)).cleanpath.to_s)
|
data/test/test_el_finder.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'test/unit'
|
2
|
+
require 'el_finder'
|
3
|
+
require 'pp'
|
3
4
|
|
4
5
|
class TestElFinder < Test::Unit::TestCase
|
5
6
|
|
@@ -251,6 +252,332 @@ class TestElFinder < Test::Unit::TestCase
|
|
251
252
|
assert_equal '50x25', ElFinder::ImageSize.for(File.join(@vroot, 'pjkh.png')).to_s
|
252
253
|
end
|
253
254
|
|
255
|
+
################################################################################
|
256
|
+
|
257
|
+
def test_default_permissions
|
258
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
259
|
+
|
260
|
+
assert_equal true, r[:cwd][:read]
|
261
|
+
assert_equal true, r[:cwd][:write]
|
262
|
+
assert_equal false, r[:cwd][:rm]
|
263
|
+
|
264
|
+
r[:cdc].each do |e|
|
265
|
+
assert_equal true, e[:read]
|
266
|
+
assert_equal true, e[:write]
|
267
|
+
assert_equal true, e[:rm]
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
def test_custom_permissions_on_root
|
272
|
+
@elfinder.options = {
|
273
|
+
:perms => {
|
274
|
+
'.' => {:read => false},
|
275
|
+
}
|
276
|
+
}
|
277
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
278
|
+
assert_match(/access denied/i, r[:error])
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_custom_permissions
|
282
|
+
@elfinder.options = {
|
283
|
+
:perms => {
|
284
|
+
'foo' => {:rm => false},
|
285
|
+
/.*.png$/ => {:rm => false},
|
286
|
+
/^pjkh/ => {:read => false},
|
287
|
+
'README.txt' => {:write => false},
|
288
|
+
}
|
289
|
+
}
|
290
|
+
|
291
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
292
|
+
|
293
|
+
r[:cdc].each do |e|
|
294
|
+
case e[:name]
|
295
|
+
when 'elfinder.png'
|
296
|
+
assert_equal true, e[:read]
|
297
|
+
assert_equal true, e[:write]
|
298
|
+
assert_equal false, e[:rm]
|
299
|
+
when 'foo'
|
300
|
+
assert_equal true, e[:read]
|
301
|
+
assert_equal true, e[:write]
|
302
|
+
assert_equal false, e[:rm]
|
303
|
+
when 'pjkh.png'
|
304
|
+
assert_equal false, e[:read]
|
305
|
+
assert_equal true, e[:write]
|
306
|
+
assert_equal false, e[:rm]
|
307
|
+
when 'README.txt'
|
308
|
+
assert_equal true, e[:read]
|
309
|
+
assert_equal false, e[:write]
|
310
|
+
assert_equal true, e[:rm]
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_custom_permissions_multiple_matches_prefers_false
|
316
|
+
@elfinder.options = {
|
317
|
+
:perms => {
|
318
|
+
'pjkh.png' => {:read => false},
|
319
|
+
/pjkh/ => {:read => true},
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
324
|
+
|
325
|
+
r[:cdc].each do |e|
|
326
|
+
case e[:name]
|
327
|
+
when 'pjkh.png'
|
328
|
+
assert_equal false, e[:read]
|
329
|
+
assert_equal true, e[:write]
|
330
|
+
assert_equal true, e[:rm]
|
331
|
+
else
|
332
|
+
assert_equal true, e[:read]
|
333
|
+
assert_equal true, e[:write]
|
334
|
+
assert_equal true, e[:rm]
|
335
|
+
end
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_custom_permissions_in_subdirectories
|
340
|
+
@elfinder.options = {
|
341
|
+
:perms => {
|
342
|
+
%r{foo/s.*} => {:read => false}
|
343
|
+
}
|
344
|
+
}
|
345
|
+
|
346
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
347
|
+
h, r = @elfinder.run(:cmd => 'open', :target => r[:cdc].find{|e| e[:name] == 'foo'}[:hash])
|
348
|
+
|
349
|
+
r[:cdc].each do |e|
|
350
|
+
case e[:name]
|
351
|
+
when 'sandy.txt', 'sam.txt'
|
352
|
+
assert_equal false, e[:read]
|
353
|
+
else
|
354
|
+
assert_equal true, e[:read]
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
def test_open_permissions
|
360
|
+
@elfinder.options = {
|
361
|
+
:perms => {
|
362
|
+
'foo' => {:read => false}
|
363
|
+
}
|
364
|
+
}
|
365
|
+
|
366
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
367
|
+
target = r[:cdc].find{|e| e[:name] == 'foo'}
|
368
|
+
h1, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
|
369
|
+
assert_match(/access denied/i, r[:error])
|
370
|
+
end
|
371
|
+
|
372
|
+
def test_mkdir_permissions
|
373
|
+
@elfinder.options = {
|
374
|
+
:perms => {
|
375
|
+
'foo' => {:write => false}
|
376
|
+
}
|
377
|
+
}
|
378
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
379
|
+
target = r[:cdc].find{|e| e[:name] == 'foo'}
|
380
|
+
h1, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
|
381
|
+
|
382
|
+
h, r = @elfinder.run(:cmd => 'mkdir', :current => r[:cwd][:hash], :name => 'dir1')
|
383
|
+
assert !File.directory?(File.join(@vroot, 'foo', 'dir1'))
|
384
|
+
assert_nil r[:select]
|
385
|
+
assert_match(/access denied/i, r[:error])
|
386
|
+
end
|
387
|
+
|
388
|
+
def test_mkfile_permissions
|
389
|
+
@elfinder.options = {
|
390
|
+
:perms => {
|
391
|
+
'foo' => {:write => false}
|
392
|
+
}
|
393
|
+
}
|
394
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
395
|
+
target = r[:cdc].find{|e| e[:name] == 'foo'}
|
396
|
+
h1, r = @elfinder.run(:cmd => 'open', :target => target[:hash])
|
397
|
+
|
398
|
+
h, r = @elfinder.run(:cmd => 'mkfile', :current => r[:cwd][:hash], :name => 'file1')
|
399
|
+
assert !File.file?(File.join(@vroot, 'foo', 'file1'))
|
400
|
+
assert_nil r[:select]
|
401
|
+
assert_match(/access denied/i, r[:error])
|
402
|
+
end
|
403
|
+
|
404
|
+
def test_rename_permissions_file_rm_false
|
405
|
+
@elfinder.options = {
|
406
|
+
:perms => {
|
407
|
+
'README.txt' => {:rm => false}
|
408
|
+
}
|
409
|
+
}
|
410
|
+
|
411
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
412
|
+
target = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
413
|
+
h1, r = @elfinder.run(:cmd => 'rename', :target => target[:hash], :current => r[:cwd][:hash], :name => 'file1')
|
414
|
+
assert File.file?(File.join(@vroot, 'README.txt'))
|
415
|
+
assert !File.file?(File.join(@vroot, 'file1'))
|
416
|
+
assert_nil r[:select]
|
417
|
+
assert_match(/access denied/i, r[:error])
|
418
|
+
end
|
419
|
+
|
420
|
+
def test_rename_permissions_dir_write_false
|
421
|
+
@elfinder.options = {
|
422
|
+
:perms => {
|
423
|
+
'.' => {:write => false}
|
424
|
+
}
|
425
|
+
}
|
426
|
+
|
427
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
428
|
+
target = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
429
|
+
h1, r = @elfinder.run(:cmd => 'rename', :target => target[:hash], :current => r[:cwd][:hash], :name => 'file1')
|
430
|
+
assert File.file?(File.join(@vroot, 'README.txt'))
|
431
|
+
assert !File.file?(File.join(@vroot, 'file1'))
|
432
|
+
assert_nil r[:select]
|
433
|
+
assert_match(/access denied/i, r[:error])
|
434
|
+
end
|
435
|
+
|
436
|
+
def test_upload_permissions
|
437
|
+
@elfinder.options = {
|
438
|
+
:perms => {
|
439
|
+
'.' => {:write => false}
|
440
|
+
}
|
441
|
+
}
|
442
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
443
|
+
uploads = []
|
444
|
+
uploads << File.open(File.join(@vroot, 'foo/philip.txt'))
|
445
|
+
h, r = @elfinder.run(:cmd => 'upload', :upload => uploads, :current => r[:cwd][:hash])
|
446
|
+
assert !File.exist?(File.join(@vroot, 'philip.txt'))
|
447
|
+
assert_nil r[:select]
|
448
|
+
assert_match(/access denied/i, r[:error])
|
449
|
+
end
|
450
|
+
|
451
|
+
def test_paste_permissions_on_dst
|
452
|
+
@elfinder.options = {
|
453
|
+
:perms => {
|
454
|
+
'foo' => {:write => false}
|
455
|
+
}
|
456
|
+
}
|
457
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
458
|
+
targets = r[:cdc].select{|e| e[:mime] != 'directory'}
|
459
|
+
dst = r[:cdc].find{|e| e[:name] == 'foo'}
|
460
|
+
|
461
|
+
h, r = @elfinder.run(:cmd => 'paste', :targets => targets.map{|e| e[:hash]}, :dst => dst[:hash])
|
462
|
+
assert_match(/access denied/i, r[:error])
|
463
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'README.txt'))
|
464
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'pjkh.png'))
|
465
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'elfinder.png'))
|
466
|
+
end
|
467
|
+
|
468
|
+
def test_paste_permissions_on_target
|
469
|
+
@elfinder.options = {
|
470
|
+
:perms => {
|
471
|
+
'README.txt' => {:read => false}
|
472
|
+
}
|
473
|
+
}
|
474
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
475
|
+
targets = r[:cdc].select{|e| e[:mime] != 'directory'}
|
476
|
+
dst = r[:cdc].find{|e| e[:name] == 'foo'}
|
477
|
+
|
478
|
+
h, r = @elfinder.run(:cmd => 'paste', :targets => targets.map{|e| e[:hash]}, :dst => dst[:hash])
|
479
|
+
assert !File.exist?(File.join(@vroot, 'foo', 'README.txt'))
|
480
|
+
assert File.exist?(File.join(@vroot, 'foo', 'pjkh.png'))
|
481
|
+
assert File.exist?(File.join(@vroot, 'foo', 'elfinder.png'))
|
482
|
+
end
|
483
|
+
|
484
|
+
def test_rm_permissions_file_rm_false
|
485
|
+
@elfinder.options = {
|
486
|
+
:perms => {
|
487
|
+
/.*\.png/ => {:rm => false}
|
488
|
+
}
|
489
|
+
}
|
490
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
491
|
+
h, r = @elfinder.run(:cmd => 'rm', :targets => r[:cdc].map{|e| e[:hash]})
|
492
|
+
|
493
|
+
assert !File.exist?(File.join(@vroot, 'README.txt'))
|
494
|
+
assert File.exist?(File.join(@vroot, 'pjkh.png'))
|
495
|
+
assert File.exist?(File.join(@vroot, 'elfinder.png'))
|
496
|
+
assert !File.exist?(File.join(@vroot, 'foo'))
|
497
|
+
|
498
|
+
assert_match(/unable to be removed/i, r[:error])
|
499
|
+
assert_match(/access denied/i, r[:errorData].to_s)
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_rm_permissions_chmod_perm_hack
|
503
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
504
|
+
File.unlink(File.join(@vroot, 'pjkh.png'))
|
505
|
+
h, r = @elfinder.run(:cmd => 'rm', :targets => r[:cdc].map{|e| e[:hash]})
|
506
|
+
|
507
|
+
assert_match(/unable to be removed/i, r[:error])
|
508
|
+
assert_match(/pjkh.png.*remove failed/i, r[:errorData].to_s)
|
509
|
+
end
|
510
|
+
|
511
|
+
def test_duplicate_permissions_file
|
512
|
+
@elfinder.options = {
|
513
|
+
:perms => {
|
514
|
+
'README.txt' => {:read => false}
|
515
|
+
}
|
516
|
+
}
|
517
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
518
|
+
duplicate = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
519
|
+
h, r = @elfinder.run(:cmd => 'duplicate', :target => duplicate[:hash])
|
520
|
+
assert !File.exist?(File.join(@vroot, 'README copy 1.txt'))
|
521
|
+
assert_match(/access denied/i, r[:error])
|
522
|
+
assert_match(/unable to read/i, r[:errorData].to_s)
|
523
|
+
end
|
524
|
+
|
525
|
+
def test_duplicate_permissions_directory
|
526
|
+
@elfinder.options = {
|
527
|
+
:perms => {
|
528
|
+
'.' => {:write => false}
|
529
|
+
}
|
530
|
+
}
|
531
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
532
|
+
duplicate = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
533
|
+
h, r = @elfinder.run(:cmd => 'duplicate', :target => duplicate[:hash])
|
534
|
+
assert !File.exist?(File.join(@vroot, 'README copy 1.txt'))
|
535
|
+
assert_match(/access denied/i, r[:error])
|
536
|
+
assert_match(/unable to write/i, r[:errorData].to_s)
|
537
|
+
end
|
538
|
+
|
539
|
+
|
540
|
+
def test_read_file_permissions
|
541
|
+
@elfinder.options = {
|
542
|
+
:perms => {
|
543
|
+
'README.txt' => {:read => false}
|
544
|
+
}
|
545
|
+
}
|
546
|
+
|
547
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
548
|
+
target = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
549
|
+
h, r = @elfinder.run(:cmd => 'read', :target => target[:hash])
|
550
|
+
|
551
|
+
assert_nil r[:content]
|
552
|
+
assert_match(/access denied/i, r[:error])
|
553
|
+
end
|
554
|
+
|
555
|
+
def test_edit_permissions_write
|
556
|
+
@elfinder.options = {
|
557
|
+
:perms => {
|
558
|
+
'README.txt' => {:write => false}
|
559
|
+
}
|
560
|
+
}
|
561
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
562
|
+
file = r[:cdc].find{|e| e[:name] == 'README.txt'}
|
563
|
+
h, r = @elfinder.run(:cmd => 'edit', :target => file[:hash], :content => 'Hello')
|
564
|
+
assert_match(/access denied/i, r[:error])
|
565
|
+
assert_not_equal 'Hello', File.read(File.join(@vroot, 'README.txt'))
|
566
|
+
end
|
567
|
+
|
568
|
+
def test_resize_permissions_write
|
569
|
+
@elfinder.options = {
|
570
|
+
:perms => {
|
571
|
+
'pjkh.png' => {:write => false}
|
572
|
+
}
|
573
|
+
}
|
574
|
+
h, r = @elfinder.run(:cmd => 'open', :init => 'true', :target => '')
|
575
|
+
file = r[:cdc].find{|e| e[:name] == 'pjkh.png'}
|
576
|
+
h, r = @elfinder.run(:cmd => 'resize', :target => file[:hash], :current => r[:cwd][:hash], :width => '50', :height => '25')
|
577
|
+
assert File.exist?(File.join(@vroot, 'pjkh.png'))
|
578
|
+
assert_equal '100x100', ElFinder::ImageSize.for(File.join(@vroot, 'pjkh.png')).to_s
|
579
|
+
end
|
580
|
+
|
254
581
|
end
|
255
582
|
|
256
583
|
__END__
|
@@ -59,6 +59,30 @@ class TestElFinderPathname < Test::Unit::TestCase
|
|
59
59
|
|
60
60
|
################################################################################
|
61
61
|
|
62
|
+
def test_rename_on_same_filesystem
|
63
|
+
file = ElFinder::Pathname.new_with_root(@vroot, 'old.txt')
|
64
|
+
FileUtils.touch(file)
|
65
|
+
assert_equal true, File.exist?(File.join(@vroot, 'old.txt'))
|
66
|
+
file.rename(File.join(@vroot, 'new.txt'))
|
67
|
+
assert_equal false, File.exist?(File.join(@vroot, 'old.txt'))
|
68
|
+
assert_equal true, File.exist?(File.join(@vroot, 'new.txt'))
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_rename_on_different_filesystem
|
72
|
+
if File.directory?('/Volumes/MyBook')
|
73
|
+
file = ElFinder::Pathname.new_with_root(@vroot, 'old.txt')
|
74
|
+
FileUtils.touch(file)
|
75
|
+
assert_equal true, File.exist?(File.join(@vroot, 'old.txt'))
|
76
|
+
file.rename('/Volumes/MyBook/elfinder.rename.test.safe.to.delete')
|
77
|
+
assert_equal false, File.exist?(File.join(@vroot, 'old.txt'))
|
78
|
+
assert_equal true, File.exist?('/Volumes/MyBook/elfinder.rename.test.safe.to.delete')
|
79
|
+
file.unlink
|
80
|
+
assert_equal false, File.exist?('/Volumes/MyBook/elfinder.rename.test.safe.to.delete')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
################################################################################
|
85
|
+
|
62
86
|
def test_relative_to_method
|
63
87
|
assert_equal "", ElFinder::Pathname.new_with_root(@vroot).relative_to(::Pathname.new(@vroot)).to_s
|
64
88
|
assert_equal "foo.txt", ElFinder::Pathname.new_with_root(@vroot, 'foo.txt').relative_to(::Pathname.new(@vroot)).to_s
|
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: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Philip Hallstrom
|
@@ -15,82 +15,48 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-12-31 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: image_size
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 23
|
30
30
|
segments:
|
31
|
-
- 0
|
32
31
|
- 1
|
33
|
-
-
|
34
|
-
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
version: 1.0.0
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
|
-
-
|
38
|
-
name: rubyforge
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 7
|
46
|
-
segments:
|
47
|
-
- 2
|
48
|
-
- 0
|
49
|
-
- 4
|
50
|
-
version: 2.0.4
|
51
|
-
type: :development
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: hoe
|
55
|
-
prerelease: false
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 19
|
62
|
-
segments:
|
63
|
-
- 2
|
64
|
-
- 6
|
65
|
-
- 2
|
66
|
-
version: 2.6.2
|
67
|
-
type: :development
|
68
|
-
version_requirements: *id003
|
69
|
-
description: |-
|
70
|
-
Ruby library to provide server side functionality for elFinder. elFinder is an
|
71
|
-
open-source file manager for web, written in JavaScript using jQuery UI.
|
37
|
+
description: Ruby library to provide server side functionality for elFinder. elFinder is an open-source file manager for web, written in JavaScript using jQuery UI.
|
72
38
|
email:
|
73
39
|
- philip@pjkh.com
|
74
40
|
executables: []
|
75
41
|
|
76
42
|
extensions: []
|
77
43
|
|
78
|
-
extra_rdoc_files:
|
79
|
-
|
80
|
-
- Manifest.txt
|
81
|
-
- README.txt
|
44
|
+
extra_rdoc_files: []
|
45
|
+
|
82
46
|
files:
|
83
47
|
- .autotest
|
84
|
-
-
|
85
|
-
-
|
86
|
-
- README.
|
48
|
+
- .gitignore
|
49
|
+
- Gemfile
|
50
|
+
- README.rdoc
|
87
51
|
- Rakefile
|
52
|
+
- el_finder.gemspec
|
88
53
|
- lib/el_finder.rb
|
89
54
|
- lib/el_finder/connector.rb
|
90
55
|
- lib/el_finder/image_resize.rb
|
91
56
|
- lib/el_finder/image_size.rb
|
92
57
|
- lib/el_finder/mime_type.rb
|
93
58
|
- lib/el_finder/pathname.rb
|
59
|
+
- lib/el_finder/version.rb
|
94
60
|
- test/files/README.txt
|
95
61
|
- test/files/elfinder.png
|
96
62
|
- test/files/foo/philip.txt
|
@@ -103,13 +69,12 @@ files:
|
|
103
69
|
- test/test_el_finder_mime_type.rb
|
104
70
|
- test/test_el_finder_pathname.rb
|
105
71
|
has_rdoc: true
|
106
|
-
homepage: http://
|
72
|
+
homepage: http://github.com/phallstrom/el_finder
|
107
73
|
licenses: []
|
108
74
|
|
109
75
|
post_install_message:
|
110
|
-
rdoc_options:
|
111
|
-
|
112
|
-
- README.txt
|
76
|
+
rdoc_options: []
|
77
|
+
|
113
78
|
require_paths:
|
114
79
|
- lib
|
115
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -136,8 +101,15 @@ rubyforge_project: el_finder
|
|
136
101
|
rubygems_version: 1.3.7
|
137
102
|
signing_key:
|
138
103
|
specification_version: 3
|
139
|
-
summary:
|
104
|
+
summary: elFinder server side connector for Ruby.
|
140
105
|
test_files:
|
106
|
+
- test/files/README.txt
|
107
|
+
- test/files/elfinder.png
|
108
|
+
- test/files/foo/philip.txt
|
109
|
+
- test/files/foo/sam.txt
|
110
|
+
- test/files/foo/sandy.txt
|
111
|
+
- test/files/foo/tom.txt
|
112
|
+
- test/files/pjkh.png
|
141
113
|
- test/test_el_finder.rb
|
142
114
|
- test/test_el_finder_image_size.rb
|
143
115
|
- test/test_el_finder_mime_type.rb
|
data/History.txt
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
CHANGELOG
|
2
|
-
|
3
|
-
2010-10-15 Philip Hallstrom
|
4
|
-
|
5
|
-
* update manifest
|
6
|
-
* test each of the connector methods
|
7
|
-
* use base64 encode/decode for hash to get around javascript unfriendly characters
|
8
|
-
* add image size/resize handling
|
9
|
-
* almost functionally complete
|
10
|
-
* migrate over alpha code from past project
|
11
|
-
|
12
|
-
2010-10-14 Philip Hallstrom
|
13
|
-
|
14
|
-
* begin work on connector
|
15
|
-
* enforce that all pathnames reside beneath the root
|
16
|
-
* initial library and tests for mime_type/pathname
|
17
|
-
* bin/elfinder not necessary
|
18
|
-
* Initial commit
|
19
|
-
|
data/Manifest.txt
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
.autotest
|
2
|
-
History.txt
|
3
|
-
Manifest.txt
|
4
|
-
README.txt
|
5
|
-
Rakefile
|
6
|
-
lib/el_finder.rb
|
7
|
-
lib/el_finder/connector.rb
|
8
|
-
lib/el_finder/image_resize.rb
|
9
|
-
lib/el_finder/image_size.rb
|
10
|
-
lib/el_finder/mime_type.rb
|
11
|
-
lib/el_finder/pathname.rb
|
12
|
-
test/files/README.txt
|
13
|
-
test/files/elfinder.png
|
14
|
-
test/files/foo/philip.txt
|
15
|
-
test/files/foo/sam.txt
|
16
|
-
test/files/foo/sandy.txt
|
17
|
-
test/files/foo/tom.txt
|
18
|
-
test/files/pjkh.png
|
19
|
-
test/test_el_finder.rb
|
20
|
-
test/test_el_finder_image_size.rb
|
21
|
-
test/test_el_finder_mime_type.rb
|
22
|
-
test/test_el_finder_pathname.rb
|