mirror of
https://github.com/docusealco/docuseal
synced 2026-11-13 15:52:32 -05:00
adjust resubmit
This commit is contained in:
1 parent
91ec29ad2c
commit
6d38c9f375
3 files changed
+34
-27
No files matched your search
@@ -52,8 +52,8 @@ class StartFormController < ApplicationController
|
|||||||
@submitter.assign_attributes(ip: request.remote_ip, ua: request.user_agent)
|
@submitter.assign_attributes(ip: request.remote_ip, ua: request.user_agent)
|
||||||
end
|
end
|
||||||
|
|
||||||
if require_link_2fa?(@submitter, is_new_record:)
|
if require_link_2fa?(@template, @submitter)
|
||||||
handle_require_2fa(@submitter, is_new_record:)
|
handle_require_2fa(@template, @submitter)
|
||||||
elsif @submitter.errors.blank? && @submitter.save
|
elsif @submitter.errors.blank? && @submitter.save
|
||||||
Submitters::StartForm.enqueue_new_submitter_jobs(@submitter) if is_new_record
|
Submitters::StartForm.enqueue_new_submitter_jobs(@submitter) if is_new_record
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ class StartFormController < ApplicationController
|
|||||||
else
|
else
|
||||||
Submitters::StartForm.find_or_initialize_submitter(
|
Submitters::StartForm.find_or_initialize_submitter(
|
||||||
template, submitter_params, exclude_completed: params[:resubmit].present?,
|
template, submitter_params, exclude_completed: params[:resubmit].present?,
|
||||||
request:, current_user:, ability: current_user && current_ability
|
request:, current_user:
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -107,11 +107,13 @@ class StartFormController < ApplicationController
|
|||||||
submitter
|
submitter
|
||||||
end
|
end
|
||||||
|
|
||||||
def require_link_2fa?(submitter, is_new_record:)
|
def require_link_2fa?(template, submitter)
|
||||||
return true if @template.preferences['shared_link_2fa'] == true
|
return true if template.preferences['shared_link_2fa'] == true
|
||||||
return false if cookies.encrypted[:start_form_slug] == submitter.slug
|
return false if cookies.encrypted[:start_form_slug] == submitter.slug
|
||||||
|
return false if current_user && submitter.email == current_user.email &&
|
||||||
|
current_user.account_id == submitter.account_id
|
||||||
|
|
||||||
!is_new_record && (current_user&.email != submitter.email || !current_ability.can?(:read, submitter))
|
!submitter.new_record?
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorize_start!
|
def authorize_start!
|
||||||
@@ -144,13 +146,13 @@ class StartFormController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_require_2fa(submitter, is_new_record:)
|
def handle_require_2fa(template, submitter)
|
||||||
return render :show, status: :unprocessable_content if submitter.errors.present?
|
return render :show, status: :unprocessable_content if submitter.errors.present?
|
||||||
|
|
||||||
if Submitters::StartForm.verify_2fa_and_save_submitter(submitter, request, is_new_record:)
|
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)
|
||||||
else
|
else
|
||||||
if defined?(Rollbar) && submitter.submission.template.preferences['shared_link_2fa'] != true
|
if defined?(Rollbar) && template.preferences['shared_link_2fa'] != true
|
||||||
Rollbar.info("2FA link requested: #{submitter.id}")
|
Rollbar.info("2FA link requested: #{submitter.id}")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -161,10 +163,10 @@ class StartFormController < ApplicationController
|
|||||||
rescue Submitters::StartForm::NotSaved
|
rescue Submitters::StartForm::NotSaved
|
||||||
render :show, status: :unprocessable_content
|
render :show, status: :unprocessable_content
|
||||||
rescue Submitters::UnableToSendCode, Submitters::InvalidOtp => e
|
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, params: submitter_params.merge(email_verification: true)),
|
||||||
alert: e.message
|
alert: e.message
|
||||||
rescue RateLimit::LimitApproached
|
rescue RateLimit::LimitApproached
|
||||||
redirect_to start_form_path(@template.slug, params: submitter_params.merge(email_verification: true)),
|
redirect_to start_form_path(template.slug, params: submitter_params.merge(email_verification: true)),
|
||||||
alert: I18n.t(:too_many_attempts)
|
alert: I18n.t(:too_many_attempts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -12,9 +12,7 @@ class StartFormResubmitController < ApplicationController
|
|||||||
before_action :authorize_start!
|
before_action :authorize_start!
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@submitter = Submitters::StartForm.find_or_initialize_submitter(
|
@submitter = find_or_initialize_submitter(@template, @resubmit_submitter)
|
||||||
@template, submitter_params, exclude_completed: true, request:
|
|
||||||
)
|
|
||||||
|
|
||||||
if Templates.filter_undefined_submitters(@template.submitters).size > 1 && @submitter.new_record?
|
if Templates.filter_undefined_submitters(@template.submitters).size > 1 && @submitter.new_record?
|
||||||
@error_message = multiple_submitters_error_message
|
@error_message = multiple_submitters_error_message
|
||||||
@@ -34,7 +32,7 @@ class StartFormResubmitController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
if @template.preferences['shared_link_2fa'] == true
|
if @template.preferences['shared_link_2fa'] == true
|
||||||
handle_require_2fa(@submitter, is_new_record:)
|
handle_require_2fa(@submitter)
|
||||||
elsif @submitter.save
|
elsif @submitter.save
|
||||||
Submitters::StartForm.enqueue_new_submitter_jobs(@submitter) if is_new_record
|
Submitters::StartForm.enqueue_new_submitter_jobs(@submitter) if is_new_record
|
||||||
|
|
||||||
@@ -48,6 +46,12 @@ class StartFormResubmitController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def find_or_initialize_submitter(template, resubmit_submitter)
|
||||||
|
Submitters::StartForm.build_submitters_scope(template, exclude_completed: true)
|
||||||
|
.find_by(slug: cookies.encrypted[:start_form_slug],
|
||||||
|
email: resubmit_submitter.email) || Submitter.new
|
||||||
|
end
|
||||||
|
|
||||||
def load_resubmit_submitter
|
def load_resubmit_submitter
|
||||||
@resubmit_submitter = Submitter.find_by(slug: params[:resubmit])
|
@resubmit_submitter = Submitter.find_by(slug: params[:resubmit])
|
||||||
|
|
||||||
@@ -63,10 +67,6 @@ class StartFormResubmitController < ApplicationController
|
|||||||
redirect_to submit_form_path(@resubmit_submitter.slug) if @template.archived_at? || @template.account.archived_at?
|
redirect_to submit_form_path(@resubmit_submitter.slug) if @template.archived_at? || @template.account.archived_at?
|
||||||
end
|
end
|
||||||
|
|
||||||
def submitter_params
|
|
||||||
@resubmit_submitter.slice(:name, :phone, :email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def multiple_submitters_error_message
|
def multiple_submitters_error_message
|
||||||
if current_user&.account_id == @template.account_id
|
if current_user&.account_id == @template.account_id
|
||||||
helpers.t('this_submission_has_multiple_signers_which_prevents_the_use_of_a_sharing_link_html')
|
helpers.t('this_submission_has_multiple_signers_which_prevents_the_use_of_a_sharing_link_html')
|
||||||
@@ -75,8 +75,9 @@ class StartFormResubmitController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_require_2fa(submitter, is_new_record:)
|
def handle_require_2fa(submitter)
|
||||||
if Submitters::StartForm.verify_2fa_and_save_submitter(submitter, request, is_new_record:)
|
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)
|
||||||
else
|
else
|
||||||
Submitters.send_shared_link_email_verification_code(submitter, request:)
|
Submitters.send_shared_link_email_verification_code(submitter, request:)
|
||||||
|
|||||||
@@ -17,13 +17,18 @@ module Submitters
|
|||||||
submitter.account.account_configs.find_or_initialize_by(key: AccountConfig::ALLOW_TO_RESUBMIT).value != false
|
submitter.account.account_configs.find_or_initialize_by(key: AccountConfig::ALLOW_TO_RESUBMIT).value != false
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_reopen?(template, submitter, request:, current_user:, ability:)
|
def can_reopen?(template, submitter, request:, current_user:)
|
||||||
return false if submitter.submission&.completed_at? && submitter.viewer?
|
return false if submitter.submission&.completed_at? && submitter.viewer?
|
||||||
return true if request.cookie_jar.encrypted[:start_form_slug] == submitter.slug
|
return true if request.cookie_jar.encrypted[:start_form_slug] == submitter.slug
|
||||||
|
return true if request.cookie_jar.encrypted[:email_2fa_slug] == submitter.slug
|
||||||
return false if submitter.email.blank?
|
return false if submitter.email.blank?
|
||||||
return true if submitter.completed_at? || Docuseal.multitenant?
|
return true if submitter.completed_at?
|
||||||
return true if current_user&.email == submitter.email && ability.can?(:read, submitter)
|
return false if submitter.submission.source_embed?
|
||||||
return true if template.preferences['shared_link_2fa'] == true
|
return true if template.preferences['shared_link_2fa'] == true
|
||||||
|
return false if submitter.submission.source_link?
|
||||||
|
return true if Docuseal.multitenant?
|
||||||
|
return true if current_user && submitter.email == current_user.email &&
|
||||||
|
current_user.account_id == submitter.account_id
|
||||||
|
|
||||||
Accounts.can_send_emails?(template.account)
|
Accounts.can_send_emails?(template.account)
|
||||||
end
|
end
|
||||||
@@ -33,8 +38,7 @@ module Submitters
|
|||||||
{ value: submitter.slug, expires: START_FORM_COOKIES_TTL.from_now, **COOKIES_DEFAULTS }
|
{ value: submitter.slug, expires: START_FORM_COOKIES_TTL.from_now, **COOKIES_DEFAULTS }
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_or_initialize_submitter(template, submitter_params, exclude_completed:, request:,
|
def find_or_initialize_submitter(template, submitter_params, exclude_completed:, request:, current_user: nil)
|
||||||
current_user: nil, ability: nil)
|
|
||||||
required_fields = template.preferences.fetch('link_form_fields', ['email'])
|
required_fields = template.preferences.fetch('link_form_fields', ['email'])
|
||||||
|
|
||||||
required_params = required_fields.index_with { |key| submitter_params[key] }
|
required_params = required_fields.index_with { |key| submitter_params[key] }
|
||||||
@@ -48,7 +52,7 @@ module Submitters
|
|||||||
build_submitters_scope(template, exclude_completed:).find_or_initialize_by(find_params)
|
build_submitters_scope(template, exclude_completed:).find_or_initialize_by(find_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
if submitter.persisted? && !can_reopen?(template, submitter, request:, current_user:, ability:)
|
if submitter.persisted? && !can_reopen?(template, submitter, request:, current_user:)
|
||||||
submitter = Submitter.new(find_params)
|
submitter = Submitter.new(find_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user