rack-private 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,42 +6,61 @@ Rack::Private
6
6
  Installation
7
7
  ------------
8
8
 
9
- gem install rack-private
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
- * [Thibaud Guillaume-Gentil](http://github.com/thibaudgg)
77
+ [Thibaud Guillaume-Gentil](http://github.com/thibaudgg)
@@ -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
- @options[:except] && @options[:except].find {|x| request.url.match(x)}
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
 
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Private
3
- VERSION = "0.1.8"
3
+ VERSION = "0.2.0"
4
4
  end
5
- end
5
+ end
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
- date: 2011-05-06 00:00:00 Z
14
- dependencies:
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
- prerelease: false
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: 1.0.0
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
- requirement: &id002 !ruby/object:Gem::Requirement
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: 2.11.3
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
- requirement: &id003 !ruby/object:Gem::Requirement
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: 1.2.0
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
- requirement: &id004 !ruby/object:Gem::Requirement
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.5.4
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
57
70
  type: :development
58
- version_requirements: *id004
59
- description: Private Rack middleware purpose is to protect your Rack application from anonymous via a secret code form.
60
- email:
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: "0"
89
- required_rubygems_version: !ruby/object:Gem::Requirement
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.1
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
-