end
end
- def set_account
- @account = Account.find_local!(params[:username])
+ def username_param
+ params[:username]
end
def older_url
module Admin
class AccountsController < BaseController
- before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :remove_header, :enable, :unsilence, :unsuspend, :memorialize]
+ before_action :set_account, only: [:show, :subscribe, :unsubscribe, :redownload, :remove_avatar, :remove_header, :enable, :unsilence, :unsuspend, :memorialize, :approve, :reject]
before_action :require_remote_account!, only: [:subscribe, :unsubscribe, :redownload]
- before_action :require_local_account!, only: [:enable, :memorialize]
+ before_action :require_local_account!, only: [:enable, :memorialize, :approve, :reject]
def index
authorize :account, :index?
redirect_to admin_account_path(@account.id)
end
+ def approve
+ authorize @account.user, :approve?
+ @account.user.approve!
+ redirect_to admin_accounts_path(pending: '1')
+ end
+
+ def reject
+ authorize @account.user, :reject?
+ SuspendAccountService.new.call(@account, including_user: true, destroy: true)
+ redirect_to admin_accounts_path(pending: '1')
+ end
+
def unsilence
authorize @account, :unsilence?
@account.unsilence!
:remote,
:by_domain,
:active,
+ :pending,
:silenced,
:suspended,
:username,
@interactions_week = Redis.current.get("activity:interactions:#{current_week}") || 0
@relay_enabled = Relay.enabled.exists?
@single_user_mode = Rails.configuration.x.single_user_mode
- @registrations_enabled = Setting.open_registrations
+ @registrations_enabled = Setting.registrations_mode != 'none'
@deletions_enabled = Setting.open_deletion
@invites_enabled = Setting.min_invite_role == 'user'
@search_enabled = Chewy.enabled?
site_description
site_extended_description
site_terms
- open_registrations
+ registrations_mode
closed_registrations_message
open_deletion
timeline_preview
).freeze
BOOLEAN_SETTINGS = %w(
- open_registrations
open_deletion
timeline_preview
show_staff_badge
elsif current_user.disabled?
render json: { error: 'Your login is currently disabled' }, status: 403
elsif !current_user.confirmed?
- render json: { error: 'Email confirmation is not completed' }, status: 403
+ render json: { error: 'Your login is missing a confirmed e-mail address' }, status: 403
+ elsif !current_user.approved?
+ render json: { error: 'Your login is currently pending approval' }, status: 403
else
set_user_activity
end
end
def check_enabled_registrations
- forbidden if single_user_mode? || !Setting.open_registrations
+ forbidden if single_user_mode? || !allowed_registrations?
+ end
+
+ def allowed_registrations?
+ Setting.registrations_mode != 'none'
end
end
end
def allowed_registrations?
- Setting.open_registrations || @invite&.valid_for_use?
+ Setting.registrations_mode != 'none' || @invite&.valid_for_use?
end
def invite_code
included do
layout 'public'
+
before_action :set_account
+ before_action :check_account_approval
+ before_action :check_account_suspension
before_action :set_instance_presenter
before_action :set_link_headers
- before_action :check_account_suspension
end
private
def set_account
- @account = Account.find_local!(params[:account_username])
+ @account = Account.find_local!(username_param)
end
def set_instance_presenter
)
end
+ def username_param
+ params[:account_username]
+ end
+
def webfinger_account_link
[
webfinger_account_url,
webfinger_url(resource: @account.to_webfinger_s)
end
+ def check_account_approval
+ not_found if @account.user_pending?
+ end
+
def check_account_suspension
gone if @account.suspended?
end
# frozen_string_literal: true
module Admin::FilterHelper
- ACCOUNT_FILTERS = %i(local remote by_domain active silenced suspended username display_name email ip staff).freeze
+ ACCOUNT_FILTERS = %i(local remote by_domain active pending silenced suspended username display_name email ip staff).freeze
REPORT_FILTERS = %i(resolved account_id target_account_id).freeze
INVITE_FILTER = %i(available expired).freeze
CUSTOM_EMOJI_FILTERS = %i(local remote by_domain shortcode).freeze
end
def open_registrations?
- Setting.open_registrations
+ Setting.registrations_mode == 'open'
+ end
+
+ def approved_registrations?
+ Setting.registrations_mode == 'approved'
+ end
+
+ def closed_registrations?
+ Setting.registrations_mode == 'none'
+ end
+
+ def available_sign_up_path
+ if closed_registrations?
+ 'https://joinmastodon.org/#getting-started'
+ else
+ new_user_registration_path
+ end
end
def open_deletion?
content_tag(:div, &block)
end
end
+
+ def sign_up_message
+ if closed_registrations?
+ t('auth.registration_closed', instance: site_hostname)
+ elsif open_registrations?
+ t('auth.register')
+ elsif approved_registrations?
+ t('auth.apply_for_account')
+ end
+ end
end
overflow: hidden;
text-overflow: ellipsis;
}
+
+.ellipsized-ip {
+ display: inline-block;
+ max-width: 120px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: middle;
+}
mail to: @me.user_email, subject: I18n.t('admin_mailer.new_report.subject', instance: @instance, id: @report.id)
end
end
+
+ def new_pending_account(recipient, account)
+ @account = account
+ @me = recipient
+ @instance = Rails.configuration.x.local_domain
+
+ locale_for_account(@me) do
+ mail to: @me.user_email, subject: I18n.t('admin_mailer.new_pending_account.subject', instance: @instance, username: @account.username)
+ end
+ end
end
:current_sign_in_ip,
:current_sign_in_at,
:confirmed?,
+ :approved?,
+ :pending?,
:admin?,
:moderator?,
:staff?,
def set_defaults!
params['local'] = '1' if params['remote'].blank?
- params['active'] = '1' if params['suspended'].blank? && params['silenced'].blank?
+ params['active'] = '1' if params['suspended'].blank? && params['silenced'].blank? && params['pending'].blank?
end
def scope_for(key, value)
Account.where(domain: value)
when 'active'
Account.without_suspended
+ when 'pending'
+ accounts_with_users.merge User.pending
when 'silenced'
Account.silenced
when 'suspended'
:site_extended_description=,
:site_terms,
:site_terms=,
- :open_registrations,
- :open_registrations=,
+ :registrations_mode,
+ :registrations_mode=,
:closed_registrations_message,
:closed_registrations_message=,
:open_deletion,
# remember_token :string
# chosen_languages :string is an Array
# created_by_application_id :bigint(8)
+# approved :boolean default(TRUE), not null
#
class User < ApplicationRecord
validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create
scope :recent, -> { order(id: :desc) }
+ scope :pending, -> { where(approved: false) }
+ scope :approved, -> { where(approved: true) }
scope :confirmed, -> { where.not(confirmed_at: nil) }
scope :enabled, -> { where(disabled: false) }
scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) }
scope :emailable, -> { confirmed.enabled.joins(:account).merge(Account.searchable) }
before_validation :sanitize_languages
+ before_create :set_approved
# This avoids a deprecation warning from Rails 5.1
# It seems possible that a future release of devise-two-factor will
super
- prepare_new_user! if new_user
+ if new_user && approved?
+ prepare_new_user!
+ elsif new_user
+ notify_staff_about_pending_account!
+ end
end
def confirm!
skip_confirmation!
save!
- prepare_new_user! if new_user
+ prepare_new_user! if new_user && approved?
+ end
+
+ def pending?
+ !approved?
+ end
+
+ def active_for_authentication?
+ super && approved?
+ end
+
+ def inactive_message
+ !approved? ? :pending : super
+ end
+
+ def approve!
+ return if approved?
+
+ update!(approved: true)
+ prepare_new_user!
end
def update_tracked_fields!(request)
private
+ def set_approved
+ self.approved = Setting.registrations_mode == 'open' || invited?
+ end
+
def sanitize_languages
return if chosen_languages.nil?
chosen_languages.reject!(&:blank?)
regenerate_feed! if needs_feed_update?
end
+ def notify_staff_about_pending_account!
+ User.staff.includes(:account).each do |u|
+ next unless u.allows_report_emails?
+ AdminMailer.new_pending_account(u.account, self).deliver_later
+ end
+ end
+
def regenerate_feed!
return unless Redis.current.setnx("account:#{account_id}:regeneration", true)
Redis.current.expire("account:#{account_id}:regeneration", 1.day.seconds)
staff?
end
+ def approve?
+ staff? && !record.approved?
+ end
+
+ def reject?
+ staff? && !record.approved?
+ end
+
def disable?
staff? && !record.admin?
end
private
def promoteable?
- !record.staff? || !record.admin?
+ record.approved? && (!record.staff? || !record.admin?)
end
def demoteable?
class InstancePresenter
delegate(
- :closed_registrations_message,
:site_contact_email,
- :open_registrations,
:site_title,
:site_short_description,
:site_description,
end
def registrations
- Setting.open_registrations && !Rails.configuration.x.single_user_mode
+ Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode
end
private
private
def allowed_registrations?
- Setting.open_registrations && !Rails.configuration.x.single_user_mode
+ Setting.registrations_mode != 'none' && !Rails.configuration.x.single_user_mode
end
end
.fields-group
= f.simple_fields_for :account do |account_fields|
- = account_fields.input :username, wrapper: :with_label, autofocus: true, label: false, required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', placeholder: t('simple_form.labels.defaults.username') }, append: "@#{site_hostname}", hint: false, disabled: !Setting.open_registrations
+ = account_fields.input :username, wrapper: :with_label, autofocus: true, label: false, required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', placeholder: t('simple_form.labels.defaults.username') }, append: "@#{site_hostname}", hint: false, disabled: closed_registrations?
- = f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false, disabled: !Setting.open_registrations
- = f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }, hint: false, disabled: !Setting.open_registrations
- = f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }, hint: false, disabled: !Setting.open_registrations
+ = f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations?
+ = f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations?
+ = f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'off' }, hint: false, disabled: closed_registrations?
.fields-group
- = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path), disabled: !Setting.open_registrations
+ = f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path), disabled: closed_registrations?
.actions
- = f.button :button, Setting.open_registrations ? t('auth.register') : t('auth.registration_closed', instance: site_hostname), type: :submit, class: 'button button-primary', disabled: !Setting.open_registrations
+ = f.button :button, sign_up_message, type: :submit, class: 'button button-primary', disabled: closed_registrations?
%div{ style: 'margin: -2px 0' }= account_badge(account, all: true)
%td
- if account.user_current_sign_in_ip
- %samp= account.user_current_sign_in_ip
+ %samp.ellipsized-ip{ title: account.user_current_sign_in_ip }= account.user_current_sign_in_ip
- else
\-
%td
- else
\-
%td
- = table_link_to 'circle', t('admin.accounts.web'), web_path("accounts/#{account.id}")
- = table_link_to 'globe', t('admin.accounts.public'), TagManager.instance.url_for(account)
+ - if account.local? && account.user_pending?
+ = table_link_to 'check', t('admin.accounts.approve'), approve_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:approve, account.user)
+ = table_link_to 'times', t('admin.accounts.reject'), reject_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:reject, account.user)
+ - else
+ = table_link_to 'circle', t('admin.accounts.web'), web_path("accounts/#{account.id}")
+ = table_link_to 'globe', t('admin.accounts.public'), TagManager.instance.url_for(account)
.filter-subset
%strong= t('admin.accounts.moderation.title')
%ul
- %li= filter_link_to t('admin.accounts.moderation.active'), silenced: nil, suspended: nil
- %li= filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1', suspended: nil
- %li= filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1', silenced: nil
+ %li= filter_link_to t('admin.accounts.moderation.pending'), pending: '1', silenced: nil, suspended: nil
+ %li= filter_link_to t('admin.accounts.moderation.active'), silenced: nil, suspended: nil, pending: nil
+ %li= filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1', suspended: nil, pending: nil
+ %li= filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1', silenced: nil, pending: nil
.filter-subset
%strong= t('admin.accounts.role')
%ul
%span.red= t('admin.accounts.disabled')
- elsif @account.local? && !@account.user&.confirmed?
%span.neutral= t('admin.accounts.confirming')
+ - elsif @account.local? && !@account.user_approved?
+ %span.neutral= t('admin.accounts.pending')
- else
%span.neutral= t('admin.accounts.no_limits_imposed')
.dashboard__counters__label= t 'admin.accounts.login_status'
%td
- if @account.user&.disabled?
= table_link_to 'unlock', t('admin.accounts.enable'), enable_admin_account_path(@account.id), method: :post if can?(:enable, @account.user)
- - else
+ - elsif @account.user_approved?
= table_link_to 'lock', t('admin.accounts.disable'), new_admin_account_action_path(@account.id, type: 'disable') if can?(:disable, @account.user)
%tr
= link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button' if can?(:reset_password, @account.user)
- if @account.user&.otp_required_for_login?
= link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button' if can?(:disable_2fa, @account.user)
- - unless @account.memorial?
+ - if !@account.memorial? && @account.user_approved?
= link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, @account)
- else
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button' if can?(:redownload, @account)
%div{ style: 'float: left' }
- - if @account.local?
+ - if @account.local? && @account.user_approved?
= link_to t('admin.accounts.warn'), new_admin_account_action_path(@account.id, type: 'none'), class: 'button' if can?(:warn, @account)
- if @account.silenced?
= link_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsilence, @account)
- - else
+ - elsif !@account.local? || @account.user_approved?
= link_to t('admin.accounts.silence'), new_admin_account_action_path(@account.id, type: 'silence'), class: 'button button--destructive' if can?(:silence, @account)
- if @account.local?
+ - if @account.user_pending?
+ = link_to t('admin.accounts.approve'), approve_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button' if can?(:approve, @account.user)
+ = link_to t('admin.accounts.reject'), reject_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:reject, @account.user)
+
- unless @account.user_confirmed?
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button' if can?(:confirm, @account.user)
- if @account.suspended?
= link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsuspend, @account)
- - else
+ - elsif !@account.local? || @account.user_approved?
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(@account.id, type: 'suspend'), class: 'button button--destructive' if can?(:suspend, @account)
- unless @account.local?
.fields-group
= f.input :site_title, wrapper: :with_label, label: t('admin.settings.site_title')
- .fields-group
- = f.input :theme, collection: Themes.instance.names, label_method: lambda { |theme| I18n.t("themes.#{theme}", default: theme) }, wrapper: :with_label, include_blank: false
+ .fields-row
+ .fields-row__column.fields-row__column-6.fields-group
+ = f.input :theme, collection: Themes.instance.names, label_method: lambda { |theme| I18n.t("themes.#{theme}", default: theme) }, wrapper: :with_label, include_blank: false
+ .fields-row__column.fields-row__column-6.fields-group
+ = f.input :registrations_mode, collection: %w(open approved none), wrapper: :with_label, label: t('admin.settings.registrations_mode.title'), include_blank: false, label_method: lambda { |mode| I18n.t("admin.settings.registrations_mode.modes.#{mode}") }
.fields-row
.fields-row__column.fields-row__column-6.fields-group
.fields-group
= f.input :show_staff_badge, as: :boolean, wrapper: :with_label, label: t('admin.settings.show_staff_badge.title'), hint: t('admin.settings.show_staff_badge.desc_html')
- .fields-group
- = f.input :open_registrations, as: :boolean, wrapper: :with_label, label: t('admin.settings.registrations.open.title'), hint: t('admin.settings.registrations.open.desc_html')
-
.fields-group
= f.input :open_deletion, as: :boolean, wrapper: :with_label, label: t('admin.settings.registrations.deletion.title'), hint: t('admin.settings.registrations.deletion.desc_html')
--- /dev/null
+<%= raw t('application_mailer.salutation', name: display_name(@me)) %>
+
+<%= raw t('admin_mailer.new_pending_account.body') %>
+
+<%= raw t('admin.accounts.email') %>: <%= @account.user_email %>
+<%= raw t('admin.accounts.most_recent_ip') %>: <%= @account.user_current_sign_in_ip %>
+
+<%= raw t('application_mailer.view')%> <%= admin_account_url(@account.id) %>
%p.hint= t('auth.agreement_html', rules_path: about_more_path, terms_path: terms_path)
.actions
- = f.button :button, t('auth.register'), type: :submit
+ = f.button :button, sign_up_message, type: :submit
.form-footer= render 'auth/shared/links'
%li= link_to t('auth.login'), new_session_path(resource_name)
- if devise_mapping.registerable? && controller_name != 'registrations'
- %li= link_to t('auth.register'), open_registrations? ? new_registration_path(resource_name) : 'https://joinmastodon.org/#getting-started'
+ %li= link_to t('auth.register'), available_sign_up_path
- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
%li= link_to t('auth.forgot_password'), new_password_path(resource_name)
= link_to root_url, class: 'brand' do
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
- - if Setting.profile_directory
- = link_to t('directories.directory'), explore_path, class: 'nav-link optional'
+ = link_to t('directories.directory'), explore_path, class: 'nav-link optional' if Setting.profile_directory
= link_to t('about.about_this'), about_more_path, class: 'nav-link optional'
= link_to t('about.apps'), 'https://joinmastodon.org/apps', class: 'nav-link optional'
.nav-center
= link_to t('settings.back'), root_url, class: 'nav-link nav-button webapp-btn'
- else
= link_to t('auth.login'), new_user_session_path, class: 'webapp-btn nav-link nav-button'
- = link_to t('auth.register'), open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started', class: 'webapp-btn nav-link nav-button'
+ = link_to t('auth.register'), available_sign_up_path, class: 'webapp-btn nav-link nav-button'
.container= yield
%p.hint.subtle-hint
= t('remote_follow.reason_html', instance: site_hostname)
- = t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
+ = t('remote_follow.no_account_html', sign_up_path: available_sign_up_path)
%p.hint.subtle-hint
= t('remote_follow.reason_html', instance: site_hostname)
- = t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
+ = t('remote_follow.no_account_html', sign_up_path: available_sign_up_path)
%tbody
%tr
%td.column-cell.text-center
- %p= t 'devise.mailer.confirmation_instructions.explanation', host: site_hostname
+ %p= t @resource.approved? ? 'devise.mailer.confirmation_instructions.explanation' : 'devise.mailer.confirmation_instructions.explanation_when_pending', host: site_hostname
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
===
-<%= t 'devise.mailer.confirmation_instructions.explanation', host: site_hostname %>
+<%= t @resource.approved? ? 'devise.mailer.confirmation_instructions.explanation' : 'devise.mailer.confirmation_instructions.explanation_when_pending', host: site_hostname %>
=> <%= confirmation_url(@resource, confirmation_token: @token, redirect_to_app: @resource.created_by_application ? 'true' : nil) %>
min_invite_role:
disabled: لا أحد
title: المستخدِمون المصرح لهم لإرسال الدعوات
- open:
- desc_html: السماح للجميع بإنشاء حساب
- title: فتح التسجيل
show_known_fediverse_at_about_page:
desc_html: عند التثبت ، سوف تظهر toots من جميع fediverse المعروفة على عرض مسبق. وإلا فإنه سيعرض فقط toots المحلية.
title: إظهار الفيديفرس الموحَّد في خيط المُعايَنة
min_invite_role:
disabled: Ningú
title: Permet les invitacions de
- open:
- desc_html: Permet que qualsevol pugui crear un compte
- title: Registre obert
show_known_fediverse_at_about_page:
desc_html: Quan s'activa, mostrarà tots els toots de tot el fedivers conegut en vista prèvia. En cas contrari, només es mostraran toots locals.
title: Mostra el fedivers conegut en vista prèvia de la línia de temps
min_invite_role:
disabled: Nisunu
title: Auturizà l’invitazione da
- open:
- desc_html: Auturizà tuttu u mondu à creà un contu quì
- title: Apre l’arregistramenti
show_known_fediverse_at_about_page:
desc_html: Quandu ghjè selezziunatu, statuti di tuttu l’istanze cunnisciute saranu affissati indè a vista di e linee. Altrimente soli i statuti lucali saranu mustrati.
title: Vedde tuttu u fediverse cunnisciutu nant’a vista di e linee
min_invite_role:
disabled: Nikdo
title: Povolit pozvánky od
- open:
- desc_html: Dovolit každému vytvořit si účet
- title: Zpřístupnit registraci
show_known_fediverse_at_about_page:
desc_html: Je-li toto zapnuto, zobrazí se v náhledu tooty ze všech známých serverů na fediverse. Jinak budou zobrazeny pouze místní tooty.
title: Zobrazit celou známou fediverse na náhledu časové osy
min_invite_role:
disabled: Neb
title: Caniatau gwahoddiadau gan
- open:
- desc_html: Caniatau i unrhywun greu cyfrif
- title: Agor cofrestru
show_known_fediverse_at_about_page:
desc_html: Wedi'i ddewis, bydd yn dangos rhagolwg o dŵtiau o'r holl ffedysawd. Fel arall bydd ond yn dangos tŵtiau lleol.
title: Dangos ffedysawd hysbys ar ragolwg y ffrwd
min_invite_role:
disabled: Ingen
title: Tillad invitationer af
- open:
- desc_html: Tillad alle at oprette en konto
- title: Åben registrering
show_known_fediverse_at_about_page:
desc_html: Når slået til, vil det vise trut fra hele det kendte fedivers på forhåndsvisning. Ellers vil det kun vise lokale trut.
title: Vis kendte fedivers på tidslinje forhåndsvisning
min_invite_role:
disabled: Niemand
title: Einladungen erlauben von
- open:
- desc_html: Allen erlauben, ein Konto zu erstellen
- title: Registrierung öffnen
show_known_fediverse_at_about_page:
desc_html: Wenn aktiviert, wird es alle Beiträge aus dem bereits bekannten Teil des Fediversums auf der Startseite anzeigen. Andernfalls werden lokale Beitrage der Instanz angezeigt.
title: Verwende öffentliche Zeitleiste für die Vorschau
last_attempt: You have one more attempt before your account is locked.
locked: Your account is locked.
not_found_in_database: Invalid %{authentication_keys} or password.
+ pending: Your account is still under review.
timeout: Your session expired. Please sign in again to continue.
unauthenticated: You need to sign in or sign up before continuing.
unconfirmed: You have to confirm your email address before continuing.
action: Verify email address
action_with_app: Confirm and return to %{app}
explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email.
+ explanation_when_pending: You applied for an invite to %{host} with this email address. Once you confirm your e-mail address, we will review your application. You can't login until then. If your application is rejected, your data will be removed, so no further action will be required from you. If this wasn't you, please ignore this email.
extra_html: Please also check out <a href="%{terms_path}">the rules of the server</a> and <a href="%{policy_path}">our terms of service</a>.
subject: 'Mastodon: Confirmation instructions for %{instance}'
title: Verify email address
signed_up: Welcome! You have signed up successfully.
signed_up_but_inactive: You have signed up successfully. However, we could not sign you in because your account is not yet activated.
signed_up_but_locked: You have signed up successfully. However, we could not sign you in because your account is locked.
+ signed_up_but_pending: A message with a confirmation link has been sent to your email address. After you click the link, we will review your application. You will be notified if it is approved.
signed_up_but_unconfirmed: A message with a confirmation link has been sent to your email address. Please follow the link to activate your account. Please check your spam folder if you didn't receive this email.
update_needs_confirmation: You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address. Please check your spam folder if you didn't receive this email.
updated: Your account has been updated successfully.
min_invite_role:
disabled: Κανείς
title: Επέτρεψε προσκλήσεις από
- open:
- desc_html: Επέτρεψε σε οποιονδήποτε να δημιουργήσει λογαριασμό
- title: Άνοιξε τις εγγραφές
show_known_fediverse_at_about_page:
desc_html: Όταν αντιστραφεί, θα δείχνει τα τουτ από όλο το γνωστό fediverse στην προεπισκόπηση. Διαφορετικά θα δείχνει μόνο τοπικά τουτ.
title: Εμφάνιση του γνωστού fediverse στην προεπισκόπηση ροής
delete: Delete
destroyed_msg: Moderation note successfully destroyed!
accounts:
+ approve: Approve
are_you_sure: Are you sure?
avatar: Avatar
by_domain: Domain
moderation:
active: Active
all: All
+ pending: Pending
silenced: Silenced
suspended: Suspended
title: Moderation
no_limits_imposed: No limits imposed
not_subscribed: Not subscribed
outbox_url: Outbox URL
+ pending: Pending review
perform_full_suspension: Suspend
profile_url: Profile URL
promote: Promote
public: Public
push_subscription_expires: PuSH subscription expires
redownload: Refresh profile
+ reject: Reject
remove_avatar: Remove avatar
remove_header: Remove header
resend_confirmation:
min_invite_role:
disabled: No one
title: Allow invitations by
- open:
- desc_html: Allow anyone to create an account
- title: Open registration
+ registrations_mode:
+ modes:
+ approved: Approval required for sign up
+ none: Nobody can sign up
+ open: Anyone can sign up
+ title: Registrations mode
show_known_fediverse_at_about_page:
desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show local toots.
title: Show known fediverse on timeline preview
edit_preset: Edit warning preset
title: Manage warning presets
admin_mailer:
+ new_pending_account:
+ body: The details of the new account are below. You can approve or reject this application.
+ subject: New account up for review on %{instance} (%{username})
new_report:
body: "%{reporter} has reported %{target}"
body_remote: Someone from %{domain} has reported %{target}
your_token: Your access token
auth:
agreement_html: By clicking "Sign up" below you agree to follow <a href="%{rules_path}">the rules of the server</a> and <a href="%{terms_path}">our terms of service</a>.
+ apply_for_account: Request an invite
change_password: Password
checkbox_agreement_html: I agree to the <a href="%{rules_path}" target="_blank">server rules</a> and <a href="%{terms_path}" target="_blank">terms of service</a>
confirm_email: Confirm email
min_invite_role:
disabled: Neniu
title: Permesi invitojn de
- open:
- desc_html: Permesi iun ajn krei konton
- title: Malfermi registriĝojn
show_known_fediverse_at_about_page:
desc_html: Kiam ŝaltita, ĝi montros mesaĝojn de la tuta konata fediverse antaŭvide. Aliokaze, ĝi montros nur lokajn mesaĝojn.
title: Montri konatan fediverse en tempolinia antaŭvido
min_invite_role:
disabled: Nadie
title: Permitir invitaciones de
- open:
- desc_html: Permite a cualquiera a registrar una cuenta
- title: Registro abierto
show_known_fediverse_at_about_page:
desc_html: Cuando esté activado, se mostrarán toots de todo el fediverso conocido en la vista previa. En otro caso, se mostrarán solamente toots locales.
title: Mostrar fediverso conocido en la vista previa de la historia
min_invite_role:
disabled: Inor ez
title: Baimendu hauen gobidapenak
- open:
- desc_html: Baimendu edonori kontu bat sortzea
- title: Ireki izen ematea
show_known_fediverse_at_about_page:
desc_html: Txandakatzean, fedibertsu ezagun osoko toot-ak bistaratuko ditu aurrebistan. Bestela, toot lokalak besterik ez ditu erakutsiko.
title: Erakutsi fedibertsu ezagun osoko denbora-lerroa aurrebistan
min_invite_role:
disabled: هیچ کس
title: اجازهٔ دعوت به
- open:
- desc_html: همه بتوانند حساب باز کنند
- title: امکان ثبت نام
show_known_fediverse_at_about_page:
desc_html: اگر انتخاب شود، بوقهای همهٔ سرورهای دیگر نیز در پیشنمایش این سرور نمایش مییابد. وگرنه فقط بوقهای محلی نشان داده میشوند.
title: نمایش سرورهای دیگر در پیشنمایش این سرور
min_invite_role:
disabled: Ei kukaan
title: Salli kutsut käyttäjältä
- open:
- desc_html: Salli kenen tahansa luoda tili
- title: Avoin rekisteröinti
show_known_fediverse_at_about_page:
desc_html: Kun tämä on valittu, esikatselussa näytetään tuuttaukset kaikkialta tunnetusta fediversumista. Muutoin näytetään vain paikalliset tuuttaukset.
title: Näytä aikajanan esikatselussa koko tunnettu fediversumi
min_invite_role:
disabled: Personne
title: Autoriser les invitations par
- open:
- desc_html: Autoriser tout le monde à créer un compte
- title: Ouvrir les inscriptions
show_known_fediverse_at_about_page:
desc_html: Lorsque l’option est activée, les pouets provenant de toutes les instances connues sont affichés dans la prévisualisation. Sinon, seuls les pouets locaux sont affichés.
title: Afficher le fediverse connu dans la prévisualisation du fil
min_invite_role:
disabled: Ninguén
title: Permitir convites por
- open:
- desc_html: Permitir que calquera poida crear unha conta
- title: Abrir rexistro
show_known_fediverse_at_about_page:
desc_html: Si activado, mostraralle os toots de todo o fediverso coñecido nunha vista previa. Si non só mostrará os toots locais.
title: Mostrar vista previa do fediverso na liña temporal
closed_message:
desc_html: מוצג על הדף הראשי כאשר ההרשמות סגורות<br>ניתן להשתמש בתגיות HTML
title: מסר סגירת הרשמות
- open:
- title: הרשמה פתוחה
site_description:
desc_html: מוצג כפסקה על הדף הראשי ומשמש כתגית מטא. ניתן להשתמש בתגיות HTML, ובמיוחד ב־<code> < a> </code> ו־<code> < em> </code> .
title: תיאור האתר
min_invite_role:
disabled: Senkinek
title: Meghívások engedélyezése
- open:
- desc_html: Bárki létrehozhat felhasználói fiókot
- title: Nyitott regisztráció
show_staff_badge:
desc_html: Stáb-jelvény megjelenítése a felhasználó oldalán
title: Stáb-jelvény megjelenítése
closed_message:
desc_html: Ditampilkan pada halaman depan saat pendaftaran ditutup<br>Anda bisa menggunakan tag HTML
title: Pesan penutupan pendaftaran
- open:
- title: Pendaftaran terbuka
site_description:
desc_html: Ditampilkan sebagai sebuah paragraf di halaman depan dan digunakan sebagai tag meta.<br>Anda bisa menggunakan tag HTML, khususnya <code><a></code> dan <code><em></code>.
title: Deskripsi situs
closed_message:
desc_html: Displayed on frontpage when registrations are closed<br>You can use HTML tags
title: Closed registration message
- open:
- title: Open registration
site_description:
desc_html: Displayed as a paragraph on the frontpage and used as a meta tag.<br>You can use HTML tags, in particular <code><a></code> and <code><em></code>.
title: Site description
min_invite_role:
disabled: Nessuno
title: Permetti inviti da
- open:
- desc_html: Consenti a chiunque di creare un account
- title: Apri registrazioni
show_known_fediverse_at_about_page:
desc_html: Quando attivato, mostra nell'anteprima i toot da tutte le istanze conosciute. Altrimenti mostra solo i toot locali.
title: Mostra la fediverse conosciuta nell'anteprima della timeline
min_invite_role:
disabled: 誰も許可しない
title: 招待の作成を許可
- open:
- desc_html: 誰でも自由にアカウントを作成できるようにします
- title: 新規登録を受け付ける
show_known_fediverse_at_about_page:
desc_html: チェックを入れるとプレビュー欄に既知の連合先全てのトゥートを表示します。外すとローカルのトゥートだけ表示します。
title: タイムラインプレビューに連合タイムラインを表示する
min_invite_role:
disabled: არავინ
title: ნება დაერთოს მოწვეევებს
- open:
- desc_html: უფლება მიეცით ყველას, გახსნან ანგარიში
- title: ღია რეგისტრაცია
show_known_fediverse_at_about_page:
desc_html: ჩართვისას, ეს გამოაჩენს ტუტებს ყველა ცნობილი ფედივერსისგან პრევიუზე. სხვა შემთხვევაში, გამოაჩენს მხოლოდ ლოკალურ ტუტებს.
title: გამოჩნდეს ცნობილი ვედივერსი თაიმლაინ პრევიუში
min_invite_role:
disabled: Ешкім
title: Allow шақырулар by
- open:
- desc_html: Allow anyone to create an аккаунт
- title: Ашық тіркелу
show_known_fediverse_at_about_page:
desc_html: When toggled, it will show toots from all the known fediverse on preview. Otherwise it will only show жергілікті toots.
title: Show known fediverse on timeline превью
min_invite_role:
disabled: 아무도 못 하게
title: 초대링크를 만들 수 있는 권한
- open:
- desc_html: 계정을 생성할 수 있도록 허용합니다
- title: 신규 계정 등록을 받음
show_known_fediverse_at_about_page:
desc_html: 활성화 되면 프리뷰 페이지에서 페디버스의 모든 툿을 표시합니다. 비활성화시 로컬에 있는 툿만 표시 됩니다.
title: 타임라인 프리뷰에 알려진 페디버스 표시하기
min_invite_role:
disabled: Nei vienas
title: Leisti pakvietimus
- open:
- desc_html: Leisti bet kam susikurti paskyrą
- title: Atidaryta registracija
show_known_fediverse_at_about_page:
desc_html: Kai įjungta, rodys įrašus iš visos žinomos fedi-visatos. Kitokiu atvėju, rodys tik lokalius įrašus.
title: Rodyti žinoma fedi-visatos laiko juosta peržiūroje
min_invite_role:
disabled: Niemand
title: Uitnodigingen toestaan door
- open:
- desc_html: Toestaan dat iedereen een account kan registereren
- title: Open registratie
show_known_fediverse_at_about_page:
desc_html: Wanneer ingeschakeld wordt de globale tijdlijn op de voorpagina getoond en wanneer uitgeschakeld de lokale tijdljn.
title: De globale tijdlijn op de voorpagina tonen
min_invite_role:
disabled: Ingen
title: Tillat invitasjoner fra
- open:
- desc_html: Tillatt alle å lage seg en konto
- title: Åpen registrering
show_staff_badge:
desc_html: Vis personalemerke på brukersiden
title: Vis personalemerke
min_invite_role:
disabled: Degun
title: Autorizat amb invitacions
- open:
- desc_html: Autorizar lo monde a se marcar
- title: Inscripcions
show_known_fediverse_at_about_page:
desc_html: Un còp activat mostrarà los tuts de totes los fediverse dins l’apercebut. Autrament mostrarà pas que los tuts locals.
title: Mostrar los fediverse coneguts dins l’apercebut del flux
min_invite_role:
disabled: Nikt
title: Kto może zapraszać użytkowników
- open:
- desc_html: Pozwól każdemu na założenie konta
- title: Otwarta rejestracja
show_known_fediverse_at_about_page:
desc_html: Jeśli włączone, podgląd instancji będzie wyświetlał wpisy z całego Fediwersum. W innym przypadku, będą wyświetlane tylko lokalne wpisy.
title: Pokazuj wszystkie znane wpisy na podglądzie instancji
min_invite_role:
disabled: Ninguém
title: Permitir convites de
- open:
- desc_html: Permitir que qualquer um crie uma conta
- title: Cadastro aberto
show_known_fediverse_at_about_page:
desc_html: Quando ligado, vai mostrar toots de todo o fediverso conhecido na prévia da timeline. Senão, mostra somente toots locais.
title: Mostrar fediverso conhecido na prévia da timeline
min_invite_role:
disabled: Ninguém
title: Permitir convites de
- open:
- desc_html: Permitir que qualquer um crie uma conta
- title: Aceitar novos registos
show_staff_badge:
desc_html: Mostrar um crachá da equipa na página de utilizador
title: Mostrar crachá da equipa
min_invite_role:
disabled: Никого
title: Разрешать приглашения от
- open:
- desc_html: Позволяет любому создавать аккаунт
- title: Открыть регистрацию
show_known_fediverse_at_about_page:
desc_html: Если включено, показывает посты со всех известных узлов в предпросмотре ленты. В противном случае отображаются только локальные посты.
title: Показывать известные узлы в предпросмотре ленты
min_invite_role:
disabled: Nikto
title: Povoliť pozvánky od
- open:
- desc_html: Povoliť každému aby si mohli vytvoriť účet
- title: Verejná registrácia
show_known_fediverse_at_about_page:
desc_html: Pokiaľ je zapnuté, bude v ukážke osi možné nahliadnúť príspevky z celého známeho fediversa. Inak budú ukázané iba príspevky z miestnej osi.
title: Ukáž celé známe fediverse na náhľade osi
min_invite_role:
disabled: Asnjë
title: Lejo vetëm me ftesa
- open:
- desc_html: Lejo cilindo të krijojë llogari
- title: Hapni regjistrimin
show_known_fediverse_at_about_page:
desc_html: Kur përdoret, do të shfaqë mesazhe prej krejt fediversit të njohur, si paraparje. Përndryshe do të shfaqë vetëm mesazhe vendore.
title: Shfaq te paraparja e rrjedhës kohore fedivers të njohur
min_invite_role:
disabled: Niko
title: Samo preko pozivnice
- open:
- desc_html: Dozvoli svakome da kreira nalog
- title: Otvorena registracija
show_staff_badge:
desc_html: Prikaži bedž osoblja na korisničkoj strani
title: Prikaži bedž osoblja
min_invite_role:
disabled: Нико
title: Само преко позивнице
- open:
- desc_html: Дозволи свакоме да креира налог
- title: Отворена регистрација
show_known_fediverse_at_about_page:
desc_html: Када се упали, показаће трубе из свих знаних федиверса на преглед. У супротном ће само показати локалне трубе.
title: Покажи познате здружене инстанце у прегледнику временске линије
min_invite_role:
disabled: Ingen
title: Tillåt inbjudningar av
- open:
- desc_html: Tillåt alla att skapa ett konto
- title: Öppen registrering
show_known_fediverse_at_about_page:
desc_html: När den växlas, kommer toots från hela fediverse visas på förhandsvisning. Annars visas bara lokala toots.
title: Visa det kända fediverse på tidslinjens förhandsgranskning
closed_message:
desc_html: Displayed on frontpage when registrations are closed<br> ใช้ HTML tags ได้
title: ปิดข้อความลงทะเบียน
- open:
- title: เปิดรับลงทะเบียน
site_description:
desc_html: Displayed as a paragraph on the frontpage and used as a meta tag.<br> ใช้ HTML tags ได้, in particular <code><a></code> และ <code><em></code>.
title: คำอธิบายไซต์
closed_message:
desc_html: Kayıt alımları kapatıldığında ana sayfada görüntülenecek mesajdır. <br> HTML etiketleri kullanabilirsiniz
title: Kayıt alımları kapatılma mesajı
- open:
- title: Kayıt alımları
site_description:
desc_html: Ana sayfada paragraf olarak görüntülenecek bilgidir.<br>Özellikle <code><a></code> ve <code><em></code> olmak suretiyle HTML etiketlerini kullanabilirsiniz.
title: Site açıklaması
min_invite_role:
disabled: Ніхто
title: Дозволити запрошення від
- open:
- desc_html: Дозволити будь-ком створювати аккаунт
- title: Відкрити реєстрацію
show_known_fediverse_at_about_page:
desc_html: Коли увімкнено, будуть показані пости з усього відомого федисвіту у передпоказі. Інакше будуть показані локальні пости.
title: Показувати доступний федисвіт у передпоказі фіду
min_invite_role:
disabled: 没有人
title: 允许发送邀请的用户组
- open:
- desc_html: 允许所有人建立帐户
- title: 开放注册
show_known_fediverse_at_about_page:
desc_html: 启用此选项将会在预览中显示来自已知实例的嘟文,否则只会显示本站时间轴的内容.
title: 在时间轴预览中显示已知实例
min_invite_role:
disabled: 沒有人
title: 允許發送邀請的身份
- open:
- desc_html: 允許所有人建立帳戶
- title: 開放註冊
show_known_fediverse_at_about_page:
desc_html: 如果開啟,就會在時間軸預覽顯示跨站文章,否則就只會顯示本站文章。
title: 在時間軸預覽顯示跨站文章
min_invite_role:
disabled: 沒有人
title: 允許發送邀請的身份
- open:
- desc_html: 允許所有人建立帳戶
- title: 開放註冊
show_known_fediverse_at_about_page:
desc_html: 如果開啟,就會在時間軸預覽顯示其他站點嘟文,否則就只會顯示本站點嘟文。
title: 在時間軸預覽顯示其他站點嘟文
post :remove_avatar
post :remove_header
post :memorialize
+ post :approve
+ post :reject
end
resource :change_email, only: [:show, :update]
site_terms: ''
site_contact_username: ''
site_contact_email: ''
- open_registrations: true
+ registrations_mode: 'open'
profile_directory: true
closed_registrations_message: ''
open_deletion: true
--- /dev/null
+require Rails.root.join('lib', 'mastodon', 'migration_helpers')
+
+class AddApprovedToUsers < ActiveRecord::Migration[5.2]
+ include Mastodon::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def up
+ safety_assured do
+ add_column_with_default(
+ :users,
+ :approved,
+ :bool,
+ allow_null: false,
+ default: true
+ )
+ end
+ end
+
+ def down
+ remove_column :users, :approved
+ end
+end
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_03_06_145741) do
+ActiveRecord::Schema.define(version: 2019_03_07_234537) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
t.index ["account_id", "domain"], name: "index_account_domain_blocks_on_account_id_and_domain", unique: true
end
+ create_table "account_identity_proofs", force: :cascade do |t|
+ t.bigint "account_id"
+ t.string "provider", null: false
+ t.string "provider_username", null: false
+ t.text "token", null: false
+ t.boolean "proof_valid"
+ t.boolean "proof_live"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["account_id", "provider", "provider_username"], name: "index_account_proofs_on_account_and_provider_and_username", unique: true
+ t.index ["account_id"], name: "index_account_identity_proofs_on_account_id"
+ end
+
create_table "account_moderation_notes", force: :cascade do |t|
t.text "content", null: false
t.bigint "account_id", null: false
t.string "remember_token"
t.string "chosen_languages", array: true
t.bigint "created_by_application_id"
+ t.boolean "approved", default: true, null: false
t.index ["account_id"], name: "index_users_on_account_id"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["created_by_application_id"], name: "index_users_on_created_by_application_id"
domain = ENV['LOCAL_DOMAIN'] || Rails.configuration.x.local_domain
admin = Account.where(username: 'admin').first_or_initialize(username: 'admin')
admin.save(validate: false)
- User.where(email: "admin@#{domain}").first_or_initialize(email: "admin@#{domain}", password: 'mastodonadmin', password_confirmation: 'mastodonadmin', confirmed_at: Time.now.utc, admin: true, account: admin, agreement: true).save!
+ User.where(email: "admin@#{domain}").first_or_initialize(email: "admin@#{domain}", password: 'mastodonadmin', password_confirmation: 'mastodonadmin', confirmed_at: Time.now.utc, admin: true, account: admin, agreement: true, approved: true).save!
end
desc 'open', 'Open registrations'
def open
- Setting.open_registrations = true
+ Setting.registrations_mode = 'open'
say('OK', :green)
end
desc 'close', 'Close registrations'
def close
- Setting.open_registrations = false
+ Setting.registrations_mode = 'none'
say('OK', :green)
end
end
RSpec.describe AccountsController, type: :controller do
render_views
- let(:alice) { Fabricate(:account, username: 'alice') }
+ let(:alice) { Fabricate(:account, username: 'alice', user: Fabricate(:user)) }
let(:eve) { Fabricate(:user) }
describe 'GET #show' do
expect(Setting.site_title).to eq 'New title'
end
end
-
- context do
- around do |example|
- open_registrations = Setting.open_registrations
- example.run
- Setting.open_registrations = open_registrations
- end
-
- it 'typecasts open_registrations to boolean' do
- Setting.open_registrations = false
- patch :update, params: { form_admin_settings: { open_registrations: '1' } }
-
- expect(response).to redirect_to(edit_admin_settings_path)
- expect(Setting.open_registrations).to eq true
- end
- end
end
end
end
shared_examples 'checks for enabled registrations' do |path|
around do |example|
- open_registrations = Setting.open_registrations
+ registrations_mode = Setting.registrations_mode
example.run
- Setting.open_registrations = open_registrations
+ Setting.registrations_mode = registrations_mode
end
it 'redirects if it is in single user mode while it is open for registration' do
Fabricate(:account)
- Setting.open_registrations = true
+ Setting.registrations_mode = 'open'
expect(Rails.configuration.x).to receive(:single_user_mode).and_return(true)
get path
end
it 'redirects if it is not open for registration while it is not in single user mode' do
- Setting.open_registrations = false
+ Setting.registrations_mode = 'none'
expect(Rails.configuration.x).to receive(:single_user_mode).and_return(false)
get path
context do
around do |example|
- open_registrations = Setting.open_registrations
+ registrations_mode = Setting.registrations_mode
example.run
- Setting.open_registrations = open_registrations
+ Setting.registrations_mode = registrations_mode
end
it 'returns http success' do
- Setting.open_registrations = true
+ Setting.registrations_mode = 'open'
get :new
expect(response).to have_http_status(200)
end
context do
around do |example|
- open_registrations = Setting.open_registrations
+ registrations_mode = Setting.registrations_mode
example.run
- Setting.open_registrations = open_registrations
+ Setting.registrations_mode = registrations_mode
end
subject do
- Setting.open_registrations = true
+ Setting.registrations_mode = 'open'
request.headers["Accept-Language"] = accept_language
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678' } }
end
context 'when account is suspended' do
it 'returns http gone' do
- account = Fabricate(:account, suspended: true)
+ account = Fabricate(:account, suspended: true, user: Fabricate(:user))
+ get 'success', params: { account_username: account.username }
+ expect(response).to have_http_status(410)
+ end
+ end
+
+ context 'when account is deleted by owner' do
+ it 'returns http gone' do
+ account = Fabricate(:account, suspended: true, user: nil)
get 'success', params: { account_username: account.username }
expect(response).to have_http_status(410)
end
context 'when account is not suspended' do
it 'assigns @account' do
- account = Fabricate(:account)
+ account = Fabricate(:account, user: Fabricate(:user))
get 'success', params: { account_username: account.username }
expect(assigns(:account)).to eq account
end
it 'sets link headers' do
- account = Fabricate(:account, username: 'username')
+ account = Fabricate(:account, username: 'username', user: Fabricate(:user))
get 'success', params: { account_username: 'username' }
expect(response.headers['Link'].to_s).to eq '<http://test.host/.well-known/webfinger?resource=acct%3Ausername%40cb6e6126.ngrok.io>; rel="lrdd"; type="application/xrd+xml", <http://test.host/users/username.atom>; rel="alternate"; type="application/atom+xml", <https://cb6e6126.ngrok.io/users/username>; rel="alternate"; type="application/activity+json"'
end
it 'returns http success' do
- account = Fabricate(:account)
+ account = Fabricate(:account, user: Fabricate(:user))
get 'success', params: { account_username: account.username }
expect(response).to have_http_status(200)
end
describe 'open_registrations?' do
it 'returns true when open for registrations' do
without_partial_double_verification do
- expect(Setting).to receive(:open_registrations).and_return(true)
+ expect(Setting).to receive(:registrations_mode).and_return('open')
end
expect(helper.open_registrations?).to eq true
it 'returns false when closed for registrations' do
without_partial_double_verification do
- expect(Setting).to receive(:open_registrations).and_return(false)
+ expect(Setting).to receive(:registrations_mode).and_return('none')
end
expect(helper.open_registrations?).to eq false
end
end
- context do
- around do |example|
- open_registrations = Setting.open_registrations
- example.run
- Setting.open_registrations = open_registrations
- end
-
- it "delegates open_registrations to Setting" do
- Setting.open_registrations = false
-
- expect(instance_presenter.open_registrations).to eq false
- end
- end
-
- context do
- around do |example|
- closed_registrations_message = Setting.closed_registrations_message
- example.run
- Setting.closed_registrations_message = closed_registrations_message
- end
-
- it "delegates closed_registrations_message to Setting" do
- Setting.closed_registrations_message = "Closed message"
-
- expect(instance_presenter.closed_registrations_message).to eq "Closed message"
- end
- end
-
context do
around do |example|
site_contact_email = Setting.site_contact_email
describe '#call' do
it 'returns nil when registrations are closed' do
- Setting.open_registrations = false
+ tmp = Setting.registrations_mode
+ Setting.registrations_mode = 'none'
expect(subject.call(app, good_params)).to be_nil
+ Setting.registrations_mode = tmp
end
it 'raises an error when params are missing' do