inst_access 0.1.2 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12fea04283e0ab7de90ccba958ea4b9493609a13ee76348f82cd7ba3d7130c05
4
- data.tar.gz: aa5acc71501312bd6e2a565e54f34165a52452834afe0f9839a2042468edac69
3
+ metadata.gz: 3725e7d832fcddd123708c45dadc6541942fbd9dd01828a5b263aa76f9f048ef
4
+ data.tar.gz: aa296914f1621d6b2f54829b3659b8ede1c719a89ea6357b9c65a8b4ce825990
5
5
  SHA512:
6
- metadata.gz: 7ec774b0de8614005a076ebb1446276ddc207d58f709d74acefa9edbffb5bcf17454e4be6e13e41e8cc1f227bae5e5c646d30aec67ca20f89d936f6fdf2086c5
7
- data.tar.gz: c50c9bf65142c3e72b10eefb55cd658ccfac651f64e98dbb8c4103f301a4edf3effdedfcac5cdb74009274e282186179b9be30d6e416a08978a670a7444d66db
6
+ metadata.gz: 3fb2fbe2884970be8de2a6a82b6a8b7011631f1243ab3accb9b547396591ada3a6f2741644ee4d1e2bf2cd598a434b2e978ec5ce93998ef0ff35ee69f5f2dabd
7
+ data.tar.gz: 8d64e7490c1a4ae99216a94c6cd4b18227daec66d96111ba4497713ab8fb3300ee176318f24eb3dd18eab89efe8afef67949a35facca09103e9cd36c8c6d1f31
@@ -54,6 +54,18 @@ module InstAccess
54
54
  jwt_payload[:region]
55
55
  end
56
56
 
57
+ def client_id
58
+ jwt_payload[:client_id]
59
+ end
60
+
61
+ def instructure_service?
62
+ jwt_payload[:instructure_service] == true
63
+ end
64
+
65
+ def jti
66
+ jwt_payload[:jti]
67
+ end
68
+
57
69
  def to_token_string
58
70
  jwe = to_jws.encrypt(InstAccess.config.encryption_key, ENCRYPTION_ALGO, ENCRYPTION_METHOD)
59
71
  jwe.to_s
@@ -87,7 +99,9 @@ module InstAccess
87
99
  real_user_shard_id: nil,
88
100
  user_global_id: nil,
89
101
  real_user_global_id: nil,
90
- region: nil
102
+ region: nil,
103
+ client_id: nil,
104
+ instructure_service: nil
91
105
  )
92
106
  raise ArgumentError, 'Must provide user uuid and account uuid' if user_uuid.blank? || account_uuid.blank?
93
107
 
@@ -95,6 +109,7 @@ module InstAccess
95
109
 
96
110
  payload = {
97
111
  iss: ISSUER,
112
+ jti: SecureRandom.uuid,
98
113
  iat: now,
99
114
  exp: now + 1.hour.to_i,
100
115
  sub: user_uuid,
@@ -104,7 +119,9 @@ module InstAccess
104
119
  masq_shard: real_user_shard_id,
105
120
  debug_user_global_id: user_global_id&.to_s,
106
121
  debug_masq_global_id: real_user_global_id&.to_s,
107
- region: region
122
+ region: region,
123
+ client_id: client_id,
124
+ instructure_service: instructure_service
108
125
  }.compact
109
126
 
110
127
  new(payload)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (C) 2023 - present Instructure, Inc.
5
+ #
6
+ # This file is part of Canvas.
7
+ #
8
+ # Canvas is free software: you can redistribute it and/or modify it under
9
+ # the terms of the GNU Affero General Public License as published by the Free
10
+ # Software Foundation, version 3 of the License.
11
+ #
12
+ # Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
13
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
+ # A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
15
+ # details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License along
18
+ # with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ module InstAccess
22
+ VERSION = '0.4.1'
23
+ end
data/lib/inst_access.rb CHANGED
@@ -23,6 +23,7 @@ require 'json/jwt'
23
23
  require 'inst_access/errors'
24
24
  require 'inst_access/config'
25
25
  require 'inst_access/token'
26
+ require 'inst_access/version'
26
27
 
27
28
  module InstAccess
28
29
  class << self
@@ -85,12 +85,35 @@ describe InstAccess::Token do
85
85
  canvas_domain: 'z.instructure.com',
86
86
  real_user_uuid: 'masq-id',
87
87
  real_user_shard_id: 5,
88
- region: 'us-west-2'
88
+ region: 'us-west-2',
89
+ client_id: 'client-id',
90
+ instructure_service: true
89
91
  )
90
92
  expect(id.canvas_domain).to eq('z.instructure.com')
91
93
  expect(id.masquerading_user_uuid).to eq('masq-id')
92
94
  expect(id.masquerading_user_shard_id).to eq(5)
93
95
  expect(id.region).to eq('us-west-2')
96
+ expect(id.client_id).to eq('client-id')
97
+ expect(id.instructure_service?).to eq true
98
+ end
99
+
100
+ it 'generates a unique jti' do
101
+ uuid = SecureRandom.uuid
102
+
103
+ allow(SecureRandom).to receive(:uuid).and_return uuid
104
+
105
+ id = described_class.for_user(
106
+ user_uuid: 'user-uuid',
107
+ account_uuid: 'acct-uuid',
108
+ canvas_domain: 'z.instructure.com',
109
+ real_user_uuid: 'masq-id',
110
+ real_user_shard_id: 5,
111
+ region: 'us-west-2',
112
+ client_id: 'client-id',
113
+ instructure_service: true
114
+ )
115
+
116
+ expect(id.jti).to eq uuid
94
117
  end
95
118
 
96
119
  it 'includes global id debug info if given' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst_access
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Ziwisky
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-19 00:00:00.000000000 Z
11
+ date: 2023-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -150,7 +150,7 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- description:
153
+ description:
154
154
  email:
155
155
  - mziwisky@instructure.com
156
156
  executables: []
@@ -161,6 +161,7 @@ files:
161
161
  - lib/inst_access/config.rb
162
162
  - lib/inst_access/errors.rb
163
163
  - lib/inst_access/token.rb
164
+ - lib/inst_access/version.rb
164
165
  - spec/initialize_coverage.rb
165
166
  - spec/inst_access/inst_access_spec.rb
166
167
  - spec/inst_access/token_spec.rb
@@ -169,7 +170,7 @@ files:
169
170
  homepage: http://github.com/instructure/inst_access
170
171
  licenses: []
171
172
  metadata: {}
172
- post_install_message:
173
+ post_install_message:
173
174
  rdoc_options: []
174
175
  require_paths:
175
176
  - lib
@@ -184,8 +185,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
185
  - !ruby/object:Gem::Version
185
186
  version: '0'
186
187
  requirements: []
187
- rubygems_version: 3.1.6
188
- signing_key:
188
+ rubygems_version: 3.2.6
189
+ signing_key:
189
190
  specification_version: 4
190
191
  summary: Generation, parsing, and validation of Instructure access tokens
191
192
  test_files: