mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
error status codes, pretty output
This commit is contained in:
parent
edf5949747
commit
2ec6043af8
2 changed files with 29 additions and 21 deletions
41
app.rb
41
app.rb
|
@ -36,11 +36,7 @@ error do
|
||||||
})
|
})
|
||||||
|
|
||||||
if @api
|
if @api
|
||||||
halt 500, {
|
api_error 500, 'server_error', 'there has been an unknown server error, please try again later', 500
|
||||||
result: 'error',
|
|
||||||
error_type: 'server_error',
|
|
||||||
message: 'there has been an unknown server error, please try again later'
|
|
||||||
}.to_json
|
|
||||||
end
|
end
|
||||||
|
|
||||||
slim :'error'
|
slim :'error'
|
||||||
|
@ -567,21 +563,21 @@ post '/api/upload' do
|
||||||
params.each do |k,v|
|
params.each do |k,v|
|
||||||
next unless v.is_a?(Hash) && v[:tempfile]
|
next unless v.is_a?(Hash) && v[:tempfile]
|
||||||
filename = k.to_s
|
filename = k.to_s
|
||||||
api_error('bad_filename', "#{filename} is not a valid filename, files not uploaded") unless Site.valid_filename? filename
|
api_error(400, 'bad_filename', "#{filename} is not a valid filename, files not uploaded") unless Site.valid_filename? filename
|
||||||
files << {filename: filename, tempfile: v[:tempfile]}
|
files << {filename: filename, tempfile: v[:tempfile]}
|
||||||
end
|
end
|
||||||
|
|
||||||
api_error '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?
|
||||||
|
|
||||||
uploaded_size = files.collect {|f| f[:tempfile].size}.inject{|sum,x| sum + x }
|
uploaded_size = files.collect {|f| f[:tempfile].size}.inject{|sum,x| sum + x }
|
||||||
|
|
||||||
if (uploaded_size + current_site.total_space) > Site::MAX_SPACE
|
if (uploaded_size + current_site.total_space) > Site::MAX_SPACE
|
||||||
api_error 'too_large', 'files are too large to fit in your space, try uploading smaller (or less) files'
|
api_error 400, 'too_large', 'files are too large to fit in your space, try uploading smaller (or less) files'
|
||||||
end
|
end
|
||||||
|
|
||||||
files.each do |file|
|
files.each do |file|
|
||||||
if !Site.valid_file_type?(file)
|
if !Site.valid_file_type?(file)
|
||||||
api_error 'invalid_file_type', "#{file[:filename]} is not a valid file type, files have not been uploaded"
|
api_error 400, 'invalid_file_type', "#{file[:filename]} is not a valid file type, files have not been uploaded"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -597,21 +593,21 @@ end
|
||||||
post '/api/delete' do
|
post '/api/delete' do
|
||||||
require_api_credentials
|
require_api_credentials
|
||||||
|
|
||||||
api_error 'missing_filenames', 'you must provide files to delete' if params[:filenames].nil? || params[:filenames].empty?
|
api_error 400, 'missing_filenames', 'you must provide files to delete' if params[:filenames].nil? || params[:filenames].empty?
|
||||||
|
|
||||||
filenames = []
|
filenames = []
|
||||||
|
|
||||||
params[:filenames].each do |filename|
|
params[:filenames].each do |filename|
|
||||||
unless filename.is_a?(String) && Site.valid_filename?(filename)
|
unless filename.is_a?(String) && Site.valid_filename?(filename)
|
||||||
api_error 'bad_filename', "#{filename} is not a valid filename, canceled deleting"
|
api_error 400, 'bad_filename', "#{filename} is not a valid filename, canceled deleting"
|
||||||
end
|
end
|
||||||
|
|
||||||
if !current_site.file_exists?(filename)
|
if !current_site.file_exists?(filename)
|
||||||
api_error 'missing_files', "#{filename} was not found on your site, canceled deleting"
|
api_error 400, 'missing_files', "#{filename} was not found on your site, canceled deleting"
|
||||||
end
|
end
|
||||||
|
|
||||||
if filename == 'index.html'
|
if filename == 'index.html'
|
||||||
api_error 'cannot_delete_index', 'you cannot delete your index.html file, canceled deleting'
|
api_error 400, 'cannot_delete_index', 'you cannot delete your index.html file, canceled deleting'
|
||||||
end
|
end
|
||||||
|
|
||||||
filenames << filename
|
filenames << filename
|
||||||
|
@ -627,7 +623,8 @@ end
|
||||||
get '/api/info' do
|
get '/api/info' do
|
||||||
if params[:sitename]
|
if params[:sitename]
|
||||||
site = Site[username: params[:sitename]]
|
site = Site[username: params[:sitename]]
|
||||||
api_error 'site_not_found', "could not find site #{params[:sitename]}" if site.nil?
|
|
||||||
|
api_error 400, 'site_not_found', "could not find site #{params[:sitename]}" if site.nil? || site.is_banned
|
||||||
api_success api_info_for(site)
|
api_success api_info_for(site)
|
||||||
else
|
else
|
||||||
init_api_credentials
|
init_api_credentials
|
||||||
|
@ -738,17 +735,21 @@ def api_success(message_or_obj)
|
||||||
output.merge! message_or_obj
|
output.merge! message_or_obj
|
||||||
end
|
end
|
||||||
|
|
||||||
halt output.to_json
|
api_response(200, output)
|
||||||
end
|
end
|
||||||
|
|
||||||
def api_error(error_type, message)
|
def api_response(status, output)
|
||||||
halt({result: 'error', error_type: error_type, message: message}.to_json)
|
halt status, JSON.pretty_generate(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
def api_error(status, error_type, message)
|
||||||
|
api_response(status, result: 'error', error_type: error_type, message: message)
|
||||||
end
|
end
|
||||||
|
|
||||||
def api_error_invalid_auth
|
def api_error_invalid_auth
|
||||||
api_error 'invalid_auth', 'invalid credentials - please check your username and password'
|
api_error 403, 'invalid_auth', 'invalid credentials - please check your username and password'
|
||||||
end
|
end
|
||||||
|
|
||||||
def api_not_found
|
def api_not_found
|
||||||
api_error 'not_found', 'the requested api call does not exist'
|
api_error 404, 'not_found', 'the requested api call does not exist'
|
||||||
end
|
end
|
|
@ -19,7 +19,14 @@ describe 'api info' do
|
||||||
get '/api/info'
|
get '/api/info'
|
||||||
res[:error_type] = 'missing_sitename'
|
res[:error_type] = 'missing_sitename'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'fails for banned sites' do
|
||||||
|
create_site
|
||||||
|
@site.update is_banned: true
|
||||||
|
get '/api/info', sitename: @site.username
|
||||||
|
res[:error_type].must_equal 'site_not_found'
|
||||||
|
end
|
||||||
|
|
||||||
it 'fails for nonexistent site' do
|
it 'fails for nonexistent site' do
|
||||||
get '/api/info', sitename: 'notexist'
|
get '/api/info', sitename: 'notexist'
|
||||||
res[:error_type].must_equal 'site_not_found'
|
res[:error_type].must_equal 'site_not_found'
|
||||||
|
|
Loading…
Add table
Reference in a new issue