coalescing_panda 5.0.3 → 5.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/app/controllers/coalescing_panda/canvas_batches_controller.rb +2 -2
  3. data/app/controllers/coalescing_panda/lti_controller.rb +1 -1
  4. data/app/helpers/coalescing_panda/canvas_batches_helper.rb +1 -1
  5. data/app/views/coalescing_panda/canvas_batches/_canvas_batch_flash.html.haml +3 -3
  6. data/db/migrate/20131114150001_create_coalescing_panda_canvas_api_auths.rb +1 -1
  7. data/db/migrate/20131118211442_create_coalescing_panda_lti_accounts.rb +1 -1
  8. data/db/migrate/20131119165343_create_coalescing_panda_lti_nonces.rb +1 -1
  9. data/db/migrate/20140904223159_create_coalescing_panda_sessions.rb +1 -1
  10. data/db/migrate/20141119225319_create_coalescing_panda_terms.rb +1 -1
  11. data/db/migrate/20141119225721_create_coalescing_panda_courses.rb +1 -1
  12. data/db/migrate/20141120151432_create_coalescing_panda_sections.rb +1 -1
  13. data/db/migrate/20141120151940_create_coalescing_panda_assignments.rb +1 -1
  14. data/db/migrate/20141120152458_create_coalescing_panda_users.rb +1 -1
  15. data/db/migrate/20141120152546_create_coalescing_panda_submissions.rb +1 -1
  16. data/db/migrate/20141120153135_create_coalescing_panda_enrollments.rb +1 -1
  17. data/db/migrate/20141121174846_create_coalescing_panda_canvas_batches.rb +1 -1
  18. data/db/migrate/20141124160857_create_delayed_jobs.rb +1 -1
  19. data/db/migrate/20141208221740_add_submission_types_to_assignments.rb +1 -1
  20. data/db/migrate/20150106175418_add_group_category_id_to_assignment.rb +1 -1
  21. data/db/migrate/20150106180131_add_published_to_assignments.rb +1 -1
  22. data/db/migrate/20150107205405_create_coalescing_panda_groups.rb +1 -1
  23. data/db/migrate/20150107205413_create_coalescing_panda_group_memberships.rb +1 -1
  24. data/db/migrate/20150210180516_add_context_to_canvas_batch.rb +1 -1
  25. data/db/migrate/20150506183335_create_coalescing_panda_assignment_groups.rb +1 -1
  26. data/db/migrate/20150506192717_add_assignment_group_id_to_assignments.rb +1 -1
  27. data/db/migrate/20150526144713_add_account_to_canvas_batches.rb +1 -1
  28. data/db/migrate/20150602205257_add_option_to_canvas_batches.rb +1 -1
  29. data/db/migrate/20150708192717_add_group_moderator_to_group_memberships.rb +1 -1
  30. data/db/migrate/20150709192717_add_leader_id_to_groups.rb +1 -1
  31. data/db/migrate/20150714205405_create_coalescing_panda_group_categories.rb +1 -1
  32. data/db/migrate/20150811140030_add_fields_to_users.rb +1 -1
  33. data/db/migrate/20151209155923_add_refresh_settings_to_canvas_api_auth.rb +1 -1
  34. data/db/migrate/20160830183155_create_coalescing_panda_oauth_states.rb +1 -1
  35. data/db/migrate/20200528224505_create_coalescing_panda_persistent_session.rb +1 -1
  36. data/lib/coalescing_panda/controller_helpers.rb +3 -5
  37. data/lib/coalescing_panda/engine.rb +8 -42
  38. data/lib/coalescing_panda/misc_helper.rb +13 -0
  39. data/lib/coalescing_panda/secure_headers.rb +84 -0
  40. data/lib/coalescing_panda/version.rb +1 -1
  41. metadata +173 -164
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 306dfeeb30b6ae7918306493e16fad1153218caff10326e85e20767fe65e6939
4
- data.tar.gz: 8e1d71edd52810dc203bffabc505f4bf1d594b9dd6a41af69850d00d9a7a49bf
2
+ SHA1:
3
+ metadata.gz: 9b34aab2ab63066e86c9799e4e564129b1b30186
4
+ data.tar.gz: b486b6be2efcf0807da76b573cd7212b1fdd5d8d
5
5
  SHA512:
6
- metadata.gz: c07375ac5edf196130f97ad74d87b78895c0c75ee22452b739932b525a5cb79a29e6e4a751ad0addf2e92782e466f4403ace209399245d5fb0d26f20764e892d
7
- data.tar.gz: 923158157e37c46b0374ccebcd5b3c9dac3e7f70d2df759aa6f340fec35f4b179b2fc3fe8ac51babe7a95ea0f569ff066f07bd46ee536e5679ad89da3b77472e
6
+ metadata.gz: cba63bdaeb3f4255e354112f217fe80b134e5c28ed2ebffe931df625f1ff640960ae75510ee0b7018d697ae39ceaec246e63c6410409a43217f37753d956df02
7
+ data.tar.gz: 74735105c7609b9524c40f1b5b0122f937a18036ccdaae32ff16324b0f19d3f90d98d309120afc80ea12b6cf6eb3ecb50b5f00fde6c14c68987a3035ec10cd08
@@ -12,13 +12,13 @@ module CoalescingPanda
12
12
  @batch.status = 'Queued'
13
13
  @batch.save
14
14
  worker = CoalescingPanda::Workers::CourseMiner.new(@batch.context, @batch.options)
15
- session[:canvas_batch_id] = worker.batch.id
15
+ current_session_data[:canvas_batch_id] = worker.batch.id
16
16
  worker.start(true)
17
17
  redirect_to :back
18
18
  end
19
19
 
20
20
  def clear_batch_session
21
- session[:canvas_batch_id] = nil
21
+ current_session_data[:canvas_batch_id] = nil
22
22
  render nothing: true
23
23
  end
24
24
  end
@@ -17,7 +17,7 @@ module CoalescingPanda
17
17
  lti_nav[:account][:text] = params[:account_navigation_label] if params[:account_navigation_label].present?
18
18
  platform = 'canvas.instructure.com'
19
19
  host = "#{request.scheme}://#{request.host_with_port}"
20
- tc = IMS::LTI::Services::ToolConfig.new(:title => lti_options[:title], :launch_url => ("#{host}#{lti_options[:launch_route]}") || 'ABC')
20
+ tc = IMS::LTI::ToolConfig.new(:title => lti_options[:title], :launch_url => ("#{host}#{lti_options[:launch_route]}") || 'ABC')
21
21
  tc.set_ext_param(platform, :domain, request.host)
22
22
  tc.set_ext_param(platform, :privacy_level, 'public')
23
23
  tc.set_custom_param(:custom_canvas_role, '$Canvas.membership.roles')
@@ -1,7 +1,7 @@
1
1
  module CoalescingPanda
2
2
  module CanvasBatchesHelper
3
3
  def current_batch
4
- @current_batch ||= CoalescingPanda::CanvasBatch.find_by_id(session[:canvas_batch_id])
4
+ @current_batch ||= CoalescingPanda::CanvasBatch.find_by_id(current_session_data[:canvas_batch_id])
5
5
  end
6
6
  end
7
7
  end
@@ -1,4 +1,4 @@
1
1
  - if current_batch.present?
2
- - path = CoalescingPanda::Engine.routes.url_helpers.canvas_batch_path(current_batch)
3
- - clear_path = CoalescingPanda::Engine.routes.url_helpers.clear_batch_session_path
4
- #batch-progress{data: {batch: current_batch.try(:to_json), url: path, clear_path: clear_path} }
2
+ - path = CoalescingPanda::Engine.routes.url_helpers.canvas_batch_path(current_batch) + "?encrypted_session_key=#{encrypted_session_key}"
3
+ - clear_path = CoalescingPanda::Engine.routes.url_helpers.clear_batch_session_path + "?encrypted_session_key=#{encrypted_session_key}"
4
+ #batch-progress{data: {batch: current_batch.try(:to_json), url: path, clear_path: clear_path} }
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaCanvasApiAuths < ActiveRecord::Migration
1
+ class CreateCoalescingPandaCanvasApiAuths < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_canvas_api_auths do |t|
4
4
  t.string :user_id
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaLtiAccounts < ActiveRecord::Migration
1
+ class CreateCoalescingPandaLtiAccounts < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_lti_accounts do |t|
4
4
  t.string :name
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaLtiNonces < ActiveRecord::Migration
1
+ class CreateCoalescingPandaLtiNonces < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_lti_nonces do |t|
4
4
  t.belongs_to :coalescing_panda_lti_account
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaSessions < ActiveRecord::Migration
1
+ class CreateCoalescingPandaSessions < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_sessions do |t|
4
4
  t.string :token
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaTerms < ActiveRecord::Migration
1
+ class CreateCoalescingPandaTerms < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_terms do |t|
4
4
  t.belongs_to :coalescing_panda_lti_account, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaCourses < ActiveRecord::Migration
1
+ class CreateCoalescingPandaCourses < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_courses do |t|
4
4
  t.belongs_to :coalescing_panda_lti_account, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaSections < ActiveRecord::Migration
1
+ class CreateCoalescingPandaSections < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_sections do |t|
4
4
  t.belongs_to :coalescing_panda_course, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaAssignments < ActiveRecord::Migration
1
+ class CreateCoalescingPandaAssignments < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_assignments do |t|
4
4
  t.belongs_to :coalescing_panda_course, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaUsers < ActiveRecord::Migration
1
+ class CreateCoalescingPandaUsers < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_users do |t|
4
4
  t.belongs_to :coalescing_panda_lti_account, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaSubmissions < ActiveRecord::Migration
1
+ class CreateCoalescingPandaSubmissions < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_submissions do |t|
4
4
  t.belongs_to :coalescing_panda_user, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaEnrollments < ActiveRecord::Migration
1
+ class CreateCoalescingPandaEnrollments < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_enrollments do |t|
4
4
  t.belongs_to :coalescing_panda_user, null: false
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaCanvasBatches < ActiveRecord::Migration
1
+ class CreateCoalescingPandaCanvasBatches < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_canvas_batches do |t|
4
4
  t.float :percent_complete, default: 0.0
@@ -1,4 +1,4 @@
1
- class CreateDelayedJobs < ActiveRecord::Migration
1
+ class CreateDelayedJobs < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def self.up
3
3
  create_table :delayed_jobs, :force => true do |table|
4
4
  table.integer :priority, :default => 0, :null => false # Allows some jobs to jump to the front of the queue
@@ -1,4 +1,4 @@
1
- class AddSubmissionTypesToAssignments < ActiveRecord::Migration
1
+ class AddSubmissionTypesToAssignments < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_assignments, :submission_types, :text
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddGroupCategoryIdToAssignment < ActiveRecord::Migration
1
+ class AddGroupCategoryIdToAssignment < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_assignments, :group_category_id, :integer
4
4
  add_column :coalescing_panda_assignments, :grade_group_students_individually, :boolean
@@ -1,4 +1,4 @@
1
- class AddPublishedToAssignments < ActiveRecord::Migration
1
+ class AddPublishedToAssignments < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_assignments, :published, :boolean
4
4
  end
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaGroups < ActiveRecord::Migration
1
+ class CreateCoalescingPandaGroups < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_groups do |t|
4
4
  t.belongs_to :context, polymorphic: true
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaGroupMemberships < ActiveRecord::Migration
1
+ class CreateCoalescingPandaGroupMemberships < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_group_memberships do |t|
4
4
  t.belongs_to :coalescing_panda_group
@@ -1,4 +1,4 @@
1
- class AddContextToCanvasBatch < ActiveRecord::Migration
1
+ class AddContextToCanvasBatch < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_canvas_batches, :context_id, :integer
4
4
  add_column :coalescing_panda_canvas_batches, :context_type, :string
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaAssignmentGroups < ActiveRecord::Migration
1
+ class CreateCoalescingPandaAssignmentGroups < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_assignment_groups do |t|
4
4
  t.belongs_to :coalescing_panda_course, null: false
@@ -1,4 +1,4 @@
1
- class AddAssignmentGroupIdToAssignments < ActiveRecord::Migration
1
+ class AddAssignmentGroupIdToAssignments < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_assignments, :coalescing_panda_assignment_group_id, :integer
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddAccountToCanvasBatches < ActiveRecord::Migration
1
+ class AddAccountToCanvasBatches < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_canvas_batches, :coalescing_panda_lti_account_id, :integer, index: true
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddOptionToCanvasBatches < ActiveRecord::Migration
1
+ class AddOptionToCanvasBatches < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_canvas_batches, :options, :text
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddGroupModeratorToGroupMemberships < ActiveRecord::Migration
1
+ class AddGroupModeratorToGroupMemberships < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_group_memberships, :moderator, :boolean
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddLeaderIdToGroups < ActiveRecord::Migration
1
+ class AddLeaderIdToGroups < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_groups, :leader_id, :integer
4
4
  add_foreign_key :coalescing_panda_groups, :coalescing_panda_users, column: :leader_id, primary_key: "id"
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaGroupCategories < ActiveRecord::Migration
1
+ class CreateCoalescingPandaGroupCategories < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_group_categories do |t|
4
4
  t.belongs_to :context, polymorphic: true
@@ -1,4 +1,4 @@
1
- class AddFieldsToUsers < ActiveRecord::Migration
1
+ class AddFieldsToUsers < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_users, :login_id, :string
4
4
  end
@@ -1,4 +1,4 @@
1
- class AddRefreshSettingsToCanvasApiAuth < ActiveRecord::Migration
1
+ class AddRefreshSettingsToCanvasApiAuth < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  add_column :coalescing_panda_canvas_api_auths, :refresh_token, :string
4
4
  add_column :coalescing_panda_canvas_api_auths, :expires_at, :datetime
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaOauthStates < ActiveRecord::Migration
1
+ class CreateCoalescingPandaOauthStates < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_oauth_states do |t|
4
4
  t.string :state_key
@@ -1,4 +1,4 @@
1
- class CreateCoalescingPandaPersistentSession < ActiveRecord::Migration
1
+ class CreateCoalescingPandaPersistentSession < CoalescingPanda::MiscHelper::MigrationClass
2
2
  def change
3
3
  create_table :coalescing_panda_persistent_sessions do |t|
4
4
  t.string :session_key
@@ -81,9 +81,7 @@ module CoalescingPanda
81
81
  client = Bearcat::Client.new(prefix: uri.prefix)
82
82
  state = SecureRandom.hex(32)
83
83
  OauthState.create! state_key: state, data: { key: params['oauth_consumer_key'], user_id: user_id, api_domain: uri.api_domain }
84
- redirect_path = coalescing_panda.oauth2_redirect_path
85
- redirect_url = [coalescing_panda_url, redirect_path.sub(/^\/lti/, '')].join
86
- @canvas_url = client.auth_redirect_url(client_id, redirect_url, { state: state })
84
+ @canvas_url = client.auth_redirect_url(client_id, coalescing_panda.oauth2_redirect_url, { state: state })
87
85
 
88
86
  #delete the added params so the original oauth sig still works
89
87
  @lti_params = params.to_hash
@@ -146,8 +144,8 @@ module CoalescingPanda
146
144
  authorized = false
147
145
  if (@lti_account = params['oauth_consumer_key'] && LtiAccount.find_by_key(params['oauth_consumer_key']))
148
146
  sanitized_params = sanitize_params
149
- authenticator = IMS::LTI::Services::MessageAuthenticator.new(request.original_url, sanitized_params, @lti_account.secret)
150
- authorized = authenticator.valid_signature?
147
+ @tp = IMS::LTI::ToolProvider.new(@lti_account.key, @lti_account.secret, sanitized_params)
148
+ authorized = @tp.valid_request?(request)
151
149
  end
152
150
  logger.info 'not authorized on tp valid request' unless authorized
153
151
  authorized = authorized && (roles.count == 0 || (roles & lti_roles).count > 0)
@@ -1,4 +1,5 @@
1
1
  require 'secure_headers'
2
+ require_relative './secure_headers'
2
3
 
3
4
  module CoalescingPanda
4
5
  class Engine < ::Rails::Engine
@@ -42,56 +43,21 @@ module CoalescingPanda
42
43
  end
43
44
 
44
45
  initializer :secure_headers do |app|
45
- connect_src = %w('self')
46
- script_src = %w('self')
47
-
48
- if Rails.env.development?
49
- # Allow webpack-dev-server to work
50
- connect_src << "http://localhost:3035"
51
- connect_src << "ws://localhost:3035"
52
-
53
- # Allow stuff like rack-mini-profiler to work in development:
54
- # https://github.com/MiniProfiler/rack-mini-profiler/issues/327
55
- # DON'T ENABLE THIS FOR PRODUCTION!
56
- script_src << "'unsafe-eval'"
57
- elsif CoalescingPanda.lti_options.has_key?(:allow_unsafe_eval) && CoalescingPanda.lti_options[:allow_unsafe_eval] == true
58
- # For when code is returned from server and injected into dom. Need to have unsafe-eval or it won't work.
59
- script_src << "'unsafe-eval'"
60
- end
61
-
62
- SecureHeaders::Configuration.default do |config|
63
- # The default cookie headers aren't compatible with PandaPal cookies currently
64
- config.cookies = { samesite: { none: true } }
65
-
66
- if Rails.env.production?
67
- config.cookies[:secure] = true
46
+ begin
47
+ ::SecureHeaders::Configuration.default do |config|
48
+ CoalescingPanda::SecureHeaders.apply_defaults(config)
68
49
  end
69
-
70
- # Need to allow LTI iframes
71
- config.x_frame_options = "ALLOWALL"
72
-
73
- config.x_content_type_options = "nosniff"
74
- config.x_xss_protection = "1; mode=block"
75
- config.referrer_policy = %w(origin-when-cross-origin strict-origin-when-cross-origin)
76
-
77
- config.csp = {
78
- default_src: %w('self'),
79
- script_src: script_src,
80
- # Certain CSS-in-JS libraries inline the CSS, so we need to use unsafe-inline for them
81
- style_src: %w('self' 'unsafe-inline' blob: https://fonts.googleapis.com),
82
- font_src: %w('self' data: https://fonts.gstatic.com),
83
- connect_src: connect_src,
84
- }
50
+ rescue ::SecureHeaders::Configuration::AlreadyConfiguredError
51
+ # The App already applied settings
85
52
  end
86
53
 
87
- SecureHeaders::Configuration.override(:safari_override) do |config|
54
+ ::SecureHeaders::Configuration.override(:safari_override) do |config|
88
55
  config.cookies = SecureHeaders::OPT_OUT
89
56
  end
90
57
 
91
- SecureHeaders::Configuration.override(:allow_inline_scripts) do |config|
58
+ ::SecureHeaders::Configuration.override(:allow_inline_scripts) do |config|
92
59
  config.csp[:script_src] << "'unsafe-inline'"
93
60
  end
94
61
  end
95
-
96
62
  end
97
63
  end
@@ -0,0 +1,13 @@
1
+ module CoalescingPanda
2
+ module MiscHelper
3
+ MigrationClass = Rails.version < '5.0' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+
5
+ def self.to_boolean(v)
6
+ if Rails.version < '5.0'
7
+ ActiveRecord::Type::Boolean.new.type_cast_from_user("0")
8
+ else
9
+ ActiveRecord::Type::Boolean.new.deserialize('0')
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,84 @@
1
+ module CoalescingPanda
2
+ module SecureHeaders
3
+ def self.apply_defaults(config)
4
+ @config = config
5
+ # The default cookie headers aren't compatable with CoalescingPanda cookies currenntly
6
+ config.cookies = { samesite: { none: true } }
7
+
8
+ if Rails.env.production?
9
+ config.cookies[:secure] = true
10
+ end
11
+
12
+ # Need to allow LTI iframes
13
+ config.x_frame_options = "ALLOWALL"
14
+
15
+ config.x_content_type_options = "nosniff"
16
+ config.x_xss_protection = "1; mode=block"
17
+ config.referrer_policy = %w(origin-when-cross-origin strict-origin-when-cross-origin)
18
+
19
+ config.csp ||= {}
20
+
21
+ csp_entry(:default_src, %w['self'])
22
+ csp_entry(:connect_src, %w['self'])
23
+ csp_entry(:script_src, %w['self'])
24
+
25
+ if Rails.env.development?
26
+ # Allow webpack-dev-server to work
27
+ csp_entry(:connect_src, "http://localhost:3035")
28
+ csp_entry(:connect_src, "ws://localhost:3035")
29
+
30
+ # Allow stuff like rack-mini-profiler to work in development:
31
+ # https://github.com/MiniProfiler/rack-mini-profiler/issues/327
32
+ # DON'T ENABLE THIS FOR PRODUCTION!
33
+ csp_entry(:script_src, "'unsafe-eval'")
34
+
35
+ # Detect and permit Scout APM in Dev
36
+ if MiscHelper.to_boolean(ENV['SCOUT_DEV_TRACE'])
37
+ csp_entry(:default_src, 'https://scoutapm.com')
38
+ csp_entry(:default_src, 'https://apm.scoutapp.com')
39
+
40
+ csp_entry(:script_src, "'unsafe-inline'")
41
+ csp_entry(:script_src, 'https://scoutapm.com')
42
+ csp_entry(:script_src, 'https://apm.scoutapp.com')
43
+
44
+ csp_entry(:connect_src, 'https://apm.scoutapp.com')
45
+
46
+ csp_entry(:style_src, 'https://scoutapm.com')
47
+ csp_entry(:style_src, 'https://apm.scoutapp.com')
48
+ end
49
+ end
50
+
51
+ if CoalescingPanda.lti_options.has_key?(:allow_unsafe_eval) && CoalescingPanda.lti_options[:allow_unsafe_eval] == true
52
+ # For when code is returned from server and injected into dom. Need to have unsafe-eval or it won't work.
53
+ csp_entry(:script_src, "'unsafe-eval'")
54
+ end
55
+
56
+ # Detect and permit Sentry
57
+ if defined?(Raven) && Raven.configuration.server.present?
58
+ csp_entry(:connect_src, Raven.configuration.server)
59
+
60
+ # Report CSP Violations to Sentry
61
+ unless config.csp[:report_uri].present?
62
+ cfg = Raven.configuration
63
+ config.csp[:report_uri] = ["#{cfg.scheme}://#{cfg.host}/api/#{cfg.project_id}/security/?sentry_key=#{cfg.public_key}"] unless config.csp[:report_uri].present?
64
+ end
65
+ end
66
+
67
+ # Certain CSS-in-JS libraries inline the CSS, so we need to use unsafe-inline for them
68
+ csp_entry(:style_src, %w('self' 'unsafe-inline' blob: https://fonts.googleapis.com))
69
+ csp_entry(:font_src, %w('self' data: https://fonts.gstatic.com))
70
+
71
+ @config = nil
72
+
73
+ config
74
+ end
75
+
76
+ private
77
+
78
+ def self.csp_entry(key, *values)
79
+ values = values.flatten
80
+ @config.csp[key] ||= []
81
+ @config.csp[key] |= values
82
+ end
83
+ end
84
+ end
@@ -1,3 +1,3 @@
1
1
  module CoalescingPanda
2
- VERSION = '5.0.3'
2
+ VERSION = '5.0.9'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coalescing_panda
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.3
4
+ version: 5.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Mills
@@ -10,48 +10,48 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-07-28 00:00:00.000000000 Z
13
+ date: 2020-09-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 4.2.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - "~>"
26
+ - - '>='
27
27
  - !ruby/object:Gem::Version
28
28
  version: 4.2.1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bearcat
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - "~>"
33
+ - - ~>
34
34
  - !ruby/object:Gem::Version
35
35
  version: 1.3.0
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - "~>"
40
+ - - ~>
41
41
  - !ruby/object:Gem::Version
42
42
  version: 1.3.0
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: browser
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ">="
47
+ - - '>='
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ">="
54
+ - - '>='
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
@@ -72,322 +72,328 @@ dependencies:
72
72
  name: ims-lti
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ">="
75
+ - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 2.1.0
77
+ version: 1.2.0
78
+ - - <
79
+ - !ruby/object:Gem::Version
80
+ version: '2.0'
78
81
  type: :runtime
79
82
  prerelease: false
80
83
  version_requirements: !ruby/object:Gem::Requirement
81
84
  requirements:
82
- - - ">="
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.2.0
88
+ - - <
83
89
  - !ruby/object:Gem::Version
84
- version: 2.1.0
90
+ version: '2.0'
85
91
  - !ruby/object:Gem::Dependency
86
92
  name: haml-rails
87
93
  requirement: !ruby/object:Gem::Requirement
88
94
  requirements:
89
- - - ">="
95
+ - - '>='
90
96
  - !ruby/object:Gem::Version
91
97
  version: '0'
92
98
  type: :runtime
93
99
  prerelease: false
94
100
  version_requirements: !ruby/object:Gem::Requirement
95
101
  requirements:
96
- - - ">="
102
+ - - '>='
97
103
  - !ruby/object:Gem::Version
98
104
  version: '0'
99
105
  - !ruby/object:Gem::Dependency
100
106
  name: sass-rails
101
107
  requirement: !ruby/object:Gem::Requirement
102
108
  requirements:
103
- - - ">="
109
+ - - '>='
104
110
  - !ruby/object:Gem::Version
105
111
  version: '3.2'
106
112
  type: :runtime
107
113
  prerelease: false
108
114
  version_requirements: !ruby/object:Gem::Requirement
109
115
  requirements:
110
- - - ">="
116
+ - - '>='
111
117
  - !ruby/object:Gem::Version
112
118
  version: '3.2'
113
119
  - !ruby/object:Gem::Dependency
114
120
  name: jquery-rails
115
121
  requirement: !ruby/object:Gem::Requirement
116
122
  requirements:
117
- - - ">="
123
+ - - '>='
118
124
  - !ruby/object:Gem::Version
119
125
  version: '0'
120
126
  type: :runtime
121
127
  prerelease: false
122
128
  version_requirements: !ruby/object:Gem::Requirement
123
129
  requirements:
124
- - - ">="
130
+ - - '>='
125
131
  - !ruby/object:Gem::Version
126
132
  version: '0'
127
133
  - !ruby/object:Gem::Dependency
128
134
  name: coffee-rails
129
135
  requirement: !ruby/object:Gem::Requirement
130
136
  requirements:
131
- - - ">="
137
+ - - '>='
132
138
  - !ruby/object:Gem::Version
133
139
  version: '0'
134
140
  type: :runtime
135
141
  prerelease: false
136
142
  version_requirements: !ruby/object:Gem::Requirement
137
143
  requirements:
138
- - - ">="
144
+ - - '>='
139
145
  - !ruby/object:Gem::Version
140
146
  version: '0'
141
147
  - !ruby/object:Gem::Dependency
142
148
  name: p3p
143
149
  requirement: !ruby/object:Gem::Requirement
144
150
  requirements:
145
- - - ">="
151
+ - - '>='
146
152
  - !ruby/object:Gem::Version
147
153
  version: '0'
148
154
  type: :runtime
149
155
  prerelease: false
150
156
  version_requirements: !ruby/object:Gem::Requirement
151
157
  requirements:
152
- - - ">="
158
+ - - '>='
153
159
  - !ruby/object:Gem::Version
154
160
  version: '0'
155
161
  - !ruby/object:Gem::Dependency
156
162
  name: delayed_job_active_record
157
163
  requirement: !ruby/object:Gem::Requirement
158
164
  requirements:
159
- - - ">="
165
+ - - '>='
160
166
  - !ruby/object:Gem::Version
161
167
  version: '0'
162
168
  type: :runtime
163
169
  prerelease: false
164
170
  version_requirements: !ruby/object:Gem::Requirement
165
171
  requirements:
166
- - - ">="
172
+ - - '>='
167
173
  - !ruby/object:Gem::Version
168
174
  version: '0'
169
175
  - !ruby/object:Gem::Dependency
170
176
  name: open_uri_redirections
171
177
  requirement: !ruby/object:Gem::Requirement
172
178
  requirements:
173
- - - ">="
179
+ - - '>='
174
180
  - !ruby/object:Gem::Version
175
181
  version: '0'
176
182
  type: :runtime
177
183
  prerelease: false
178
184
  version_requirements: !ruby/object:Gem::Requirement
179
185
  requirements:
180
- - - ">="
186
+ - - '>='
181
187
  - !ruby/object:Gem::Version
182
188
  version: '0'
183
189
  - !ruby/object:Gem::Dependency
184
190
  name: oauth
185
191
  requirement: !ruby/object:Gem::Requirement
186
192
  requirements:
187
- - - "~>"
193
+ - - ~>
188
194
  - !ruby/object:Gem::Version
189
195
  version: 0.5.4
190
196
  type: :runtime
191
197
  prerelease: false
192
198
  version_requirements: !ruby/object:Gem::Requirement
193
199
  requirements:
194
- - - "~>"
200
+ - - ~>
195
201
  - !ruby/object:Gem::Version
196
202
  version: 0.5.4
197
203
  - !ruby/object:Gem::Dependency
198
204
  name: rubyzip
199
205
  requirement: !ruby/object:Gem::Requirement
200
206
  requirements:
201
- - - ">="
207
+ - - '>='
202
208
  - !ruby/object:Gem::Version
203
209
  version: 1.0.0
204
210
  type: :runtime
205
211
  prerelease: false
206
212
  version_requirements: !ruby/object:Gem::Requirement
207
213
  requirements:
208
- - - ">="
214
+ - - '>='
209
215
  - !ruby/object:Gem::Version
210
216
  version: 1.0.0
211
217
  - !ruby/object:Gem::Dependency
212
218
  name: secure_headers
213
219
  requirement: !ruby/object:Gem::Requirement
214
220
  requirements:
215
- - - "~>"
221
+ - - ~>
216
222
  - !ruby/object:Gem::Version
217
223
  version: '6.3'
218
224
  type: :runtime
219
225
  prerelease: false
220
226
  version_requirements: !ruby/object:Gem::Requirement
221
227
  requirements:
222
- - - "~>"
228
+ - - ~>
223
229
  - !ruby/object:Gem::Version
224
230
  version: '6.3'
225
231
  - !ruby/object:Gem::Dependency
226
232
  name: zip-zip
227
233
  requirement: !ruby/object:Gem::Requirement
228
234
  requirements:
229
- - - ">="
235
+ - - '>='
230
236
  - !ruby/object:Gem::Version
231
237
  version: '0'
232
238
  type: :runtime
233
239
  prerelease: false
234
240
  version_requirements: !ruby/object:Gem::Requirement
235
241
  requirements:
236
- - - ">="
242
+ - - '>='
237
243
  - !ruby/object:Gem::Version
238
244
  version: '0'
239
245
  - !ruby/object:Gem::Dependency
240
246
  name: sqlite3
241
247
  requirement: !ruby/object:Gem::Requirement
242
248
  requirements:
243
- - - ">="
249
+ - - '>='
244
250
  - !ruby/object:Gem::Version
245
251
  version: '0'
246
252
  type: :development
247
253
  prerelease: false
248
254
  version_requirements: !ruby/object:Gem::Requirement
249
255
  requirements:
250
- - - ">="
256
+ - - '>='
251
257
  - !ruby/object:Gem::Version
252
258
  version: '0'
253
259
  - !ruby/object:Gem::Dependency
254
260
  name: rspec-rails
255
261
  requirement: !ruby/object:Gem::Requirement
256
262
  requirements:
257
- - - ">="
263
+ - - '>='
258
264
  - !ruby/object:Gem::Version
259
265
  version: '0'
260
266
  type: :development
261
267
  prerelease: false
262
268
  version_requirements: !ruby/object:Gem::Requirement
263
269
  requirements:
264
- - - ">="
270
+ - - '>='
265
271
  - !ruby/object:Gem::Version
266
272
  version: '0'
267
273
  - !ruby/object:Gem::Dependency
268
274
  name: factory_girl_rails
269
275
  requirement: !ruby/object:Gem::Requirement
270
276
  requirements:
271
- - - ">="
277
+ - - '>='
272
278
  - !ruby/object:Gem::Version
273
279
  version: '0'
274
280
  type: :development
275
281
  prerelease: false
276
282
  version_requirements: !ruby/object:Gem::Requirement
277
283
  requirements:
278
- - - ">="
284
+ - - '>='
279
285
  - !ruby/object:Gem::Version
280
286
  version: '0'
281
287
  - !ruby/object:Gem::Dependency
282
288
  name: shoulda-matchers
283
289
  requirement: !ruby/object:Gem::Requirement
284
290
  requirements:
285
- - - ">="
291
+ - - '>='
286
292
  - !ruby/object:Gem::Version
287
293
  version: '0'
288
294
  type: :development
289
295
  prerelease: false
290
296
  version_requirements: !ruby/object:Gem::Requirement
291
297
  requirements:
292
- - - ">="
298
+ - - '>='
293
299
  - !ruby/object:Gem::Version
294
300
  version: '0'
295
301
  - !ruby/object:Gem::Dependency
296
302
  name: nokogiri
297
303
  requirement: !ruby/object:Gem::Requirement
298
304
  requirements:
299
- - - ">="
305
+ - - '>='
300
306
  - !ruby/object:Gem::Version
301
307
  version: '0'
302
308
  type: :development
303
309
  prerelease: false
304
310
  version_requirements: !ruby/object:Gem::Requirement
305
311
  requirements:
306
- - - ">="
312
+ - - '>='
307
313
  - !ruby/object:Gem::Version
308
314
  version: '0'
309
315
  - !ruby/object:Gem::Dependency
310
316
  name: simplecov
311
317
  requirement: !ruby/object:Gem::Requirement
312
318
  requirements:
313
- - - ">="
319
+ - - '>='
314
320
  - !ruby/object:Gem::Version
315
321
  version: '0'
316
322
  type: :development
317
323
  prerelease: false
318
324
  version_requirements: !ruby/object:Gem::Requirement
319
325
  requirements:
320
- - - ">="
326
+ - - '>='
321
327
  - !ruby/object:Gem::Version
322
328
  version: '0'
323
329
  - !ruby/object:Gem::Dependency
324
330
  name: byebug
325
331
  requirement: !ruby/object:Gem::Requirement
326
332
  requirements:
327
- - - ">="
333
+ - - '>='
328
334
  - !ruby/object:Gem::Version
329
335
  version: '0'
330
336
  type: :development
331
337
  prerelease: false
332
338
  version_requirements: !ruby/object:Gem::Requirement
333
339
  requirements:
334
- - - ">="
340
+ - - '>='
335
341
  - !ruby/object:Gem::Version
336
342
  version: '0'
337
343
  - !ruby/object:Gem::Dependency
338
344
  name: pry
339
345
  requirement: !ruby/object:Gem::Requirement
340
346
  requirements:
341
- - - ">="
347
+ - - '>='
342
348
  - !ruby/object:Gem::Version
343
349
  version: '0'
344
350
  type: :development
345
351
  prerelease: false
346
352
  version_requirements: !ruby/object:Gem::Requirement
347
353
  requirements:
348
- - - ">="
354
+ - - '>='
349
355
  - !ruby/object:Gem::Version
350
356
  version: '0'
351
357
  - !ruby/object:Gem::Dependency
352
358
  name: webmock
353
359
  requirement: !ruby/object:Gem::Requirement
354
360
  requirements:
355
- - - ">="
361
+ - - '>='
356
362
  - !ruby/object:Gem::Version
357
363
  version: '0'
358
364
  type: :development
359
365
  prerelease: false
360
366
  version_requirements: !ruby/object:Gem::Requirement
361
367
  requirements:
362
- - - ">="
368
+ - - '>='
363
369
  - !ruby/object:Gem::Version
364
370
  version: '0'
365
371
  - !ruby/object:Gem::Dependency
366
372
  name: lol_dba
367
373
  requirement: !ruby/object:Gem::Requirement
368
374
  requirements:
369
- - - ">="
375
+ - - '>='
370
376
  - !ruby/object:Gem::Version
371
377
  version: '0'
372
378
  type: :development
373
379
  prerelease: false
374
380
  version_requirements: !ruby/object:Gem::Requirement
375
381
  requirements:
376
- - - ">="
382
+ - - '>='
377
383
  - !ruby/object:Gem::Version
378
384
  version: '0'
379
385
  - !ruby/object:Gem::Dependency
380
386
  name: database_cleaner
381
387
  requirement: !ruby/object:Gem::Requirement
382
388
  requirements:
383
- - - ">="
389
+ - - '>='
384
390
  - !ruby/object:Gem::Version
385
391
  version: '0'
386
392
  type: :development
387
393
  prerelease: false
388
394
  version_requirements: !ruby/object:Gem::Requirement
389
395
  requirements:
390
- - - ">="
396
+ - - '>='
391
397
  - !ruby/object:Gem::Version
392
398
  version: '0'
393
399
  description:
@@ -399,158 +405,160 @@ executables: []
399
405
  extensions: []
400
406
  extra_rdoc_files: []
401
407
  files:
402
- - Rakefile
403
- - app/assets/config/coalescing_panda/manifest.js
404
- - app/assets/images/bootstrap/glyphicons-halflings-white.png
405
- - app/assets/images/bootstrap/glyphicons-halflings.png
406
- - app/assets/javascripts/coalescing_panda/application.js
407
- - app/assets/javascripts/coalescing_panda/canvas_batch.js.coffee
408
- - app/assets/javascripts/coalescing_panda/oauth2.js.coffee
409
- - app/assets/stylesheets/coalescing_panda/application.css.scss
410
- - app/assets/stylesheets/coalescing_panda/launch.css.scss
411
- - app/assets/stylesheets/coalescing_panda/progress.css.scss
412
- - app/controllers/coalescing_panda/application_controller.rb
413
- - app/controllers/coalescing_panda/canvas_batches_controller.rb
414
- - app/controllers/coalescing_panda/lti_controller.rb
415
- - app/controllers/coalescing_panda/oauth2_controller.rb
416
- - app/helpers/coalescing_panda/canvas_batches_helper.rb
417
- - app/models/coalescing_panda/assignment.rb
418
408
  - app/models/coalescing_panda/assignment_group.rb
419
- - app/models/coalescing_panda/canvas_api_auth.rb
420
- - app/models/coalescing_panda/canvas_batch.rb
421
- - app/models/coalescing_panda/course.rb
409
+ - app/models/coalescing_panda/group_membership.rb
422
410
  - app/models/coalescing_panda/enrollment.rb
411
+ - app/models/coalescing_panda/canvas_batch.rb
412
+ - app/models/coalescing_panda/assignment.rb
423
413
  - app/models/coalescing_panda/group.rb
424
- - app/models/coalescing_panda/group_category.rb
425
- - app/models/coalescing_panda/group_membership.rb
426
- - app/models/coalescing_panda/json_with_indifferent_access.rb
427
- - app/models/coalescing_panda/lti_account.rb
428
- - app/models/coalescing_panda/lti_nonce.rb
429
- - app/models/coalescing_panda/oauth_state.rb
430
- - app/models/coalescing_panda/persistent_session.rb
431
- - app/models/coalescing_panda/section.rb
432
414
  - app/models/coalescing_panda/session.rb
433
- - app/models/coalescing_panda/submission.rb
415
+ - app/models/coalescing_panda/section.rb
434
416
  - app/models/coalescing_panda/term.rb
435
- - app/models/coalescing_panda/user.rb
417
+ - app/models/coalescing_panda/oauth_state.rb
418
+ - app/models/coalescing_panda/submission.rb
419
+ - app/models/coalescing_panda/canvas_api_auth.rb
436
420
  - app/models/coalescing_panda/workers/account_miner.rb
437
- - app/models/coalescing_panda/workers/course_miner.rb
438
421
  - app/models/coalescing_panda/workers/provisioning_miner.rb
422
+ - app/models/coalescing_panda/workers/course_miner.rb
423
+ - app/models/coalescing_panda/lti_nonce.rb
424
+ - app/models/coalescing_panda/course.rb
425
+ - app/models/coalescing_panda/persistent_session.rb
426
+ - app/models/coalescing_panda/lti_account.rb
427
+ - app/models/coalescing_panda/json_with_indifferent_access.rb
428
+ - app/models/coalescing_panda/user.rb
429
+ - app/models/coalescing_panda/group_category.rb
439
430
  - app/models/concerns/single_table_polymorphic.rb
440
- - app/views/coalescing_panda/canvas_batches/_canvas_batch.html.haml
441
- - app/views/coalescing_panda/canvas_batches/_canvas_batch_flash.html.haml
442
- - app/views/coalescing_panda/launch.html.haml
443
- - app/views/coalescing_panda/lti/iframe_cookie_fix.html.erb
431
+ - app/controllers/coalescing_panda/oauth2_controller.rb
432
+ - app/controllers/coalescing_panda/application_controller.rb
433
+ - app/controllers/coalescing_panda/lti_controller.rb
434
+ - app/controllers/coalescing_panda/canvas_batches_controller.rb
444
435
  - app/views/coalescing_panda/oauth2/oauth2.html.haml
445
436
  - app/views/coalescing_panda/oauth2/redirect.html.haml
437
+ - app/views/coalescing_panda/launch.html.haml
446
438
  - app/views/coalescing_panda/styleguide/styleguide.html
439
+ - app/views/coalescing_panda/lti/iframe_cookie_fix.html.erb
440
+ - app/views/coalescing_panda/canvas_batches/_canvas_batch.html.haml
441
+ - app/views/coalescing_panda/canvas_batches/_canvas_batch_flash.html.haml
447
442
  - app/views/layouts/coalescing_panda/application.html.erb
443
+ - app/assets/config/coalescing_panda/manifest.js
444
+ - app/assets/images/bootstrap/glyphicons-halflings.png
445
+ - app/assets/images/bootstrap/glyphicons-halflings-white.png
446
+ - app/assets/javascripts/coalescing_panda/oauth2.js.coffee
447
+ - app/assets/javascripts/coalescing_panda/application.js
448
+ - app/assets/javascripts/coalescing_panda/canvas_batch.js.coffee
449
+ - app/assets/stylesheets/coalescing_panda/progress.css.scss
450
+ - app/assets/stylesheets/coalescing_panda/application.css.scss
451
+ - app/assets/stylesheets/coalescing_panda/launch.css.scss
452
+ - app/helpers/coalescing_panda/canvas_batches_helper.rb
448
453
  - config/routes.rb
449
454
  - config/styleguide.yml
450
- - db/migrate/20131114150001_create_coalescing_panda_canvas_api_auths.rb
451
- - db/migrate/20131118211442_create_coalescing_panda_lti_accounts.rb
452
- - db/migrate/20131119165343_create_coalescing_panda_lti_nonces.rb
453
- - db/migrate/20140904223159_create_coalescing_panda_sessions.rb
454
- - db/migrate/20141119225319_create_coalescing_panda_terms.rb
455
- - db/migrate/20141119225721_create_coalescing_panda_courses.rb
456
455
  - db/migrate/20141120151432_create_coalescing_panda_sections.rb
457
- - db/migrate/20141120151940_create_coalescing_panda_assignments.rb
458
- - db/migrate/20141120152458_create_coalescing_panda_users.rb
456
+ - db/migrate/20150602205257_add_option_to_canvas_batches.rb
457
+ - db/migrate/20150811140030_add_fields_to_users.rb
458
+ - db/migrate/20131118211442_create_coalescing_panda_lti_accounts.rb
459
+ - db/migrate/20150506192717_add_assignment_group_id_to_assignments.rb
460
+ - db/migrate/20160830183155_create_coalescing_panda_oauth_states.rb
459
461
  - db/migrate/20141120152546_create_coalescing_panda_submissions.rb
460
- - db/migrate/20141120153135_create_coalescing_panda_enrollments.rb
461
- - db/migrate/20141121174846_create_coalescing_panda_canvas_batches.rb
462
- - db/migrate/20141124160857_create_delayed_jobs.rb
463
462
  - db/migrate/20141208221740_add_submission_types_to_assignments.rb
464
- - db/migrate/20150106175418_add_group_category_id_to_assignment.rb
465
- - db/migrate/20150106180131_add_published_to_assignments.rb
466
- - db/migrate/20150107205405_create_coalescing_panda_groups.rb
463
+ - db/migrate/20150709192717_add_leader_id_to_groups.rb
467
464
  - db/migrate/20150107205413_create_coalescing_panda_group_memberships.rb
465
+ - db/migrate/20141120152458_create_coalescing_panda_users.rb
466
+ - db/migrate/20141121174846_create_coalescing_panda_canvas_batches.rb
467
+ - db/migrate/20150708192717_add_group_moderator_to_group_memberships.rb
468
468
  - db/migrate/20150210180516_add_context_to_canvas_batch.rb
469
+ - db/migrate/20141120151940_create_coalescing_panda_assignments.rb
470
+ - db/migrate/20140904223159_create_coalescing_panda_sessions.rb
469
471
  - db/migrate/20150506183335_create_coalescing_panda_assignment_groups.rb
470
- - db/migrate/20150506192717_add_assignment_group_id_to_assignments.rb
472
+ - db/migrate/20141120153135_create_coalescing_panda_enrollments.rb
473
+ - db/migrate/20150107205405_create_coalescing_panda_groups.rb
474
+ - db/migrate/20141119225721_create_coalescing_panda_courses.rb
475
+ - db/migrate/20200528224505_create_coalescing_panda_persistent_session.rb
476
+ - db/migrate/20141124160857_create_delayed_jobs.rb
477
+ - db/migrate/20131119165343_create_coalescing_panda_lti_nonces.rb
478
+ - db/migrate/20150106180131_add_published_to_assignments.rb
471
479
  - db/migrate/20150526144713_add_account_to_canvas_batches.rb
472
- - db/migrate/20150602205257_add_option_to_canvas_batches.rb
473
- - db/migrate/20150708192717_add_group_moderator_to_group_memberships.rb
474
- - db/migrate/20150709192717_add_leader_id_to_groups.rb
480
+ - db/migrate/20150106175418_add_group_category_id_to_assignment.rb
475
481
  - db/migrate/20150714205405_create_coalescing_panda_group_categories.rb
476
- - db/migrate/20150811140030_add_fields_to_users.rb
477
482
  - db/migrate/20151209155923_add_refresh_settings_to_canvas_api_auth.rb
478
- - db/migrate/20160830183155_create_coalescing_panda_oauth_states.rb
479
- - db/migrate/20200528224505_create_coalescing_panda_persistent_session.rb
483
+ - db/migrate/20131114150001_create_coalescing_panda_canvas_api_auths.rb
484
+ - db/migrate/20141119225319_create_coalescing_panda_terms.rb
485
+ - lib/tasks/coalescing_panda_tasks.rake
480
486
  - lib/coalescing_panda.rb
481
- - lib/coalescing_panda/bearcat_uri.rb
482
487
  - lib/coalescing_panda/controller_helpers.rb
488
+ - lib/coalescing_panda/bearcat_uri.rb
489
+ - lib/coalescing_panda/misc_helper.rb
483
490
  - lib/coalescing_panda/engine.rb
484
- - lib/coalescing_panda/route_helpers.rb
491
+ - lib/coalescing_panda/secure_headers.rb
485
492
  - lib/coalescing_panda/version.rb
486
- - lib/tasks/coalescing_panda_tasks.rake
487
- - spec/controllers/coalescing_panda/canvas_batches_controller_spec.rb
488
- - spec/controllers/coalescing_panda/lti_controller_spec.rb
489
- - spec/controllers/coalescing_panda/oauth2_controller_spec.rb
490
- - spec/dummy/README.rdoc
491
- - spec/dummy/Rakefile
492
- - spec/dummy/app/assets/javascripts/application.js
493
- - spec/dummy/app/assets/stylesheets/application.css
494
- - spec/dummy/app/controllers/application_controller.rb
495
- - spec/dummy/app/helpers/application_helper.rb
493
+ - lib/coalescing_panda/route_helpers.rb
494
+ - Rakefile
495
+ - spec/spec_helper.rb
496
496
  - spec/dummy/app/models/account.rb
497
497
  - spec/dummy/app/models/course.rb
498
+ - spec/dummy/app/controllers/application_controller.rb
498
499
  - spec/dummy/app/views/layouts/application.html.erb
500
+ - spec/dummy/app/assets/javascripts/application.js
501
+ - spec/dummy/app/assets/stylesheets/application.css
502
+ - spec/dummy/app/helpers/application_helper.rb
503
+ - spec/dummy/bin/rake
499
504
  - spec/dummy/bin/bundle
500
505
  - spec/dummy/bin/rails
501
- - spec/dummy/bin/rake
502
- - spec/dummy/config.ru
503
- - spec/dummy/config/application.rb
504
- - spec/dummy/config/boot.rb
505
- - spec/dummy/config/database.yml
506
- - spec/dummy/config/environment.rb
507
- - spec/dummy/config/environments/development.rb
506
+ - spec/dummy/config/routes.rb
507
+ - spec/dummy/config/locales/en.yml
508
508
  - spec/dummy/config/environments/production.rb
509
+ - spec/dummy/config/environments/development.rb
509
510
  - spec/dummy/config/environments/test.rb
510
- - spec/dummy/config/initializers/backtrace_silencers.rb
511
- - spec/dummy/config/initializers/filter_parameter_logging.rb
512
- - spec/dummy/config/initializers/inflections.rb
511
+ - spec/dummy/config/environment.rb
512
+ - spec/dummy/config/application.rb
513
+ - spec/dummy/config/database.yml
514
+ - spec/dummy/config/boot.rb
513
515
  - spec/dummy/config/initializers/lti_initializer.rb
516
+ - spec/dummy/config/initializers/backtrace_silencers.rb
514
517
  - spec/dummy/config/initializers/mime_types.rb
515
- - spec/dummy/config/initializers/secret_token.rb
518
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
516
519
  - spec/dummy/config/initializers/session_store.rb
517
520
  - spec/dummy/config/initializers/wrap_parameters.rb
518
- - spec/dummy/config/locales/en.yml
519
- - spec/dummy/config/routes.rb
520
- - spec/dummy/db/schema.rb
521
- - spec/dummy/public/404.html
521
+ - spec/dummy/config/initializers/secret_token.rb
522
+ - spec/dummy/config/initializers/inflections.rb
523
+ - spec/dummy/config.ru
524
+ - spec/dummy/Rakefile
525
+ - spec/dummy/public/favicon.ico
522
526
  - spec/dummy/public/422.html
523
527
  - spec/dummy/public/500.html
524
- - spec/dummy/public/favicon.ico
525
- - spec/factories/accounts.rb
528
+ - spec/dummy/public/404.html
529
+ - spec/dummy/db/schema.rb
530
+ - spec/dummy/README.rdoc
531
+ - spec/models/coalescing_panda/enrollment_spec.rb
532
+ - spec/models/coalescing_panda/section_spec.rb
533
+ - spec/models/coalescing_panda/lti_nonce_spec.rb
534
+ - spec/models/coalescing_panda/lti_account_spec.rb
535
+ - spec/models/coalescing_panda/canvas_batch_spec.rb
536
+ - spec/models/coalescing_panda/term_spec.rb
537
+ - spec/models/coalescing_panda/assignment_spec.rb
538
+ - spec/models/coalescing_panda/submission_spec.rb
539
+ - spec/models/coalescing_panda/assignment_group_spec.rb
540
+ - spec/models/coalescing_panda/group_spec.rb
541
+ - spec/models/coalescing_panda/workers/account_miner_spec.rb
542
+ - spec/models/coalescing_panda/workers/course_miner_spec.rb
543
+ - spec/models/coalescing_panda/canvas_api_auth_spec.rb
544
+ - spec/models/coalescing_panda/group_membership_spec.rb
545
+ - spec/models/coalescing_panda/user_spec.rb
546
+ - spec/models/coalescing_panda/course_spec.rb
547
+ - spec/factories/courses.rb
548
+ - spec/factories/submissions.rb
526
549
  - spec/factories/assignment_groups.rb
527
550
  - spec/factories/assignments.rb
528
551
  - spec/factories/canvas_api_auths.rb
529
- - spec/factories/canvas_batches.rb
530
- - spec/factories/courses.rb
531
552
  - spec/factories/enrollments.rb
553
+ - spec/factories/canvas_batches.rb
532
554
  - spec/factories/sections.rb
533
- - spec/factories/submissions.rb
534
- - spec/factories/terms.rb
555
+ - spec/factories/accounts.rb
535
556
  - spec/factories/users.rb
536
- - spec/models/coalescing_panda/assignment_group_spec.rb
537
- - spec/models/coalescing_panda/assignment_spec.rb
538
- - spec/models/coalescing_panda/canvas_api_auth_spec.rb
539
- - spec/models/coalescing_panda/canvas_batch_spec.rb
540
- - spec/models/coalescing_panda/course_spec.rb
541
- - spec/models/coalescing_panda/enrollment_spec.rb
542
- - spec/models/coalescing_panda/group_membership_spec.rb
543
- - spec/models/coalescing_panda/group_spec.rb
544
- - spec/models/coalescing_panda/lti_account_spec.rb
545
- - spec/models/coalescing_panda/lti_nonce_spec.rb
546
- - spec/models/coalescing_panda/section_spec.rb
547
- - spec/models/coalescing_panda/submission_spec.rb
548
- - spec/models/coalescing_panda/term_spec.rb
549
- - spec/models/coalescing_panda/user_spec.rb
550
- - spec/models/coalescing_panda/workers/account_miner_spec.rb
551
- - spec/models/coalescing_panda/workers/course_miner_spec.rb
557
+ - spec/factories/terms.rb
558
+ - spec/controllers/coalescing_panda/canvas_batches_controller_spec.rb
559
+ - spec/controllers/coalescing_panda/oauth2_controller_spec.rb
560
+ - spec/controllers/coalescing_panda/lti_controller_spec.rb
552
561
  - spec/rails_helper.rb
553
- - spec/spec_helper.rb
554
562
  homepage: http://www.instructure.com
555
563
  licenses: []
556
564
  metadata: {}
@@ -560,16 +568,17 @@ require_paths:
560
568
  - lib
561
569
  required_ruby_version: !ruby/object:Gem::Requirement
562
570
  requirements:
563
- - - ">="
571
+ - - '>='
564
572
  - !ruby/object:Gem::Version
565
573
  version: '0'
566
574
  required_rubygems_version: !ruby/object:Gem::Requirement
567
575
  requirements:
568
- - - ">="
576
+ - - '>='
569
577
  - !ruby/object:Gem::Version
570
578
  version: '0'
571
579
  requirements: []
572
- rubygems_version: 3.1.2
580
+ rubyforge_project:
581
+ rubygems_version: 2.0.14
573
582
  signing_key:
574
583
  specification_version: 4
575
584
  summary: Canvas LTI and OAUTH2 mountable engine