summaryrefslogtreecommitdiff
path: root/app/controllers/settings_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/settings_controller.rb')
-rw-r--r--app/controllers/settings_controller.rb113
1 files changed, 113 insertions, 0 deletions
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb
new file mode 100644
index 00000000000..34e7093dd05
--- /dev/null
+++ b/app/controllers/settings_controller.rb
@@ -0,0 +1,113 @@
+# frozen_string_literal: true
+
+class SettingsController < Settings::ApplicationController
+ include ActionView::Helpers::SanitizeHelper
+
+ before_action :user
+ before_action :authorize_change_username!, only: :update_username
+ skip_before_action :require_email, only: [:show, :update]
+
+ def show
+ end
+
+ def update
+ respond_to do |format|
+ result = Users::UpdateService.new(current_user, user_params.merge(user: @user)).execute
+
+ if result[:status] == :success
+ message = s_("Profiles|Profile was successfully updated")
+
+ format.html { redirect_back_or_default(default: { action: 'show' }, options: { notice: message }) }
+ format.json { render json: { message: message } }
+ else
+ format.html { redirect_back_or_default(default: { action: 'show' }, options: { alert: result[:message] }) }
+ format.json { render json: result }
+ end
+ end
+ end
+
+ def reset_incoming_email_token
+ Users::UpdateService.new(current_user, user: @user).execute! do |user|
+ user.reset_incoming_email_token!
+ end
+
+ flash[:notice] = s_("Profiles|Incoming email token was successfully reset")
+
+ redirect_to settings_personal_access_tokens_path
+ end
+
+ def reset_feed_token
+ Users::UpdateService.new(current_user, user: @user).execute! do |user|
+ user.reset_feed_token!
+ end
+
+ flash[:notice] = s_('Profiles|Feed token was successfully reset')
+
+ redirect_to settings_personal_access_tokens_path
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def audit_log
+ @events = AuditEvent.where(entity_type: "User", entity_id: current_user.id)
+ .order("created_at DESC")
+ .page(params[:page])
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+
+ def update_username
+ result = Users::UpdateService.new(current_user, user: @user, username: username_param).execute
+
+ respond_to do |format|
+ if result[:status] == :success
+ message = s_("Profiles|Username successfully changed")
+
+ format.html { redirect_back_or_default(default: { action: 'show' }, options: { notice: message }) }
+ format.json { render json: { message: message }, status: :ok }
+ else
+ message = s_("Profiles|Username change failed - %{message}") % { message: result[:message] }
+
+ format.html { redirect_back_or_default(default: { action: 'show' }, options: { alert: message }) }
+ format.json { render json: { message: message }, status: :unprocessable_entity }
+ end
+ end
+ end
+
+ private
+
+ def user
+ @user = current_user
+ end
+
+ def authorize_change_username!
+ return render_404 unless @user.can_change_username?
+ end
+
+ def username_param
+ @username_param ||= user_params.require(:username)
+ end
+
+ def user_params
+ @user_params ||= params.require(:user).permit(
+ :avatar,
+ :bio,
+ :email,
+ :hide_no_password,
+ :hide_no_ssh_key,
+ :hide_project_limit,
+ :linkedin,
+ :location,
+ :name,
+ :public_email,
+ :commit_email,
+ :skype,
+ :twitter,
+ :username,
+ :website_url,
+ :organization,
+ :private_profile,
+ :include_private_contributions,
+ :timezone,
+ status: [:emoji, :message]
+ )
+ end
+end