Merge branch 'main' into glitch-soc/merge-upstream

signup-info-prompt
Claire 2022-01-30 22:33:30 +01:00
commit 7679ddcd5e
7 changed files with 81 additions and 4 deletions

View File

@ -8,6 +8,7 @@ module AccountOwnedConcern
before_action :set_account, if: :account_required? before_action :set_account, if: :account_required?
before_action :check_account_approval, if: :account_required? before_action :check_account_approval, if: :account_required?
before_action :check_account_suspension, if: :account_required? before_action :check_account_suspension, if: :account_required?
before_action :check_account_confirmation, if: :account_required?
end end
private private
@ -28,6 +29,10 @@ module AccountOwnedConcern
not_found if @account.local? && @account.user_pending? not_found if @account.local? && @account.user_pending?
end end
def check_account_confirmation
not_found if @account.local? && !@account.user_confirmed?
end
def check_account_suspension def check_account_suspension
if @account.suspended_permanently? if @account.suspended_permanently?
permanent_suspension_response permanent_suspension_response

View File

@ -1,6 +1,46 @@
class RemoveFauxRemoteAccountDuplicates < ActiveRecord::Migration[5.2] class RemoveFauxRemoteAccountDuplicates < ActiveRecord::Migration[5.2]
disable_ddl_transaction! disable_ddl_transaction!
class StreamEntry < ApplicationRecord
# Dummy class, to make migration possible across version changes
belongs_to :account, inverse_of: :stream_entries
end
class Status < ApplicationRecord
# Dummy class, to make migration possible across version changes
belongs_to :account, inverse_of: :statuses
has_many :favourites, inverse_of: :status, dependent: :destroy
has_many :mentions, dependent: :destroy, inverse_of: :status
end
class Favourite < ApplicationRecord
# Dummy class, to make migration possible across version changes
belongs_to :account, inverse_of: :favourites
belongs_to :status, inverse_of: :favourites
end
class Mention < ApplicationRecord
# Dummy class, to make migration possible across version changes
belongs_to :account, inverse_of: :mentions
belongs_to :status
end
class Notification < ApplicationRecord
# Dummy class, to make migration possible across version changes
belongs_to :account, optional: true
belongs_to :from_account, class_name: 'Account', optional: true
belongs_to :activity, polymorphic: true, optional: true
end
class Account < ApplicationRecord
# Dummy class, to make migration possible across version changes
has_many :stream_entries, inverse_of: :account, dependent: :destroy
has_many :statuses, inverse_of: :account, dependent: :destroy
has_many :favourites, inverse_of: :account, dependent: :destroy
has_many :mentions, inverse_of: :account, dependent: :destroy
has_many :notifications, inverse_of: :account, dependent: :destroy
end
def up def up
local_domain = Rails.configuration.x.local_domain local_domain = Rails.configuration.x.local_domain

View File

@ -1,4 +1,9 @@
class AddInstanceActor < ActiveRecord::Migration[5.2] class AddInstanceActor < ActiveRecord::Migration[5.2]
class Account < ApplicationRecord
# Dummy class, to make migration possible across version changes
validates :username, uniqueness: { scope: :domain, case_sensitive: false }
end
def up def up
Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain) Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain)
end end

View File

@ -1,4 +1,8 @@
class UpdatePtLocales < ActiveRecord::Migration[5.2] class UpdatePtLocales < ActiveRecord::Migration[5.2]
class User < ApplicationRecord
# Dummy class, to make migration possible across version changes
end
disable_ddl_transaction! disable_ddl_transaction!
def up def up

View File

@ -20,7 +20,7 @@ FROM (
HAVING count(follows.id) >= 5 HAVING count(follows.id) >= 5
UNION ALL UNION ALL
SELECT accounts.id AS account_id, SELECT accounts.id AS account_id,
sum(reblogs_count + favourites_count) / (1.0 + sum(reblogs_count + favourites_count)) AS rank, sum(status_stats.reblogs_count + status_stats.favourites_count) / (1.0 + sum(status_stats.reblogs_count + status_stats.favourites_count)) AS rank,
'most_interactions' AS reason 'most_interactions' AS reason
FROM status_stats FROM status_stats
INNER JOIN statuses ON statuses.id = status_stats.status_id INNER JOIN statuses ON statuses.id = status_stats.status_id
@ -32,7 +32,7 @@ FROM (
AND accounts.locked = 'f' AND accounts.locked = 'f'
AND accounts.discoverable = 't' AND accounts.discoverable = 't'
GROUP BY accounts.id GROUP BY accounts.id
HAVING sum(reblogs_count + favourites_count) >= 5 HAVING sum(status_stats.reblogs_count + status_stats.favourites_count) >= 5
) t0 ) t0
GROUP BY account_id GROUP BY account_id
ORDER BY rank DESC ORDER BY rank DESC

View File

@ -18,7 +18,7 @@ FROM (
HAVING count(follows.id) >= 5 HAVING count(follows.id) >= 5
UNION ALL UNION ALL
SELECT account_summaries.account_id AS account_id, SELECT account_summaries.account_id AS account_id,
sum(reblogs_count + favourites_count) / (1.0 + sum(reblogs_count + favourites_count)) AS rank, sum(status_stats.reblogs_count + status_stats.favourites_count) / (1.0 + sum(status_stats.reblogs_count + status_stats.favourites_count)) AS rank,
'most_interactions' AS reason 'most_interactions' AS reason
FROM status_stats FROM status_stats
INNER JOIN statuses ON statuses.id = status_stats.status_id INNER JOIN statuses ON statuses.id = status_stats.status_id
@ -28,7 +28,7 @@ FROM (
AND account_summaries.sensitive = 'f' AND account_summaries.sensitive = 'f'
AND follow_recommendation_suppressions.id IS NULL AND follow_recommendation_suppressions.id IS NULL
GROUP BY account_summaries.account_id GROUP BY account_summaries.account_id
HAVING sum(reblogs_count + favourites_count) >= 5 HAVING sum(status_stats.reblogs_count + status_stats.favourites_count) >= 5
) t0 ) t0
GROUP BY account_id GROUP BY account_id
ORDER BY rank DESC ORDER BY rank DESC

View File

@ -11,10 +11,33 @@ describe ApplicationController, type: :controller do
end end
end end
around do |example|
registrations_mode = Setting.registrations_mode
example.run
Setting.registrations_mode = registrations_mode
end
before do before do
routes.draw { get 'success' => 'anonymous#success' } routes.draw { get 'success' => 'anonymous#success' }
end end
context 'when account is unconfirmed' do
it 'returns http not found' do
account = Fabricate(:user, confirmed_at: nil).account
get 'success', params: { account_username: account.username }
expect(response).to have_http_status(404)
end
end
context 'when account is not approved' do
it 'returns http not found' do
Setting.registrations_mode = 'approved'
account = Fabricate(:user, approved: false).account
get 'success', params: { account_username: account.username }
expect(response).to have_http_status(404)
end
end
context 'when account is suspended' do context 'when account is suspended' do
it 'returns http gone' do it 'returns http gone' do
account = Fabricate(:account, suspended: true) account = Fabricate(:account, suspended: true)