el_finder_ftp 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'shellwords'
3
+ require 'image_size'
4
+
5
+ module ElFinderFtp
6
+
7
+ # Represents default image handler.
8
+ # It uses *mogrify* to resize images and *convert* to create thumbnails.
9
+ class Image
10
+
11
+ def self.size(pathname)
12
+ return nil unless File.exist?(pathname)
13
+ s = ::ImageSize.new(File.open(pathname)).size.to_s
14
+ s = nil if s.empty?
15
+ return s
16
+ end
17
+
18
+ def self.resize(pathname, options = {})
19
+ return nil unless File.exist?(pathname)
20
+ system( ::Shellwords.join(['mogrify', '-resize', "#{options[:width]}x#{options[:height]}!", pathname.to_s]) )
21
+ end # of self.resize
22
+
23
+ def self.thumbnail(src, dst, options = {})
24
+ return nil unless File.exist?(src)
25
+ system( ::Shellwords.join(['convert', '-resize', "#{options[:width]}x#{options[:height]}", '-background', 'white', '-gravity', 'center', '-extent', "#{options[:width]}x#{options[:height]}", src.to_s, dst.to_s]) )
26
+ end # of self.resize
27
+
28
+ end # of class Image
29
+
30
+ end # of module ElFinderFtp
@@ -0,0 +1,83 @@
1
+ module ElFinderFtp
2
+
3
+ # Represents default MIME types recognizer.
4
+ class MimeType
5
+
6
+ # File extension to mime type mapping.
7
+ TYPES = {
8
+ 'ai' => 'application/postscript',
9
+ 'eps' => 'application/postscript',
10
+ 'exe' => 'application/octet-stream',
11
+ 'doc' => 'application/vnd.ms-word',
12
+ 'xls' => 'application/vnd.ms-excel',
13
+ 'ppt' => 'application/vnd.ms-powerpoint',
14
+ 'pps' => 'application/vnd.ms-powerpoint',
15
+ 'pdf' => 'application/pdf',
16
+ 'xml' => 'application/xml',
17
+ 'odt' => 'application/vnd.oasis.opendocument.text',
18
+ 'swf' => 'application/x-shockwave-flash',
19
+ # archives
20
+ 'gz' => 'application/x-gzip',
21
+ 'tgz' => 'application/x-gzip',
22
+ 'bz' => 'application/x-bzip2',
23
+ 'bz2' => 'application/x-bzip2',
24
+ 'tbz' => 'application/x-bzip2',
25
+ 'zip' => 'application/zip',
26
+ 'rar' => 'application/x-rar',
27
+ 'tar' => 'application/x-tar',
28
+ '7z' => 'application/x-7z-compressed',
29
+ # texts
30
+ 'txt' => 'text/plain',
31
+ 'php' => 'text/x-php',
32
+ 'html' => 'text/html',
33
+ 'htm' => 'text/html',
34
+ 'js' => 'text/javascript',
35
+ 'css' => 'text/css',
36
+ 'rtf' => 'text/rtf',
37
+ 'rtfd' => 'text/rtfd',
38
+ 'py' => 'text/x-python',
39
+ 'java' => 'text/x-java-source',
40
+ 'rb' => 'text/x-ruby',
41
+ 'sh' => 'text/x-shellscript',
42
+ 'pl' => 'text/x-perl',
43
+ 'sql' => 'text/x-sql',
44
+ # images
45
+ 'bmp' => 'image/x-ms-bmp',
46
+ 'jpg' => 'image/jpeg',
47
+ 'jpeg' => 'image/jpeg',
48
+ 'gif' => 'image/gif',
49
+ 'png' => 'image/png',
50
+ 'tif' => 'image/tiff',
51
+ 'tiff' => 'image/tiff',
52
+ 'tga' => 'image/x-targa',
53
+ 'psd' => 'image/vnd.adobe.photoshop',
54
+ # audio
55
+ 'mp3' => 'audio/mpeg',
56
+ 'mid' => 'audio/midi',
57
+ 'ogg' => 'audio/ogg',
58
+ 'mp4a' => 'audio/mp4',
59
+ 'wav' => 'audio/wav',
60
+ 'wma' => 'audio/x-ms-wma',
61
+ # video
62
+ 'avi' => 'video/x-msvideo',
63
+ 'dv' => 'video/x-dv',
64
+ 'mp4' => 'video/mp4',
65
+ 'mpeg' => 'video/mpeg',
66
+ 'mpg' => 'video/mpeg',
67
+ 'mov' => 'video/quicktime',
68
+ 'wm' => 'video/x-ms-wmv',
69
+ 'flv' => 'video/x-flv',
70
+ 'mkv' => 'video/x-matroska'
71
+ }
72
+
73
+ # Gets MIME type fort specified path.
74
+ # @param [::Pathname, String] pathname Path to recognize its MIME type.
75
+ # @return [String] MIME type if known; 'unknown/unknown' otherwise.
76
+ def self.for(pathname)
77
+ pathname = ::Pathname.new(pathname) if pathname.is_a?(String)
78
+ TYPES[pathname.extname.downcase[1..-1]] || 'application/octet-stream'
79
+ end # of for
80
+
81
+ end # of class MimeType
82
+
83
+ end # of module ElFinderFtp
@@ -0,0 +1,197 @@
1
+ require 'fileutils'
2
+ require 'pathname'
3
+
4
+ module ElFinderFtp
5
+
6
+ class Pathname
7
+ attr_reader :root, :path, :adapter
8
+
9
+ #
10
+ def initialize(adapter_or_root, path = '.')
11
+ @adapter = adapter_or_root.is_a?(ElFinderFtp::Pathname) ? adapter_or_root.adapter : adapter_or_root
12
+
13
+ @root = path.is_a?(ElFinderFtp::Pathname) ? path.root : FtpPathname.new(@adapter, '/')
14
+
15
+ if path.is_a?(ElFinderFtp::Pathname)
16
+ @path = path.path
17
+ elsif path.is_a?(ElFinderFtp::FtpPathname)
18
+ @path = path
19
+ else
20
+ @path = FtpPathname.new(@adapter, path)
21
+ end
22
+ if absolute?
23
+ if @path.cleanpath.to_s.start_with?(@root.to_s)
24
+ @path = FtpPathname.new( @adapter, @path.to_s.slice((@root.to_s.length)..-1), @path.attrs)
25
+ elsif @path.cleanpath.to_s.start_with?(@root.realpath.to_s)
26
+ @path = FtpPathname.new( @adapter, @path.to_s.slice((@root.realpath.to_s.length)..-1), @path.attrs)
27
+ else
28
+ raise SecurityError, "Absolute paths are not allowed"
29
+ end
30
+ end
31
+ raise SecurityError, "Paths outside the root are not allowed" if outside_of_root?
32
+
33
+ end # of initialize
34
+
35
+ #
36
+ def +(other)
37
+ if other.is_a? ::ElFinderFtp::Pathname
38
+ other = other.path
39
+ end
40
+ self.class.new(@adapter, @path + other)
41
+ end # of +
42
+
43
+ #
44
+ def is_root?
45
+ @path.to_s == '.'
46
+ end
47
+
48
+ #
49
+ def absolute?
50
+ @path.absolute?
51
+ end # of absolute?
52
+
53
+ #
54
+ def relative?
55
+ @path.relative?
56
+ end # of relative?
57
+
58
+ #
59
+ def outside_of_root?
60
+ !cleanpath.to_s.start_with?(@root.to_s)
61
+ end # of outside_of_root?
62
+
63
+ #
64
+ def fullpath
65
+ @fullpath ||= (@path.nil? ? @root : @root + @path)
66
+ end # of fullpath
67
+
68
+ #
69
+ def cleanpath
70
+ fullpath.cleanpath
71
+ end # of cleanpath
72
+
73
+ #
74
+ def realpath
75
+ fullpath.realpath
76
+ end # of realpath
77
+
78
+ #
79
+ def basename(*args)
80
+ @path.basename(*args)
81
+ end # of basename
82
+
83
+ #
84
+ def basename_sans_extension
85
+ @path.basename(@path.extname)
86
+ end # of basename
87
+
88
+ #
89
+ def basename(*args)
90
+ @path.basename(*args)
91
+ end # of basename
92
+
93
+ #
94
+ def dirname
95
+ self.class.new(@adapter, @path.dirname)
96
+ end # of basename
97
+
98
+ #
99
+ def extname
100
+ @path.nil? ? '' : @path.extname
101
+ end # of extname
102
+
103
+ #
104
+ def to_s
105
+ cleanpath.to_s
106
+ end # of to_s
107
+ alias_method :to_str, :to_s
108
+
109
+ #
110
+ def child_directories(with_directory=true)
111
+ adapter.children(self, with_directory).select{ |child| child.directory? }.map{|e| self.class.new(@adapter, e)}
112
+ end
113
+
114
+ #
115
+ def files(with_directory=true)
116
+ adapter.children(self, with_directory).select{ |child| child.file? }.map{|e| self.class.new(@adapter, e)}
117
+ end
118
+
119
+
120
+ #
121
+ def children(with_directory=true)
122
+ adapter.children(self, with_directory).map{|e| self.class.new(@adapter, e)}
123
+ end
124
+
125
+ #
126
+ def touch(options = {})
127
+ adapter.touch(cleanpath, options)
128
+ end
129
+
130
+ #
131
+ def relative_to(other)
132
+ @path.relative_path_from(other)
133
+ end
134
+
135
+ #
136
+ def unique
137
+ return self.dup unless fullpath.file?
138
+ copy = 1
139
+ begin
140
+ new_file = self.class.new(@adapter, dirname + "#{basename_sans_extension} #{copy}#{extname}")
141
+ copy += 1
142
+ end while new_file.exist?
143
+ new_file
144
+ end # of unique
145
+
146
+ #
147
+ def duplicate
148
+ _basename = basename_sans_extension
149
+ copy = 1
150
+ if _basename.to_s =~ /^(.*) copy (\d+)$/
151
+ _basename = $1
152
+ copy = $2.to_i
153
+ end
154
+ begin
155
+ new_file = self.class.new(@adapter, dirname + "#{_basename} copy #{copy}#{extname}")
156
+ copy += 1
157
+ end while new_file.exist?
158
+ new_file
159
+ end # of duplicate
160
+
161
+ #
162
+ def rename(to)
163
+ to = self.class.new(@adapter, to)
164
+ realpath.rename(to.fullpath.to_s)
165
+ to
166
+ end # of rename
167
+
168
+ {
169
+ 'directory?' => {:path => 'realpath', :rescue => true },
170
+ 'exist?' => {:path => 'realpath', :rescue => true },
171
+ 'file?' => {:path => 'realpath', :rescue => true },
172
+ 'ftype' => {:path => 'realpath', },
173
+ 'mkdir' => {:path => 'fullpath', :args => '(*args)' },
174
+ 'mkdir' => {:path => 'fullpath', :args => '(*args)' },
175
+ 'mtime' => {:path => 'realpath', },
176
+ 'open' => {:path => 'fullpath', :args => '(*args, &block)' },
177
+ 'read' => {:path => 'fullpath', :args => '(*args)' },
178
+ 'write' => {:path => 'fullpath', :args => '(*args)' },
179
+ 'readlink' => {:path => 'fullpath', },
180
+ 'readable?' => {:path => 'realpath', :rescue => true },
181
+ 'size' => {:path => 'realpath', },
182
+ 'symlink?' => {:path => 'fullpath', },
183
+ 'unlink' => {:path => 'realpath', },
184
+ 'writable?' => {:path => 'realpath', :rescue => true },
185
+ }.each_pair do |meth, opts|
186
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
187
+ def #{meth}#{opts[:args]}
188
+ #{opts[:path]}.#{meth}#{opts[:args]}
189
+ #{"rescue Errno::ENOENT\nfalse" if opts[:rescue]}
190
+ end
191
+ METHOD
192
+ end
193
+
194
+
195
+ end # of class Pathname
196
+
197
+ end # of module ElFinderFtp
@@ -0,0 +1,7 @@
1
+ module ElFinderFtp
2
+ class Railties < ::Rails::Railtie
3
+ initializer 'Rails logger' do
4
+ ElFinderFtp::Connector.logger = Rails.logger
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # Represents ElFinderFtp namespace.
2
+ module ElFinderFtp
3
+ # Gem version.
4
+ VERSION = '1.0.0'
5
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: el_finder_ftp
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Micacchi
9
+ - Philip Hallstrom
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-08-26 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: image_size
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: 1.0.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: net-ftp-list
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: 3.2.5
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 3.2.5
47
+ - !ruby/object:Gem::Dependency
48
+ name: browser
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.6
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 0.1.6
63
+ - !ruby/object:Gem::Dependency
64
+ name: yard
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 0.8.1
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 0.8.1
79
+ - !ruby/object:Gem::Dependency
80
+ name: redcarpet
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: 2.1.1
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 2.1.1
95
+ description: Ruby library to provide server side functionality for elFinder. elFinder
96
+ is an open-source file manager for web, written in JavaScript using jQuery UI.
97
+ email:
98
+ - cmicacchi@solvco.com
99
+ - philip@pjkh.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .autotest
105
+ - .gitignore
106
+ - .yardopts
107
+ - Gemfile
108
+ - README.md
109
+ - Rakefile
110
+ - TODO
111
+ - el_finder_ftp.gemspec
112
+ - lib/el_finder_ftp.rb
113
+ - lib/el_finder_ftp/action.rb
114
+ - lib/el_finder_ftp/base64.rb
115
+ - lib/el_finder_ftp/connector.rb
116
+ - lib/el_finder_ftp/ftp_adapter.rb
117
+ - lib/el_finder_ftp/ftp_authentication_error.rb
118
+ - lib/el_finder_ftp/ftp_pathname.rb
119
+ - lib/el_finder_ftp/image.rb
120
+ - lib/el_finder_ftp/mime_type.rb
121
+ - lib/el_finder_ftp/pathname.rb
122
+ - lib/el_finder_ftp/railties.rb
123
+ - lib/el_finder_ftp/version.rb
124
+ homepage: https://github.com/Nivio/el_finder_ftp
125
+ licenses:
126
+ - MIT
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project: el_finder_ftp
145
+ rubygems_version: 1.8.25
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: elFinder server side connector for Ruby, with an FTP backend.
149
+ test_files: []
150
+ has_rdoc: