summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2016-03-11 22:34:33 +0000
committerDouwe Maan <douwe@gitlab.com>2016-03-11 22:34:33 +0000
commitcb81c8a5efd54586a19cbeeb69c7572b58dc1a81 (patch)
tree6f18f4682bc472938f214bad831da48eaf941e04 /lib
parent70bf6dc702b6354c3a00d0b81e7d7c10be25ffb8 (diff)
parent5844a21a0acae08a19fa82984dcc0feb1b8777c5 (diff)
downloadgitlab-ce-cb81c8a5efd54586a19cbeeb69c7572b58dc1a81.tar.gz
Merge branch 'rs-issue-12944' into 'master'
Use a custom Devise failure app to handle unauthenticated .zip requests Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/12944 See merge request !2828
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/devise_failure.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/gitlab/devise_failure.rb b/lib/gitlab/devise_failure.rb
new file mode 100644
index 00000000000..a78fde9d782
--- /dev/null
+++ b/lib/gitlab/devise_failure.rb
@@ -0,0 +1,23 @@
+module Gitlab
+ class DeviseFailure < Devise::FailureApp
+ protected
+
+ # Override `Devise::FailureApp#request_format` to handle a special case
+ #
+ # This tells Devise to handle an unauthenticated `.zip` request as an HTML
+ # request (i.e., redirect to sign in).
+ #
+ # Otherwise, Devise would respond with a 401 Unauthorized with
+ # `Content-Type: application/zip` and a response body in plaintext, and the
+ # browser would freak out.
+ #
+ # See https://gitlab.com/gitlab-org/gitlab-ce/issues/12944
+ def request_format
+ if request.format == :zip
+ Mime::Type.lookup_by_extension(:html).ref
+ else
+ super
+ end
+ end
+ end
+end