mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Extract shared external upload routes into controller helper (#14984)
This commit refactors the direct external upload routes (get presigned
put, complete external, create/abort/complete multipart) into a
helper which is then included in both BackupController and the
UploadController. This is done so UploadController doesn't need
strange backup logic added to it, and so each controller implementing
this helper can do their own validation/error handling nicely.
This is a follow up to e4350bb966
This commit is contained in:
@@ -4,6 +4,8 @@ require "backup_restore"
|
||||
require "backup_restore/backup_store"
|
||||
|
||||
class Admin::BackupsController < Admin::AdminController
|
||||
include ExternalUploadHelpers
|
||||
|
||||
before_action :ensure_backups_enabled
|
||||
skip_before_action :check_xhr, only: [:index, :show, :logs, :check_backup_chunk, :upload_backup_chunk]
|
||||
|
||||
@@ -234,4 +236,24 @@ class Admin::BackupsController < Admin::AdminController
|
||||
def render_error(message_key)
|
||||
render json: failed_json.merge(message: I18n.t(message_key))
|
||||
end
|
||||
|
||||
def validate_before_create_multipart(file_name:, file_size:, upload_type:)
|
||||
raise ExternalUploadHelpers::ExternalUploadValidationError.new(I18n.t("backup.backup_file_should_be_tar_gz")) unless valid_extension?(file_name)
|
||||
raise ExternalUploadHelpers::ExternalUploadValidationError.new(I18n.t("backup.invalid_filename")) unless valid_filename?(file_name)
|
||||
end
|
||||
|
||||
def self.serialize_upload(_upload)
|
||||
{} # noop, the backup does not create an upload record
|
||||
end
|
||||
|
||||
def create_direct_multipart_upload
|
||||
begin
|
||||
yield
|
||||
rescue BackupRestore::BackupStore::StorageError => err
|
||||
message = debug_upload_error(err, I18n.t("upload.create_multipart_failure", additional_detail: err.message))
|
||||
raise ExternalUploadHelpers::ExternalUploadValidationError.new(message)
|
||||
rescue BackupRestore::BackupStore::BackupFileExists
|
||||
raise ExternalUploadHelpers::ExternalUploadValidationError.new(I18n.t("backup.file_exists"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user