diff --git a/app/models/concerns/email_checkable.rb b/app/models/concerns/email_checkable.rb index 3edb9614d..5c82a0f9a 100644 --- a/app/models/concerns/email_checkable.rb +++ b/app/models/concerns/email_checkable.rb @@ -3,12 +3,14 @@ module Concerns extend ActiveSupport::Concern def email_verification - EmailAddressVerification.find_or_create_by(email: self.email) + EmailAddressVerification.find_or_create_by(email: self.email, + domain: Mail::Address.new(self.email).domain) end def billing_email_verification if self.attribute_names.include?('billing_email') - EmailAddressVerification.find_or_create_by(email: self.billing_email) + EmailAddressVerification.find_or_create_by(email: self.billing_email, + domain: Mail::Address.new(self.email).domain) else nil end @@ -23,8 +25,6 @@ module Concerns end def correct_billing_email_format - return if self[:billing_email].blank? - verify_email_mx_smtp(field: :billing_email, email: billing_email) end end diff --git a/app/models/email_address_verification.rb b/app/models/email_address_verification.rb index 8afc74a78..edcdbaa35 100644 --- a/app/models/email_address_verification.rb +++ b/app/models/email_address_verification.rb @@ -10,6 +10,11 @@ class EmailAddressVerification < ApplicationRecord def verify validation_request = Truemail.validate(email) - update(verified_at: Time.zone.now) if validation_request.result.success + if validation_request.result.success + update(verified_at: Time.zone.now, + success: true) + end + + validation_request.result.success end end diff --git a/db/data/20200608084321_fill_email_verifications.rb b/db/data/20200608084321_fill_email_verifications.rb new file mode 100644 index 000000000..f12381b3c --- /dev/null +++ b/db/data/20200608084321_fill_email_verifications.rb @@ -0,0 +1,19 @@ +class FillEmailVerifications < ActiveRecord::Migration[6.0] + def up + registrar_billing_emails = Registrar.pluck(:billing_email).uniq.reject(&:blank?) + registrar_emails = Registrar.pluck(:email).uniq.reject(&:blank?) + contact_emails = Contact.pluck(:email).uniq.reject(&:blank?) + + emails = (contact_emails || registrar_emails || registrar_billing_emails).uniq + + result = emails.map do |email| + { email: email, domain: Mail::Address.new(email).domain || 'not_found' } + end + + EmailAddressVerification.import result, batch_size: 500 + end + + def down + EmailAddressVerification.delete_all + end +end diff --git a/db/structure.sql b/db/structure.sql index e6e736328..c5ad902b7 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -4068,161 +4068,6 @@ CREATE UNIQUE INDEX unique_data_migrations ON public.data_migrations USING btree CREATE UNIQUE INDEX unique_schema_migrations ON public.schema_migrations USING btree (version); - --- --- Name: account_activities process_account_activity_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_account_activity_audit AFTER INSERT OR DELETE OR UPDATE ON public.account_activities FOR EACH ROW EXECUTE PROCEDURE public.process_account_activity_audit(); - - --- --- Name: accounts process_account_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_account_audit AFTER INSERT OR DELETE OR UPDATE ON public.accounts FOR EACH ROW EXECUTE PROCEDURE public.process_account_audit(); - - --- --- Name: actions process_action_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_action_audit AFTER INSERT OR DELETE OR UPDATE ON public.actions FOR EACH ROW EXECUTE PROCEDURE public.process_action_audit(); - - --- --- Name: bank_statements process_bank_statement_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_bank_statement_audit AFTER INSERT OR DELETE OR UPDATE ON public.bank_statements FOR EACH ROW EXECUTE PROCEDURE public.process_bank_statement_audit(); - - --- --- Name: bank_transactions process_bank_transaction_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_bank_transaction_audit AFTER INSERT OR DELETE OR UPDATE ON public.bank_transactions FOR EACH ROW EXECUTE PROCEDURE public.process_bank_transaction_audit(); - - --- --- Name: blocked_domains process_blocked_domain_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_blocked_domain_audit AFTER INSERT OR DELETE OR UPDATE ON public.blocked_domains FOR EACH ROW EXECUTE PROCEDURE public.process_blocked_domain_audit(); - - --- --- Name: certificates process_certificate_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_certificate_audit AFTER INSERT OR DELETE OR UPDATE ON public.certificates FOR EACH ROW EXECUTE PROCEDURE public.process_certificate_audit(); - - --- --- Name: contacts process_contact_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_contact_audit AFTER INSERT OR DELETE OR UPDATE ON public.contacts FOR EACH ROW EXECUTE PROCEDURE public.process_contact_audit(); - - --- --- Name: dnskeys process_dnskey_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_dnskey_audit AFTER INSERT OR DELETE OR UPDATE ON public.dnskeys FOR EACH ROW EXECUTE PROCEDURE public.process_dnskey_audit(); - - --- --- Name: domains process_domain_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_domain_audit AFTER INSERT OR DELETE OR UPDATE ON public.domains FOR EACH ROW EXECUTE PROCEDURE public.process_domain_audit(); - - --- --- Name: domain_contacts process_domain_contact_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_domain_contact_audit AFTER INSERT OR DELETE OR UPDATE ON public.domain_contacts FOR EACH ROW EXECUTE PROCEDURE public.process_domain_contact_audit(); - - --- --- Name: invoices process_invoice_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_invoice_audit AFTER INSERT OR DELETE OR UPDATE ON public.invoices FOR EACH ROW EXECUTE PROCEDURE public.process_invoice_audit(); - - --- --- Name: invoice_items process_invoice_item_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_invoice_item_audit AFTER INSERT OR DELETE OR UPDATE ON public.invoice_items FOR EACH ROW EXECUTE PROCEDURE public.process_invoice_item_audit(); - - --- --- Name: nameservers process_nameserver_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_nameserver_audit AFTER INSERT OR DELETE OR UPDATE ON public.nameservers FOR EACH ROW EXECUTE PROCEDURE public.process_nameserver_audit(); - - --- --- Name: notifications process_notification_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_notification_audit AFTER INSERT OR DELETE OR UPDATE ON public.notifications FOR EACH ROW EXECUTE PROCEDURE public.process_notification_audit(); - - --- --- Name: payment_orders process_payment_order_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_payment_order_audit AFTER INSERT OR DELETE OR UPDATE ON public.payment_orders FOR EACH ROW EXECUTE PROCEDURE public.process_payment_order_audit(); - - --- --- Name: registrant_verifications process_registrant_verification_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_registrant_verification_audit AFTER INSERT OR DELETE OR UPDATE ON public.registrant_verifications FOR EACH ROW EXECUTE PROCEDURE public.process_registrant_verification_audit(); - - --- --- Name: registrars process_registrar_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_registrar_audit AFTER INSERT OR DELETE OR UPDATE ON public.registrars FOR EACH ROW EXECUTE PROCEDURE public.process_registrar_audit(); - - --- --- Name: reserved_domains process_reserved_domain_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_reserved_domain_audit AFTER INSERT OR DELETE OR UPDATE ON public.reserved_domains FOR EACH ROW EXECUTE PROCEDURE public.process_reserved_domain_audit(); - - --- --- Name: settings process_setting_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_setting_audit AFTER INSERT OR DELETE OR UPDATE ON public.settings FOR EACH ROW EXECUTE PROCEDURE public.process_setting_audit(); - - --- --- Name: users process_user_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_user_audit AFTER INSERT OR DELETE OR UPDATE ON public.users FOR EACH ROW EXECUTE PROCEDURE public.process_user_audit(); - - --- --- Name: white_ips process_white_ip_audit; Type: TRIGGER; Schema: public; Owner: - --- - -CREATE TRIGGER process_white_ip_audit AFTER INSERT OR DELETE OR UPDATE ON public.white_ips FOR EACH ROW EXECUTE PROCEDURE public.process_white_ip_audit(); - - -- -- Name: contacts contacts_registrar_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: - --