diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 33257be89..21300338f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -99,6 +99,10 @@ class ApplicationController < ActionController::Base I18n.with_locale(locale, &) end + def lang + params[:lang].presence + end + def with_browser_locale(&) return yield if I18n.locale != :'en-US' && I18n.locale != :en diff --git a/app/controllers/start_form_controller.rb b/app/controllers/start_form_controller.rb index 86471d381..4431c3073 100644 --- a/app/controllers/start_form_controller.rb +++ b/app/controllers/start_form_controller.rb @@ -34,7 +34,7 @@ class StartFormController < ApplicationController @submitter = find_or_initialize_submitter(@template, submitter_params) if @submitter.completed_at? - redirect_to start_form_completed_path(@template.slug, submitter_params.compact_blank) + redirect_to start_form_completed_path(@template.slug, submitter_params.compact_blank.merge(lang:)) else if Templates.filter_undefined_submitters(@template.submitters).size > 1 && @submitter.new_record? @error_message = multiple_submitters_error_message @@ -59,7 +59,7 @@ class StartFormController < ApplicationController Submitters::StartForm.assign_start_form_cookie(@submitter, request) - redirect_to submit_form_path(@submitter.slug) + redirect_to submit_form_path(@submitter.slug, lang:) else render :show, status: :unprocessable_content end @@ -150,7 +150,7 @@ class StartFormController < ApplicationController return render :show, status: :unprocessable_content if submitter.errors.present? if Submitters::StartForm.verify_2fa_and_save_submitter(submitter, request, is_new_record: submitter.new_record?) - redirect_to submit_form_path(submitter.slug) + redirect_to submit_form_path(submitter.slug, lang:) else if defined?(Rollbar) && template.preferences['shared_link_2fa'] != true Rollbar.info("2FA link requested: #{submitter.id}") @@ -167,10 +167,10 @@ class StartFormController < ApplicationController render :error, status: :unprocessable_content rescue Submitters::UnableToSendCode, Submitters::InvalidOtp => e - redirect_to start_form_path(template.slug, params: submitter_params.merge(email_verification: true)), + redirect_to start_form_path(template.slug, lang:, params: submitter_params.merge(email_verification: true)), alert: e.message rescue RateLimit::LimitApproached - redirect_to start_form_path(template.slug, params: submitter_params.merge(email_verification: true)), + redirect_to start_form_path(template.slug, lang:, params: submitter_params.merge(email_verification: true)), alert: I18n.t(:too_many_attempts) end end diff --git a/app/controllers/start_form_email_2fa_send_controller.rb b/app/controllers/start_form_email_2fa_send_controller.rb index 0787ab468..389baa59a 100644 --- a/app/controllers/start_form_email_2fa_send_controller.rb +++ b/app/controllers/start_form_email_2fa_send_controller.rb @@ -16,21 +16,21 @@ class StartFormEmail2faSendController < ApplicationController .submitters.new(**submitter_params, account_id: @template.account_id) if @submitter.email.blank? - return redirect_to start_form_path(@template.slug), alert: I18n.t(:provide_your_email_to_start) + return redirect_to start_form_path(@template.slug, lang:), alert: I18n.t(:provide_your_email_to_start) end Submitters.send_shared_link_email_verification_code(@submitter, request:) redir_params = { notice: I18n.t(:code_has_been_resent) } if params[:resend] - redirect_to start_form_path(@template.slug, params: submitter_params.merge(email_verification: true)), + redirect_to start_form_path(@template.slug, lang:, params: submitter_params.merge(email_verification: true)), **redir_params rescue Submitters::BouncedEmail => e @error_message = e.message render 'start_form/error', status: :unprocessable_content rescue Submitters::UnableToSendCode => e - redirect_to start_form_path(@template.slug, params: submitter_params.merge(email_verification: true)), + redirect_to start_form_path(@template.slug, lang:, params: submitter_params.merge(email_verification: true)), alert: e.message end diff --git a/app/controllers/submit_form_controller.rb b/app/controllers/submit_form_controller.rb index 2f3ab0cb2..06eb475ec 100644 --- a/app/controllers/submit_form_controller.rb +++ b/app/controllers/submit_form_controller.rb @@ -20,7 +20,7 @@ class SubmitFormController < ApplicationController return render :email_2fa unless Submitters::AuthorizedForForm.pass_email_2fa?(@submitter, request) if @submitter.completed_at? || submission.completed_at? - return redirect_to submit_form_completed_path(@submitter.slug) + return redirect_to submit_form_completed_path(@submitter.slug, lang:) end @form_configs = Submitters::FormConfigs.call(@submitter, CONFIG_KEYS) @@ -96,7 +96,7 @@ class SubmitFormController < ApplicationController return if Submitters::AuthorizedForForm.call(@submitter, current_user, request) - redirect_to submit_form_path(params[:submit_form_slug]) + redirect_to submit_form_path(params[:submit_form_slug], lang:) end def success; end @@ -114,7 +114,7 @@ class SubmitFormController < ApplicationController def maybe_require_link_2fa return if Submitters::AuthorizedForForm.pass_link_2fa?(@submitter, current_user, request) - redirect_to start_form_path(@submitter.submission.template.slug) + redirect_to start_form_path(@submitter.submission.template.slug, lang:) end def maybe_render_locked_page diff --git a/app/controllers/submit_form_email_2fas_controller.rb b/app/controllers/submit_form_email_2fas_controller.rb index 6f95e7544..6c6ad52eb 100644 --- a/app/controllers/submit_form_email_2fas_controller.rb +++ b/app/controllers/submit_form_email_2fas_controller.rb @@ -20,17 +20,17 @@ class SubmitFormEmail2fasController < ApplicationController { value: @submitter.slug, expires: Submitters::StartForm::COOKIES_TTL.from_now, **Submitters::StartForm::COOKIES_DEFAULTS } - redirect_to submit_form_path(@submitter.slug) + redirect_to submit_form_path(@submitter.slug, lang:) else - redirect_to submit_form_path(@submitter.slug, status: :error), alert: I18n.t(:invalid_code) + redirect_to submit_form_path(@submitter.slug, status: :error, lang:), alert: I18n.t(:invalid_code) end rescue RateLimit::LimitApproached - redirect_to submit_form_path(@submitter.slug, status: :error), alert: I18n.t(:too_many_attempts) + redirect_to submit_form_path(@submitter.slug, status: :error, lang:), alert: I18n.t(:too_many_attempts) end def update if @submitter.submission_events.where(event_type: 'send_2fa_email').exists?(created_at: 15.seconds.ago..) - return redirect_to submit_form_path(@submitter.slug, status: :error), alert: I18n.t(:rate_limit_exceeded) + return redirect_to submit_form_path(@submitter.slug, status: :error, lang:), alert: I18n.t(:rate_limit_exceeded) end RateLimit.call("send-email-code-#{@submitter.id}", limit: 2, ttl: 45.seconds, enabled: true) @@ -38,16 +38,17 @@ class SubmitFormEmail2fasController < ApplicationController if Docuseal.multitenant? && Submitters.email_bounced_recently?(@submitter.email) Rollbar.warning("Bounced OTP email for submitter: #{@submitter.id}") if defined?(Rollbar) - return redirect_to submit_form_path(@submitter.slug, status: :error), alert: I18n.t(:verification_email_bounced) + return redirect_to submit_form_path(@submitter.slug, status: :error, lang:), + alert: I18n.t(:verification_email_bounced) end SendSubmitterVerificationEmailJob.perform_async('submitter_id' => @submitter.id, 'locale' => I18n.locale.to_s) redir_params = params[:resend] ? { alert: I18n.t(:code_has_been_resent) } : {} - redirect_to submit_form_path(@submitter.slug, status: :sent), **redir_params + redirect_to submit_form_path(@submitter.slug, status: :sent, lang:), **redir_params rescue RateLimit::LimitApproached - redirect_to submit_form_path(@submitter.slug, status: :error), alert: I18n.t(:too_many_attempts) + redirect_to submit_form_path(@submitter.slug, status: :error, lang:), alert: I18n.t(:too_many_attempts) end def load_submitter diff --git a/app/views/start_form/email_verification.html.erb b/app/views/start_form/email_verification.html.erb index 383d8c9f6..8bf7db481 100644 --- a/app/views/start_form/email_verification.html.erb +++ b/app/views/start_form/email_verification.html.erb @@ -23,7 +23,7 @@