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:
Diffstat (limited to 'lib/api/internal/error_tracking.rb')
-rw-r--r--lib/api/internal/error_tracking.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/api/internal/error_tracking.rb b/lib/api/internal/error_tracking.rb
new file mode 100644
index 00000000000..bad790b0e43
--- /dev/null
+++ b/lib/api/internal/error_tracking.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+module API
+ module Internal
+ class ErrorTracking < ::API::Base
+ GITLAB_ERROR_TRACKING_TOKEN_HEADER = "Gitlab-Error-Tracking-Token"
+
+ feature_category :error_tracking
+
+ helpers do
+ def verify_error_tracking_token!
+ input = params['error_tracking_token']
+
+ if headers.key?(GITLAB_ERROR_TRACKING_TOKEN_HEADER)
+ input ||= Base64.decode64(headers[GITLAB_ERROR_TRACKING_TOKEN_HEADER])
+ end
+
+ input&.chomp!
+
+ unauthorized! unless Devise.secure_compare(error_tracking_token, input)
+ end
+
+ def error_tracking_token
+ Gitlab::CurrentSettings.error_tracking_access_token
+ end
+
+ def error_tracking_enabled?
+ Gitlab::CurrentSettings.error_tracking_enabled
+ end
+ end
+
+ namespace 'internal' do
+ namespace 'error_tracking' do
+ before do
+ verify_error_tracking_token!
+ end
+
+ post '/allowed', urgency: :high do
+ public_key = params[:public_key]
+ project_id = params[:project_id]
+
+ unprocessable_entity! if public_key.blank? || project_id.blank?
+
+ project = Project.find(project_id)
+ enabled = error_tracking_enabled? &&
+ Feature.enabled?(:use_click_house_database_for_error_tracking, project) &&
+ ::ErrorTracking::ClientKey.enabled_key_for(project_id, public_key).exists?
+
+ status 200
+ { enabled: enabled }
+ end
+ end
+ end
+ end
+ end
+end