dav4rack 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +14 -4
- data/bin/dav4rack +26 -10
- data/dav4rack.gemspec +1 -0
- data/lib/dav4rack/file_resource.rb +25 -6
- data/lib/dav4rack/handler.rb +1 -1
- data/lib/dav4rack/version.rb +1 -1
- metadata +18 -8
data/README.rdoc
CHANGED
@@ -2,9 +2,19 @@
|
|
2
2
|
|
3
3
|
DAV4Rack is a framework for providing WebDAV via Rack allowing content
|
4
4
|
authoring over HTTP. It is based off the {original RackDAV framework}[http://github.com/georgi/rack_dav]
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
adding some useful new features:
|
6
|
+
|
7
|
+
* Better resource support for building fully virtualized resource structures
|
8
|
+
* Generic locking as well as Resource level specific locking
|
9
|
+
* Interceptor middleware to provide virtual mapping to resources
|
10
|
+
* Mapped resource paths
|
11
|
+
* Authentication support
|
12
|
+
* Resource callbacks
|
13
|
+
* Remote file proxying (including sendfile support for remote files)
|
14
|
+
* Nokogiri based document parsing and building
|
15
|
+
|
16
|
+
If you find issues, please create a new issue on github. If you have fixes, please fork the repo and send me
|
17
|
+
a pull request with your modifications. If you are just here to use the library, enjoy!
|
8
18
|
|
9
19
|
== Install
|
10
20
|
|
@@ -283,7 +293,7 @@ without getting stuck in a loop.
|
|
283
293
|
|
284
294
|
=== Unknown Issues
|
285
295
|
|
286
|
-
Please use the issues at github: http://github.com/chrisroberts/dav4rack
|
296
|
+
Please use the issues at github: http://github.com/chrisroberts/dav4rack/issues
|
287
297
|
|
288
298
|
== License
|
289
299
|
|
data/bin/dav4rack
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require 'dav4rack'
|
4
|
+
require 'dav4rack/version'
|
5
5
|
require 'getoptlong'
|
6
6
|
|
7
7
|
def print_help_msg
|
@@ -52,6 +52,8 @@ opts.each do |opt,arg|
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
require 'dav4rack'
|
56
|
+
|
55
57
|
app = Rack::Builder.new do
|
56
58
|
use Rack::ShowExceptions
|
57
59
|
use Rack::CommonLogger
|
@@ -62,14 +64,28 @@ app = Rack::Builder.new do
|
|
62
64
|
|
63
65
|
end.to_app
|
64
66
|
|
65
|
-
|
66
|
-
|
67
|
+
runners = []
|
68
|
+
runners << lambda do |x|
|
69
|
+
print 'Looking for unicorn... '
|
67
70
|
require 'unicorn'
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
71
|
+
puts 'OK'
|
72
|
+
Unicorn.run(x, :listeners => ["0.0.0.0:3000"])
|
73
|
+
end
|
74
|
+
runners << lambda do |x|
|
75
|
+
print 'Looking for mongrel... '
|
76
|
+
require 'mongrel'
|
77
|
+
puts 'OK'
|
78
|
+
Rack::Handler::Mongrel.run(x, :Port => 3000)
|
79
|
+
end
|
80
|
+
runners << lambda do |x|
|
81
|
+
puts 'Loading WEBrick'
|
82
|
+
Rack::Handler::WEBrick.run(x, :Port => 3000)
|
83
|
+
end
|
84
|
+
|
85
|
+
begin
|
86
|
+
runner = runners.shift
|
87
|
+
runner.call(app)
|
88
|
+
rescue LoadError
|
89
|
+
puts 'FAILED'
|
90
|
+
retry unless runners.empty?
|
75
91
|
end
|
data/dav4rack.gemspec
CHANGED
@@ -6,12 +6,8 @@ module DAV4Rack
|
|
6
6
|
|
7
7
|
include WEBrick::HTTPUtils
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
options[:username] == user && options[:password] == pass
|
12
|
-
else
|
13
|
-
true
|
14
|
-
end
|
9
|
+
before do |resource, method_name|
|
10
|
+
resource.send(:check_authentication)
|
15
11
|
end
|
16
12
|
|
17
13
|
# If this is a collection, return the child resources.
|
@@ -159,6 +155,29 @@ module DAV4Rack
|
|
159
155
|
|
160
156
|
private
|
161
157
|
|
158
|
+
def check_authentication
|
159
|
+
valid = true
|
160
|
+
if(options[:username])
|
161
|
+
valid = false
|
162
|
+
if(request.env['HTTP_AUTHORIZATION'])
|
163
|
+
auth = Rack::Auth::Basic::Request.new(request.env)
|
164
|
+
if(auth.basic? && auth.credentials)
|
165
|
+
valid = options[:username] == auth.credentials[0] && options[:password] == auth.credentials[1]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
raise Unauthorized unless valid
|
170
|
+
valid
|
171
|
+
end
|
172
|
+
|
173
|
+
def authenticate(user, pass)
|
174
|
+
if(options[:username])
|
175
|
+
options[:username] == user && options[:password] == pass
|
176
|
+
else
|
177
|
+
true
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
162
181
|
def root
|
163
182
|
@options[:root]
|
164
183
|
end
|
data/lib/dav4rack/handler.rb
CHANGED
@@ -42,7 +42,7 @@ module DAV4Rack
|
|
42
42
|
response['Content-Length'] = response.body.to_s.length unless response['Content-Length'] || !response.body.is_a?(String)
|
43
43
|
response.body = [response.body] if not response.body.respond_to? :each
|
44
44
|
response.status = response.status ? response.status.to_i : 200
|
45
|
-
response.headers.
|
45
|
+
response.headers.keys.each{|k| response.headers[k] = response[k].to_s}
|
46
46
|
|
47
47
|
# Apache wants the body dealt with, so just read it and junk it
|
48
48
|
buf = true
|
data/lib/dav4rack/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dav4rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 31
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Chris Roberts
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-09-30 00:00:00 -07:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 1
|
32
30
|
- 4
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 9
|
46
43
|
segments:
|
47
44
|
- 2
|
48
45
|
- 1
|
@@ -50,6 +47,21 @@ dependencies:
|
|
50
47
|
version: 2.1.1
|
51
48
|
type: :runtime
|
52
49
|
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: rack
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 1
|
60
|
+
- 1
|
61
|
+
- 0
|
62
|
+
version: 1.1.0
|
63
|
+
type: :runtime
|
64
|
+
version_requirements: *id003
|
53
65
|
description: WebDAV handler for Rack
|
54
66
|
email: chrisroberts.code@gmail.com
|
55
67
|
executables:
|
@@ -92,7 +104,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
104
|
requirements:
|
93
105
|
- - ">="
|
94
106
|
- !ruby/object:Gem::Version
|
95
|
-
hash: 3
|
96
107
|
segments:
|
97
108
|
- 0
|
98
109
|
version: "0"
|
@@ -101,7 +112,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
112
|
requirements:
|
102
113
|
- - ">="
|
103
114
|
- !ruby/object:Gem::Version
|
104
|
-
hash: 3
|
105
115
|
segments:
|
106
116
|
- 0
|
107
117
|
version: "0"
|