mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
fix for api calls with square bracket filenames
This commit is contained in:
parent
3087e39b57
commit
e7e5121700
3 changed files with 30 additions and 7 deletions
20
app/api.rb
20
app/api.rb
|
@ -41,15 +41,23 @@ get '/api/list' do
|
||||||
api_success files: files
|
api_success files: files
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def extract_files(params, files = [])
|
||||||
|
params.each do |key, value|
|
||||||
|
# If the value is a Hash and contains a :tempfile key, it's considered an uploaded file.
|
||||||
|
if value.is_a?(Hash) && value.has_key?(:tempfile) && !value[:tempfile].nil?
|
||||||
|
files << {filename: value[:name], tempfile: value[:tempfile]}
|
||||||
|
elsif value.is_a?(Hash) || value.is_a?(Array)
|
||||||
|
# If the value is a Hash or Array, recursively search for more files.
|
||||||
|
extract_files(value, files)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
files
|
||||||
|
end
|
||||||
|
|
||||||
post '/api/upload' do
|
post '/api/upload' do
|
||||||
require_api_credentials
|
require_api_credentials
|
||||||
|
|
||||||
files = []
|
files = extract_files params
|
||||||
params.each do |k,v|
|
|
||||||
next unless v.is_a?(Hash) && v[:tempfile]
|
|
||||||
path = k.to_s
|
|
||||||
files << {filename: k || v[:filename], tempfile: v[:tempfile]}
|
|
||||||
end
|
|
||||||
|
|
||||||
api_error 400, 'missing_files', 'you must provide files to upload' if files.empty?
|
api_error 400, 'missing_files', 'you must provide files to upload' if files.empty?
|
||||||
|
|
||||||
|
|
|
@ -308,6 +308,15 @@ describe 'api' do
|
||||||
_(site_file_exists?('test.jpg')).must_equal true
|
_(site_file_exists?('test.jpg')).must_equal true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'succeeds with square bracket in filename' do
|
||||||
|
create_site
|
||||||
|
@site.generate_api_key!
|
||||||
|
header 'Authorization', "Bearer #{@site.api_key}"
|
||||||
|
post '/api/upload', 'te[s]t.jpg' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
|
||||||
|
_(res[:result]).must_equal 'success'
|
||||||
|
_(site_file_exists?('te[s]t.jpg')).must_equal true
|
||||||
|
end
|
||||||
|
|
||||||
it 'succeeds with valid user session' do
|
it 'succeeds with valid user session' do
|
||||||
create_site
|
create_site
|
||||||
post '/api/upload',
|
post '/api/upload',
|
||||||
|
|
|
@ -53,7 +53,6 @@ describe 'site_files' do
|
||||||
_(PurgeCacheWorker.jobs.collect {|p| p['args'].last}.sort).must_equal ["/notindex", "/notindex2"]
|
_(PurgeCacheWorker.jobs.collect {|p| p['args'].last}.sort).must_equal ["/notindex", "/notindex2"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
it 'renames in same path' do
|
it 'renames in same path' do
|
||||||
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
|
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg')
|
||||||
upload 'files[]' => uploaded_file
|
upload 'files[]' => uploaded_file
|
||||||
|
@ -433,6 +432,13 @@ describe 'site_files' do
|
||||||
_(@site.site_changed).must_equal false
|
_(@site.site_changed).must_equal false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'works with square bracket filename' do
|
||||||
|
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/te[s]t.jpg', 'image/jpeg')
|
||||||
|
upload 'files[]' => uploaded_file
|
||||||
|
_(last_response.body).must_match /successfully uploaded/i
|
||||||
|
_(File.exists?(@site.files_path('te[s]t.jpg'))).must_equal true
|
||||||
|
end
|
||||||
|
|
||||||
it 'sets site changed to false if index is empty' do
|
it 'sets site changed to false if index is empty' do
|
||||||
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/blankindex/index.html', 'text/html')
|
uploaded_file = Rack::Test::UploadedFile.new('./tests/files/blankindex/index.html', 'text/html')
|
||||||
upload 'files[]' => uploaded_file
|
upload 'files[]' => uploaded_file
|
||||||
|
|
Loading…
Add table
Reference in a new issue