Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/stable' into pkgr
Browse files Browse the repository at this point in the history
  • Loading branch information
crohr committed Dec 18, 2017
2 parents 6c955ab + c6f5df4 commit 9c32ad7
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 10 deletions.
11 changes: 6 additions & 5 deletions app/controllers/admin/backups_controller.rb
@@ -1,5 +1,4 @@
require "backup_restore/backup_restore" require "backup_restore/backup_restore"
require "email_backup_token"


class Admin::BackupsController < Admin::AdminController class Admin::BackupsController < Admin::AdminController


Expand Down Expand Up @@ -47,10 +46,12 @@ def cancel


def email def email
if backup = Backup[params.fetch(:id)] if backup = Backup[params.fetch(:id)]
token = EmailBackupToken.set(current_user.id) Jobs.enqueue(:download_backup_email,
download_url = "#{url_for(controller: 'backups', action: 'show')}?token=#{token}" user_id: current_user.id,
Jobs.enqueue(:download_backup_email, to_address: current_user.email, backup_file_path: download_url) backup_file_path: url_for(controller: 'backups', action: 'show')
render nothing: true )

render body: nil
else else
render nothing: true, status: 404 render nothing: true, status: 404
end end
Expand Down
13 changes: 9 additions & 4 deletions app/jobs/regular/download_backup_email.rb
@@ -1,4 +1,5 @@
require_dependency 'email/sender' require_dependency 'email/sender'
require_dependency "email_backup_token"


module Jobs module Jobs


Expand All @@ -7,13 +8,17 @@ class DownloadBackupEmail < Jobs::Base
sidekiq_options queue: 'critical' sidekiq_options queue: 'critical'


def execute(args) def execute(args)
to_address = args[:to_address] user_id = args[:user_id]
backup_file_path = args[:backup_file_path] user = User.find_by(id: user_id)
raise Discourse::InvalidParameters.new(:user_id) unless user


raise Discourse::InvalidParameters.new(:to_address) if to_address.blank? backup_file_path = args[:backup_file_path]
raise Discourse::InvalidParameters.new(:backup_file_path) if backup_file_path.blank? raise Discourse::InvalidParameters.new(:backup_file_path) if backup_file_path.blank?


message = DownloadBackupMailer.send_email(to_address, backup_file_path) backup_file_path = URI(backup_file_path)
backup_file_path.query = URI.encode_www_form(token: EmailBackupToken.set(user.id))

message = DownloadBackupMailer.send_email(user.email, backup_file_path.to_s)
Email::Sender.new(message, :download_backup_message).send Email::Sender.new(message, :download_backup_message).send
end end


Expand Down
6 changes: 5 additions & 1 deletion spec/controllers/admin/backups_controller_spec.rb
Expand Up @@ -132,7 +132,11 @@


it "enqueues email job" do it "enqueues email job" do
Backup.expects(:[]).with(backup_filename).returns(b) Backup.expects(:[]).with(backup_filename).returns(b)
Jobs.expects(:enqueue).with(:download_backup_email, has_entries(to_address: @admin.email))
Jobs.expects(:enqueue).with(:download_backup_email,
user_id: @admin.id,
backup_file_path: "http://test.host/admin/backups/2014-02-10-065935.tar.gz"
)


xhr :put, :email, id: backup_filename xhr :put, :email, id: backup_filename


Expand Down
22 changes: 22 additions & 0 deletions spec/jobs/download_backup_email_spec.rb
@@ -0,0 +1,22 @@
require 'rails_helper'

RSpec.describe Jobs::DownloadBackupEmail do
let(:user) { Fabricate(:admin) }

it "should work" do
described_class.new.execute(
user_id: user.id,
backup_file_path: "http://some.example.test/"
)

email = ActionMailer::Base.deliveries.last

expect(email.subject).to eq(I18n.t('download_backup_mailer.subject_template',
email_prefix: SiteSetting.title
))

expect(email.body.raw_source).to eq(I18n.t('download_backup_mailer.text_body_template',
backup_file_path: "http://some.example.test/?token=#{EmailBackupToken.get(user.id)}"
))
end
end
64 changes: 64 additions & 0 deletions spec/requests/admin/backups_controller_spec.rb
@@ -0,0 +1,64 @@
require 'rails_helper'

RSpec.describe Admin::BackupsController do
let(:admin) { Fabricate(:admin) }

before do
sign_in(admin)
end

describe '#rollback' do
it 'should rollback the restore' do
BackupRestore.expects(:rollback!)

post "/admin/backups/rollback.json"

expect(response).to be_success
end

it 'should not allow rollback via a GET request' do
expect { get "/admin/backups/rollback.json" }
.to raise_error(ActionController::RoutingError)
end
end

describe '#cancel' do
it "should cancel an backup" do
BackupRestore.expects(:cancel!)

delete "/admin/backups/cancel.json"

expect(response).to be_success
end

it 'should not allow cancel via a GET request' do
expect { get "/admin/backups/cancel.json" }
.to raise_error(ActionController::RoutingError)
end
end

describe "#email" do
let(:backup_filename) { "test.tar.gz" }
let(:backup) { Backup.new(backup_filename) }

it "enqueues email job" do
Backup.expects(:[]).with(backup_filename).returns(backup)

Jobs.expects(:enqueue).with(:download_backup_email,
user_id: admin.id,
backup_file_path: 'http://www.example.com/admin/backups/test.tar.gz'
)

put "/admin/backups/#{backup_filename}.json"

expect(response).to be_success
end

it "returns 404 when the backup does not exist" do
put "/admin/backups/#{backup_filename}.json"

expect(response).to be_not_found
end

end
end

0 comments on commit 9c32ad7

Please sign in to comment.