-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
helpers.rb
63 lines (53 loc) · 1.94 KB
/
helpers.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
module Doorkeeper
module Rails
module Helpers
extend ActiveSupport::Concern
module ClassMethods
def doorkeeper_for(*args, &block)
fail Errors::DoorkeeperError, "`doorkeeper_for` no longer available", <<-eos
\nStarting in version 2.0.0 of doorkeeper gem, `doorkeeper_for` is no longer
available. Please change `doorkeeper_for` calls in your application with:
before_action :doorkeeper_authorize!
For more information check the README:
https://github.com/doorkeeper-gem/doorkeeper#protecting-resources-with-oauth-aka-your-api-endpoint\n
eos
end
end
def doorkeeper_token
@_doorkeeper_token ||= OAuth::Token.authenticate request, *Doorkeeper.configuration.access_token_methods
end
def valid_doorkeeper_token?(*scopes)
doorkeeper_token && doorkeeper_token.acceptable?(scopes)
end
def doorkeeper_authorize!(*scopes)
scopes ||= Doorkeeper.configuration.default_scopes
unless valid_doorkeeper_token?(*scopes)
if !doorkeeper_token || !doorkeeper_token.accessible?
error = OAuth::InvalidTokenResponse.from_access_token(doorkeeper_token)
options = doorkeeper_unauthorized_render_options
else
error = OAuth::ForbiddenTokenResponse.from_scopes(scopes)
options = doorkeeper_forbidden_render_options
end
headers.merge!(error.headers.reject { |k| ['Content-Type'].include? k })
doorkeeper_error_renderer(error, options)
end
end
def doorkeeper_unauthorized_render_options
nil
end
def doorkeeper_forbidden_render_options
nil
end
def doorkeeper_error_renderer(error, options = {})
if options.blank?
head error.status
else
options[:status] = error.status
options[:layout] = false if options[:layout].nil?
render options
end
end
end
end
end