rack-auth-simples 0.0.3 → 0.0.4

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.
@@ -1,7 +1,7 @@
1
1
  module Rack
2
2
  module Auth
3
3
  class Simples
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
  end
6
6
  end
7
7
  end
@@ -11,12 +11,14 @@ module Rack
11
11
  @ips = []
12
12
  @triggers = []
13
13
  @exceptions = []
14
+ @codes = []
14
15
 
15
16
  @opts = {
16
17
  :secret => 'SET_VIA_CONFIG',
17
18
  :return_url => '/',
18
19
  :cookie_name => '_auth_allowed',
19
- :fail => :forbidden
20
+ :fail => :forbidden,
21
+ :code_param => 'code'
20
22
  }
21
23
  end
22
24
 
@@ -40,6 +42,10 @@ module Rack
40
42
  @triggers << url
41
43
  end
42
44
 
45
+ def add_trigger_code code, url, target
46
+ @codes << {:code => code, :url => url, :target => target}
47
+ end
48
+
43
49
  def parse env, app
44
50
 
45
51
  if @opts[:fail] == :forbidden
@@ -56,34 +62,62 @@ module Rack
56
62
 
57
63
  return app.call(env) if @exceptions.include? env['PATH_INFO']
58
64
 
65
+ ok = true
66
+
59
67
  if @ips.any?
60
68
  addrs_list = IPAddrList.new(@ips)
61
69
  return fail unless addrs_list.include? ip
62
70
  end
63
71
 
64
- if @triggers.any?
72
+
73
+ return app.call(env) if get_cookie(env) == @opts[:secret]
65
74
 
66
- cookie = Rack::Request.new(env).cookies[@opts[:cookie_name]]
67
75
 
68
- return app.call(env) if cookie == @opts[:secret]
76
+ if @triggers.any?
69
77
 
70
78
  if @triggers.include? env['PATH_INFO']
71
79
 
72
- headers = {'Location' => @opts[:return_url]}
73
- Rack::Utils.set_cookie_header!(headers, @opts[:cookie_name], {:value => @opts[:secret], :path => "/"})
74
- return [302, headers, ['']]
80
+ return set_cookie
75
81
 
76
82
  end
77
83
 
78
- return fail
84
+ ok = false
85
+
86
+ end
87
+
88
+ if @codes.any?
89
+
90
+ @codes.each do |code|
91
+
92
+ if code[:url] == env['PATH_INFO'] and code[:code] == Rack::Request.new(env).params[@opts[:code_param]]
93
+ return set_cookie(code[:target])
94
+ end
95
+
96
+ end
97
+
98
+ ok = false
79
99
 
80
100
  end
81
101
 
82
102
  # default to true
83
- return app.call env
103
+ return app.call env if ok
104
+
105
+ return fail
84
106
 
85
107
  end
86
108
 
109
+ private
110
+
111
+ def get_cookie env
112
+ Rack::Request.new(env).cookies[@opts[:cookie_name]]
113
+ end
114
+
115
+ def set_cookie url = nil
116
+ headers = {'Location' => ( url || @opts[:return_url] ) }
117
+ Rack::Utils.set_cookie_header!(headers, @opts[:cookie_name], {:value => @opts[:secret], :path => "/"})
118
+ return [302, headers, ['']]
119
+ end
120
+
87
121
 
88
122
  end
89
123
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-auth-simples
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-04 00:00:00.000000000 Z
12
+ date: 2013-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ipaddr_list