diff --git a/app/services/active_storage_key_converter.rb b/app/services/active_storage_key_converter.rb deleted file mode 100644 index 1e5c643e328cc54510e92b9371cac0dfd84b42d8..0000000000000000000000000000000000000000 --- a/app/services/active_storage_key_converter.rb +++ /dev/null @@ -1,19 +0,0 @@ -class ActiveStorageKeyConverter - def self.convert(legacy_signed_id) - # Try to find blob with the un-modified legacy_signed_id - blob = ActiveStorage::Blob.find_signed!(legacy_signed_id) - legacy_signed_id - rescue ActiveSupport::MessageVerifier::InvalidSignature - # - key_generator = ActiveSupport::KeyGenerator.new( - Rails.application.secrets.secret_key_base, - iterations: 1000, - hash_digest_class: OpenSSL::Digest::SHA1 - ) - key_generator = ActiveSupport::CachingKeyGenerator.new(key_generator) - secret = key_generator.generate_key("ActiveStorage") - verifier = ActiveSupport::MessageVerifier.new(secret) - - ActiveStorage::Blob.find_by_id(verifier.verify(legacy_signed_id, purpose: :blob_id)).try(:signed_id) - end -end diff --git a/app/services/blocks_migration.rb b/app/services/blocks_migration.rb deleted file mode 100644 index 95dfcf0327d181c8d9dbcb35dcba66c8bb0d1eb4..0000000000000000000000000000000000000000 --- a/app/services/blocks_migration.rb +++ /dev/null @@ -1,30 +0,0 @@ -class BlocksMigration - - def self.cleanup - Communication::Block.all.find_each { |block| - self.crawl(block.data) - block.save - } - end - - protected - - def self.crawl(enumerable) - case enumerable - when Array - enumerable.each do |item| - crawl(item) if [Array, Hash].include?(item.class) - end - when Hash - enumerable.keys.each do |key| - if key == "signed_id" - # Convert value - enumerable[key] = ActiveStorageKeyConverter.convert(enumerable[key]) if key == "signed_id" - elsif [Array, Hash].include?(enumerable[key].class) - crawl(enumerable[key]) - end - end - end - end - -end \ No newline at end of file diff --git a/db/migrate/20230106132654_migrate_to_rails7_sha256_signature.rb b/db/migrate/20230106132654_migrate_to_rails7_sha256_signature.rb new file mode 100644 index 0000000000000000000000000000000000000000..e71709a48d4588da84b00a853d899af2b4c6ca51 --- /dev/null +++ b/db/migrate/20230106132654_migrate_to_rails7_sha256_signature.rb @@ -0,0 +1,48 @@ +class MigrateToRails7Sha256Signature < ActiveRecord::Migration[7.0] + def up + Communication::Block.all.find_each { |block| + crawl(block.data) + block.save + } + end + + protected + + def crawl(enumerable) + case enumerable + when Array + enumerable.each do |item| + crawl(item) if [Array, Hash].include?(item.class) + end + when Hash + enumerable.keys.each do |key| + if key == "signed_id" + # Convert value + enumerable[key] = convert(enumerable[key]) if key == "signed_id" + elsif [Array, Hash].include?(enumerable[key].class) + crawl(enumerable[key]) + end + end + end + end + + def convert(legacy_signed_id) + begin + # Try to find blob with the un-modified legacy_signed_id + blob = ActiveStorage::Blob.find_signed!(legacy_signed_id) + legacy_signed_id + rescue ActiveSupport::MessageVerifier::InvalidSignature + # + key_generator = ActiveSupport::KeyGenerator.new( + Rails.application.secrets.secret_key_base, + iterations: 1000, + hash_digest_class: OpenSSL::Digest::SHA1 + ) + key_generator = ActiveSupport::CachingKeyGenerator.new(key_generator) + secret = key_generator.generate_key("ActiveStorage") + verifier = ActiveSupport::MessageVerifier.new(secret) + + ActiveStorage::Blob.find_by_id(verifier.verify(legacy_signed_id, purpose: :blob_id)).try(:signed_id) + end + end +end