123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- class AuthenticationController < ApplicationController
- before_action :require_login!, only: [:logout_confirm, :logout]
- def login_form
- render layout: 'void'
- end
- def login
- if params[:session][:email].blank? || params[:session][:password].blank?
- flash_message(:warning, I18n.t(:value_required))
- redirect_to action: 'login_form'
- else
- u = User.find_by(email: params[:session][:email])
- if u&.confirmed && u&.authenticate(params[:session][:password])
- log_in(u, params[:session][:remember_me].to_i)
- flash_message(:success, I18n.t(:greeting, name: u.person.first_name))
- redirect_to root_path
- elsif u && !u.confirmed
- flash_message(:warning, I18n.t('authentication.activation_required'))
- redirect_to action: 'login_form'
- else
- flash_message(:danger, I18n.t('authentication.invalid_user_or_pass'))
- redirect_to action: 'login_form'
- end
- end
- end
- def logout_confirm
- render layout: 'void'
- end
- def logout
- log_out
- redirect_to login_path
- end
- def create_password_form
- render layout: 'void'
- end
- def login_status
- render text: logged_in?
- end
- def create_password
- person = Person.find_by(email: params[:user][:email])
- unless person
- flash_message(:warning, I18n.t('authentication.unknown_email'))
- redirect_to action: 'create_password_form'
- return
- end
- user = User.find_by(person: person)
- if user&.confirmed
- flash_message(:warning, I18n.t('authentication.already_activated'))
- redirect_to action: 'login'
- return
- end
- unless user
- user = User.new
- user.person = person
- user.email = person.email
- user.password = user.password_confirmation = SecureRandom.urlsafe_base64 32
- user.confirmed = false
- user.save!
- end
- AuthenticationMailer.password_confirm_email(user).deliver_now
- flash_message(:success, I18n.t('authentication.emails.sent'))
- redirect_to action: 'login'
- end
- def forgotten_password_form
- render layout: 'void'
- end
- def forgotten_password
- user = User.find_by(email: params[:password_reset][:email])
- unless user
- flash_message(:danger, I18n.t('authentication.unknown_email'))
- redirect_to action: 'forgotten_password_form'
- return
- end
- AuthenticationMailer.password_reset_email(user).deliver_later
- flash_message(:success, I18n.t('authentication.emails.sent'))
- redirect_to action: 'login'
- end
- def reset_password_form
- token = Token.find_by(token: params[:token], tokentype: Token::TYPES[:password_reset])
- return unless token_valid? token
- render layout: 'void'
- end
- def reset_password
- token = Token.find_by(token: params[:token], tokentype: Token::TYPES[:password_reset])
- return unless token_valid? token
- if params[:password_reset][:password].blank?
- flash_message :warning, I18n.t('authentication.password_blank')
- render 'authentication/reset_password_form', layout: 'void'
- return
- end
- unless params[:password_reset][:password] == params[:password_reset][:password_confirmation]
- flash_message(:warning, I18n.t('authentication.password_repeat_mismatch'))
- redirect_to action: 'reset_password_form', token: params[:token]
- return
- end
- user = token.user
- user.password = params[:password_reset][:password]
- user.password_confirmation = params[:password_reset][:password_confirmation]
- user.save!
- token.destroy!
- flash_message(:success, I18n.t('authentication.password_reset_complete'))
- redirect_to action: 'login'
- end
- def confirm_account_form
- token = Token.find_by(token: params[:token], tokentype: Token::TYPES[:account_confirmation])
- return unless token_valid? token
- @user = token.user
- render layout: 'void'
- end
- def confirm_account
- token = Token.find_by(token: params[:token], tokentype: Token::TYPES[:account_confirmation])
- return unless token_valid? token
- user = token.user
- user.password = params[:account_confirmation][:password]
- user.password_confirmation = params[:account_confirmation][:password_confirmation]
- user.confirmed = true
- user.save!
- token.destroy!
- flash_message(:success, I18n.t('authentication.activation_complete'))
- redirect_to action: 'login'
- end
- private
- def session_params
- params.require(:session).permit(:email, :password, :remember_me)
- end
- def token_valid?(token)
- if token.nil?
- flash_message(:warning, I18n.t('authentication.invalid_token'))
- redirect_to action: 'login'
- return false
- end
- if token.expires&.past?
- flash_message(:warning, I18n.t('authentication.token_expired'))
- redirect_to action: 'login'
- return false
- end
- true
- end
- end
|