Sha256: 11d4e9a002e00d1a446a6157911c47e4a57bab63a56f525bbae3b9155993fb4f

Contents?: true

Size: 1.81 KB

Versions: 25

Compression:

Stored size: 1.81 KB

Contents

# frozen_string_literal: true

module Decidim
  module Devise
    # Custom Devise SessionsController to avoid namespace problems.
    class SessionsController < ::Devise::SessionsController
      include Decidim::DeviseControllers

      # rubocop: disable Rails/LexicallyScopedActionFilter
      before_action :check_sign_in_enabled, only: :create
      # rubocop: enable Rails/LexicallyScopedActionFilter

      def destroy
        current_user.invalidate_all_sessions!
        if params[:translation_suffix].present?
          super { set_flash_message! :notice, params[:translation_suffix], { scope: "decidim.devise.sessions" } }
        else
          super
        end
      end

      def after_sign_in_path_for(user)
        if user.present? && user.blocked?
          check_user_block_status(user)
        elsif first_login_and_not_authorized?(user) && !user.admin? && !pending_redirect?(user)
          decidim_verifications.first_login_authorizations_path
        else
          super
        end
      end

      # Calling the `stored_location_for` method removes the key, so in order
      # to check if there's any pending redirect after login I need to call
      # this method and use the value to set a pending redirect. This is the
      # only way to do this without checking the session directly.
      def pending_redirect?(user)
        store_location_for(user, stored_location_for(user))
      end

      def first_login_and_not_authorized?(user)
        user.is_a?(User) && user.sign_in_count == 1 && current_organization.available_authorizations.any? && user.verifiable?
      end

      def after_sign_out_path_for(user)
        request.referer || super
      end

      private

      def check_sign_in_enabled
        redirect_to new_user_session_path unless current_organization.sign_in_enabled?
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
decidim-core-0.26.10 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.9 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.8 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.7 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.5 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.4 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.3 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.2 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.1 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.0 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.0.rc2 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.26.0.rc1 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.2 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.1 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.0 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.0.rc4 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.0.rc3 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.0.rc2 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.25.0.rc1 app/controllers/decidim/devise/sessions_controller.rb
decidim-core-0.24.3 app/controllers/decidim/devise/sessions_controller.rb