diff options
Diffstat (limited to 'lib/api/internal/error_tracking.rb')
-rw-r--r-- | lib/api/internal/error_tracking.rb | 56 |
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 |