grape-knock 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.byebug_history +9 -0
- data/.gitignore +1 -0
- data/README.md +18 -1
- data/grape-knock.gemspec +2 -1
- data/lib/grape/knock.rb +1 -0
- data/lib/grape/knock/authenticable.rb +41 -7
- data/lib/grape/knock/version.rb +1 -1
- metadata +33 -19
- data/lib/grape/knock/methods.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50cd128cfd75e40bcb80421915a41787e9244805
|
4
|
+
data.tar.gz: 123a4f325d95f1a16917779ad3ab6f6f3c4e4c32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5642c5d80ff6f03ebd770edb7d1b16893a00338c14ab16996996a67a5397a9c674606a421b3a229397067b08ec35c46f72d94b9a37fe72e4dbb11d6e779f94ec
|
7
|
+
data.tar.gz: 6ead0a60917a7564a11e90fdb09a52f1c5ccad90c1c690e2f8d1e145ef6831c6fd2a015e1e5dd1b8ed11bafa62a602a0e1f02fa8811a93b56cdc593a6a02f282
|
data/.byebug_history
ADDED
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -30,6 +30,24 @@ class MyApi < Grape::API
|
|
30
30
|
end
|
31
31
|
```
|
32
32
|
|
33
|
+
You now have a `current_user` method available in your endpoints:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
class MyApi < Grape::API
|
37
|
+
format :json
|
38
|
+
|
39
|
+
use Grape::Knock::Authenticable
|
40
|
+
|
41
|
+
resource :comments do
|
42
|
+
get do
|
43
|
+
current_user.comments
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
|
50
|
+
|
33
51
|
The gem will raise `Grape::Knock::ForbiddenError` when authentication failed. You can rescue this exception in your API
|
34
52
|
in order to respond with a `403 Forbidden` http request:
|
35
53
|
|
@@ -67,4 +85,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERN
|
|
67
85
|
## License
|
68
86
|
|
69
87
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
70
|
-
|
data/grape-knock.gemspec
CHANGED
@@ -21,8 +21,9 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency "grape", ">= 0.10"
|
23
23
|
spec.add_dependency "knock"
|
24
|
-
|
24
|
+
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.10"
|
26
|
+
spec.add_development_dependency "byebug"
|
26
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
27
28
|
spec.add_development_dependency "rspec"
|
28
29
|
end
|
data/lib/grape/knock.rb
CHANGED
@@ -1,37 +1,71 @@
|
|
1
1
|
require 'knock'
|
2
2
|
require 'knock/authenticable'
|
3
3
|
require 'grape/knock/forbidden_error'
|
4
|
-
require 'grape/knock/methods'
|
5
4
|
|
6
5
|
module Grape
|
7
6
|
module Knock
|
8
7
|
class Authenticable < Grape::Middleware::Base
|
9
8
|
include ::Knock::Authenticable
|
10
9
|
|
10
|
+
def initialize(_, options = {})
|
11
|
+
super
|
12
|
+
define_current_entity_getter entity_class, getter_name
|
13
|
+
end
|
14
|
+
|
11
15
|
def context
|
12
16
|
env['api.endpoint']
|
13
17
|
end
|
14
18
|
|
15
19
|
def before
|
16
20
|
authenticate
|
17
|
-
|
18
|
-
|
21
|
+
|
22
|
+
memoization_var_name = "@_#{getter_name}"
|
23
|
+
context.send(:instance_variable_set, memoization_var_name, send(getter_name))
|
24
|
+
context.class.send(:define_method, getter_name) { instance_variable_get memoization_var_name }
|
19
25
|
end
|
20
26
|
|
21
27
|
private
|
22
28
|
|
23
29
|
def authenticate
|
24
30
|
fail ::Grape::Knock::ForbiddenError unless token
|
25
|
-
|
26
|
-
fail ::Grape::Knock::ForbiddenError unless @current_user
|
31
|
+
fail ::Grape::Knock::ForbiddenError unless send(getter_name)
|
27
32
|
rescue ::JWT::DecodeError
|
28
33
|
fail ::Grape::Knock::ForbiddenError
|
29
34
|
end
|
30
35
|
|
31
|
-
def
|
32
|
-
|
36
|
+
def define_current_entity_getter(entity_class, getter_name)
|
37
|
+
unless self.respond_to?(getter_name)
|
38
|
+
memoization_var_name = "@_#{getter_name}"
|
39
|
+
self.class.send(:define_method, getter_name) do
|
40
|
+
unless instance_variable_defined?(memoization_var_name)
|
41
|
+
current =
|
42
|
+
begin
|
43
|
+
::Knock::AuthToken.new(token: token).entity_for(entity_class)
|
44
|
+
rescue ::Knock.not_found_exception_class, JWT::DecodeError
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
instance_variable_set(memoization_var_name, current)
|
48
|
+
end
|
49
|
+
instance_variable_get(memoization_var_name)
|
50
|
+
end
|
51
|
+
end
|
33
52
|
end
|
34
53
|
|
54
|
+
def entity_class
|
55
|
+
@options[:entity_class] || Object.const_get('User')
|
56
|
+
end
|
57
|
+
|
58
|
+
def getter_name
|
59
|
+
"current_#{entity_class.to_s.parameterize.underscore}".freeze
|
60
|
+
end
|
61
|
+
|
62
|
+
def header_name
|
63
|
+
(@options[:header_name] || 'HTTP_AUTHORIZATION').freeze
|
64
|
+
end
|
65
|
+
|
66
|
+
def token
|
67
|
+
env[header_name].to_s.split(' ').last
|
68
|
+
end
|
35
69
|
end
|
36
70
|
end
|
37
71
|
end
|
data/lib/grape/knock/version.rb
CHANGED
metadata
CHANGED
@@ -1,83 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-knock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre-Louis Gottfrois
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.10'
|
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
26
|
version: '0.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: knock
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '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
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.10'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - ~>
|
73
|
+
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '10.0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - ~>
|
80
|
+
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '10.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
description: Use Knock with Grape.
|
@@ -87,9 +101,10 @@ executables: []
|
|
87
101
|
extensions: []
|
88
102
|
extra_rdoc_files: []
|
89
103
|
files:
|
90
|
-
- .
|
91
|
-
- .
|
92
|
-
- .
|
104
|
+
- ".byebug_history"
|
105
|
+
- ".gitignore"
|
106
|
+
- ".rspec"
|
107
|
+
- ".travis.yml"
|
93
108
|
- Gemfile
|
94
109
|
- LICENSE.txt
|
95
110
|
- README.md
|
@@ -100,7 +115,6 @@ files:
|
|
100
115
|
- lib/grape/knock.rb
|
101
116
|
- lib/grape/knock/authenticable.rb
|
102
117
|
- lib/grape/knock/forbidden_error.rb
|
103
|
-
- lib/grape/knock/methods.rb
|
104
118
|
- lib/grape/knock/version.rb
|
105
119
|
homepage: https://github.com/gottfrois/grape-knock
|
106
120
|
licenses:
|
@@ -112,17 +126,17 @@ require_paths:
|
|
112
126
|
- lib
|
113
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- -
|
129
|
+
- - ">="
|
116
130
|
- !ruby/object:Gem::Version
|
117
131
|
version: '0'
|
118
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
133
|
requirements:
|
120
|
-
- -
|
134
|
+
- - ">="
|
121
135
|
- !ruby/object:Gem::Version
|
122
136
|
version: '0'
|
123
137
|
requirements: []
|
124
138
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.6.13
|
126
140
|
signing_key:
|
127
141
|
specification_version: 4
|
128
142
|
summary: Use Knock with Grape.
|