grape-knock 0.1.1 → 0.2.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 +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.
|