grape-doorkeeper 0.0.1 → 0.0.2

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: 4a4ac0769056de817dc467e2b4be02afc7b3f765
4
- data.tar.gz: 636b183afb2133cb038b82be20eadab3b9fa6445
3
+ metadata.gz: 3f12cb160c3ce4ce2fde499fd625be0573bbb3b2
4
+ data.tar.gz: 8623fa6a3f83c9cf2a97fdf9f24ba56375928ffc
5
5
  SHA512:
6
- metadata.gz: 222c2a6103a496cac88a9b8c33b283418e46746939327d9a7f053d848bc57fe1099c213002851f52170ee3ac66150aba9a2bcd20da20172a71aba625d7eeb05c
7
- data.tar.gz: 36cb04ff3de380c333823f8d91fb4c0094b34f44ea89f3c5141651017fdcec48cfe0bd45a21801cd7a6c6f9c99d74ac2f1bdaa0e7a174c834571bbe7685bee4f
6
+ metadata.gz: 1775e142684490797b5fe20a78317e66b5bc8a4c7678c31bf6f8ac0bc462412394f82fc31788587ed7cb07f0c562d74de13117af8333d05a39d6e34623ca7b49
7
+ data.tar.gz: 30b6ebaaa08e1ac655952322ab30265467eabfff6ce4a34cc6f42506762ceb0f0eeac6ef619abbebd28c9a8e27f2d24d14ef8384fc07026c283dc262920a29cb
@@ -7,19 +7,19 @@ Gem::Specification.new do |s|
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Alexey Shcherbakov"]
9
9
  s.email = ["schalexey@gmail.com"]
10
- s.homepage = "https://github.com/intridea/grape"
10
+ s.homepage = "https://github.com/fuCtor/grape-doorkeeper"
11
11
  s.summary = %q{Gem for auth in grape via doorkeeper.}
12
12
  s.description = %q{Gem for auth in grape via doorkeeper.}
13
13
  s.license = "MIT"
14
14
 
15
15
  s.rubyforge_project = "grape-doorkeeper"
16
16
 
17
- s.add_runtime_dependency 'grape', '~> 0.6'
18
- s.add_runtime_dependency 'doorkeeper', '~> 0'
17
+ s.add_runtime_dependency 'grape', '~> 0.9'
18
+ s.add_runtime_dependency 'doorkeeper', '~> 1.4.0'
19
19
 
20
20
  s.add_development_dependency 'rack-test', '~> 0'
21
21
  s.add_development_dependency 'rspec', '~> 2.9'
22
- s.add_development_dependency 'bundler', '~> 0'
22
+ s.add_development_dependency 'bundler', '~> 1.7.0'
23
23
 
24
24
  s.files = `git ls-files`.split("\n")
25
25
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,5 +1,6 @@
1
1
  require 'grape'
2
2
  require 'doorkeeper'
3
+ require 'grape-doorkeeper/grape_oauth2'
3
4
  require 'grape-doorkeeper/oauth2'
4
5
 
5
6
  module GrapeDoorkeeper
@@ -0,0 +1,79 @@
1
+ module GrapeDoorkeeper
2
+ # OAuth 2.0 authorization for Grape APIs.
3
+ class OAuth2Base < Grape::Middleware::Base
4
+ def default_options
5
+ {
6
+ token_class: 'AccessToken',
7
+ realm: 'OAuth API',
8
+ parameter: %w(bearer_token oauth_token access_token),
9
+ accepted_headers: %w(HTTP_AUTHORIZATION X_HTTP_AUTHORIZATION X-HTTP_AUTHORIZATION REDIRECT_X_HTTP_AUTHORIZATION),
10
+ header: [/Bearer (.*)/i, /OAuth (.*)/i],
11
+ required: true
12
+ }
13
+ end
14
+
15
+ def before
16
+ verify_token(token_parameter || token_header)
17
+ end
18
+
19
+ def request
20
+ @request ||= Grape::Request.new(env)
21
+ end
22
+
23
+ def params
24
+ @params ||= request.params
25
+ end
26
+
27
+ def token_parameter
28
+ Array(options[:parameter]).each do |p|
29
+ return params[p] if params[p]
30
+ end
31
+ nil
32
+ end
33
+
34
+ def token_header
35
+ return false unless authorization_header
36
+ Array(options[:header]).each do |regexp|
37
+ return $1 if authorization_header =~ regexp
38
+ end
39
+ nil
40
+ end
41
+
42
+ def authorization_header
43
+ options[:accepted_headers].each do |head|
44
+ return env[head] if env[head]
45
+ end
46
+ nil
47
+ end
48
+
49
+ def token_class
50
+ @klass ||= eval(options[:token_class]) # rubocop:disable Eval
51
+ end
52
+
53
+ def verify_token(token)
54
+ token = token_class.verify(token)
55
+ if token
56
+ if token.respond_to?(:expired?) && token.expired?
57
+ error_out(401, 'invalid_grant')
58
+ else
59
+ if !token.respond_to?(:permission_for?) || token.permission_for?(env)
60
+ env['api.token'] = token
61
+ else
62
+ error_out(403, 'insufficient_scope')
63
+ end
64
+ end
65
+ elsif !!options[:required]
66
+ error_out(401, 'invalid_grant')
67
+ end
68
+ end
69
+
70
+ def error_out(status, error)
71
+ throw :error,
72
+ message: error,
73
+ status: status,
74
+ headers: {
75
+ 'WWW-Authenticate' => "OAuth realm='#{options[:realm]}', error='#{error}'"
76
+ }
77
+ end
78
+ end
79
+ end
@@ -3,7 +3,7 @@ require 'doorkeeper/doorkeeper_for'
3
3
  module GrapeDoorkeeper
4
4
  # OAuth 2.0 authorization for Grape APIs.
5
5
 
6
- class Middleware < Grape::Middleware::Auth::OAuth2
6
+ class Middleware < GrapeDoorkeeper::OAuth2Base
7
7
 
8
8
  def protected_endpoint?
9
9
  endpoint = env['api.endpoint']
@@ -1,3 +1,3 @@
1
1
  module GrapeDoorkeeper
2
- VERSION = '0.0.1'
3
- end
2
+ VERSION = '0.0.2'
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-doorkeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Shcherbakov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-16 00:00:00.000000000 Z
11
+ date: 2014-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grape
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0.6'
19
+ version: '0.9'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0.6'
26
+ version: '0.9'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: doorkeeper
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 1.4.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 1.4.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rack-test
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 1.7.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 1.7.0
83
83
  description: Gem for auth in grape via doorkeeper.
84
84
  email:
85
85
  - schalexey@gmail.com
@@ -93,9 +93,10 @@ files:
93
93
  - README.md
94
94
  - grape-doorkeeper.gemspec
95
95
  - lib/grape-doorkeeper.rb
96
+ - lib/grape-doorkeeper/grape_oauth2.rb
96
97
  - lib/grape-doorkeeper/oauth2.rb
97
98
  - lib/grape-doorkeeper/version.rb
98
- homepage: https://github.com/intridea/grape
99
+ homepage: https://github.com/fuCtor/grape-doorkeeper
99
100
  licenses:
100
101
  - MIT
101
102
  metadata: {}