Restore upload_file route implementation from b40a344c49.
This commit is contained in:
+19
-4
@@ -173,8 +173,7 @@ module Precious
|
|||||||
wikip = wiki_page(params[:splat].first)
|
wikip = wiki_page(params[:splat].first)
|
||||||
@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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user