SECURITY: Rate limit the creation of backups

This commit is contained in:
Loïc Guitaut
2023-03-14 17:07:18 +01:00
committed by Loïc Guitaut
parent 272c31023d
commit 0bd64788d2
4 changed files with 78 additions and 22 deletions

View File

@ -1,18 +1,20 @@
# frozen_string_literal: true
RSpec.describe BackupRestore::Backuper do
it "returns a non-empty parameterized title when site title contains unicode" do
SiteSetting.title = "Ɣ"
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
describe "#get_parameterized_title" do
it "returns a non-empty parameterized title when site title contains unicode" do
SiteSetting.title = "Ɣ"
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
expect(backuper.send(:get_parameterized_title)).to eq("discourse")
end
expect(backuper.send(:get_parameterized_title)).to eq("discourse")
end
it "returns a valid parameterized site title" do
SiteSetting.title = "Coding Horror"
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
it "returns a valid parameterized site title" do
SiteSetting.title = "Coding Horror"
backuper = BackupRestore::Backuper.new(Discourse.system_user.id)
expect(backuper.send(:get_parameterized_title)).to eq("coding-horror")
expect(backuper.send(:get_parameterized_title)).to eq("coding-horror")
end
end
describe "#notify_user" do
@ -69,4 +71,32 @@ RSpec.describe BackupRestore::Backuper do
)
end
end
describe "#run" do
subject(:run) { backup.run }
let(:backup) { described_class.new(user.id) }
let(:user) { Discourse.system_user }
let(:store) { backup.store }
before { backup.stubs(:success).returns(success) }
context "when the result isn't successful" do
let(:success) { false }
it "doesn't refresh disk stats" do
store.expects(:reset_cache).never
run
end
end
context "when the result is successful" do
let(:success) { true }
it "refreshes disk stats" do
store.expects(:reset_cache)
run
end
end
end
end