summaryrefslogtreecommitdiff
path: root/app/controllers/projects/lfs_api_controller.rb
diff options
context:
space:
mode:
authorToon Claes <toon@iotcl.com>2017-09-19 09:44:58 +0200
committerToon Claes <toon@iotcl.com>2017-10-06 22:37:40 +0200
commitd13669716ab0c31ce9039ae9f7f073e33a4dc40f (patch)
tree001bb2e6aa76ea7531c93e469c396f7fdcc408a7 /app/controllers/projects/lfs_api_controller.rb
parent2cf5dca8f80cdefeb8932bf80417f52f289668c8 (diff)
downloadgitlab-ce-tc-geo-read-only-idea.tar.gz
Create idea of read-only databasetc-geo-read-only-idea
In GitLab EE, a GitLab instance can be read-only (e.g. when it's a Geo secondary node). But in GitLab CE it also might be useful to have the "read-only" idea around. So port it back to GitLab CE. Also having the principle of read-only in GitLab CE would hopefully lead to less errors introduced, doing write operations when there aren't allowed for read-only calls. Closes gitlab-org/gitlab-ce#37534.
Diffstat (limited to 'app/controllers/projects/lfs_api_controller.rb')
-rw-r--r--app/controllers/projects/lfs_api_controller.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/app/controllers/projects/lfs_api_controller.rb b/app/controllers/projects/lfs_api_controller.rb
index 1b0d3aab3fa..536f908d2c5 100644
--- a/app/controllers/projects/lfs_api_controller.rb
+++ b/app/controllers/projects/lfs_api_controller.rb
@@ -2,6 +2,7 @@ class Projects::LfsApiController < Projects::GitHttpClientController
include LfsRequest
skip_before_action :lfs_check_access!, only: [:deprecated]
+ before_action :lfs_check_batch_operation!, only: [:batch]
def batch
unless objects.present?
@@ -90,4 +91,21 @@ class Projects::LfsApiController < Projects::GitHttpClientController
}
}
end
+
+ def lfs_check_batch_operation!
+ if upload_request? && Gitlab::Database.read_only?
+ render(
+ json: {
+ message: lfs_read_only_message
+ },
+ content_type: 'application/vnd.git-lfs+json',
+ status: 403
+ )
+ end
+ end
+
+ # Overridden in EE
+ def lfs_read_only_message
+ _('You cannot write to this read-only GitLab instance.')
+ end
end