lockbox 1.3.0 → 1.3.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: db8c162439dc5376d1aabf48af3925fd2d7a5129e3902b49b973dce9eda16a77
4
- data.tar.gz: 2e82dc5026e09fdaee0bb1baddabc9b0f8294f38cf613ee09368d62aa39c4ff4
3
+ metadata.gz: abb80e6c644b820a341291fe3aeddf0779c216cf24bd4a3af47e16a204cb8af1
4
+ data.tar.gz: 7c7f698ff608746a2bea81fadcb69251e6ef705a7dae7b1f5d9df87321f959db
5
5
  SHA512:
6
- metadata.gz: e8d6d9a2c4661767c01ab8874f29c3fd705712d4f3d6d153e09b4c7ad6441bb0812d45c6cf526d3a59177ae23c44289b1aa375e462303c17fcb952edd4641a8e
7
- data.tar.gz: 2e5cd80ddca65447f10a666b5568bbdeff449bf6517c944a67f6fdfdd5ff253e7560569133216a5459d1519ad3bb72b5cabd17065240a2aa1091750e21b4c26c
6
+ metadata.gz: 87507b0a931adb08a59c530e73776adb59568560d4cb792e668a3688ede13d7f210015e78e086b2109aed5e577e434f9e0d79c7f86e9cbbb447714e42e8bcad7
7
+ data.tar.gz: 5f078ed8ad8e0b4bed5dacf0d0a01295a34ce994159559aad0bdc2576c5885c979f32174a1cd4cb03e942b6850053c7117acc7e2c630ace333f9178a9fcace80
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.3.1 (2024-01-06)
2
+
3
+ - Fixed error with `array` and `hash` types and no default column serializer with Rails 7.1
4
+ - Fixed Action Text deserialization with Rails 7.1
5
+
1
6
  ## 1.3.0 (2023-07-02)
2
7
 
3
8
  - Added support for CarrierWave 3
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018-2022 Andrew Kane
3
+ Copyright (c) 2018-2024 Andrew Kane
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  Learn [the principles behind it](https://ankane.org/modern-encryption-rails), [how to secure emails with Devise](https://ankane.org/securing-user-emails-lockbox), and [how to secure sensitive data in Rails](https://ankane.org/sensitive-data-rails).
11
11
 
12
- [![Build Status](https://github.com/ankane/lockbox/workflows/build/badge.svg?branch=master)](https://github.com/ankane/lockbox/actions)
12
+ [![Build Status](https://github.com/ankane/lockbox/actions/workflows/build.yml/badge.svg)](https://github.com/ankane/lockbox/actions)
13
13
 
14
14
  ## Installation
15
15
 
@@ -72,7 +72,7 @@ Then follow the instructions below for the data you want to encrypt.
72
72
  Create a migration with:
73
73
 
74
74
  ```ruby
75
- class AddEmailCiphertextToUsers < ActiveRecord::Migration[7.0]
75
+ class AddEmailCiphertextToUsers < ActiveRecord::Migration[7.1]
76
76
  def change
77
77
  add_column :users, :email_ciphertext, :text
78
78
  end
@@ -249,7 +249,7 @@ User.decrypt_email_ciphertext(user.email_ciphertext)
249
249
  Create a migration with:
250
250
 
251
251
  ```ruby
252
- class AddBodyCiphertextToRichTexts < ActiveRecord::Migration[7.0]
252
+ class AddBodyCiphertextToRichTexts < ActiveRecord::Migration[7.1]
253
253
  def change
254
254
  add_column :action_text_rich_texts, :body_ciphertext, :text
255
255
  end
@@ -380,7 +380,7 @@ Encryption is applied to all versions after processing.
380
380
  You can mount the uploader [as normal](https://github.com/carrierwaveuploader/carrierwave#activerecord). With Active Record, this involves creating a migration:
381
381
 
382
382
  ```ruby
383
- class AddLicenseToUsers < ActiveRecord::Migration[7.0]
383
+ class AddLicenseToUsers < ActiveRecord::Migration[7.1]
384
384
  def change
385
385
  add_column :users, :license, :string
386
386
  end
@@ -908,7 +908,7 @@ end
908
908
  You can use `binary` columns for the ciphertext instead of `text` columns.
909
909
 
910
910
  ```ruby
911
- class AddEmailCiphertextToUsers < ActiveRecord::Migration[7.0]
911
+ class AddEmailCiphertextToUsers < ActiveRecord::Migration[7.1]
912
912
  def change
913
913
  add_column :users, :email_ciphertext, :binary
914
914
  end
@@ -959,7 +959,7 @@ end
959
959
  Create a migration with:
960
960
 
961
961
  ```ruby
962
- class MigrateToLockbox < ActiveRecord::Migration[7.0]
962
+ class MigrateToLockbox < ActiveRecord::Migration[7.1]
963
963
  def change
964
964
  add_column :users, :name_ciphertext, :text
965
965
  add_column :users, :email_ciphertext, :text
@@ -992,7 +992,7 @@ end
992
992
  Then remove the previous gem from your Gemfile and drop its columns.
993
993
 
994
994
  ```ruby
995
- class RemovePreviousEncryptedColumns < ActiveRecord::Migration[7.0]
995
+ class RemovePreviousEncryptedColumns < ActiveRecord::Migration[7.1]
996
996
  def change
997
997
  remove_column :users, :encrypted_name, :text
998
998
  remove_column :users, :encrypted_name_iv, :text
data/lib/lockbox/model.rb CHANGED
@@ -324,13 +324,23 @@ module Lockbox
324
324
  attribute name, attribute_type
325
325
 
326
326
  if ActiveRecord::VERSION::STRING.to_f >= 7.1
327
- serialize name, coder: JSON if options[:type] == :json
328
- serialize name, type: Hash if options[:type] == :hash
329
- serialize name, type: Array if options[:type] == :array
327
+ case options[:type]
328
+ when :json
329
+ serialize name, coder: JSON
330
+ when :hash
331
+ serialize name, type: Hash, coder: default_column_serializer || YAML
332
+ when :array
333
+ serialize name, type: Array, coder: default_column_serializer || YAML
334
+ end
330
335
  else
331
- serialize name, JSON if options[:type] == :json
332
- serialize name, Hash if options[:type] == :hash
333
- serialize name, Array if options[:type] == :array
336
+ case options[:type]
337
+ when :json
338
+ serialize name, JSON
339
+ when :hash
340
+ serialize name, Hash
341
+ when :array
342
+ serialize name, Array
343
+ end
334
344
  end
335
345
  elsif !attributes_to_define_after_schema_loads.key?(name.to_s)
336
346
  # when migrating it's best to specify the type directly
@@ -615,6 +625,10 @@ module Lockbox
615
625
  else
616
626
  # use original name for serialized attributes if no type specified
617
627
  type = (try(:attribute_types) || {})[(options[:type] ? name : original_name).to_s]
628
+ # for Action Text
629
+ if activerecord && type.is_a?(ActiveRecord::Type::Serialized) && defined?(ActionText::Content) && type.coder == ActionText::Content
630
+ message.force_encoding(Encoding::UTF_8)
631
+ end
618
632
  message = type.deserialize(message) if type
619
633
  message.force_encoding(Encoding::UTF_8) if !type || type.is_a?(ActiveModel::Type::String)
620
634
  end
@@ -1,3 +1,3 @@
1
1
  module Lockbox
2
- VERSION = "1.3.0"
2
+ VERSION = "1.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lockbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-02 00:00:00.000000000 Z
11
+ date: 2024-01-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: andrew@ankane.org
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  requirements: []
61
- rubygems_version: 3.4.10
61
+ rubygems_version: 3.5.3
62
62
  signing_key:
63
63
  specification_version: 4
64
64
  summary: Modern encryption for Ruby and Rails