From 442dbf6d4b1b50f9eccaeb5a62506c55daa0fc36 Mon Sep 17 00:00:00 2001 From: Brett Walker Date: Mon, 18 Sep 2017 14:50:32 +0200 Subject: [PATCH] when user verifies a secondary email, revalidate GPG signatures --- app/models/email.rb | 7 +++++++ spec/models/email_spec.rb | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/app/models/email.rb b/app/models/email.rb index 6254d66cad9..085663a4fef 100644 --- a/app/models/email.rb +++ b/app/models/email.rb @@ -7,6 +7,8 @@ class Email < ActiveRecord::Base validates :email, presence: true, uniqueness: true, email: true validate :unique_email, if: ->(email) { email.email_changed? } + after_commit :update_invalid_gpg_signatures, if: -> { previous_changes.key?('confirmed_at') } + devise :confirmable self.reconfirmable = false # currently email can't be changed, no need to reconfirm @@ -17,4 +19,9 @@ class Email < ActiveRecord::Base def unique_email self.errors.add(:email, 'has already been taken') if User.exists?(email: self.email) end + + # once email is confirmed, update the gpg signatures + def update_invalid_gpg_signatures + user.update_invalid_gpg_signatures if confirmed? + end end diff --git a/spec/models/email_spec.rb b/spec/models/email_spec.rb index 1d6fabe48b1..8fca9db37ca 100644 --- a/spec/models/email_spec.rb +++ b/spec/models/email_spec.rb @@ -11,4 +11,21 @@ describe Email do expect(described_class.new(email: ' inFO@exAMPLe.com ').email) .to eq 'info@example.com' end + + describe '#update_invalid_gpg_signatures' do + let(:user) do + create(:user, email: 'tula.torphy@abshire.ca').tap do |user| + user.skip_reconfirmation! + end + end + let(:user) { create(:user) } + + it 'synchronizes the gpg keys when the email is updated' do + email = user.emails.create(email: 'new@email.com') + expect(user).to receive(:update_invalid_gpg_signatures) + email.confirm + # email.save + end + end + end