simple_admin_auth 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0391f8fb3293ede817af3503a17a27cd4669d641
4
- data.tar.gz: 1638a66408145ae410a2746be87fd984fe91b0c8
3
+ metadata.gz: 27de75f737bbab956042d1c494449358ceb7413d
4
+ data.tar.gz: 52449b62c941c6f16da25cc1ff712f5e3ee71cc7
5
5
  SHA512:
6
- metadata.gz: 0b15d024b2c4afea8f61d9e4bd8e96d37e513a6594710022532fb99b1dbdb3815cb6f0fd588f8998a39bad949ffbd60161a936b5007420293c624c3558652bff
7
- data.tar.gz: b0a8a7e61a84fa3baef32119f67f17af1df87cfe6da95e1843fa6d44c054b24cc51454c4816142b81ff3b22fe4c61d01cfb72bb96a0da0386e3a254129a14145
6
+ metadata.gz: 1ee6fa8c38fd6ff7f2463d78c3c23b8b0d78e80d081dc505033d6c61702121c5b46483d64d8b4806b1700758e9c3023ae103d324a016015d285182ccef593e75
7
+ data.tar.gz: 1253441ecae56dc2152ebf566bf4eb5ef185e0fff1ccfa02a15c167f8acd8ce65063fe54a3badac53ca566e31eeaa3d77c186c25120579c7f64d1e52d0908f5f
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
+ sudo: false
2
3
  script: "bundle exec rspec"
3
-
4
4
  rvm:
5
- - 2.1.2
5
+ - 2.2.4
6
6
 
7
7
  gemfile:
8
8
  - gemfiles/rack1.5.gemfile
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -43,21 +43,22 @@ GEM
43
43
  minitest (~> 5.1)
44
44
  thread_safe (~> 0.3, >= 0.3.4)
45
45
  tzinfo (~> 1.1)
46
+ addressable (2.4.0)
46
47
  arel (6.0.0)
47
48
  builder (3.2.2)
48
49
  daemons (1.1.9)
49
50
  diff-lcs (1.2.5)
50
51
  erubis (2.7.0)
51
- eventmachine (1.0.6)
52
- faraday (0.9.1)
52
+ eventmachine (1.0.8)
53
+ faraday (0.9.2)
53
54
  multipart-post (>= 1.2, < 3)
54
55
  globalid (0.3.0)
55
56
  activesupport (>= 4.1.0)
56
- hashie (3.4.0)
57
+ hashie (3.4.3)
57
58
  hike (1.2.3)
58
59
  i18n (0.7.0)
59
- json (1.8.2)
60
- jwt (1.2.1)
60
+ json (1.8.3)
61
+ jwt (1.5.2)
61
62
  loofah (2.0.1)
62
63
  nokogiri (>= 1.5.9)
63
64
  mail (2.6.3)
@@ -65,7 +66,7 @@ GEM
65
66
  mime-types (2.4.3)
66
67
  mini_portile (0.6.2)
67
68
  minitest (5.5.1)
68
- multi_json (1.10.1)
69
+ multi_json (1.11.2)
69
70
  multi_xml (0.5.5)
70
71
  multipart-post (2.0.0)
71
72
  nokogiri (1.6.6.2)
@@ -76,18 +77,19 @@ GEM
76
77
  multi_json (~> 1.3)
77
78
  multi_xml (~> 0.5)
78
79
  rack (~> 1.2)
79
- omniauth (1.2.2)
80
+ omniauth (1.3.1)
80
81
  hashie (>= 1.2, < 4)
81
- rack (~> 1.0)
82
- omniauth-google-oauth2 (0.2.6)
83
- omniauth (> 1.0)
84
- omniauth-oauth2 (~> 1.1)
85
- omniauth-oauth2 (1.2.0)
86
- faraday (>= 0.8, < 0.10)
82
+ rack (>= 1.0, < 3)
83
+ omniauth-google-oauth2 (0.3.0)
84
+ addressable (~> 2.3)
85
+ jwt (~> 1.0)
87
86
  multi_json (~> 1.3)
87
+ omniauth (>= 1.1.1)
88
+ omniauth-oauth2 (>= 1.3.1)
89
+ omniauth-oauth2 (1.4.0)
88
90
  oauth2 (~> 1.0)
89
91
  omniauth (~> 1.2)
90
- rack (1.6.0)
92
+ rack (1.6.4)
91
93
  rack-protection (1.5.3)
92
94
  rack
93
95
  rack-test (0.6.3)
@@ -130,10 +132,10 @@ GEM
130
132
  diff-lcs (>= 1.2.0, < 2.0)
131
133
  rspec-support (~> 3.2.0)
132
134
  rspec-support (3.2.0)
133
- sinatra (1.4.5)
135
+ sinatra (1.4.6)
134
136
  rack (~> 1.4)
135
137
  rack-protection (~> 1.4)
136
- tilt (~> 1.3, >= 1.3.4)
138
+ tilt (>= 1.3, < 3)
137
139
  sprockets (2.12.3)
138
140
  hike (~> 1.2)
139
141
  multi_json (~> 1.0)
@@ -164,3 +166,6 @@ DEPENDENCIES
164
166
  rspec
165
167
  simple_admin_auth!
166
168
  thin
169
+
170
+ BUNDLED WITH
171
+ 1.10.6
data/README.md CHANGED
@@ -34,6 +34,10 @@ Create an `config/initializers/admin_auth.rb` configuring your domain:
34
34
  # The name must be `admin`
35
35
  provider :google_oauth2, 'YOUR_KEY', 'YOUR_SECRET', name: 'admin',
36
36
  access_type: 'online', hd: 'example.com', approval_prompt: 'auto'
37
+
38
+ # IMPORTANT: To restrict logins to your domain, you have to configure the
39
+ # required_hd. The :hd parameter for the provider is only a suggestion.
40
+ SimpleAdminAuth::Configuration.required_hd = 'example.com'
37
41
  end
38
42
 
39
43
  If you would like to white list emails in your domain add the following:
@@ -66,6 +70,10 @@ Sample config.ru:
66
70
  # The name must be `admin`.
67
71
  provider :google_oauth2, 'YOUR_KEY (client id)', 'YOUR_SECRET', name: 'admin',
68
72
  access_type: 'online', hd: 'yourdomain.com', approval_prompt: 'auto'
73
+
74
+ # IMPORTANT: To restrict logins to your domain, you have to configure the
75
+ # required_hd. The :hd parameter for the provider is only a suggestion.
76
+ SimpleAdminAuth::Configuration.required_hd = 'yourdomain.com'
69
77
  end
70
78
 
71
79
 
data/config.ru CHANGED
@@ -18,12 +18,21 @@ app = Rack::Builder.new do
18
18
  # You need to create a key for your app on https://code.google.com/apis/console/
19
19
  provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'], name: 'admin',
20
20
  access_type: 'online', hd: ENV['ADMIN_DOMAIN'], approval_prompt: 'auto'
21
+
22
+ SimpleAdminAuth::Configuration.required_hd = ENV['ADMIN_DOMAIN']
21
23
  end
22
24
 
23
25
  map "/admin" do
24
26
  # This middleware only allows signed-in users to access this app.
25
27
  use SimpleAdminAuth::RequireAdmin
26
- run lambda { |env| [200, {'Content-Type' => 'text/html'}, ['<p>Welcome, you have been authenticated!</p> <p><a href="/auth/admin/logout">Sign Out</a></p>']] }
28
+ run lambda { |env|
29
+ body = <<-HTML
30
+ <p>Welcome, you have been authenticated!</p>
31
+ <p><a href="/auth/admin/logout">Sign Out</a></p>
32
+ <p>Details: #{Rack::Utils.escape_html(env['rack.session']['admin_user'].inspect)}</p>
33
+ HTML
34
+ [200, {'Content-Type' => 'text/html'}, [body]]
35
+ }
27
36
  end
28
37
 
29
38
  map "/" do
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -10,7 +10,7 @@ GEM
10
10
  specs:
11
11
  daemons (1.1.9)
12
12
  diff-lcs (1.2.4)
13
- eventmachine (1.0.3)
13
+ eventmachine (1.0.8)
14
14
  faraday (0.8.7)
15
15
  multipart-post (~> 1.1)
16
16
  hashie (2.0.4)
@@ -48,10 +48,10 @@ GEM
48
48
  rspec-expectations (2.13.0)
49
49
  diff-lcs (>= 1.1.3, < 2.0)
50
50
  rspec-mocks (2.13.1)
51
- sinatra (1.4.5)
51
+ sinatra (1.4.6)
52
52
  rack (~> 1.4)
53
53
  rack-protection (~> 1.4)
54
- tilt (~> 1.3, >= 1.3.4)
54
+ tilt (>= 1.3, < 3)
55
55
  thin (1.5.1)
56
56
  daemons (>= 1.0.9)
57
57
  eventmachine (>= 0.12.6)
@@ -69,3 +69,6 @@ DEPENDENCIES
69
69
  rspec
70
70
  simple_admin_auth!
71
71
  thin
72
+
73
+ BUNDLED WITH
74
+ 1.10.6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -10,7 +10,7 @@ GEM
10
10
  specs:
11
11
  daemons (1.1.9)
12
12
  diff-lcs (1.2.5)
13
- eventmachine (1.0.6)
13
+ eventmachine (1.0.8)
14
14
  faraday (0.9.1)
15
15
  multipart-post (>= 1.2, < 3)
16
16
  hashie (3.4.0)
@@ -54,10 +54,10 @@ GEM
54
54
  diff-lcs (>= 1.2.0, < 2.0)
55
55
  rspec-support (~> 3.2.0)
56
56
  rspec-support (3.2.0)
57
- sinatra (1.4.5)
57
+ sinatra (1.4.6)
58
58
  rack (~> 1.4)
59
59
  rack-protection (~> 1.4)
60
- tilt (~> 1.3, >= 1.3.4)
60
+ tilt (>= 1.3, < 3)
61
61
  thin (1.6.3)
62
62
  daemons (~> 1.0, >= 1.0.9)
63
63
  eventmachine (~> 1.0)
@@ -75,3 +75,6 @@ DEPENDENCIES
75
75
  rspec
76
76
  simple_admin_auth!
77
77
  thin
78
+
79
+ BUNDLED WITH
80
+ 1.10.6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -40,7 +40,7 @@ GEM
40
40
  daemons (1.1.9)
41
41
  diff-lcs (1.2.4)
42
42
  erubis (2.7.0)
43
- eventmachine (1.0.3)
43
+ eventmachine (1.0.8)
44
44
  faraday (0.8.7)
45
45
  multipart-post (~> 1.1)
46
46
  hashie (2.0.4)
@@ -48,7 +48,7 @@ GEM
48
48
  httpauth (0.2.0)
49
49
  i18n (0.6.1)
50
50
  journey (1.0.4)
51
- json (1.7.7)
51
+ json (1.8.3)
52
52
  jwt (0.1.8)
53
53
  multi_json (>= 1.5)
54
54
  mail (2.5.3)
@@ -109,10 +109,10 @@ GEM
109
109
  rspec-expectations (2.13.0)
110
110
  diff-lcs (>= 1.1.3, < 2.0)
111
111
  rspec-mocks (2.13.1)
112
- sinatra (1.4.5)
112
+ sinatra (1.4.6)
113
113
  rack (~> 1.4)
114
114
  rack-protection (~> 1.4)
115
- tilt (~> 1.3, >= 1.3.4)
115
+ tilt (>= 1.3, < 3)
116
116
  sprockets (2.2.2)
117
117
  hike (~> 1.2)
118
118
  multi_json (~> 1.0)
@@ -140,3 +140,6 @@ DEPENDENCIES
140
140
  rspec
141
141
  simple_admin_auth!
142
142
  thin
143
+
144
+ BUNDLED WITH
145
+ 1.10.6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -37,7 +37,7 @@ GEM
37
37
  daemons (1.1.9)
38
38
  diff-lcs (1.2.5)
39
39
  erubis (2.7.0)
40
- eventmachine (1.0.3)
40
+ eventmachine (1.0.8)
41
41
  faraday (0.9.0)
42
42
  multipart-post (>= 1.2, < 3)
43
43
  hashie (3.3.1)
@@ -101,10 +101,10 @@ GEM
101
101
  rspec-mocks (3.1.0)
102
102
  rspec-support (~> 3.1.0)
103
103
  rspec-support (3.1.0)
104
- sinatra (1.4.5)
104
+ sinatra (1.4.6)
105
105
  rack (~> 1.4)
106
106
  rack-protection (~> 1.4)
107
- tilt (~> 1.3, >= 1.3.4)
107
+ tilt (>= 1.3, < 3)
108
108
  sprockets (2.12.2)
109
109
  hike (~> 1.2)
110
110
  multi_json (~> 1.0)
@@ -137,3 +137,6 @@ DEPENDENCIES
137
137
  rspec
138
138
  simple_admin_auth!
139
139
  thin
140
+
141
+ BUNDLED WITH
142
+ 1.10.6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -39,13 +39,13 @@ GEM
39
39
  daemons (1.1.9)
40
40
  diff-lcs (1.2.5)
41
41
  erubis (2.7.0)
42
- eventmachine (1.0.3)
42
+ eventmachine (1.0.8)
43
43
  faraday (0.9.0)
44
44
  multipart-post (>= 1.2, < 3)
45
45
  hashie (3.3.1)
46
46
  hike (1.2.3)
47
47
  i18n (0.6.11)
48
- json (1.8.1)
48
+ json (1.8.3)
49
49
  jwt (1.0.0)
50
50
  mail (2.5.4)
51
51
  mime-types (~> 1.16)
@@ -106,10 +106,10 @@ GEM
106
106
  rspec-mocks (3.1.0)
107
107
  rspec-support (~> 3.1.0)
108
108
  rspec-support (3.1.0)
109
- sinatra (1.4.5)
109
+ sinatra (1.4.6)
110
110
  rack (~> 1.4)
111
111
  rack-protection (~> 1.4)
112
- tilt (~> 1.3, >= 1.3.4)
112
+ tilt (>= 1.3, < 3)
113
113
  sprockets (2.12.2)
114
114
  hike (~> 1.2)
115
115
  multi_json (~> 1.0)
@@ -143,3 +143,6 @@ DEPENDENCIES
143
143
  rspec
144
144
  simple_admin_auth!
145
145
  thin
146
+
147
+ BUNDLED WITH
148
+ 1.10.6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- simple_admin_auth (0.1.3)
4
+ simple_admin_auth (0.1.4)
5
5
  omniauth
6
6
  sinatra
7
7
 
@@ -48,7 +48,7 @@ GEM
48
48
  daemons (1.1.9)
49
49
  diff-lcs (1.2.5)
50
50
  erubis (2.7.0)
51
- eventmachine (1.0.6)
51
+ eventmachine (1.0.8)
52
52
  faraday (0.9.1)
53
53
  multipart-post (>= 1.2, < 3)
54
54
  globalid (0.3.0)
@@ -56,7 +56,7 @@ GEM
56
56
  hashie (3.4.0)
57
57
  hike (1.2.3)
58
58
  i18n (0.7.0)
59
- json (1.8.2)
59
+ json (1.8.3)
60
60
  jwt (1.2.1)
61
61
  loofah (2.0.1)
62
62
  nokogiri (>= 1.5.9)
@@ -130,10 +130,10 @@ GEM
130
130
  diff-lcs (>= 1.2.0, < 2.0)
131
131
  rspec-support (~> 3.2.0)
132
132
  rspec-support (3.2.0)
133
- sinatra (1.4.5)
133
+ sinatra (1.4.6)
134
134
  rack (~> 1.4)
135
135
  rack-protection (~> 1.4)
136
- tilt (~> 1.3, >= 1.3.4)
136
+ tilt (>= 1.3, < 3)
137
137
  sprockets (2.12.3)
138
138
  hike (~> 1.2)
139
139
  multi_json (~> 1.0)
@@ -164,3 +164,6 @@ DEPENDENCIES
164
164
  rspec
165
165
  simple_admin_auth!
166
166
  thin
167
+
168
+ BUNDLED WITH
169
+ 1.10.6
@@ -15,6 +15,20 @@ module SimpleAdminAuth
15
15
  get_or_post '/admin/callback' do
16
16
  auth_hash = request.env['omniauth.auth']
17
17
 
18
+ unless SimpleAdminAuth::Configuration.required_hd.nil?
19
+ hd = nil
20
+ if auth_hash.extra && auth_hash.extra.id_info
21
+ hd = auth_hash.extra.id_info.hd
22
+ end
23
+
24
+ if hd != SimpleAdminAuth::Configuration.required_hd
25
+ # Hosted domain doesn't match
26
+ throw(:halt, [401, "Not authorized\n"])
27
+ end
28
+
29
+ end
30
+
31
+
18
32
  session[:admin_user] = auth_hash['info']
19
33
 
20
34
  return_url = session[:admin_login_return_url] || '/'
@@ -2,6 +2,8 @@ module SimpleAdminAuth
2
2
  class Configuration
3
3
  class << self
4
4
  attr_accessor :email_white_list
5
+ # Set this to require a specific hosted domain (google oauth2 only)
6
+ attr_accessor :required_hd
5
7
  end
6
8
  end
7
- end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module SimpleAdminAuth
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -1,5 +1,13 @@
1
1
  shared_examples "integration" do
2
2
 
3
+ before(:each) do
4
+ OmniAuth.config.add_mock(:admin, {:uid => '12345', info: {email: 'foo@bar.com'}})
5
+ end
6
+
7
+ after(:each) do
8
+ SimpleAdminAuth::Configuration.required_hd = nil
9
+ end
10
+
3
11
  it "should get the unprotected index page" do
4
12
  get '/'
5
13
  last_response.status.should == 200
@@ -41,4 +49,62 @@ shared_examples "integration" do
41
49
  last_request.url.should =~ /\/protected\/test$/
42
50
  last_response.should be_ok
43
51
  end
44
- end
52
+
53
+ it "should fail when required hd is not present" do
54
+ SimpleAdminAuth::Configuration.required_hd = 'example.org'
55
+
56
+ get '/protected/test'
57
+ # Redirect to login page
58
+ follow_redirect!
59
+
60
+ # Click the login button
61
+ get '/auth/admin'
62
+ last_response.status.should == 302
63
+ follow_redirect!
64
+
65
+ # Mock strategy immediately redirects to the callback
66
+ last_request.url.should =~ /auth\/admin\/callback$/
67
+ last_response.status.should == 401
68
+ end
69
+
70
+ it "should login if the required hd is present" do
71
+ SimpleAdminAuth::Configuration.required_hd = 'example.org'
72
+ OmniAuth.config.add_mock(:admin, {:uid => '12345', info: {email: 'foo@bar.com'}, extra: {id_info: {hd: 'example.org'}}})
73
+ get '/protected/test'
74
+ # Redirect to login page
75
+ follow_redirect!
76
+
77
+ # Click the login button
78
+ get '/auth/admin'
79
+ last_response.status.should == 302
80
+ follow_redirect!
81
+
82
+ # Mock strategy immediately redirects to the callback
83
+ last_request.url.should =~ /auth\/admin\/callback$/
84
+ follow_redirect!
85
+
86
+ # We should be redirected back to the original page
87
+ last_request.url.should =~ /\/protected\/test$/
88
+ last_response.should be_ok
89
+ end
90
+
91
+ it "should fail when required hd is wrong" do
92
+ # email matches, but the returnd hd doesn't.
93
+ SimpleAdminAuth::Configuration.required_hd = 'bar.com'
94
+ OmniAuth.config.add_mock(:admin, {:uid => '12345', info: {email: 'foo@bar.com'}, extra: {id_info: {hd: 'example.org'}}})
95
+
96
+ get '/protected/test'
97
+ # Redirect to login page
98
+ follow_redirect!
99
+
100
+ # Click the login button
101
+ get '/auth/admin'
102
+ last_response.status.should == 302
103
+ follow_redirect!
104
+
105
+ # Mock strategy immediately redirects to the callback
106
+ last_request.url.should =~ /auth\/admin\/callback$/
107
+ last_response.status.should == 401
108
+ end
109
+
110
+ end
@@ -12,5 +12,4 @@ RSpec.configure do |conf|
12
12
  end
13
13
  end
14
14
 
15
- OmniAuth.config.add_mock(:admin, {:uid => '12345', info:{ email: 'foo@bar.com'}})
16
15
  OmniAuth.config.test_mode = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_admin_auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ralf Kistner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-04 00:00:00.000000000 Z
11
+ date: 2016-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.2.2
108
+ rubygems_version: 2.4.8
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Simple admin authentication using Google Apps