qalam_oauth_engine 3.0.1 → 3.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a211fbb4dc88d7fdd02b18476934e0aaeb9b8b1fb51264b907a82fbeb594a6f
4
- data.tar.gz: a94cb0321d02c42d7aa2cd08b37d138512e71ec6200322f96a97a101e964e1b5
3
+ metadata.gz: 1993e64ae7d887fb6d5ca81b7d41b841a41f16f6713dfa5750c16131b64b7b04
4
+ data.tar.gz: f8be0a0e38579e6a171cef590863fcca4ce7b7f06ed891c1824d12fdc07f3b61
5
5
  SHA512:
6
- metadata.gz: 307140f17ec1b239e871bd6cf198c074f19511cfec07117221a992a4ee0944a0e7296787ecd7a6562ce6ef15ced7d0ba8ac6d6584b42f9f7990062270a4834ae
7
- data.tar.gz: 959873829e421e85ba8a53aba9e19d7a30f51742d83d49c6c5d950fadcfdab4c68f4612e3c996e5576cc5959fe41d691a8dc90584a92fa88adae9458ba05f6ea
6
+ metadata.gz: 11c52e55a0c2f63ac009f6ef29d53601078e343959cc56ecfdc8506684aee1f70b18c65e9f3bc34328af8ddde91ba6facd2ca3277d2d5b2c525cf1ca4a92490b
7
+ data.tar.gz: bc76c81bedb0aac378b675cd6d7b6f56dc1053f5af6f70ab9518e4a34928ffba4fb6559921444c730df2b89877b645e581bac91b841765a68eac27b29e72e6df
@@ -5,8 +5,9 @@ module CanvasOauth
5
5
  def oauth
6
6
  if verify_oauth2_state(params[:state]) && params[:code]
7
7
  if token = canvas.get_access_token(params[:code])
8
+ set_root_account
8
9
  refresh_token = canvas.refresh_token
9
- if CanvasOauth::Authorization.cache_token(token, refresh_token, user_id, tool_consumer_instance_guid)
10
+ if CanvasOauth::Authorization.cache_token(token, refresh_token, user_id, @root_account_id, tool_consumer_instance_guid)
10
11
  redirect_to main_app.root_path
11
12
  else
12
13
  render plain: "Error: unable to save token"
@@ -23,4 +24,12 @@ module CanvasOauth
23
24
  callback_state.present? && callback_state == session.delete(:oauth2_state)
24
25
  end
25
26
  end
27
+
28
+ def set_root_account
29
+ if current_account_id
30
+ @root_account_id = canvas.root_account_id(current_account_id)
31
+ elsif current_course_id
32
+ @root_account_id = canvas.course_root_account_id(current_course_id)
33
+ end
34
+ end
26
35
  end
@@ -0,0 +1,4 @@
1
+ class CanvasLtiKey < ApplicationRecord
2
+ validates :canvas_url, :secret, presence: true
3
+ validates :key, presence: true, :uniqueness => {:scope=>:canvas_url}
4
+ end
@@ -2,16 +2,25 @@ module CanvasOauth
2
2
  class Authorization < ActiveRecord::Base
3
3
  validates :canvas_user_id, :token, :refresh_token, :last_used_at, presence: true
4
4
 
5
- def self.cache_token(token, refresh_token, user_id, tool_consumer_instance_guid)
5
+ def self.cache_token(token, refresh_token, user_id, account_id, tool_consumer_instance_guid)
6
6
  create do |t|
7
7
  t.token = token
8
8
  t.refresh_token = refresh_token
9
9
  t.canvas_user_id = user_id
10
+ t.canvas_root_account_id = account_id
10
11
  t.tool_consumer_instance_guid = tool_consumer_instance_guid
11
12
  t.last_used_at = Time.now
12
13
  end
13
14
  end
14
15
 
16
+ def self.fetch_account(user_id, tool_consumer_instance_guid)
17
+ user_accounts = where(canvas_user_id: user_id, tool_consumer_instance_guid: tool_consumer_instance_guid).order("created_at DESC")
18
+ if canvas_auth = user_accounts.first
19
+ canvas_auth.update_attribute(:last_used_at, Time.now)
20
+ return canvas_auth.canvas_root_account_id
21
+ end
22
+ end
23
+
15
24
  def self.fetch_token(user_id, tool_consumer_instance_guid)
16
25
  user_tokens = where(canvas_user_id: user_id, tool_consumer_instance_guid: tool_consumer_instance_guid).order("created_at DESC")
17
26
  if canvas_auth = user_tokens.first
@@ -2,6 +2,7 @@ class CreateCanvasOauthAuthorizations < ActiveRecord::Migration[4.2]
2
2
  def change
3
3
  create_table "canvas_oauth_authorizations", :force => true do |t|
4
4
  t.integer "canvas_user_id", :limit => 8
5
+ t.integer "canvas_root_account_id", :limit => 8
5
6
  t.string "tool_consumer_instance_guid", :null => false
6
7
  t.string "token"
7
8
  t.string "refresh_token"
@@ -0,0 +1,11 @@
1
+ class CreateCanvasLtiKeys < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :canvas_lti_keys do |t|
4
+ t.string :key
5
+ t.string :secret
6
+ t.string :canvas_url
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -6,7 +6,7 @@ module CanvasOauth
6
6
  attr_accessor :token, :refresh_token, :key, :secret
7
7
  attr_reader :canvas_url, :canvas_user_id
8
8
 
9
- def initialize(canvas_url, canvas_user_id, token, refresh_token, key, secret)
9
+ def initialize(canvas_url, canvas_user_id, canvas_root_account_id, token, refresh_token, key, secret)
10
10
  unless [key, secret].all?(&:present?)
11
11
  raise "Invalid Qalam oAuth configuration"
12
12
  end
@@ -14,6 +14,7 @@ module CanvasOauth
14
14
  self.refresh_token = refresh_token
15
15
  self.canvas_url = canvas_url
16
16
  self.canvas_user_id = canvas_user_id
17
+ self.canvas_root_account_id = canvas_root_account_id
17
18
  self.token = token
18
19
  self.key = key
19
20
  self.secret = secret
@@ -130,6 +131,10 @@ module CanvasOauth
130
131
  def canvas_user_id=(value)
131
132
  @canvas_user_id = value
132
133
  end
134
+
135
+ def canvas_root_account_id=(value)
136
+ @canvas_root_account_id = value
137
+ end
133
138
 
134
139
  def hex_sis_id(name, value)
135
140
  hex = value.unpack("H*")[0]
@@ -1,9 +1,12 @@
1
1
  module CanvasOauth
2
2
  class CanvasApiExtensions
3
3
  def self.build(canvas_url, user_id, tool_consumer_instance_guid)
4
- refresh_token = CanvasOauth::Authorization.fetch_refresh_token(user_id, tool_consumer_instance_guid)
4
+ account_id = CanvasOauth::Authorization.fetch_account(user_id, tool_consumer_instance_guid)
5
5
  token = CanvasOauth::Authorization.fetch_token(user_id, tool_consumer_instance_guid)
6
- CanvasApi.new(canvas_url, user_id, token, refresh_token, CanvasConfig.key, CanvasConfig.secret)
6
+ refresh_token = CanvasOauth::Authorization.fetch_refresh_token(user_id, tool_consumer_instance_guid)
7
+ canvas_key = ((CanvasLtiKey.table_exists? && CanvasLtiKey.find_by(canvas_url: canvas_url)&.key) or CanvasConfig.key)
8
+ canvas_secret = ((CanvasLtiKey.table_exists? && CanvasLtiKey.find_by(key: canvas_key, canvas_url: canvas_url)&.secret) or CanvasConfig.secret)
9
+ CanvasApi.new(canvas_url, user_id, account_id, token, refresh_token, canvas_key, canvas_secret)
7
10
  end
8
11
  end
9
12
  end
@@ -17,15 +17,10 @@ module CanvasOauth
17
17
  config = load_config
18
18
  self.key = config['key']
19
19
  self.secret = config['secret']
20
-
21
- Rails.logger.info "\n> Initializing Key #{config['key']} - Secret #{config['secret']}\n".green
22
-
23
20
  elsif ENV['CANVAS_KEY'].present? && ENV['CANVAS_SECRET'].present?
24
21
  Rails.logger.info "Initializing Qalam using environment vars CANVAS_KEY and CANVAS_SECRET"
25
22
  self.key = ENV['CANVAS_KEY']
26
23
  self.secret = ENV['CANVAS_SECRET']
27
-
28
- Rails.logger.info "\n> Initializing Key #{ENV['CANVAS_KEY']} - Secret #{ENV['CANVAS_SECRET']}\n".green
29
24
  else
30
25
  warn "Warning: Qalam key and secret not configured (RAILS_ENV = #{ENV['RAILS_ENV']})."
31
26
  end
@@ -1,3 +1,3 @@
1
1
  module CanvasOauth
2
- VERSION = "3.0.1"
2
+ VERSION = "3.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qalam_oauth_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Donahue
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-07-28 00:00:00.000000000 Z
14
+ date: 2021-08-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: httparty
@@ -50,7 +50,7 @@ dependencies:
50
50
  version: '4.2'
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
- version: '5.3'
53
+ version: '6.1'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -60,7 +60,7 @@ dependencies:
60
60
  version: '4.2'
61
61
  - - "<"
62
62
  - !ruby/object:Gem::Version
63
- version: '5.3'
63
+ version: '6.1'
64
64
  - !ruby/object:Gem::Dependency
65
65
  name: byebug
66
66
  requirement: !ruby/object:Gem::Requirement
@@ -257,10 +257,12 @@ files:
257
257
  - Rakefile
258
258
  - app/controllers/canvas_oauth/canvas_controller.rb
259
259
  - app/controllers/canvas_oauth/oauth_application_controller.rb
260
+ - app/models/canvas_lti_key.rb
260
261
  - app/models/canvas_oauth/authorization.rb
261
262
  - config/canvas.yml.example
262
263
  - config/routes.rb
263
264
  - db/migrate/20121121005358_create_canvas_oauth_authorizations.rb
265
+ - db/migrate/20210809092919_create_canvas_lti_keys.rb
264
266
  - lib/canvas_oauth.rb
265
267
  - lib/canvas_oauth/canvas_api.rb
266
268
  - lib/canvas_oauth/canvas_api_extensions.rb
@@ -330,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
330
332
  - !ruby/object:Gem::Version
331
333
  version: '0'
332
334
  requirements: []
333
- rubygems_version: 3.2.21
335
+ rubygems_version: 3.2.22
334
336
  signing_key:
335
337
  specification_version: 4
336
338
  summary: CanvasOauth is a mountable engine for handling the oauth workflow with canvas