grape-doorkeeper 0.0.1 → 0.0.2
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 +4 -4
- data/grape-doorkeeper.gemspec +4 -4
- data/lib/grape-doorkeeper.rb +1 -0
- data/lib/grape-doorkeeper/grape_oauth2.rb +79 -0
- data/lib/grape-doorkeeper/oauth2.rb +1 -1
- data/lib/grape-doorkeeper/version.rb +2 -2
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f12cb160c3ce4ce2fde499fd625be0573bbb3b2
|
4
|
+
data.tar.gz: 8623fa6a3f83c9cf2a97fdf9f24ba56375928ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1775e142684490797b5fe20a78317e66b5bc8a4c7678c31bf6f8ac0bc462412394f82fc31788587ed7cb07f0c562d74de13117af8333d05a39d6e34623ca7b49
|
7
|
+
data.tar.gz: 30b6ebaaa08e1ac655952322ab30265467eabfff6ce4a34cc6f42506762ceb0f0eeac6ef619abbebd28c9a8e27f2d24d14ef8384fc07026c283dc262920a29cb
|
data/grape-doorkeeper.gemspec
CHANGED
@@ -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/
|
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.
|
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")
|
data/lib/grape-doorkeeper.rb
CHANGED
@@ -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 <
|
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.
|
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.
|
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-
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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/
|
99
|
+
homepage: https://github.com/fuCtor/grape-doorkeeper
|
99
100
|
licenses:
|
100
101
|
- MIT
|
101
102
|
metadata: {}
|