Restore upload_file route implementation from b40a344c49.

This commit is contained in:
Bart Kamphorst
2019-08-27 20:49:33 +02:00
parent 7f07f652d4
commit bce9800142
+18 -3
View File
@@ -174,7 +174,6 @@ module Precious
@name = wikip.fullname @name = wikip.fullname
@path = wikip.path @path = wikip.path
@upload_dest = find_upload_dest(wikip.fullpath) @upload_dest = find_upload_dest(wikip.fullpath)
wiki = wikip.wiki wiki = wikip.wiki
@allow_uploads = wiki.allow_uploads @allow_uploads = wiki.allow_uploads
if page = wikip.page if page = wikip.page
@@ -199,7 +198,21 @@ module Precious
end end
halt 500 unless tempfile.is_a? Tempfile halt 500 unless tempfile.is_a? Tempfile
dir = wiki.per_page_uploads ? params[:upload_dest] : 'uploads' if wiki.per_page_uploads
# remove base_url and gollum/* subpath if necessary
dir = request.referer.
sub(request.base_url, '').
sub(/.*gollum\/[-\w]+\//, '')
# remove file extension
dir = dir.sub(::File.extname(dir), '')
dir = ::File.join("uploads", dir)
else
# store all uploads together
dir = 'uploads'
end
halt 500 if dir.include?('..')
halt 500 unless Pathname(dir).relative?
ext = ::File.extname(fullname) ext = ::File.extname(fullname)
format = ext.split('.').last || 'txt' format = ext.split('.').last || 'txt'
filename = ::File.basename(fullname, ext) filename = ::File.basename(fullname, ext)
@@ -219,9 +232,11 @@ module Precious
begin begin
wiki.write_file(reponame, contents, options) wiki.write_file(reponame, contents, options)
redirect to(request.referer) redirect to(request.referer)
rescue Gollum::DuplicatePageError, Gollum::IllegalDirectoryPath => e rescue Gollum::IllegalDirectoryPath => e
@message = e.message @message = e.message
mustache :error mustache :error
rescue Gollum::DuplicatePageError
halt 409 # Signal conflict
end end
end end