File: reset_feed_token_service.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 (61 lines) | stat: -rw-r--r-- 1,559 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
58
59
60
61
# frozen_string_literal: true

module Users
  class ResetFeedTokenService < BaseService
    VALID_SOURCES = %i[self group_token_revocation_service].freeze

    def initialize(current_user = nil, user: nil, source: nil)
      @current_user = current_user
      @user = user
      @source = source

      @source = :self if @current_user && !@source

      raise ArgumentError unless user
      raise ArgumentError unless VALID_SOURCES.include?(@source)
    end

    def execute
      return ServiceResponse.error(message: s_('Not permitted to reset user feed token')) unless reset_permitted?

      result = Users::UpdateService.new(current_user, user: user).execute(&:reset_feed_token!)
      if result[:status] == :success
        log_event
        ServiceResponse.success(message: success_message)
      else
        ServiceResponse.error(message: error_message)
      end
    end

    private

    attr_reader :user, :source

    def error_message
      s_('Profiles|Feed token could not be reset')
    end

    def success_message
      s_('Profiles|Feed token was successfully reset')
    end

    def reset_permitted?
      case source
      when :self
        Ability.allowed?(current_user, :update_user, user)
      when :group_token_revocation_service
        true
      end
    end

    def log_event
      Gitlab::AppLogger.info(
        class: self.class.name,
        message: "User Feed Token Reset",
        source: source,
        reset_by: current_user&.username,
        reset_for: user.username,
        user_id: user.id)
    end
  end
end