doorkeeper-device_authorization_grant 0.1.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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +320 -0
- data/Rakefile +34 -0
- data/app/controllers/doorkeeper/device_authorization_grant/device_authorizations_controller.rb +68 -0
- data/app/controllers/doorkeeper/device_authorization_grant/device_codes_controller.rb +28 -0
- data/app/views/doorkeeper/device_authorization_grant/device_authorizations/index.html.erb +19 -0
- data/config/locales/en.yml +15 -0
- data/db/migrate/20200629094624_create_doorkeeper_device_grants.rb +28 -0
- data/lib/doorkeeper/device_authorization_grant.rb +47 -0
- data/lib/doorkeeper/device_authorization_grant/config.rb +92 -0
- data/lib/doorkeeper/device_authorization_grant/engine.rb +12 -0
- data/lib/doorkeeper/device_authorization_grant/errors.rb +43 -0
- data/lib/doorkeeper/device_authorization_grant/oauth/device_authorization_request.rb +88 -0
- data/lib/doorkeeper/device_authorization_grant/oauth/device_authorization_response.rb +73 -0
- data/lib/doorkeeper/device_authorization_grant/oauth/device_code_request.rb +105 -0
- data/lib/doorkeeper/device_authorization_grant/oauth/helpers/user_code.rb +39 -0
- data/lib/doorkeeper/device_authorization_grant/orm/active_record.rb +27 -0
- data/lib/doorkeeper/device_authorization_grant/orm/active_record/device_grant.rb +150 -0
- data/lib/doorkeeper/device_authorization_grant/rails/routes.rb +65 -0
- data/lib/doorkeeper/device_authorization_grant/rails/routes/mapper.rb +40 -0
- data/lib/doorkeeper/device_authorization_grant/rails/routes/mapping.rb +49 -0
- data/lib/doorkeeper/device_authorization_grant/request/device_authorization.rb +38 -0
- data/lib/doorkeeper/device_authorization_grant/version.rb +8 -0
- data/lib/doorkeeper/request/device_code.rb +33 -0
- data/lib/generators/doorkeeper/device_authorization_grant/install_generator.rb +16 -0
- data/lib/generators/doorkeeper/device_authorization_grant/templates/initializer.rb +33 -0
- metadata +139 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Doorkeeper
|
4
|
+
module DeviceAuthorizationGrant
|
5
|
+
module Request
|
6
|
+
# Doorkeeper strategy for OAuth 2.0 Device Authorization Requests.
|
7
|
+
#
|
8
|
+
# @see https://tools.ietf.org/html/rfc8628#section-3.1 RFC 8628, sect. 3.1
|
9
|
+
class DeviceAuthorization < ::Doorkeeper::Request::Strategy
|
10
|
+
delegate :client, to: :server
|
11
|
+
|
12
|
+
# @return [OAuth::DeviceAuthorizationRequest]
|
13
|
+
def request
|
14
|
+
@request ||= OAuth::DeviceAuthorizationRequest.new(
|
15
|
+
Doorkeeper.configuration,
|
16
|
+
client,
|
17
|
+
host_name
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# @return [String]
|
24
|
+
def host_name
|
25
|
+
req = server.context.request
|
26
|
+
"#{req.scheme}://#{req.host}#{port}"
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String, nil]
|
30
|
+
def port
|
31
|
+
return nil if [80, 443].include?(server.context.request.port)
|
32
|
+
|
33
|
+
":#{server.context.request.port}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Doorkeeper
|
4
|
+
module Request
|
5
|
+
# Doorkeeper strategy for OAuth 2.0 Device Access Token Requests.
|
6
|
+
#
|
7
|
+
# @see https://tools.ietf.org/html/rfc8628#section-3.4 RFC 8628, sect. 3.4
|
8
|
+
class DeviceCode < ::Doorkeeper::Request::Strategy
|
9
|
+
delegate :parameters, :client, to: :server
|
10
|
+
|
11
|
+
# @return [::Doorkeeper::DeviceAuthorizationGrant::OAuth::DeviceCodeRequest]
|
12
|
+
def request
|
13
|
+
@request ||=
|
14
|
+
::Doorkeeper::DeviceAuthorizationGrant::OAuth::DeviceCodeRequest
|
15
|
+
.new(Doorkeeper.configuration, client, device_grant)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
delegate :device_grant_model, to: :configuration
|
21
|
+
|
22
|
+
# @return [::Doorkeeper::DeviceAuthorizationGrant::DeviceGrant, nil]
|
23
|
+
def device_grant
|
24
|
+
@device_grant ||= device_grant_model.by_device_code(parameters[:device_code])
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [::Doorkeeper::DeviceAuthorizationGrant::Config]
|
28
|
+
def configuration
|
29
|
+
@configuration ||= DeviceAuthorizationGrant.configuration
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Doorkeeper
|
4
|
+
module DeviceAuthorizationGrant
|
5
|
+
# Rails generator to install DeviceAuthorizationGrant initializer and routes.
|
6
|
+
class InstallGenerator < ::Rails::Generators::Base
|
7
|
+
source_root File.expand_path('./templates', __dir__)
|
8
|
+
desc 'Installs Doorkeeper DeviceAuthorizationGrant.'
|
9
|
+
|
10
|
+
def install
|
11
|
+
template('initializer.rb', 'config/initializers/doorkeeper_device_authorization_grant.rb')
|
12
|
+
route('use_doorkeeper_device_authorization_grant')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Doorkeeper::DeviceAuthorizationGrant.configure do
|
4
|
+
# Minimum device code polling interval expected from the client, expressed in seconds.
|
5
|
+
# device_code_polling_interval 5
|
6
|
+
|
7
|
+
# Device code expiration time, in seconds.
|
8
|
+
# device_code_expires_in 300
|
9
|
+
|
10
|
+
# Customizable reference to the DeviceGrant model.
|
11
|
+
# device_grant_class 'Doorkeeper::DeviceAuthorizationGrant::DeviceGrant'
|
12
|
+
|
13
|
+
# Reference to a model (or class) for user code generation.
|
14
|
+
#
|
15
|
+
# It must implement a `.generate` method, which can be invoked without
|
16
|
+
# arguments, to obtain a String user code value.
|
17
|
+
#
|
18
|
+
# user_code_generator 'Doorkeeper::DeviceAuthorizationGrant::OAuth::Helpers::UserCode'
|
19
|
+
|
20
|
+
# A Proc returning the end-user verification URI on the authorization server.
|
21
|
+
# verification_uri ->(host_name) do
|
22
|
+
# "#{host_name}/oauth/device"
|
23
|
+
# end
|
24
|
+
|
25
|
+
# A Proc returning the verification URI that includes the "user_code"
|
26
|
+
# (or other information with the same function as the "user_code"), which is
|
27
|
+
# designed for non-textual transmission. This is optional, so the Proc can
|
28
|
+
# also return `nil`.
|
29
|
+
#
|
30
|
+
# verification_uri_complete ->(verification_uri, host_name, device_grant) do
|
31
|
+
# "#{verification_uri}?user_code=#{CGI.escape(device_grant.user_code)}"
|
32
|
+
# end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: doorkeeper-device_authorization_grant
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- EXOP Group
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: doorkeeper
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.86.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.86.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.18.5
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.18.5
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sqlite3
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.9.25
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.9.25
|
83
|
+
description: OAuth 2.0 Device Authorization Grant extension for Doorkeeper.
|
84
|
+
email:
|
85
|
+
- opensource@exop-group.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- MIT-LICENSE
|
91
|
+
- README.md
|
92
|
+
- Rakefile
|
93
|
+
- app/controllers/doorkeeper/device_authorization_grant/device_authorizations_controller.rb
|
94
|
+
- app/controllers/doorkeeper/device_authorization_grant/device_codes_controller.rb
|
95
|
+
- app/views/doorkeeper/device_authorization_grant/device_authorizations/index.html.erb
|
96
|
+
- config/locales/en.yml
|
97
|
+
- db/migrate/20200629094624_create_doorkeeper_device_grants.rb
|
98
|
+
- lib/doorkeeper/device_authorization_grant.rb
|
99
|
+
- lib/doorkeeper/device_authorization_grant/config.rb
|
100
|
+
- lib/doorkeeper/device_authorization_grant/engine.rb
|
101
|
+
- lib/doorkeeper/device_authorization_grant/errors.rb
|
102
|
+
- lib/doorkeeper/device_authorization_grant/oauth/device_authorization_request.rb
|
103
|
+
- lib/doorkeeper/device_authorization_grant/oauth/device_authorization_response.rb
|
104
|
+
- lib/doorkeeper/device_authorization_grant/oauth/device_code_request.rb
|
105
|
+
- lib/doorkeeper/device_authorization_grant/oauth/helpers/user_code.rb
|
106
|
+
- lib/doorkeeper/device_authorization_grant/orm/active_record.rb
|
107
|
+
- lib/doorkeeper/device_authorization_grant/orm/active_record/device_grant.rb
|
108
|
+
- lib/doorkeeper/device_authorization_grant/rails/routes.rb
|
109
|
+
- lib/doorkeeper/device_authorization_grant/rails/routes/mapper.rb
|
110
|
+
- lib/doorkeeper/device_authorization_grant/rails/routes/mapping.rb
|
111
|
+
- lib/doorkeeper/device_authorization_grant/request/device_authorization.rb
|
112
|
+
- lib/doorkeeper/device_authorization_grant/version.rb
|
113
|
+
- lib/doorkeeper/request/device_code.rb
|
114
|
+
- lib/generators/doorkeeper/device_authorization_grant/install_generator.rb
|
115
|
+
- lib/generators/doorkeeper/device_authorization_grant/templates/initializer.rb
|
116
|
+
homepage: https://github.com/exop-group/doorkeeper-device_authorization_grant
|
117
|
+
licenses:
|
118
|
+
- MIT
|
119
|
+
metadata: {}
|
120
|
+
post_install_message:
|
121
|
+
rdoc_options: []
|
122
|
+
require_paths:
|
123
|
+
- lib
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
requirements: []
|
135
|
+
rubygems_version: 3.1.2
|
136
|
+
signing_key:
|
137
|
+
specification_version: 4
|
138
|
+
summary: OAuth 2.0 Device Authorization Grant extension for Doorkeeper.
|
139
|
+
test_files: []
|