summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorblackst0ne <blackst0ne.ru@gmail.com>2018-06-15 16:00:20 +1100
committerblackst0ne <blackst0ne.ru@gmail.com>2018-06-15 16:00:20 +1100
commit037334d2f29fbb14d5e366a7b892a75631eb9ace (patch)
treee811bf0447bfff22ae4cea4fd6d1ee855a146a7b
parentfb08183e63733dd7845a16d9f827a5cd5f2d9080 (diff)
downloadgitlab-ce-blackst0ne-rails5-fix-blob-requests-format.tar.gz
[Rails5] Explicitly set request.format for blob_controllerblackst0ne-rails5-fix-blob-requests-format
In Rails 4.2 if params[:format] is empty, Rails set it to :html But since Rails 5.0 the framework now looks for an extension. E.g. for `blob/master/CHANGELOG.md` in Rails 4 the format would be `:html`, but in Rails 5 on it'd be `:md` This commit explicitly sets the `:html` format for all requests unless `:format` is set by a client e.g. by JS for XHR requests.
-rw-r--r--app/controllers/projects/blob_controller.rb13
-rw-r--r--changelogs/unreleased/blackst0ne-rails5-fix-blob-requests-format.yml5
2 files changed, 18 insertions, 0 deletions
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index 0c1c286a0a4..818629a6428 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -7,6 +7,7 @@ class Projects::BlobController < Projects::ApplicationController
prepend_before_action :authenticate_user!, only: [:edit]
+ before_action :set_request_format, only: [:edit, :show, :update]
before_action :require_non_empty_project, except: [:new, :create]
before_action :authorize_download_code!
@@ -188,6 +189,18 @@ class Projects::BlobController < Projects::ApplicationController
.last_for_path(@repository, @ref, @path).sha
end
+ # In Rails 4.2 if params[:format] is empty, Rails set it to :html
+ # But since Rails 5.0 the framework now looks for an extension.
+ # E.g. for `blob/master/CHANGELOG.md` in Rails 4 the format would be `:html`, but in Rails 5 on it'd be `:md`
+ # This before_action explicitly sets the `:html` format for all requests unless `:format` is set by a client e.g. by JS for XHR requests.
+ def set_request_format
+ request.format = :html if set_request_format?
+ end
+
+ def set_request_format?
+ params[:id].present? && params[:format].blank? && request.format != "json"
+ end
+
def show_html
environment_params = @repository.branch_exists?(@ref) ? { ref: @ref } : { commit: @commit }
@environment = EnvironmentsFinder.new(@project, current_user, environment_params).execute.last
diff --git a/changelogs/unreleased/blackst0ne-rails5-fix-blob-requests-format.yml b/changelogs/unreleased/blackst0ne-rails5-fix-blob-requests-format.yml
new file mode 100644
index 00000000000..a83aa03606a
--- /dev/null
+++ b/changelogs/unreleased/blackst0ne-rails5-fix-blob-requests-format.yml
@@ -0,0 +1,5 @@
+---
+title: "[Rails5] Explicitly set request.format for blob_controller"
+merge_request: 19876
+author: "@blackst0ne"
+type: fixed