el_finder 1.0.18 → 1.0.19

Sign up to get free protection for your applications and to get access to all the features.
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.