diff options
Diffstat (limited to 'lib/api/api.rb')
-rw-r--r-- | lib/api/api.rb | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/lib/api/api.rb b/lib/api/api.rb index 7da5f21b21f..8ebd7f83acb 100644 --- a/lib/api/api.rb +++ b/lib/api/api.rb @@ -15,6 +15,18 @@ module API LOG_FORMATTER = Gitlab::GrapeLogging::Formatters::LogrageWithTimestamp.new LOGGER = Logger.new(LOG_FILENAME) + class MovedPermanentlyError < StandardError + MSG_PREFIX = 'This resource has been moved permanently to' + + attr_reader :location_url + + def initialize(location_url) + @location_url = location_url + + super("#{MSG_PREFIX} #{location_url}") + end + end + insert_before Grape::Middleware::Error, GrapeLogging::Middleware::RequestLogger, logger: LOGGER, @@ -95,6 +107,14 @@ module API end after do + Gitlab::UsageDataCounters::VisualStudioExtensionActivityUniqueCounter.track_api_request_when_trackable(user_agent: request&.user_agent, user: @current_user) + end + + after do + Gitlab::UsageDataCounters::NeovimPluginActivityUniqueCounter.track_api_request_when_trackable(user_agent: request&.user_agent, user: @current_user) + end + + after do Gitlab::UsageDataCounters::GitLabCliActivityUniqueCounter.track_api_request_when_trackable(user_agent: request&.user_agent, user: @current_user) end @@ -134,6 +154,10 @@ module API error! e.message, e.status, e.headers end + rescue_from MovedPermanentlyError do |e| + rack_response(e.message, 301, { 'Location' => e.location_url }) + end + rescue_from Gitlab::Auth::TooManyIps do |e| rack_response({ 'message' => '403 Forbidden' }.to_json, 403) end @@ -180,6 +204,7 @@ module API # Keep in alphabetical order mount ::API::AccessRequests mount ::API::Admin::BatchedBackgroundMigrations + mount ::API::Admin::BroadcastMessages mount ::API::Admin::Ci::Variables mount ::API::Admin::Dictionary mount ::API::Admin::InstanceClusters @@ -191,7 +216,6 @@ module API mount ::API::Avatar mount ::API::Badges mount ::API::Branches - mount ::API::BroadcastMessages mount ::API::BulkImports mount ::API::Ci::JobArtifacts mount ::API::Groups |