simple_admin_auth 0.1.3 → 0.1.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.
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