tilde.news/app/controllers/signup_controller.rb

99 lines
2.4 KiB
Ruby

# typed: false
class SignupController < ApplicationController
before_action :require_logged_in_user, :check_new_users, :check_can_invite, only: :invite
before_action :check_for_read_only_mode, :show_title_h1
def index
@title = "Create an Account"
if @user
flash[:error] = "You are already signed up."
return redirect_to "/"
end
if Rails.application.open_signups?
redirect_to action: :invited, invitation_code: "open" and return
end
end
def invite
@title = "Pass Along an Invitation"
end
def invited
@title = "Create an Account"
if @user
flash[:error] = "You are already signed up."
ModNote.tattle_on_invited(@user, params[:invitation_code])
return redirect_to "/"
end
if !Rails.application.open_signups?
if !(@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first)
flash[:error] = "Invalid or expired invitation"
return redirect_to "/signup"
end
end
@title = "Signup"
@new_user = User.new
if !Rails.application.open_signups?
@new_user.email = @invitation.email
end
end
def signup
if !Rails.application.open_signups?
if !(@invitation = Invitation.unused.where(code: params[:invitation_code].to_s).first)
flash[:error] = "Invalid or expired invitation."
return redirect_to "/signup"
end
end
@title = "Signup"
@new_user = User.new(user_params)
if !Rails.application.open_signups?
@new_user.invited_by_user_id = @invitation.user_id
end
if @new_user.save
@invitation&.update!(used_at: Time.current, new_user: @new_user)
session[:u] = @new_user.session_token
flash[:success] = "Welcome to #{Rails.application.name}, " \
"#{@new_user.username}!"
if Rails.application.allow_new_users_to_invite?
redirect_to signup_invite_path
else
redirect_to root_path
end
else
render action: "invited"
end
end
private
def check_new_users
if !Rails.application.allow_new_users_to_invite? && @user.is_new?
redirect_to root_path, flash: {error: "New users cannot send invites"}
end
end
def check_can_invite
if !@user.can_invite?
redirect_to root_path, flash: {error: "You can't send invites"}
end
end
def user_params
params.require(:user).permit(
:username, :email, :password, :password_confirmation, :about
)
end
end