inst_access 0.1.1 → 0.4.0

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: 5078ae05b8177aa22350be75c165e5b8f3c2e469693544d2d6cdc88cdd725bad
4
- data.tar.gz: 886e682197965ff3cb4af0ef81063757701b2928fa64f6d9cf93b505f5b1d150
3
+ metadata.gz: f3f8f9627e9866878600ebfffa114229879693c401e03a07f024c9ecc7aa4567
4
+ data.tar.gz: 95a2ad12a7fbb4392c6828353734ad24a43cb10056c822b50d6234c4f8f2223d
5
5
  SHA512:
6
- metadata.gz: 0f3da43796458852625c0cee8fa0197936780f91ae4bd3cb77463b21fb2435b6db3a6f8d56fafa33a1aac856847bda1d6871d1957a75c0860d3fca482e572b2c
7
- data.tar.gz: a7d7b5ed84a25a81a237090e24844cff252b8ab2a14fef4973cbc58ee04de265014ce04790dc02ad193edb9ca6b6251a74828bc533ae70c8b0cf001a630c9cc5
6
+ metadata.gz: 1946b0ac1c71312c08d2e931f542e3e35119d3e26b4590c03f260bfec093d947cae388125e935ab03d1e63cbb2c06273ed9ed7da67bfba54406d523b78142988
7
+ data.tar.gz: 650914d4e10bc474b71146351956ce903b318efb32c453da9ea697c3aac5cf0f840d2e455982f1abc6fa3ebf893857fef3db1fc990a8febd278e1b768034bab9
@@ -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.0'
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.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Ziwisky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-18 00:00:00.000000000 Z
11
+ date: 2023-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -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
@@ -184,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
185
  - !ruby/object:Gem::Version
185
186
  version: '0'
186
187
  requirements: []
187
- rubygems_version: 3.2.15
188
+ rubygems_version: 3.2.6
188
189
  signing_key:
189
190
  specification_version: 4
190
191
  summary: Generation, parsing, and validation of Instructure access tokens