Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-06-29 22:31:31 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-06-29 22:31:31 +0300
commite810b8327513c3b07cb779dbce6c75dbcb49ca84 (patch)
tree65b220240faa9e191388c6ab233fed03da2b8713 /app/services
parent11e9b7b58837da351f08c18e6f0f4faba4d7d301 (diff)
Add latest changes from gitlab-org/security/gitlab@13-1-stable-ee
Diffstat (limited to 'app/services')
-rw-r--r--app/services/snippets/repository_validation_service.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/app/services/snippets/repository_validation_service.rb b/app/services/snippets/repository_validation_service.rb
new file mode 100644
index 00000000000..c8197795383
--- /dev/null
+++ b/app/services/snippets/repository_validation_service.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+module Snippets
+ class RepositoryValidationService
+ attr_reader :current_user, :snippet, :repository
+
+ RepositoryValidationError = Class.new(StandardError)
+
+ def initialize(user, snippet)
+ @current_user = user
+ @snippet = snippet
+ @repository = snippet.repository
+ end
+
+ def execute
+ if snippet.nil?
+ return service_response_error('No snippet found.', 404)
+ end
+
+ check_branch_count!
+ check_branch_name_default!
+ check_tag_count!
+ check_file_count!
+ check_size!
+
+ ServiceResponse.success(message: 'Valid snippet repository.')
+ rescue RepositoryValidationError => e
+ ServiceResponse.error(message: "Error: #{e.message}", http_status: 400)
+ end
+
+ private
+
+ def check_branch_count!
+ return if repository.branch_count == 1
+
+ raise RepositoryValidationError, _('Repository has more than one branch.')
+ end
+
+ def check_branch_name_default!
+ branches = repository.branch_names
+
+ return if branches.first == Gitlab::Checks::SnippetCheck::DEFAULT_BRANCH
+
+ raise RepositoryValidationError, _('Repository has an invalid default branch name.')
+ end
+
+ def check_tag_count!
+ return if repository.tag_count == 0
+
+ raise RepositoryValidationError, _('Repository has tags.')
+ end
+
+ def check_file_count!
+ file_count = repository.ls_files(nil).size
+ limit = Snippet.max_file_limit(current_user)
+
+ if file_count > limit
+ raise RepositoryValidationError, _('Repository files count over the limit')
+ end
+
+ if file_count == 0
+ raise RepositoryValidationError, _('Repository must contain at least 1 file.')
+ end
+ end
+
+ def check_size!
+ return unless snippet.repository_size_checker.above_size_limit?
+
+ raise RepositoryValidationError, _('Repository size is above the limit.')
+ end
+ end
+end