heroku-bouncer 0.5.2 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5cf7d5667b8fe25211a018e2b73c8f625f71c55
4
- data.tar.gz: 6f20284b00d3080f0f8ad6417853394eeb7d9791
3
+ metadata.gz: 665c9d7aafb5ad2f6d67e2b2c6534afe7114a310
4
+ data.tar.gz: 740248c7d7ff94e833d11c3072b4d605e545d540
5
5
  SHA512:
6
- metadata.gz: 7bd2301810bba207ec13b0da82e2a64fd4b331c37b1f30abf13ae0aedc5ca756f600752d1db3302c8d89495f2017da161303d55dfce89a4ff7cb21a1efb3fc82
7
- data.tar.gz: bb4a81dba1617a144bd0614ac080009afb97974f4baf0b63f0f60f1a06f7d2d7f9335950cb9e0b28f52e9921efc1baf7a4bea25bf01a7c8b261494347fff4b48
6
+ metadata.gz: 98037d0ba899477a43af554df33b0edeaad5b4381e761a8b44d4f91025bd036d92b5cb5c82b83edca30f3edb52a0caf3772b0d7ad327d02834cf8d180299bdde
7
+ data.tar.gz: 229ef416b7d70912a4d38cbb8b76feed9013b6d4a8b5a350b07590a26bc78735116dbd46f34eff5ec38a547c8aa39a0ae2cb155b7710e3a941a628289a22733e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.6.0
2
+
3
+ * #42: add `allow_if_user` which takes the user object, instead of just
4
+ an email. Thanks @jacobian!
5
+ * #43: allow bouncer to be installed at sub-paths of the app by using
6
+ `request.path_info`. Thanks @dpiddy!
7
+
1
8
  # 0.5.2
2
9
 
3
10
  * #40: fixes redirects to non-standard ports (other than 80/443). Thanks
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,62 @@
1
+ # tl;dr
2
+
3
+ PRs welcome. Please write tests, add an entry to CHANGELOG.md for your
4
+ change, and if the change is user-facing, update README.md.
5
+
6
+ # Contributing
7
+
8
+ Contributions welcome! Here are some ways you can help:
9
+
10
+ * by using alpha, beta, and prerelease versions
11
+ * by reporting bugs
12
+ * by suggesting new features
13
+ * by writing or editing documentation
14
+ * by writing tests or specifications
15
+ * by writing code (**no patch is too small!** Fix typos, add comments, etc)
16
+ * by refactoring code
17
+ * by closing [issues][]
18
+ * by reviewing patches
19
+
20
+ [issues]: https://github.com/heroku/heroku-bouncer/issues
21
+
22
+ ## Submitting an Issue
23
+
24
+ We use the [GitHub issue tracker][issues] to track bugs and features.
25
+ Before submitting a bug report or feature request, check to make sure it
26
+ hasn't already been submitted. When submitting a bug report, please
27
+ include a [Gist][] that includes a stack trace and any details that may
28
+ be necessary to reproduce the bug, including your gem version, Ruby
29
+ version, and operating system. Ideally, a bug report should include a
30
+ pull request with failing specs.
31
+
32
+ [Gist]: https://gist.github.com/
33
+
34
+ ## Getting Started Locally
35
+
36
+ Fork, then clone the repo:
37
+
38
+ git clone git@github.com:your-username/heroku-bouncer.git
39
+
40
+ Bundle install using your preferred arguments:
41
+
42
+ bundle install -j8 --path .bundle
43
+
44
+ Make sure the tests pass:
45
+
46
+ bundle exec rake
47
+
48
+ ## Submitting a Pull Request
49
+
50
+ 1. [Fork the repository.][fork]
51
+ 2. [Create a topic branch.][branch]
52
+ 3. Implement your feature or bug fix. Please include tests and a
53
+ proposed change to the `CHANGELOG.md` file.
54
+ 4. Make sure the tests pass using `bundle exec rake`.
55
+ 5. Please try to remove any trailing whitespace and make sure all files
56
+ end in a newline. `git diff --check` before committing can help.
57
+ 6. Add, commit, and push your changes.
58
+ 7. [Submit a pull request.][pr]
59
+
60
+ [fork]: http://help.github.com/fork-a-repo/
61
+ [branch]: http://learn.github.com/p/branching.html
62
+ [pr]: http://help.github.com/send-pull-requests/
data/README.md CHANGED
@@ -42,7 +42,7 @@ Sinatra app that uses heroku-bouncer.
42
42
  require 'my_app'
43
43
 
44
44
  # use `openssl rand -base64 32` to generate a secret
45
- use Rack::Session::Cookie, secret: "..."
45
+ use Rack::Session::Cookie, secret: "...", key: "my_app_session"
46
46
  use Heroku::Bouncer,
47
47
  oauth: { id: "...", secret: "..." }, secret: "..."
48
48
  run MyApp
@@ -57,7 +57,7 @@ Sinatra app that uses heroku-bouncer.
57
57
  ```ruby
58
58
  class MyApp < Sinatra::Base
59
59
  ...
60
- enable :sessions, secret: "..."
60
+ enable :sessions, secret: "...", key: "my_app_session"
61
61
  use ::Heroku::Bouncer,
62
62
  oauth: { id: "...", secret: "..." }, secret: "..."
63
63
  ...
@@ -98,6 +98,11 @@ Here are the supported options you can pass to the middleware:
98
98
  * `allow_if`: A lambda that takes an email address. If the lambda evaluates to
99
99
  true, allow the user through. If false, redirects to `redirect_url`.
100
100
  By default, all users are allowed through after authenticating.
101
+ * `allow_if_user`: A lambda that takes the
102
+ [account resource](https://devcenter.heroku.com/articles/platform-api-reference#account)
103
+ representing the user. If the lambda evaluates to true, allow the user
104
+ through. If false, redirects to `redirect_url`. By default, all users are
105
+ allowed through after authenticating.
101
106
  * `redirect_url`: Where unauthorized users are redirected to. Defaults to
102
107
  `www.heroku.com`.
103
108
  * `expose_token`: Expose the OAuth token in the session, allowing you to
@@ -20,18 +20,24 @@ class Heroku::Bouncer::Middleware < Sinatra::Base
20
20
  else
21
21
  super(app)
22
22
  @cookie_secret = extract_option(options, :secret, SecureRandom.base64(32))
23
- @allow_if = extract_option(options, :allow_if, nil)
23
+ @allow_if_user = extract_option(options, :allow_if_user, nil)
24
24
  @redirect_url = extract_option(options, :redirect_url, 'https://www.heroku.com')
25
25
 
26
26
  # backwards-compatibilty for `herokai_only`:
27
27
  # * check email for ending with `@heroku.com`
28
28
  # * The redirect URL can be passed as a string value to `herokai_only`
29
- herokai_only = extract_deprecated_option("please use `allow_if` instead", options, :herokai_only, false)
29
+ herokai_only = extract_deprecated_option("please use `allow_if_user` instead", options, :herokai_only, false)
30
30
  if herokai_only
31
31
  if herokai_only.is_a?(String) && !options[:redirect_url]
32
32
  @redirect_url = herokai_only
33
33
  end
34
- @allow_if ||= lambda { |email| email.end_with?("@heroku.com") }
34
+ @allow_if_user ||= lambda { |user| user['email'].end_with?("@heroku.com") }
35
+ end
36
+
37
+ # backwards-compatibility for allow_if
38
+ allow_if = extract_option(options, :allow_if, false)
39
+ if allow_if
40
+ @allow_if_user ||= lambda { |user| allow_if.call(user['email']) }
35
41
  end
36
42
 
37
43
  @expose_token = extract_option(options, :expose_token, false)
@@ -77,11 +83,13 @@ class Heroku::Bouncer::Middleware < Sinatra::Base
77
83
  # callback when successful, time to save data
78
84
  get '/auth/heroku/callback' do
79
85
  token = request.env['omniauth.auth']['credentials']['token']
80
- if @expose_email || @expose_user || !@allow_if.nil?
86
+ if @expose_email || @expose_user || !@allow_if_user.nil?
81
87
  user = fetch_user(token)
82
88
  # Wrapping lambda to prevent short-circut proc return
83
- if @allow_if.respond_to?(:call) && !lambda{ @allow_if.call(user['email'])}.call
84
- redirect to(@redirect_url) and return
89
+ if @allow_if_user.respond_to?(:call)
90
+ if !lambda{ @allow_if_user.call(user)}.call
91
+ redirect to(@redirect_url) and return
92
+ end
85
93
  end
86
94
  @expose_user ? store_write(:user, user) : store_write(:user, true)
87
95
  store_write(:email, user['email']) if @expose_email
@@ -138,7 +146,7 @@ private
138
146
  end
139
147
 
140
148
  def auth_request?
141
- %w[/auth/heroku/callback /auth/heroku /auth/failure /auth/sso-logout /auth/logout /auth/login].include?(request.path)
149
+ %w[/auth/heroku/callback /auth/heroku /auth/failure /auth/sso-logout /auth/logout /auth/login].include?(request.path_info)
142
150
  end
143
151
 
144
152
  def session_nonce_mismatch?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heroku-bouncer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Dance
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-12 00:00:00.000000000 Z
11
+ date: 2015-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-heroku
@@ -158,8 +158,10 @@ extensions: []
158
158
  extra_rdoc_files:
159
159
  - README.md
160
160
  - CHANGELOG.md
161
+ - CONTRIBUTING.md
161
162
  files:
162
163
  - CHANGELOG.md
164
+ - CONTRIBUTING.md
163
165
  - Gemfile
164
166
  - README.md
165
167
  - Rakefile
@@ -189,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
191
  version: '0'
190
192
  requirements: []
191
193
  rubyforge_project:
192
- rubygems_version: 2.2.2
194
+ rubygems_version: 2.4.5
193
195
  signing_key:
194
196
  specification_version: 4
195
197
  summary: Rapidly add Heroku OAuth to your Ruby app.