mirror of
https://github.com/neocities/neocities.git
synced 2025-07-24 11:28:29 +02:00
Folders.
This commit is contained in:
parent
605fdce9be
commit
2f73732daa
17 changed files with 508 additions and 288 deletions
82
app.rb
82
app.rb
|
@ -452,6 +452,13 @@ end
|
|||
|
||||
get '/dashboard' do
|
||||
require_login
|
||||
|
||||
if params[:dir] && params[:dir][0] != '/'
|
||||
params[:dir] = '/'+params[:dir]
|
||||
end
|
||||
|
||||
@dir = params[:dir]
|
||||
@file_list = current_site.file_list @dir
|
||||
erb :'dashboard'
|
||||
end
|
||||
|
||||
|
@ -562,7 +569,7 @@ post '/change_name' do
|
|||
end
|
||||
|
||||
old_host = current_site.host
|
||||
old_file_paths = current_site.file_list.collect {|f| f.filename}
|
||||
old_file_paths = current_site.file_list.collect {|f| f[:path]}
|
||||
|
||||
current_site.username = params[:name]
|
||||
|
||||
|
@ -629,7 +636,8 @@ def file_upload_response(error=nil)
|
|||
@error = error
|
||||
halt 200, erb(:'dashboard')
|
||||
else
|
||||
redirect '/dashboard'
|
||||
query_string = params[:dir] ? "?"+Rack::Utils.build_query(dir: params[:dir]) : ''
|
||||
redirect "/dashboard#{query_string}"
|
||||
end
|
||||
else
|
||||
halt http_error_code, error if error
|
||||
|
@ -637,6 +645,20 @@ def file_upload_response(error=nil)
|
|||
end
|
||||
end
|
||||
|
||||
post '/site/create_directory' do
|
||||
require_login
|
||||
|
||||
path = "#{params[:dir] || ''}/#{params[:name]}"
|
||||
|
||||
result = current_site.create_directory path
|
||||
|
||||
if result != true
|
||||
flash[:error] = e.message
|
||||
end
|
||||
|
||||
redirect "/dashboard?dir=#{Rack::Utils.escape params[:dir]}"
|
||||
end
|
||||
|
||||
post '/site_files/upload' do
|
||||
require_login
|
||||
@errors = []
|
||||
|
@ -647,12 +669,12 @@ post '/site_files/upload' do
|
|||
end
|
||||
|
||||
params[:files].each do |file|
|
||||
file[:filename] = "#{params[:dir]}/#{file[:filename]}" if params[:dir]
|
||||
if current_site.file_size_too_large? file[:tempfile].size
|
||||
file_upload_response "#{file[:filename]} is too large, upload cancelled."
|
||||
file_upload_response "#{params[:dir]}/#{file[:filename]} is too large, upload cancelled."
|
||||
end
|
||||
|
||||
if !Site.valid_file_type? file
|
||||
file_upload_response "#{file[:filename]}: file type (or content in file) is not allowed on Neocities, upload cancelled."
|
||||
file_upload_response "#{params[:dir]}/#{file[:filename]}: file type (or content in file) is not allowed on Neocities, upload cancelled."
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -664,7 +686,7 @@ post '/site_files/upload' do
|
|||
|
||||
results = []
|
||||
params[:files].each do |file|
|
||||
results << current_site.store_file(Site.sanitize_filename(file[:filename]), file[:tempfile])
|
||||
results << current_site.store_file(file[:filename], file[:tempfile])
|
||||
end
|
||||
|
||||
current_site.increment_changed_count if results.include?(true)
|
||||
|
@ -674,20 +696,18 @@ end
|
|||
|
||||
post '/site_files/delete' do
|
||||
require_login
|
||||
sanitized_filename = Site.sanitize_filename params[:filename]
|
||||
current_site.delete_file params[:filename]
|
||||
|
||||
current_site.delete_file(sanitized_filename)
|
||||
|
||||
flash[:success] = "Deleted file #{params[:filename]}."
|
||||
flash[:success] = "Deleted #{params[:filename]}."
|
||||
redirect '/dashboard'
|
||||
end
|
||||
|
||||
get '/site_files/:username.zip' do |username|
|
||||
require_login
|
||||
zipfile = current_site.files_zip
|
||||
zipfile_path = current_site.files_zip
|
||||
content_type 'application/octet-stream'
|
||||
attachment "#{current_site.username}.zip"
|
||||
zipfile
|
||||
attachment "neocities-#{current_site.username}.zip"
|
||||
send_file zipfile_path
|
||||
end
|
||||
|
||||
get '/site_files/download/:filename' do |filename|
|
||||
|
@ -722,9 +742,7 @@ post '/site_files/save/:filename' do |filename|
|
|||
halt 'File is too large to fit in your space, it has NOT been saved. Please make a local copy and then try to reduce the size.'
|
||||
end
|
||||
|
||||
sanitized_filename = Site.sanitize_filename filename
|
||||
|
||||
current_site.store_file sanitized_filename, tempfile
|
||||
current_site.store_file filename, tempfile
|
||||
|
||||
'ok'
|
||||
end
|
||||
|
@ -937,14 +955,11 @@ end
|
|||
|
||||
post '/api/upload' do
|
||||
require_api_credentials
|
||||
|
||||
files = []
|
||||
|
||||
params.each do |k,v|
|
||||
next unless v.is_a?(Hash) && v[:tempfile]
|
||||
filename = k.to_s
|
||||
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]}
|
||||
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?
|
||||
|
@ -959,6 +974,10 @@ post '/api/upload' do
|
|||
if !Site.valid_file_type?(file)
|
||||
api_error 400, 'invalid_file_type', "#{file[:filename]} is not a valid file type (or contains not allowed content), files have not been uploaded"
|
||||
end
|
||||
|
||||
if File.directory? file[:filename]
|
||||
api_error 400, 'directory_exists', 'this name is being used by a directory, cannot continue'
|
||||
end
|
||||
end
|
||||
|
||||
results = []
|
||||
|
@ -976,26 +995,25 @@ post '/api/delete' do
|
|||
|
||||
api_error 400, 'missing_filenames', 'you must provide files to delete' if params[:filenames].nil? || params[:filenames].empty?
|
||||
|
||||
filenames = []
|
||||
|
||||
params[:filenames].each do |filename|
|
||||
unless filename.is_a?(String) && Site.valid_filename?(filename)
|
||||
api_error 400, 'bad_filename', "#{filename} is not a valid filename, canceled deleting"
|
||||
paths = []
|
||||
params[:filenames].each do |path|
|
||||
unless path.is_a?(String) && Site.valid_path?(path)
|
||||
api_error 400, 'bad_filename', "#{path} is not a valid filename, canceled deleting"
|
||||
end
|
||||
|
||||
if !current_site.file_exists?(filename)
|
||||
api_error 400, 'missing_files', "#{filename} was not found on your site, canceled deleting"
|
||||
if !current_site.file_exists?(path)
|
||||
api_error 400, 'missing_files', "#{path} was not found on your site, canceled deleting"
|
||||
end
|
||||
|
||||
if filename == 'index.html'
|
||||
if path == 'index.html'
|
||||
api_error 400, 'cannot_delete_index', 'you cannot delete your index.html file, canceled deleting'
|
||||
end
|
||||
|
||||
filenames << filename
|
||||
paths << path
|
||||
end
|
||||
|
||||
filenames.each do |filename|
|
||||
current_site.delete_file(filename)
|
||||
paths.each do |path|
|
||||
current_site.delete_file(path)
|
||||
end
|
||||
|
||||
api_success 'file(s) have been deleted'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue