panda_pal 2.0.5 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b858f65fd9c01d50bc2577f2382a63e531a5e854
4
- data.tar.gz: fd758de743170105b3672dbd2a440daad01d3aeb
3
+ metadata.gz: bd2cd5dc90e37ab172c4fcfa40d08c423bd91a9a
4
+ data.tar.gz: 41d62864c7f935dd73f0de1dfbf5f1429e03f1d8
5
5
  SHA512:
6
- metadata.gz: 9ca9c760d8581ca394a27419f00db8686dd32f2d972616365163d311e12a1cc1f036c7f535c16a11480134a10eb34e0077210606588144b8ac276afeb6a908a3
7
- data.tar.gz: b8bbe9997589c546dc406573a76c38ce7b8bc17a5840e4a4fabe117f28c2930aa3ce715bd4608a50adf0a38b4cb48f57b99cff5a87aa6d5c33df99f1172694fb
6
+ metadata.gz: a208fafdfa5df93a8109354003f43386ada84d4a952d3953ff6324d5b60458acc60833d369ce138cf6cadf32c61fd912ab15d08fea1025942946ac0096065c0c
7
+ data.tar.gz: 43aca646ccde51f27aa8d7fdf3b1127d5b90329df69d216be8b0dee7dc57421ce317082d63f34a136c147720489a19872f62e1b574c4cc9a6cb348653965b32f
@@ -1,6 +1,8 @@
1
1
  module PandaPal
2
2
  class Organization < ActiveRecord::Base
3
-
3
+ attribute :settings
4
+ attr_encrypted :settings, marshal: true, key: :encryption_key
5
+ before_save {|a| a.settings = a.settings} # this is a hacky work-around to a bug where attr_encrypted is not saving settings in place
4
6
  validates :key, uniqueness: { case_sensitive: false }, presence: true
5
7
  validates :secret, presence: true
6
8
  validates :name, uniqueness: { case_sensitive: false }, presence: true, format: { with: /\A[a-z0-9_]+\z/i }
@@ -16,6 +18,16 @@ module PandaPal
16
18
 
17
19
  serialize :settings, Hash
18
20
 
21
+ def encryption_key
22
+ # production environment might not have loaded secret_key_base yet.
23
+ # In that case, just read it from env.
24
+ if (Rails.application.secrets.secret_key_base)
25
+ Rails.application.secrets.secret_key_base[0,32]
26
+ else
27
+ ENV["SECRET_KEY_BASE"][0,32]
28
+ end
29
+ end
30
+
19
31
  private
20
32
 
21
33
  def create_schema
@@ -0,0 +1,13 @@
1
+ class EncryptOrganizationSettings < ActiveRecord::Migration[5.1]
2
+ def up
3
+ rename_column :panda_pal_organizations, :settings, :old_settings
4
+ add_column :panda_pal_organizations, :encrypted_settings, :text
5
+ add_column :panda_pal_organizations, :encrypted_settings_iv, :string
6
+ end
7
+
8
+ def down
9
+ rename_column :panda_pal_organizations, :old_settings, :settings
10
+ remove_column :panda_pal_organizations, :encrypted_settings
11
+ remove_column :panda_pal_organizations, :encrypted_settings_iv
12
+ end
13
+ end
@@ -0,0 +1,33 @@
1
+ class RemoveOldOrganizationSettings < ActiveRecord::Migration[5.1]
2
+ def up
3
+ # migrations run for public and local tenants. However, PandaPal::Organization
4
+ # is going to always go to public tenant. So don't do this active record
5
+ # stuff unless we are on the public tenant.
6
+ if current_tenant == 'public'
7
+ #PandaPal::Organization.connection.schema_cache.clear!
8
+ #PandaPal::Organization.reset_column_information
9
+ PandaPal::Organization.find_each do |o|
10
+ # Would like to just be able to do this:
11
+ # o.settings = YAML.load(o.old_settings)
12
+ # o.save!
13
+ # but for some reason that is always making the settings null. Instead we will encrypt the settings manually.
14
+
15
+ iv = SecureRandom.random_bytes(12)
16
+ key = o.encryption_key
17
+ encrypted_settings = PandaPal::Organization.encrypt_settings(YAML.load(o.old_settings), iv: iv, key: key)
18
+ o.update_columns(encrypted_settings_iv: [iv].pack("m"), encrypted_settings: encrypted_settings)
19
+ end
20
+ end
21
+ remove_column :panda_pal_organizations, :old_settings
22
+ end
23
+
24
+ def down
25
+ add_column :panda_pal_organizations, :old_settings, :text
26
+ if current_tenant == 'public'
27
+ PandaPal::Organization.find_each do |o|
28
+ o.old_settings = o.settings.to_yaml
29
+ o.save
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module PandaPal
2
- VERSION = "2.0.5"
2
+ VERSION = "3.0.0"
3
3
  end
data/panda_pal.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_dependency 'apartment', '~> 1.2.0'
21
21
  s.add_dependency 'ims-lti', '~> 2.1.0'
22
22
  s.add_dependency 'browser', '2.5.0'
23
+ s.add_dependency 'attr_encrypted', '~> 3.0.0'
23
24
 
24
25
  s.add_development_dependency 'rspec-rails'
25
26
  s.add_development_dependency 'factory_girl_rails'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda_pal
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Young
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-12-06 00:00:00.000000000 Z
12
+ date: 2017-12-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - '='
82
82
  - !ruby/object:Gem::Version
83
83
  version: 2.5.0
84
+ - !ruby/object:Gem::Dependency
85
+ name: attr_encrypted
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 3.0.0
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 3.0.0
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: rspec-rails
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -151,6 +165,8 @@ files:
151
165
  - db/migrate/20160413135653_create_panda_pal_sessions.rb
152
166
  - db/migrate/20160425130344_add_panda_pal_organization_to_session.rb
153
167
  - db/migrate/20170106165533_add_salesforce_id_to_organizations.rb
168
+ - db/migrate/30171205183457_encrypt_organization_settings.rb
169
+ - db/migrate/30171205194657_remove_old_organization_settings.rb
154
170
  - lib/panda_pal.rb
155
171
  - lib/panda_pal/engine.rb
156
172
  - lib/panda_pal/helpers.rb