From 84e879bad0fbf088f5f64edfe5384657f979e543 Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Sun, 17 Sep 2023 09:27:41 +0300 Subject: [PATCH] fix email typos --- Gemfile | 1 + Gemfile.lock | 2 ++ app/controllers/start_form_controller.rb | 4 +++- app/models/user.rb | 2 +- app/views/devise/registrations/new.html.erb | 2 +- lib/submissions.rb | 14 +++++++++++--- 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 471e5b9b..63efe6c7 100644 --- a/Gemfile +++ b/Gemfile @@ -11,6 +11,7 @@ gem 'cancancan' gem 'devise' gem 'devise-two-factor' gem 'dotenv', require: false +gem 'email_typo' gem 'faraday' gem 'google-cloud-storage', require: false gem 'hexapdf' diff --git a/Gemfile.lock b/Gemfile.lock index 8deb63e3..d07463b2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -158,6 +158,7 @@ GEM rake (>= 12.0.0, < 14.0.0) docile (1.4.0) dotenv (2.8.1) + email_typo (0.2.3) erb_lint (0.4.0) activesupport better_html (>= 2.0.1) @@ -574,6 +575,7 @@ DEPENDENCIES devise devise-two-factor dotenv + email_typo erb_lint factory_bot_rails faker diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index beebfd39..8e8d27d6 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -47,7 +47,9 @@ class StartFormController < ApplicationController private def submitter_params - params.require(:submitter).permit(:email) + params.require(:submitter).permit(:email).tap do |attrs| + attrs[:email] = Submissions.normalize_email(attrs[:email]) + end end def load_template diff --git a/app/models/user.rb b/app/models/user.rb index 9470107a..ca73b30e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -47,7 +47,7 @@ class User < ApplicationRecord ADMIN_ROLE = 'admin' ].freeze - EMAIL_REGEXP = /[^@,\s]+@[^@,\s]+/ + EMAIL_REGEXP = /[^@;,<>\s]+@[^@;,<>\s]+/ belongs_to :account has_one :access_token, dependent: :destroy diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index e89ed2ad..ca60bd9f 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -21,7 +21,7 @@ <%= f.fields_for resource do |ff| %>
<%= ff.label :email, class: 'label' %> - <%= ff.email_field :email, required: true, class: 'base-input' %> + <%= ff.email_field :email, value: EmailTypo.call(resource.email), required: true, class: 'base-input' %>
<% end %> <%= f.fields_for resource.account do |ff| %> diff --git a/lib/submissions.rb b/lib/submissions.rb index 1403aebc..1e713c0c 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -32,7 +32,7 @@ module Submissions emails.map do |email| submission = template.submissions.new(created_by_user: user, source:, template_submitters: template.submitters) - submission.submitters.new(email:, + submission.submitters.new(email: normalize_email(email), uuid: template.submitters.first['uuid'], sent_at: mark_as_sent ? Time.current : nil) @@ -55,12 +55,13 @@ module Submissions next if uuid.blank? is_order_sent = submitters_order == 'random' || index.zero? + email = normalize_email(submitter_attrs[:email]) submission.submitters.new( - email: submitter_attrs[:email], + email:, phone: submitter_attrs[:phone].to_s.gsub(/[^0-9+]/, ''), name: submitter_attrs[:name], - sent_at: mark_as_sent && submitter_attrs[:email].present? && is_order_sent ? Time.current : nil, + sent_at: mark_as_sent && email.present? && is_order_sent ? Time.current : nil, values: submitter_attrs[:values] || {}, uuid: ) @@ -81,4 +82,11 @@ module Submissions end end end + + def normalize_email(email) + return if email.blank? + return email.downcase if email.to_s.include?(',') + + EmailTypo.call(email.delete_prefix('<')) + end end