diff options
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/concerns/spam_check_methods.rb | 2 | ||||
-rw-r--r-- | app/services/metrics/dashboard/clone_dashboard_service.rb | 26 | ||||
-rw-r--r-- | app/services/projects/detect_repository_languages_service.rb | 2 | ||||
-rw-r--r-- | app/services/projects/move_access_service.rb | 2 | ||||
-rw-r--r-- | app/services/projects/transfer_service.rb | 6 | ||||
-rw-r--r-- | app/services/spam/spam_check_service.rb | 68 | ||||
-rw-r--r-- | app/services/spam_check_service.rb | 66 |
7 files changed, 99 insertions, 73 deletions
diff --git a/app/services/concerns/spam_check_methods.rb b/app/services/concerns/spam_check_methods.rb index 5eb663c97ff..695bdf92b49 100644 --- a/app/services/concerns/spam_check_methods.rb +++ b/app/services/concerns/spam_check_methods.rb @@ -23,7 +23,7 @@ module SpamCheckMethods # attribute values. # rubocop:disable Gitlab/ModuleWithInstanceVariables def spam_check(spammable, user) - SpamCheckService.new( + Spam::SpamCheckService.new( spammable: spammable, request: @request ).execute( diff --git a/app/services/metrics/dashboard/clone_dashboard_service.rb b/app/services/metrics/dashboard/clone_dashboard_service.rb index b2ec44cb814..990dc462432 100644 --- a/app/services/metrics/dashboard/clone_dashboard_service.rb +++ b/app/services/metrics/dashboard/clone_dashboard_service.rb @@ -8,8 +8,18 @@ module Metrics ALLOWED_FILE_TYPE = '.yml' USER_DASHBOARDS_DIR = ::Metrics::Dashboard::ProjectDashboardService::DASHBOARD_ROOT - def self.allowed_dashboard_templates - @allowed_dashboard_templates ||= Set[::Metrics::Dashboard::SystemDashboardService::DASHBOARD_PATH].freeze + class << self + def allowed_dashboard_templates + @allowed_dashboard_templates ||= Set[::Metrics::Dashboard::SystemDashboardService::DASHBOARD_PATH].freeze + end + + def sequences + @sequences ||= { + ::Metrics::Dashboard::SystemDashboardService::DASHBOARD_PATH => [::Gitlab::Metrics::Dashboard::Stages::CommonMetricsInserter, + ::Gitlab::Metrics::Dashboard::Stages::ProjectMetricsInserter, + ::Gitlab::Metrics::Dashboard::Stages::Sorter].freeze + }.freeze + end end def execute @@ -92,7 +102,9 @@ module Metrics end def new_dashboard_content - File.read(Rails.root.join(dashboard_template)) + ::Gitlab::Metrics::Dashboard::Processor + .new(project, raw_dashboard, sequence, {}) + .process.deep_stringify_keys.to_yaml end def repository @@ -106,6 +118,14 @@ module Metrics result end end + + def raw_dashboard + YAML.safe_load(File.read(Rails.root.join(dashboard_template))) + end + + def sequence + self.class.sequences[dashboard_template] + end end end end diff --git a/app/services/projects/detect_repository_languages_service.rb b/app/services/projects/detect_repository_languages_service.rb index d3680637217..942cd8162e4 100644 --- a/app/services/projects/detect_repository_languages_service.rb +++ b/app/services/projects/detect_repository_languages_service.rb @@ -12,7 +12,7 @@ module Projects matching_programming_languages = ensure_programming_languages(detection) RepositoryLanguage.transaction do - project.repository_languages.where(programming_language_id: detection.deletions).delete_all + RepositoryLanguage.where(project_id: project.id, programming_language_id: detection.deletions).delete_all detection.updates.each do |update| RepositoryLanguage diff --git a/app/services/projects/move_access_service.rb b/app/services/projects/move_access_service.rb index 8e2c3ad2f69..cddc544170f 100644 --- a/app/services/projects/move_access_service.rb +++ b/app/services/projects/move_access_service.rb @@ -20,6 +20,8 @@ module Projects ::Projects::MoveProjectAuthorizationsService.new(@project, @current_user) .execute(source_project, remove_remaining_elements: remove_remaining_elements) + @project.save(touch: false) + success end end diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 718416a03d4..309eab59463 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -13,8 +13,6 @@ module Projects include Gitlab::ShellAdapter TransferError = Class.new(StandardError) - attr_reader :new_namespace - def execute(new_namespace) @new_namespace = new_namespace @@ -39,6 +37,8 @@ module Projects private + attr_reader :old_path, :new_path, :new_namespace + # rubocop: disable CodeReuse/ActiveRecord def transfer(project) @old_path = project.full_path @@ -132,6 +132,8 @@ module Projects end def rollback_folder_move + return if project.hashed_storage?(:repository) + move_repo_folder(@new_path, @old_path) move_repo_folder("#{@new_path}.wiki", "#{@old_path}.wiki") end diff --git a/app/services/spam/spam_check_service.rb b/app/services/spam/spam_check_service.rb new file mode 100644 index 00000000000..d19ef03976f --- /dev/null +++ b/app/services/spam/spam_check_service.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +module Spam + class SpamCheckService + include AkismetMethods + + attr_accessor :spammable, :request, :options + attr_reader :spam_log + + def initialize(spammable:, request:) + @spammable = spammable + @request = request + @options = {} + + if @request + @options[:ip_address] = @request.env['action_dispatch.remote_ip'].to_s + @options[:user_agent] = @request.env['HTTP_USER_AGENT'] + @options[:referrer] = @request.env['HTTP_REFERRER'] + else + @options[:ip_address] = @spammable.ip_address + @options[:user_agent] = @spammable.user_agent + end + end + + def execute(api: false, recaptcha_verified:, spam_log_id:, user_id:) + if recaptcha_verified + # If it's a request which is already verified through recaptcha, + # update the spam log accordingly. + SpamLog.verify_recaptcha!(user_id: user_id, id: spam_log_id) + else + # Otherwise, it goes to Akismet for spam check. + # If so, it assigns spammable object as "spam" and creates a SpamLog record. + possible_spam = check(api) + spammable.spam = possible_spam unless spammable.allow_possible_spam? + spammable.spam_log = spam_log + end + end + + private + + def check(api) + return unless request + return unless check_for_spam? + return unless akismet.spam? + + create_spam_log(api) + true + end + + def check_for_spam? + spammable.check_for_spam? + end + + def create_spam_log(api) + @spam_log = SpamLog.create!( + { + user_id: spammable.author_id, + title: spammable.spam_title, + description: spammable.spam_description, + source_ip: options[:ip_address], + user_agent: options[:user_agent], + noteable_type: spammable.class.to_s, + via_api: api + } + ) + end + end +end diff --git a/app/services/spam_check_service.rb b/app/services/spam_check_service.rb deleted file mode 100644 index e1f5efabcaf..00000000000 --- a/app/services/spam_check_service.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -class SpamCheckService - include AkismetMethods - - attr_accessor :spammable, :request, :options - attr_reader :spam_log - - def initialize(spammable:, request:) - @spammable = spammable - @request = request - @options = {} - - if @request - @options[:ip_address] = @request.env['action_dispatch.remote_ip'].to_s - @options[:user_agent] = @request.env['HTTP_USER_AGENT'] - @options[:referrer] = @request.env['HTTP_REFERRER'] - else - @options[:ip_address] = @spammable.ip_address - @options[:user_agent] = @spammable.user_agent - end - end - - def execute(api: false, recaptcha_verified:, spam_log_id:, user_id:) - if recaptcha_verified - # If it's a request which is already verified through recaptcha, - # update the spam log accordingly. - SpamLog.verify_recaptcha!(user_id: user_id, id: spam_log_id) - else - # Otherwise, it goes to Akismet for spam check. - # If so, it assigns spammable object as "spam" and creates a SpamLog record. - possible_spam = check(api) - spammable.spam = possible_spam unless spammable.allow_possible_spam? - spammable.spam_log = spam_log - end - end - - private - - def check(api) - return unless request - return unless check_for_spam? - return unless akismet.spam? - - create_spam_log(api) - true - end - - def check_for_spam? - spammable.check_for_spam? - end - - def create_spam_log(api) - @spam_log = SpamLog.create!( - { - user_id: spammable.author_id, - title: spammable.spam_title, - description: spammable.spam_description, - source_ip: options[:ip_address], - user_agent: options[:user_agent], - noteable_type: spammable.class.to_s, - via_api: api - } - ) - end -end |