mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 16:21:18 +08:00
Revert "FEATURE: Support backup uploads/downloads directly to/from S3."
This reverts commit c29a4dddc1694e2805944f4d5fd0f4fd4514092e. We're doing a beta bump soon so un-revert this after that is done.
This commit is contained in:
@ -1,26 +1,20 @@
|
||||
require "backup_restore/backup_restore"
|
||||
require "backup_restore/backup_store"
|
||||
|
||||
class Admin::BackupsController < Admin::AdminController
|
||||
|
||||
before_action :ensure_backups_enabled
|
||||
skip_before_action :check_xhr, only: [:index, :show, :logs, :check_backup_chunk, :upload_backup_chunk]
|
||||
|
||||
def index
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
store_preloaded("backups", MultiJson.dump(serialize_data(Backup.all, BackupSerializer)))
|
||||
store_preloaded("operations_status", MultiJson.dump(BackupRestore.operations_status))
|
||||
store_preloaded("logs", MultiJson.dump(BackupRestore.logs))
|
||||
render "default/empty"
|
||||
end
|
||||
|
||||
format.json do
|
||||
store = BackupRestore::BackupStore.create
|
||||
|
||||
begin
|
||||
render_serialized(store.files, BackupFileSerializer)
|
||||
rescue BackupRestore::BackupStore::StorageError => e
|
||||
render_json_error(e)
|
||||
end
|
||||
render_serialized(Backup.all, BackupSerializer)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -52,11 +46,8 @@ class Admin::BackupsController < Admin::AdminController
|
||||
end
|
||||
|
||||
def email
|
||||
store = BackupRestore::BackupStore.create
|
||||
|
||||
if store.file(params.fetch(:id)).present?
|
||||
Jobs.enqueue(
|
||||
:download_backup_email,
|
||||
if backup = Backup[params.fetch(:id)]
|
||||
Jobs.enqueue(:download_backup_email,
|
||||
user_id: current_user.id,
|
||||
backup_file_path: url_for(controller: 'backups', action: 'show')
|
||||
)
|
||||
@ -68,34 +59,28 @@ class Admin::BackupsController < Admin::AdminController
|
||||
end
|
||||
|
||||
def show
|
||||
|
||||
if !EmailBackupToken.compare(current_user.id, params.fetch(:token))
|
||||
@error = I18n.t('download_backup_mailer.no_token')
|
||||
return render template: 'admin/backups/show.html.erb', layout: 'no_ember', status: 422
|
||||
end
|
||||
|
||||
store = BackupRestore::BackupStore.create
|
||||
|
||||
if backup = store.file(params.fetch(:id), include_download_source: true)
|
||||
if !@error && backup = Backup[params.fetch(:id)]
|
||||
EmailBackupToken.del(current_user.id)
|
||||
StaffActionLogger.new(current_user).log_backup_download(backup)
|
||||
|
||||
if store.remote?
|
||||
redirect_to backup.source
|
||||
else
|
||||
headers['Content-Length'] = File.size(backup.source).to_s
|
||||
send_file backup.source
|
||||
end
|
||||
headers['Content-Length'] = File.size(backup.path).to_s
|
||||
send_file backup.path
|
||||
else
|
||||
render body: nil, status: 404
|
||||
if @error
|
||||
render template: 'admin/backups/show.html.erb', layout: 'no_ember', status: 422
|
||||
else
|
||||
render body: nil, status: 404
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
store = BackupRestore::BackupStore.create
|
||||
|
||||
if backup = store.file(params.fetch(:id))
|
||||
if backup = Backup[params.fetch(:id)]
|
||||
StaffActionLogger.new(current_user).log_backup_destroy(backup)
|
||||
store.delete_file(backup.filename)
|
||||
backup.remove
|
||||
render body: nil
|
||||
else
|
||||
render body: nil, status: 404
|
||||
@ -146,13 +131,13 @@ class Admin::BackupsController < Admin::AdminController
|
||||
end
|
||||
|
||||
def check_backup_chunk
|
||||
identifier = params.fetch(:resumableIdentifier)
|
||||
filename = params.fetch(:resumableFilename)
|
||||
chunk_number = params.fetch(:resumableChunkNumber)
|
||||
identifier = params.fetch(:resumableIdentifier)
|
||||
filename = params.fetch(:resumableFilename)
|
||||
chunk_number = params.fetch(:resumableChunkNumber)
|
||||
current_chunk_size = params.fetch(:resumableCurrentChunkSize).to_i
|
||||
|
||||
# path to chunk file
|
||||
chunk = BackupRestore::LocalBackupStore.chunk_path(identifier, filename, chunk_number)
|
||||
chunk = Backup.chunk_path(identifier, filename, chunk_number)
|
||||
# check chunk upload status
|
||||
status = HandleChunkUpload.check_chunk(chunk, current_chunk_size: current_chunk_size)
|
||||
|
||||
@ -160,21 +145,21 @@ class Admin::BackupsController < Admin::AdminController
|
||||
end
|
||||
|
||||
def upload_backup_chunk
|
||||
filename = params.fetch(:resumableFilename)
|
||||
filename = params.fetch(:resumableFilename)
|
||||
total_size = params.fetch(:resumableTotalSize).to_i
|
||||
|
||||
return render status: 415, plain: I18n.t("backup.backup_file_should_be_tar_gz") unless valid_extension?(filename)
|
||||
return render status: 415, plain: I18n.t("backup.not_enough_space_on_disk") unless has_enough_space_on_disk?(total_size)
|
||||
return render status: 415, plain: I18n.t("backup.invalid_filename") unless valid_filename?(filename)
|
||||
return render status: 415, plain: I18n.t("backup.backup_file_should_be_tar_gz") unless /\.(tar\.gz|t?gz)$/i =~ filename
|
||||
return render status: 415, plain: I18n.t("backup.not_enough_space_on_disk") unless has_enough_space_on_disk?(total_size)
|
||||
return render status: 415, plain: I18n.t("backup.invalid_filename") unless !!(/^[a-zA-Z0-9\._\-]+$/ =~ filename)
|
||||
|
||||
file = params.fetch(:file)
|
||||
identifier = params.fetch(:resumableIdentifier)
|
||||
chunk_number = params.fetch(:resumableChunkNumber).to_i
|
||||
chunk_size = params.fetch(:resumableChunkSize).to_i
|
||||
file = params.fetch(:file)
|
||||
identifier = params.fetch(:resumableIdentifier)
|
||||
chunk_number = params.fetch(:resumableChunkNumber).to_i
|
||||
chunk_size = params.fetch(:resumableChunkSize).to_i
|
||||
current_chunk_size = params.fetch(:resumableCurrentChunkSize).to_i
|
||||
|
||||
# path to chunk file
|
||||
chunk = BackupRestore::LocalBackupStore.chunk_path(identifier, filename, chunk_number)
|
||||
chunk = Backup.chunk_path(identifier, filename, chunk_number)
|
||||
# upload chunk
|
||||
HandleChunkUpload.upload_chunk(chunk, file: file)
|
||||
|
||||
@ -188,24 +173,6 @@ class Admin::BackupsController < Admin::AdminController
|
||||
render body: nil
|
||||
end
|
||||
|
||||
def create_upload_url
|
||||
params.require(:filename)
|
||||
filename = params.fetch(:filename)
|
||||
|
||||
return render_error("backup.backup_file_should_be_tar_gz") unless valid_extension?(filename)
|
||||
return render_error("backup.invalid_filename") unless valid_filename?(filename)
|
||||
|
||||
store = BackupRestore::BackupStore.create
|
||||
|
||||
begin
|
||||
upload_url = store.generate_upload_url(filename)
|
||||
rescue BackupRestore::BackupStore::BackupFileExists
|
||||
return render_error("backup.file_exists")
|
||||
end
|
||||
|
||||
render json: success_json.merge(url: upload_url)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def has_enough_space_on_disk?(size)
|
||||
@ -216,15 +183,4 @@ class Admin::BackupsController < Admin::AdminController
|
||||
raise Discourse::InvalidAccess.new unless SiteSetting.enable_backups?
|
||||
end
|
||||
|
||||
def valid_extension?(filename)
|
||||
/\.(tar\.gz|t?gz)$/i =~ filename
|
||||
end
|
||||
|
||||
def valid_filename?(filename)
|
||||
!!(/^[a-zA-Z0-9\._\-]+$/ =~ filename)
|
||||
end
|
||||
|
||||
def render_error(message_key)
|
||||
render json: failed_json.merge(message: I18n.t(message_key))
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user