rack-auth-simples 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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