rack-private 0.1.8 → 0.2.0
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/README.markdown +26 -7
- data/lib/rack/private.rb +27 -3
- data/lib/rack/private/version.rb +2 -2
- metadata +76 -60
data/README.markdown
CHANGED
@@ -6,42 +6,61 @@ Rack::Private
|
|
6
6
|
Installation
|
7
7
|
------------
|
8
8
|
|
9
|
-
|
9
|
+
``` bash
|
10
|
+
$ gem install rack-private
|
11
|
+
```
|
10
12
|
|
11
13
|
Usage
|
12
14
|
-----
|
13
15
|
|
14
16
|
``` ruby
|
15
17
|
require 'rack-private'
|
16
|
-
use Rack::Private :code => 'secret'
|
18
|
+
use Rack::Private, :code => 'secret'
|
17
19
|
```
|
18
20
|
|
19
21
|
You can also define multiple codes.
|
20
22
|
|
21
23
|
``` ruby
|
22
|
-
use Rack::Private :codes => ['secret', 'super-secret']
|
24
|
+
use Rack::Private, :codes => ['secret', 'super-secret']
|
23
25
|
```
|
24
26
|
|
25
27
|
And provide your own template.
|
26
28
|
|
27
29
|
``` ruby
|
28
|
-
use Rack::Private :code => 'secret', :template_path => Rails.root.join("app/templates/private.html")
|
30
|
+
use Rack::Private, :code => 'secret', :template_path => Rails.root.join("app/templates/private.html")
|
29
31
|
```
|
30
32
|
|
31
33
|
You can specify exceptions, using strings or regular expressions
|
32
34
|
|
33
35
|
``` ruby
|
34
|
-
use Rack::Private :code => 'secret', :except => ["public"]
|
36
|
+
use Rack::Private, :code => 'secret', :except => ["public"]
|
35
37
|
```
|
36
38
|
|
37
39
|
This will allow access to *any* URL containing 'public'. If you want more control, use a regular expression:
|
38
40
|
|
39
41
|
``` ruby
|
40
|
-
use Rack::Private :code => 'secret', :except => [/public$/]
|
42
|
+
use Rack::Private, :code => 'secret', :except => [/public$/]
|
41
43
|
```
|
42
44
|
|
43
45
|
This will only allow access to URLs that *end* in 'public'. You can use any expressions you want.
|
44
46
|
|
47
|
+
If you have a lot of exceptions, you can specify a block
|
48
|
+
|
49
|
+
``` ruby
|
50
|
+
use Rack::Private, :code => 'secret' do
|
51
|
+
except /foo$/
|
52
|
+
except 'public'
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
You can also specify a HTTP method in the block form
|
57
|
+
|
58
|
+
``` ruby
|
59
|
+
use Rack::Private, :code => 'secret' do
|
60
|
+
except /foo$/, :method => 'post'
|
61
|
+
except 'public', :method => :get
|
62
|
+
end
|
63
|
+
```
|
45
64
|
|
46
65
|
Note on Patches/Pull Requests
|
47
66
|
-----------------------------
|
@@ -55,4 +74,4 @@ Note on Patches/Pull Requests
|
|
55
74
|
Author
|
56
75
|
------
|
57
76
|
|
58
|
-
|
77
|
+
[Thibaud Guillaume-Gentil](http://github.com/thibaudgg)
|
data/lib/rack/private.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
module Rack
|
2
2
|
class Private
|
3
3
|
|
4
|
-
def initialize(app, options = {})
|
4
|
+
def initialize(app, options = {}, &block)
|
5
5
|
@app = app
|
6
6
|
@options = options
|
7
|
+
@exceptions = []
|
8
|
+
|
9
|
+
unless options[:except].nil?
|
10
|
+
options[:except].each {|exception| except(exception) }
|
11
|
+
end
|
12
|
+
|
13
|
+
instance_eval(&block) if block_given?
|
7
14
|
end
|
8
15
|
|
9
16
|
def call(env)
|
@@ -45,9 +52,26 @@ module Rack
|
|
45
52
|
|
46
53
|
# Checks if the url matches one of our exception strings or regexs
|
47
54
|
def public_page?(request)
|
48
|
-
@
|
55
|
+
@exceptions.find {|exception| exception?(request, exception)}
|
56
|
+
end
|
57
|
+
|
58
|
+
def exception?(request, exception)
|
59
|
+
path, method = *exception
|
60
|
+
matches_path?(request, path) && matches_method?(request, method)
|
61
|
+
end
|
62
|
+
|
63
|
+
def matches_path?(request, path)
|
64
|
+
request.url.match(path)
|
65
|
+
end
|
66
|
+
|
67
|
+
def matches_method?(request, method)
|
68
|
+
return true if method.nil?
|
69
|
+
request.request_method.downcase == method.values.first.downcase.to_s
|
70
|
+
end
|
71
|
+
|
72
|
+
def except(match, method = nil)
|
73
|
+
@exceptions << [match, method]
|
49
74
|
end
|
50
|
-
|
51
75
|
end
|
52
76
|
end
|
53
77
|
|
data/lib/rack/private/version.rb
CHANGED
metadata
CHANGED
@@ -1,71 +1,88 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-private
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.8
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Thibaud Guillaume-Gentil
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-07-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: bundler
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :development
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: shoulda
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: shoulda
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
30
33
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
35
38
|
type: :development
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rack
|
39
39
|
prerelease: false
|
40
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rack
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
41
49
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
46
54
|
type: :development
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: rack-test
|
50
55
|
prerelease: false
|
51
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rack-test
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
52
65
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 0
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
57
70
|
type: :development
|
58
|
-
|
59
|
-
|
60
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Private Rack middleware purpose is to protect your Rack application from
|
79
|
+
anonymous via a secret code form.
|
80
|
+
email:
|
61
81
|
- thibaud@thibaud.me
|
62
82
|
executables: []
|
63
|
-
|
64
83
|
extensions: []
|
65
|
-
|
66
84
|
extra_rdoc_files: []
|
67
|
-
|
68
|
-
files:
|
85
|
+
files:
|
69
86
|
- lib/rack/private/index.html
|
70
87
|
- lib/rack/private/version.rb
|
71
88
|
- lib/rack/private.rb
|
@@ -74,30 +91,29 @@ files:
|
|
74
91
|
- README.markdown
|
75
92
|
homepage: http://github.com/thibaudgg/rack-private
|
76
93
|
licenses: []
|
77
|
-
|
78
94
|
post_install_message:
|
79
95
|
rdoc_options: []
|
80
|
-
|
81
|
-
require_paths:
|
96
|
+
require_paths:
|
82
97
|
- lib
|
83
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
99
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version:
|
89
|
-
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
hash: -4059976681787191131
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
108
|
none: false
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
94
112
|
version: 1.3.6
|
95
113
|
requirements: []
|
96
|
-
|
97
114
|
rubyforge_project: rack-private
|
98
|
-
rubygems_version: 1.8.
|
115
|
+
rubygems_version: 1.8.24
|
99
116
|
signing_key:
|
100
117
|
specification_version: 3
|
101
118
|
summary: Protect your Rack application from anonymous.
|
102
119
|
test_files: []
|
103
|
-
|