From e2eb45a5a3bb7bc5ac46846e8352b9af2cda7e7c Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 15 Dec 2017 14:51:24 -0600 Subject: [PATCH] Auto-promote DanbooruBot to Mod. Auto-create DanbooruBot if it doesn't exist. --- app/models/dmail.rb | 4 ++-- app/models/user.rb | 4 ++-- config/danbooru_default_config.rb | 4 +++- config/initializers/system_user.rb | 10 ++++++++++ test/unit/dmail_test.rb | 2 +- test/unit/post_disapproval_test.rb | 2 +- test/unit/post_replacement_test.rb | 2 +- test/unit/user_test.rb | 2 +- 8 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 config/initializers/system_user.rb diff --git a/app/models/dmail.rb b/app/models/dmail.rb index ea2a29114..da4344a3e 100644 --- a/app/models/dmail.rb +++ b/app/models/dmail.rb @@ -86,7 +86,7 @@ class Dmail < ApplicationRecord end def create_automated(params) - dmail = Dmail.new(from: Danbooru.config.system_user, **params) + dmail = Dmail.new(from: User.system, **params) dmail.owner = dmail.to dmail.save dmail @@ -234,7 +234,7 @@ class Dmail < ApplicationRecord end def is_automated? - from == Danbooru.config.system_user + from == User.system end def filtered? diff --git a/app/models/user.rb b/app/models/user.rb index ca582c23f..be950b7f8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -316,7 +316,7 @@ class User < ApplicationRecord module ClassMethods def system - Danbooru.config.system_user + User.find_by!(name: Danbooru.config.system_user) end def level_hash @@ -366,7 +366,7 @@ class User < ApplicationRecord def promote_to_admin_if_first_user return if Rails.env.test? - if User.count == 0 + if User.admins.count == 0 self.level = Levels::ADMIN self.can_approve_posts = true self.can_upload_free = true diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index ec254f56a..874eef4a6 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -37,8 +37,10 @@ module Danbooru end # System actions, such as sending automated dmails, will be performed with this account. + # This account will be created automatically if it doesn't exist. It will + # be promoted to Moderator if it isn't already a Moderator. def system_user - User.find_by_name("DanbooruBot") || User.admins.first + "DanbooruBot" end def upload_feedback_topic diff --git a/config/initializers/system_user.rb b/config/initializers/system_user.rb new file mode 100644 index 000000000..2c210facd --- /dev/null +++ b/config/initializers/system_user.rb @@ -0,0 +1,10 @@ +require "securerandom" + +system = User.find_or_create_by!(name: Danbooru.config.system_user) do |user| + user.password = SecureRandom.base64(32) +end + +unless system.is_moderator? + system.level = User::Levels::MODERATOR + system.save +end diff --git a/test/unit/dmail_test.rb b/test/unit/dmail_test.rb index a2ab36fc2..875eaedb8 100644 --- a/test/unit/dmail_test.rb +++ b/test/unit/dmail_test.rb @@ -177,7 +177,7 @@ class DmailTest < ActiveSupport::TestCase context "that is automated" do setup do @bot = FactoryGirl.create(:user) - Danbooru.config.stubs(:system_user).returns(@bot) + User.stubs(:system).returns(@bot) end should "only create a copy for the recipient" do diff --git a/test/unit/post_disapproval_test.rb b/test/unit/post_disapproval_test.rb index 8b010d8f8..c4ef31399 100644 --- a/test/unit/post_disapproval_test.rb +++ b/test/unit/post_disapproval_test.rb @@ -85,7 +85,7 @@ class PostDisapprovalTest < ActiveSupport::TestCase should "dmail the uploaders" do bot = FactoryGirl.create(:user) - Danbooru.config.stubs(:system_user).returns(bot) + User.stubs(:system).returns(bot) assert_difference(["@uploaders[0].dmails.count", "@uploaders[1].dmails.count"], 1) do PostDisapproval.dmail_messages! diff --git a/test/unit/post_replacement_test.rb b/test/unit/post_replacement_test.rb index e33fdbf4a..3785bafea 100644 --- a/test/unit/post_replacement_test.rb +++ b/test/unit/post_replacement_test.rb @@ -20,7 +20,7 @@ class PostReplacementTest < ActiveSupport::TestCase Delayed::Worker.delay_jobs = true # don't delete the old images right away @system = FactoryGirl.create(:user, created_at: 2.weeks.ago) - Danbooru.config.stubs(:system_user).returns(@system) + User.stubs(:system).returns(@system) @uploader = FactoryGirl.create(:user, created_at: 2.weeks.ago, can_upload_free: true) @replacer = FactoryGirl.create(:user, created_at: 2.weeks.ago, can_approve_posts: true) diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 8cd53246e..21efdb64c 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -28,7 +28,7 @@ class UserTest < ActiveSupport::TestCase should "send an automated dmail to the user" do bot = FactoryGirl.create(:user) - Danbooru.config.stubs(:system_user).returns(bot) + User.stubs(:system).returns(bot) assert_difference("Dmail.count", 1) do @user.promote_to!(User::Levels::GOLD)