* Remove hardcoded instances of education field * WIP Access display_email_on_profile via User Settings * Remove unused profile column * WIP Fix reference to bg_color_hex and text_color_hex * WIP fix issues revealed by systems specs * WIP fix issues revealed by services specs * WIP Fix failing tests * WIP Fix spec failures * wip * Move two attributes from controller to decorator * Update comment * Match user settings changes * More consistently use user.tag_line Even before the profile changes we sometimes used the user.summary attribute directly but used the user.tag_line method in other places. * Remove delegation, rename inline concern * Drop profile columns from users table * Remove duplicated work display from header * Update work profile field handling * Update DUS + spec * Delegate more carefully * Update delegation guard * Adapt for removed delegation * Undo accidental schema changes * Fix seeds * Remove accidentaly change * Fix User#processed_website_url * Update guard clause * Update profile card content * Add Organization#profile * Be more conservative with profile fields * Spec fixes round 1 * Fix typo * Update spec * Limit number of header fields and update card content * Decorate correct model * Update factory * Update schema.rb * Fix validation * How bad could this possibly be? * Pretty bad, nevermind * Remove obsolete code * Reset profile fields during test runs * Move profile fields back to before(:suite) * Spec fixes * Remove accidentally re-added files * More spec fixes * Specs * Change User#tag_keywords_for_search * More spec fixes * Add comment * Undo accidental schema changes * Attempt spec fix * Remove fix attempt * Fix e2e test * Update spec * Remove guard clause * Remove hardcoded instances of education field * WIP Access display_email_on_profile via User Settings * Remove unused profile column * WIP fix issues revealed by systems specs * WIP fix issues revealed by services specs * WIP Fix failing tests * WIP Fix spec failures * wip * Move two attributes from controller to decorator * Update comment * More consistently use user.tag_line Even before the profile changes we sometimes used the user.summary attribute directly but used the user.tag_line method in other places. * Remove education * Add comment * WIP * Clean up mostly_work_with * WIP * Update work profile field handling * More work-related changes * Remove settings_only from display_area enum * Remove quickfix from _metadata partial * Remove special attributes * Remove leftover spec * Retrieve location from profile, not user * Profile.special_attributes no longer exists * Update specs * More spec fixes * Update UsersController * Update UsersController and spec * Fix e2e seeds * Minor cleanup * More e2e seed fixes * Fix profile field CSV * Fix e2e seeds * Move one more attribute in e2e seeds * Remove duplicate line * Clear inputs before typing in them * Fix formatting issues * Profiles::Update -> Users::Update * Remove RegistrationsController#resolve_profile_field_issues * Fix schema.rb * More cleanup * Fix specs * Fix remaining spec Co-authored-by: Jacob Herrington <jacobherringtondeveloper@gmail.com>
76 lines
2.2 KiB
Ruby
76 lines
2.2 KiB
Ruby
class RegistrationsController < Devise::RegistrationsController
|
|
prepend_before_action :require_no_authentication, only: []
|
|
|
|
def new
|
|
return redirect_to root_path(signin: "true") if user_signed_in?
|
|
|
|
if URI(request.referer || "").host == URI(request.base_url).host
|
|
store_location_for(:user, request.referer)
|
|
end
|
|
|
|
super
|
|
end
|
|
|
|
def create
|
|
authorize(params, policy_class: RegistrationPolicy)
|
|
|
|
unless recaptcha_verified?
|
|
flash[:notice] = "You must complete the recaptcha ✅"
|
|
return redirect_to new_user_registration_path(state: "email_signup")
|
|
end
|
|
|
|
build_devise_resource
|
|
|
|
if resource.persisted?
|
|
update_first_user_permissions(resource)
|
|
|
|
if ForemInstance.smtp_enabled?
|
|
redirect_to confirm_email_path(email: resource.email)
|
|
else
|
|
sign_in(resource)
|
|
redirect_to root_path
|
|
end
|
|
else
|
|
render action: "by_email"
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def update_first_user_permissions(resource)
|
|
return unless Settings::General.waiting_on_first_user
|
|
|
|
resource.add_role(:super_admin)
|
|
resource.add_role(:trusted)
|
|
resource.skip_confirmation!
|
|
Settings::General.waiting_on_first_user = false
|
|
Users::CreateMascotAccount.call
|
|
end
|
|
|
|
def recaptcha_verified?
|
|
if ReCaptcha::CheckRegistrationEnabled.call
|
|
recaptcha_params = { secret_key: Settings::Authentication.recaptcha_secret_key }
|
|
params["g-recaptcha-response"] && verify_recaptcha(recaptcha_params)
|
|
else
|
|
true
|
|
end
|
|
end
|
|
|
|
def check_allowed_email(resource)
|
|
domain = resource.email.split("@").last
|
|
allow_list = Settings::Authentication.allowed_registration_email_domains
|
|
return if allow_list.empty? || allow_list.include?(domain)
|
|
|
|
resource.email = nil
|
|
resource.errors.add(:email, "is not included in allowed domains.")
|
|
end
|
|
|
|
def build_devise_resource
|
|
build_resource(sign_up_params)
|
|
resource.registered_at = Time.current
|
|
resource.build_setting(editor_version: "v2")
|
|
resource.remote_profile_image_url = Users::ProfileImageGenerator.call if resource.remote_profile_image_url.blank?
|
|
check_allowed_email(resource) if resource.email.present?
|
|
resource.save if resource.email.present?
|
|
end
|
|
end
|