rack-federated-auth 0.1.0 → 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/VERSION +1 -1
- data/lib/rack-federated-auth.rb +45 -12
- data/rack-federated-auth.gemspec +2 -2
- metadata +96 -62
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/rack-federated-auth.rb
CHANGED
@@ -2,48 +2,81 @@ require 'sinatra'
|
|
2
2
|
|
3
3
|
module RackFederatedAuth
|
4
4
|
class Authentication < Sinatra::Base
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :auth_scope
|
6
6
|
attr_accessor :email_filter
|
7
7
|
attr_accessor :failure_message
|
8
8
|
|
9
|
+
attr_accessor :auth_prefix
|
10
|
+
attr_accessor :auth_url
|
11
|
+
attr_accessor :success_url
|
12
|
+
attr_accessor :failure_url
|
13
|
+
|
14
|
+
# Set up federated authentication
|
15
|
+
#
|
16
|
+
# auth_scope is the session key which will be used to check if the user has authenticated. Allows basic role-based authentication
|
17
|
+
# email_filter is a regex which a user's email must match to be authorized
|
18
|
+
# failure_message is the text which will be shown to users after failed auth - use it to help them authenticate correctly
|
19
|
+
# auth_prefix will be prepended to the OmniAuth urls (callbacks, etc).
|
20
|
+
# auth_url determines which auth strategy will be used - see OmniAuth's docs for more details
|
21
|
+
# success_url is the url the user will be redirected to after successful authentication
|
22
|
+
# failure_url for failed authentication (or emails that don't match email_filter)
|
23
|
+
#
|
9
24
|
def initialize(app)
|
10
|
-
@
|
25
|
+
@auth_scope = "authorized"
|
11
26
|
@email_filter = /.*/
|
12
27
|
@failure_message = "Authentication failed. Click <a href='#{@auth_url}'>here</a> to try again"
|
28
|
+
|
29
|
+
@auth_prefix = "/auth"
|
30
|
+
@auth_url = nil
|
31
|
+
@success_url = '/'
|
32
|
+
@failure_url = nil
|
13
33
|
|
14
34
|
yield self if block_given?
|
15
35
|
|
16
|
-
|
17
|
-
|
36
|
+
@auth_url ||= "#{@auth_prefix}/google_oauth2"
|
37
|
+
@failure_url ||= "#{@auth_prefix}/failure"
|
18
38
|
|
19
|
-
|
20
|
-
!session['authorized'].nil? and session['authorized']
|
39
|
+
super(app)
|
21
40
|
end
|
22
41
|
|
42
|
+
# Make sure users are authenticated
|
43
|
+
#
|
44
|
+
# NOTE: This should really be aware of auth_prefix
|
23
45
|
before /^(?!\/(auth))/ do
|
24
46
|
redirect @auth_url unless authenticated?
|
25
47
|
end
|
26
48
|
|
49
|
+
# Handle federated authentication callbacks
|
50
|
+
#
|
51
|
+
# This expects to be passed the authenticated user's email address. OmniAuth
|
52
|
+
# should normalize most of that stuff.
|
53
|
+
#
|
27
54
|
get "/auth/:service/callback" do
|
28
55
|
puts "New #{params[:service]} auth: #{request.env['omniauth.auth']}"
|
29
56
|
begin
|
30
57
|
if request.env['omniauth.auth']['info']['email'].match(@email_filter)
|
31
|
-
puts "email matches filter"
|
32
|
-
session[
|
33
|
-
redirect
|
58
|
+
puts "email matches filter, redirecting to #{@success_url}"
|
59
|
+
session[@auth_scope] = true
|
60
|
+
redirect @success_url
|
34
61
|
else
|
35
|
-
puts "email doesn't match filter"
|
36
|
-
redirect
|
62
|
+
puts "email doesn't match filter, redirecting to #{@failure_url}"
|
63
|
+
redirect @failure_url
|
37
64
|
end
|
38
65
|
rescue
|
39
66
|
puts "Auth failure :("
|
40
67
|
session['authorized'] = false
|
41
|
-
redirect
|
68
|
+
redirect @failure_url
|
42
69
|
end
|
43
70
|
end
|
44
71
|
|
45
72
|
get '/auth/failure' do
|
46
73
|
"<html><body>#{@failure_message}</body></html>"
|
47
74
|
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def authenticated?
|
79
|
+
!session[@auth_scope].nil? and session[@auth_scope]
|
80
|
+
end
|
48
81
|
end
|
49
82
|
end
|
data/rack-federated-auth.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rack-federated-auth"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ryan Michael"]
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.homepage = "http://github.com/kerinin/rack-federated-auth"
|
33
33
|
s.licenses = ["MIT"]
|
34
34
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = "1.8.
|
35
|
+
s.rubygems_version = "1.8.15"
|
36
36
|
s.summary = "Rack middleware using for federated authentication"
|
37
37
|
|
38
38
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,79 +1,107 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-federated-auth
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Ryan Michael
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
date: 2012-03-20 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
17
22
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
hash: 3
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
prerelease: false
|
31
|
+
requirement: *id001
|
32
|
+
name: omniauth
|
22
33
|
type: :runtime
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
hash: 3
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
23
44
|
prerelease: false
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
45
|
+
requirement: *id002
|
26
46
|
name: shoulda
|
27
|
-
requirement: &2169194700 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
|
-
requirements:
|
30
|
-
- - ! '>='
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '0'
|
33
47
|
type: :development
|
34
|
-
|
35
|
-
version_requirements:
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rdoc
|
38
|
-
requirement: &2169194200 !ruby/object:Gem::Requirement
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
|
-
requirements:
|
51
|
+
requirements:
|
41
52
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
hash: 31
|
55
|
+
segments:
|
56
|
+
- 3
|
57
|
+
- 12
|
58
|
+
version: "3.12"
|
45
59
|
prerelease: false
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
60
|
+
requirement: *id003
|
61
|
+
name: rdoc
|
62
|
+
type: :development
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
|
-
requirements:
|
66
|
+
requirements:
|
52
67
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
hash: 23
|
70
|
+
segments:
|
71
|
+
- 1
|
72
|
+
- 0
|
73
|
+
- 0
|
54
74
|
version: 1.0.0
|
55
|
-
type: :development
|
56
75
|
prerelease: false
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
76
|
+
requirement: *id004
|
77
|
+
name: bundler
|
78
|
+
type: :development
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
|
-
requirements:
|
82
|
+
requirements:
|
63
83
|
- - ~>
|
64
|
-
- !ruby/object:Gem::Version
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
hash: 49
|
86
|
+
segments:
|
87
|
+
- 1
|
88
|
+
- 8
|
89
|
+
- 3
|
65
90
|
version: 1.8.3
|
66
|
-
type: :development
|
67
91
|
prerelease: false
|
68
|
-
|
92
|
+
requirement: *id005
|
93
|
+
name: jeweler
|
94
|
+
type: :development
|
69
95
|
description: Provides a simple authentication middleware to lock down Rack-based apps
|
70
96
|
email: kerinin@gmail.com
|
71
97
|
executables: []
|
98
|
+
|
72
99
|
extensions: []
|
73
|
-
|
100
|
+
|
101
|
+
extra_rdoc_files:
|
74
102
|
- LICENSE.txt
|
75
103
|
- README.md
|
76
|
-
files:
|
104
|
+
files:
|
77
105
|
- .document
|
78
106
|
- Gemfile
|
79
107
|
- Gemfile.lock
|
@@ -86,31 +114,37 @@ files:
|
|
86
114
|
- test/helper.rb
|
87
115
|
- test/test_rack-federated-auth.rb
|
88
116
|
homepage: http://github.com/kerinin/rack-federated-auth
|
89
|
-
licenses:
|
117
|
+
licenses:
|
90
118
|
- MIT
|
91
119
|
post_install_message:
|
92
120
|
rdoc_options: []
|
93
|
-
|
121
|
+
|
122
|
+
require_paths:
|
94
123
|
- lib
|
95
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
125
|
none: false
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
|
101
|
-
segments:
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
hash: 3
|
130
|
+
segments:
|
102
131
|
- 0
|
103
|
-
|
104
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
version: "0"
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
134
|
none: false
|
106
|
-
requirements:
|
107
|
-
- -
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
hash: 3
|
139
|
+
segments:
|
140
|
+
- 0
|
141
|
+
version: "0"
|
110
142
|
requirements: []
|
143
|
+
|
111
144
|
rubyforge_project:
|
112
|
-
rubygems_version: 1.8.
|
145
|
+
rubygems_version: 1.8.15
|
113
146
|
signing_key:
|
114
147
|
specification_version: 3
|
115
148
|
summary: Rack middleware using for federated authentication
|
116
149
|
test_files: []
|
150
|
+
|