# frozen_string_literal: true class Admin::SessionsController < ApplicationController include InternalRedirect before_action :user_is_admin! def new if current_user_mode.admin_mode? redirect_to redirect_path, notice: _('Admin mode already enabled') else current_user_mode.request_admin_mode! unless current_user_mode.admin_mode_requested? store_location_for(:redirect, redirect_path) end end def create if current_user_mode.enable_admin_mode!(password: params[:password]) redirect_to redirect_path, notice: _('Admin mode enabled') else flash.now[:alert] = _('Invalid login or password') render :new end rescue Gitlab::Auth::CurrentUserMode::NotRequestedError redirect_to new_admin_session_path, alert: _('Re-authentication period expired or never requested. Please try again') end def destroy current_user_mode.disable_admin_mode! redirect_to root_path, status: :found, notice: _('Admin mode disabled') end private def user_is_admin! render_404 unless current_user&.admin? end def redirect_path redirect_to_path = safe_redirect_path(stored_location_for(:redirect)) || safe_redirect_path_for_url(request.referer) if redirect_to_path && excluded_redirect_paths.none? { |excluded| redirect_to_path.include?(excluded) } redirect_to_path else admin_root_path end end def excluded_redirect_paths [new_admin_session_path, admin_session_path] end end