el_finder 1.0.18 → 1.0.19

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/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  *.swp
2
2
  pkg
3
+ Gemfile.lock
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in cyp_mail_processor.gemspec
3
+ # Specify your gem's dependencies in el_finder.gemspec
4
4
  gemspec
@@ -0,0 +1,17 @@
1
+ if RUBY_VERSION < '1.9'
2
+ begin
3
+ require 'base64'
4
+ rescue LoadError
5
+ end
6
+
7
+ if defined? ::Base64
8
+ module ::Base64
9
+ def self.urlsafe_encode64(bin)
10
+ [bin].pack("m0").tr("+/", "-_")
11
+ end
12
+ def self.urlsafe_decode64(str)
13
+ str.tr("-_", "+/").unpack("m0").first
14
+ end
15
+ end
16
+ end
17
+ end
@@ -59,7 +59,7 @@ module ElFinder
59
59
  end
60
60
 
61
61
  @current = @params[:current] ? from_hash(@params[:current]) : nil
62
- @target = @params[:target] ? from_hash(@params[:target]) : nil
62
+ @target = (@params[:target] and !@params[:target].empty?) ? from_hash(@params[:target]) : nil
63
63
  if params[:targets]
64
64
  @targets = @params[:targets].map{|t| from_hash(t)}
65
65
  end
@@ -76,12 +76,24 @@ module ElFinder
76
76
 
77
77
  #
78
78
  def to_hash(pathname)
79
- Base64.encode64(pathname.path.to_s).chomp.tr("\n", "_")
79
+ # note that '=' are removed
80
+ Base64.urlsafe_encode64(pathname.path.to_s).chomp.tr("=\n", "")
80
81
  end # of to_hash
81
82
 
82
83
  #
83
84
  def from_hash(hash)
84
- pathname = @root + Base64.decode64(hash.tr("_", "\n"))
85
+ # restore missing '='
86
+ len = hash.length % 4
87
+ hash += '==' if len == 1 or len == 2
88
+ hash += '=' if len == 3
89
+
90
+ pathname = @root + Base64.urlsafe_decode64(hash)
91
+ rescue ArgumentError => e
92
+ if e.message == 'invalid base64'
93
+ nil
94
+ else
95
+ raise
96
+ end
85
97
  end # of from_hash
86
98
 
87
99
  #
@@ -315,7 +327,7 @@ module ElFinder
315
327
 
316
328
  #
317
329
  def _extract
318
- @response[:error] = 'Invalid Parameters' and return unless @target.file? && @current.directory?
330
+ @response[:error] = 'Invalid Parameters' and return if @target.nil? || @current.nil? || !(@target.file? && @current.directory?)
319
331
  @response[:error] = 'Access Denied' and return unless perms_for(@target)[:read] == true && perms_for(@current)[:write] == true
320
332
  @response[:error] = 'No extractor available for this file type' and return if (extractor = @options[:extractors][mime_handler.for(@target)]).nil?
321
333
  cmd = ['cd', @current.to_s.shellescape, '&&', extractor.map(&:shellescape), @target.basename.to_s.shellescape].flatten.join(' ')
@@ -1,3 +1,3 @@
1
1
  module ElFinder
2
- VERSION = '1.0.18'
2
+ VERSION = '1.0.19'
3
3
  end
data/lib/el_finder.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'fileutils'
2
2
 
3
+ require 'el_finder/base64'
3
4
  require 'el_finder/pathname'
4
5
  require 'el_finder/mime_type'
5
6
  require 'el_finder/image'
@@ -7,13 +7,13 @@ class TestElFinder < Test::Unit::TestCase
7
7
  ################################################################################
8
8
 
9
9
  def test_to_hash_method
10
- assert_equal Base64.encode64('foo/bar').chomp, @elfinder.to_hash(ElFinder::Pathname.new(@vroot, 'foo/bar'))
11
- assert_equal Base64.encode64('.').chomp, @elfinder.to_hash(ElFinder::Pathname.new(@vroot))
10
+ assert_equal Base64.urlsafe_encode64('foo/bar').chomp.tr("=\n", ""), @elfinder.to_hash(ElFinder::Pathname.new(@vroot, 'foo/bar'))
11
+ assert_equal Base64.urlsafe_encode64('.').chomp.tr("=\n", ""), @elfinder.to_hash(ElFinder::Pathname.new(@vroot))
12
12
  end
13
13
 
14
14
  def test_from_hash_method
15
- assert_equal File.join(@vroot, 'foo/bar'), @elfinder.from_hash(Base64.encode64('foo/bar').chomp).to_s
16
- assert_equal @vroot, @elfinder.from_hash(Base64.encode64('.').chomp).to_s
15
+ assert_equal File.join(@vroot, 'foo/bar'), @elfinder.from_hash(Base64.urlsafe_encode64('foo/bar').chomp).to_s
16
+ assert_equal @vroot, @elfinder.from_hash(Base64.urlsafe_encode64('.').chomp).to_s
17
17
  end
18
18
 
19
19
  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: 51
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 18
10
- version: 1.0.18
9
+ - 19
10
+ version: 1.0.19
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-08-11 00:00:00 Z
18
+ date: 2011-11-27 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: image_size
@@ -52,6 +52,7 @@ files:
52
52
  - el_finder.gemspec
53
53
  - lib/el_finder.rb
54
54
  - lib/el_finder/action.rb
55
+ - lib/el_finder/base64.rb
55
56
  - lib/el_finder/connector.rb
56
57
  - lib/el_finder/image.rb
57
58
  - lib/el_finder/mime_type.rb
@@ -106,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  requirements:
107
108
  - ImageMagick
108
109
  rubyforge_project: el_finder
109
- rubygems_version: 1.8.7
110
+ rubygems_version: 1.8.10
110
111
  signing_key:
111
112
  specification_version: 3
112
113
  summary: elFinder server side connector for Ruby.