Merge branch 'master' into glitch-soc/merge-upstream
Conflicts: app/controllers/api/v1/mutes_controller.rb config/locales/simple_form.pl.yml
This commit is contained in:
@@ -3,13 +3,16 @@
|
||||
require 'thor'
|
||||
require_relative 'mastodon/media_cli'
|
||||
require_relative 'mastodon/emoji_cli'
|
||||
|
||||
require_relative 'mastodon/accounts_cli'
|
||||
module Mastodon
|
||||
class CLI < Thor
|
||||
desc 'media SUBCOMMAND ...ARGS', 'manage media files'
|
||||
desc 'media SUBCOMMAND ...ARGS', 'Manage media files'
|
||||
subcommand 'media', Mastodon::MediaCLI
|
||||
|
||||
desc 'emoji SUBCOMMAND ...ARGS', 'manage custom emoji'
|
||||
desc 'emoji SUBCOMMAND ...ARGS', 'Manage custom emoji'
|
||||
subcommand 'emoji', Mastodon::EmojiCLI
|
||||
|
||||
desc 'accounts SUBCOMMAND ...ARGS', 'Manage accounts'
|
||||
subcommand 'accounts', Mastodon::AccountsCLI
|
||||
end
|
||||
end
|
||||
|
||||
55
lib/mastodon/accounts_cli.rb
Normal file
55
lib/mastodon/accounts_cli.rb
Normal file
@@ -0,0 +1,55 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rubygems/package'
|
||||
require_relative '../../config/boot'
|
||||
require_relative '../../config/environment'
|
||||
require_relative 'cli_helper'
|
||||
|
||||
module Mastodon
|
||||
class AccountsCLI < Thor
|
||||
option :all, type: :boolean
|
||||
desc 'rotate [USERNAME]', 'Generate and broadcast new keys'
|
||||
long_desc <<-LONG_DESC
|
||||
Generate and broadcast new RSA keys as part of security
|
||||
maintenance.
|
||||
|
||||
With the --all option, all local accounts will be subject
|
||||
to the rotation. Otherwise, and by default, only a single
|
||||
account specified by the USERNAME argument will be
|
||||
processed.
|
||||
LONG_DESC
|
||||
def rotate(username = nil)
|
||||
if options[:all]
|
||||
processed = 0
|
||||
delay = 0
|
||||
|
||||
Account.local.without_suspended.find_in_batches do |accounts|
|
||||
accounts.each do |account|
|
||||
rotate_keys_for_account(account, delay)
|
||||
processed += 1
|
||||
say('.', :green, false)
|
||||
end
|
||||
|
||||
delay += 5.minutes
|
||||
end
|
||||
|
||||
say
|
||||
say("OK, rotated keys for #{processed} accounts", :green)
|
||||
elsif username.present?
|
||||
rotate_keys_for_account(Account.find_local(username))
|
||||
say('OK', :green)
|
||||
else
|
||||
say('No account(s) given', :red)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def rotate_keys_for_account(account, delay = 0)
|
||||
old_key = account.private_key
|
||||
new_key = OpenSSL::PKey::RSA.new(2048).to_pem
|
||||
account.update(private_key: new_key)
|
||||
ActivityPub::UpdateDistributionWorker.perform_in(delay, account.id, sign_with: old_key)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -13,7 +13,7 @@ module Mastodon
|
||||
option :suffix
|
||||
option :overwrite, type: :boolean
|
||||
option :unlisted, type: :boolean
|
||||
desc 'import PATH', 'import emoji from a TAR archive at PATH'
|
||||
desc 'import PATH', 'Import emoji from a TAR archive at PATH'
|
||||
long_desc <<-LONG_DESC
|
||||
Imports custom emoji from a TAR archive specified by PATH.
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ module Mastodon
|
||||
class MediaCLI < Thor
|
||||
option :days, type: :numeric, default: 7
|
||||
option :background, type: :boolean, default: false
|
||||
desc 'remove', 'remove remote media files'
|
||||
desc 'remove', 'Remove remote media files'
|
||||
long_desc <<-DESC
|
||||
Removes locally cached copies of media attachments from other servers.
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ def each_schema_load_environment
|
||||
# needing to do the same, and we can't even use the same method
|
||||
# to do it.
|
||||
|
||||
if Rails.env == 'development'
|
||||
if Rails.env.development?
|
||||
test_conf = ActiveRecord::Base.configurations['test']
|
||||
|
||||
if test_conf['database']&.present?
|
||||
|
||||
@@ -280,14 +280,14 @@ namespace :mastodon do
|
||||
|
||||
begin
|
||||
ActionMailer::Base.smtp_settings = {
|
||||
:port => env['SMTP_PORT'],
|
||||
:address => env['SMTP_SERVER'],
|
||||
:user_name => env['SMTP_LOGIN'].presence,
|
||||
:password => env['SMTP_PASSWORD'].presence,
|
||||
:domain => env['LOCAL_DOMAIN'],
|
||||
:authentication => env['SMTP_AUTH_METHOD'] == 'none' ? nil : env['SMTP_AUTH_METHOD'] || :plain,
|
||||
:openssl_verify_mode => env['SMTP_OPENSSL_VERIFY_MODE'],
|
||||
:enable_starttls_auto => true,
|
||||
port: env['SMTP_PORT'],
|
||||
address: env['SMTP_SERVER'],
|
||||
user_name: env['SMTP_LOGIN'].presence,
|
||||
password: env['SMTP_PASSWORD'].presence,
|
||||
domain: env['LOCAL_DOMAIN'],
|
||||
authentication: env['SMTP_AUTH_METHOD'] == 'none' ? nil : env['SMTP_AUTH_METHOD'] || :plain,
|
||||
openssl_verify_mode: env['SMTP_OPENSSL_VERIFY_MODE'],
|
||||
enable_starttls_auto: true,
|
||||
}
|
||||
|
||||
ActionMailer::Base.default_options = {
|
||||
@@ -326,13 +326,11 @@ namespace :mastodon do
|
||||
|
||||
if prompt.yes?('Prepare the database now?')
|
||||
prompt.say 'Running `RAILS_ENV=production rails db:setup` ...'
|
||||
prompt.say "\n"
|
||||
prompt.say "\n\n"
|
||||
|
||||
if cmd.run!({ RAILS_ENV: 'production', SAFETY_ASSURED: 1 }, :rails, 'db:setup').failure?
|
||||
prompt.say "\n"
|
||||
prompt.error 'That failed! Perhaps your configuration is not right'
|
||||
else
|
||||
prompt.say "\n"
|
||||
prompt.ok 'Done!'
|
||||
end
|
||||
end
|
||||
@@ -343,13 +341,11 @@ namespace :mastodon do
|
||||
|
||||
if prompt.yes?('Compile the assets now?')
|
||||
prompt.say 'Running `RAILS_ENV=production rails assets:precompile` ...'
|
||||
prompt.say "\n"
|
||||
prompt.say "\n\n"
|
||||
|
||||
if cmd.run!({ RAILS_ENV: 'production' }, :rails, 'assets:precompile').failure?
|
||||
prompt.say "\n"
|
||||
prompt.error 'That failed! Maybe you need swap space?'
|
||||
else
|
||||
prompt.say "\n"
|
||||
prompt.say 'Done!'
|
||||
end
|
||||
end
|
||||
@@ -715,10 +711,10 @@ namespace :mastodon do
|
||||
pastel = Pastel.new
|
||||
|
||||
duplicate_masters.each do |account|
|
||||
puts pastel.yellow("First of their name: ") + pastel.bold(account.username) + " (#{admin_account_url(account.id)})"
|
||||
puts pastel.yellow('First of their name: ') + pastel.bold(account.username) + " (#{admin_account_url(account.id)})"
|
||||
|
||||
Account.where('lower(username) = ?', account.username.downcase).where.not(id: account.id).each do |duplicate|
|
||||
puts " " + pastel.red("Duplicate: ") + admin_account_url(duplicate.id)
|
||||
puts ' ' + pastel.red('Duplicate: ') + admin_account_url(duplicate.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user