File: initial_setup_controller.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (57 lines) | stat: -rw-r--r-- 1,525 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# frozen_string_literal: true

module Admin
  class InitialSetupController < ApplicationController
    include CheckInitialSetup

    skip_before_action :authenticate_admin!
    skip_before_action :authenticate_user!

    before_action :check_initial_setup

    layout 'devise'

    feature_category :system_access

    def new; end

    def update
      @result = Users::UpdateService.new(@user, user_params).execute(&:skip_reconfirmation!)

      if @result[:status] == :success
        clean_up_non_primary_emails(@user)
        redirect_to new_user_session_path, notice: _('Initial account configured! Please sign in.')
      else
        render :new
      end
    end

    private

    def user_params
      params.require(:user).permit(:email, :password, :password_confirmation).merge(
        user: @user,
        password_automatically_set: nil,
        password_expires_at: nil
      )
    end

    def check_initial_setup
      if in_initial_setup_state?
        @user = User.admins.last
        return
      end

      # redirect to root_path to avoid potential redirect loop on sessions_controller
      redirect_to root_path, notice: _("Initial setup complete!")
    end

    # the initial email generated randomly by fixtures, or from the GITLAB_ROOT_EMAIL env var
    # should be cleaned up if different than the assigned-via-UI initial account email
    def clean_up_non_primary_emails(user)
      user.emails.each do |email|
        email.destroy unless email.user_primary_email?
      end
    end
  end
end