Merge commit 'fe2667bb0d3487a32b9da5250402a90482a85fe2' into glitch-soc/merge-upstream
Conflicts: - `app/lib/content_security_policy.rb`: Conflict caused by glitch-soc's support for the extra `EXTRA_DATA_HOSTS` environment variable. Ported upstream's changes while keeping support for `EXTRA_DATA_HOSTS`.
This commit is contained in:
commit
0b2c7cdb02
116 changed files with 873 additions and 518 deletions
|
@ -70,7 +70,7 @@ services:
|
|||
hard: -1
|
||||
|
||||
libretranslate:
|
||||
image: libretranslate/libretranslate:v1.5.2
|
||||
image: libretranslate/libretranslate:v1.5.3
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- lt-data:/home/libretranslate/.local
|
||||
|
|
|
@ -118,15 +118,10 @@ Rails/UnusedIgnoredColumns:
|
|||
Rails/NegateInclude:
|
||||
Enabled: false
|
||||
|
||||
# Reason: Some single letter camel case files shouldn't be split
|
||||
# Reason: Deprecated cop, will be removed in 3.0, replaced by SpecFilePathFormat
|
||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
||||
RSpec/FilePath:
|
||||
CustomTransform:
|
||||
ActivityPub: activitypub
|
||||
DeepL: deepl
|
||||
FetchOEmbedService: fetch_oembed_service
|
||||
OEmbedController: oembed_controller
|
||||
OStatus: ostatus
|
||||
Enabled: false
|
||||
|
||||
# Reason:
|
||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp`
|
||||
# using RuboCop version 1.57.2.
|
||||
# using RuboCop version 1.59.0.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the offenses are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
|
@ -26,7 +26,7 @@ Lint/NonLocalExitFromIterator:
|
|||
|
||||
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
||||
Metrics/AbcSize:
|
||||
Max: 100
|
||||
Max: 82
|
||||
|
||||
# Configuration parameters: CountBlocks, Max.
|
||||
Metrics/BlockNesting:
|
||||
|
@ -50,7 +50,7 @@ RSpec/MultipleExpectations:
|
|||
|
||||
# Configuration parameters: AllowSubject.
|
||||
RSpec/MultipleMemoizedHelpers:
|
||||
Max: 21
|
||||
Max: 17
|
||||
|
||||
# Configuration parameters: AllowedGroups.
|
||||
RSpec/NestedGroups:
|
||||
|
@ -66,7 +66,6 @@ Rails/ApplicationController:
|
|||
Rails/HasAndBelongsToMany:
|
||||
Exclude:
|
||||
- 'app/models/concerns/account/associations.rb'
|
||||
- 'app/models/preview_card.rb'
|
||||
- 'app/models/status.rb'
|
||||
- 'app/models/tag.rb'
|
||||
|
||||
|
@ -144,7 +143,6 @@ Rails/WhereExists:
|
|||
Exclude:
|
||||
- 'app/controllers/activitypub/inboxes_controller.rb'
|
||||
- 'app/controllers/admin/email_domain_blocks_controller.rb'
|
||||
- 'app/controllers/auth/registrations_controller.rb'
|
||||
- 'app/lib/activitypub/activity/create.rb'
|
||||
- 'app/lib/delivery_failure_tracker.rb'
|
||||
- 'app/lib/feed_manager.rb'
|
||||
|
@ -160,24 +158,16 @@ Rails/WhereExists:
|
|||
- 'app/serializers/rest/announcement_serializer.rb'
|
||||
- 'app/serializers/rest/tag_serializer.rb'
|
||||
- 'app/services/activitypub/fetch_remote_status_service.rb'
|
||||
- 'app/services/app_sign_up_service.rb'
|
||||
- 'app/services/vote_service.rb'
|
||||
- 'app/validators/reaction_validator.rb'
|
||||
- 'app/validators/vote_validator.rb'
|
||||
- 'app/workers/move_worker.rb'
|
||||
- 'db/migrate/20190529143559_preserve_old_layout_for_existing_users.rb'
|
||||
- 'lib/tasks/tests.rake'
|
||||
- 'spec/models/account_spec.rb'
|
||||
- 'spec/services/activitypub/process_collection_service_spec.rb'
|
||||
- 'spec/services/purge_domain_service_spec.rb'
|
||||
- 'spec/services/unallow_domain_service_spec.rb'
|
||||
|
||||
# This cop supports safe autocorrection (--autocorrect).
|
||||
# Configuration parameters: AllowOnConstant, AllowOnSelfClass.
|
||||
Style/CaseEquality:
|
||||
Exclude:
|
||||
- 'config/initializers/trusted_proxies.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
||||
# AllowedMethods: ==, equal?, eql?
|
||||
|
@ -205,8 +195,8 @@ Style/FetchEnvVar:
|
|||
- 'config/initializers/devise.rb'
|
||||
- 'config/initializers/paperclip.rb'
|
||||
- 'config/initializers/vapid.rb'
|
||||
- 'lib/premailer_webpack_strategy.rb'
|
||||
- 'lib/mastodon/redis_config.rb'
|
||||
- 'lib/premailer_webpack_strategy.rb'
|
||||
- 'lib/tasks/repo.rake'
|
||||
- 'spec/features/profile_spec.rb'
|
||||
|
||||
|
@ -223,7 +213,6 @@ Style/FormatStringToken:
|
|||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
Style/GlobalStdStream:
|
||||
Exclude:
|
||||
- 'config/boot.rb'
|
||||
- 'config/environments/development.rb'
|
||||
- 'config/environments/production.rb'
|
||||
|
||||
|
@ -253,8 +242,6 @@ Style/GuardClause:
|
|||
- 'app/workers/redownload_media_worker.rb'
|
||||
- 'app/workers/remote_account_refresh_worker.rb'
|
||||
- 'config/initializers/devise.rb'
|
||||
- 'db/migrate/20170901141119_truncate_preview_cards.rb'
|
||||
- 'db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb'
|
||||
- 'lib/devise/strategies/two_factor_ldap_authenticatable.rb'
|
||||
- 'lib/devise/strategies/two_factor_pam_authenticatable.rb'
|
||||
- 'lib/mastodon/cli/accounts.rb'
|
||||
|
@ -275,7 +262,6 @@ Style/HashAsLastArrayItem:
|
|||
- 'app/models/status.rb'
|
||||
- 'app/services/batched_remove_status_service.rb'
|
||||
- 'app/services/notify_service.rb'
|
||||
- 'db/migrate/20181024224956_migrate_account_conversations.rb'
|
||||
|
||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||
Style/HashTransformValues:
|
||||
|
@ -415,8 +401,8 @@ Style/TrailingCommaInHashLiteral:
|
|||
- 'config/environments/test.rb'
|
||||
|
||||
# This cop supports safe autocorrection (--autocorrect).
|
||||
# Configuration parameters: EnforcedStyle, MinSize, WordRegex.
|
||||
# Configuration parameters: WordRegex.
|
||||
# SupportedStyles: percent, brackets
|
||||
Style/WordArray:
|
||||
Exclude:
|
||||
- 'app/helpers/languages_helper.rb'
|
||||
EnforcedStyle: percent
|
||||
MinSize: 3
|
||||
|
|
2
Gemfile
2
Gemfile
|
@ -90,7 +90,7 @@ gem 'sidekiq-bulk', '~> 0.2.0'
|
|||
gem 'simple-navigation', '~> 4.4'
|
||||
gem 'simple_form', '~> 5.2'
|
||||
gem 'stoplight', '~> 3.0.1'
|
||||
gem 'strong_migrations', '1.6.4'
|
||||
gem 'strong_migrations', '1.7.0'
|
||||
gem 'tty-prompt', '~> 0.23', require: false
|
||||
gem 'twitter-text', '~> 3.1.0'
|
||||
gem 'tzinfo-data', '~> 1.2023'
|
||||
|
|
18
Gemfile.lock
18
Gemfile.lock
|
@ -467,14 +467,14 @@ GEM
|
|||
multi_json (1.15.0)
|
||||
multipart-post (2.3.0)
|
||||
mutex_m (0.2.0)
|
||||
net-http (0.4.0)
|
||||
net-http (0.4.1)
|
||||
uri
|
||||
net-http-persistent (4.0.2)
|
||||
connection_pool (~> 2.2)
|
||||
net-imap (0.4.4)
|
||||
date
|
||||
net-protocol
|
||||
net-ldap (0.18.0)
|
||||
net-ldap (0.19.0)
|
||||
net-pop (0.1.2)
|
||||
net-protocol
|
||||
net-protocol (0.2.2)
|
||||
|
@ -544,7 +544,7 @@ GEM
|
|||
psych (5.1.2)
|
||||
stringio
|
||||
public_suffix (5.0.4)
|
||||
puma (6.4.1)
|
||||
puma (6.4.2)
|
||||
nio4r (~> 2.0)
|
||||
pundit (2.3.1)
|
||||
activesupport (>= 3.0.0)
|
||||
|
@ -676,11 +676,11 @@ GEM
|
|||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.30.0)
|
||||
parser (>= 3.2.1.0)
|
||||
rubocop-capybara (2.19.0)
|
||||
rubocop-capybara (2.20.0)
|
||||
rubocop (~> 1.41)
|
||||
rubocop-factory_bot (2.24.0)
|
||||
rubocop-factory_bot (2.25.0)
|
||||
rubocop (~> 1.33)
|
||||
rubocop-performance (1.20.1)
|
||||
rubocop-performance (1.20.2)
|
||||
rubocop (>= 1.48.1, < 2.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
rubocop-rails (2.23.1)
|
||||
|
@ -688,7 +688,7 @@ GEM
|
|||
rack (>= 1.1)
|
||||
rubocop (>= 1.33.0, < 2.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
rubocop-rspec (2.25.0)
|
||||
rubocop-rspec (2.26.1)
|
||||
rubocop (~> 1.40)
|
||||
rubocop-capybara (~> 2.17)
|
||||
rubocop-factory_bot (~> 2.22)
|
||||
|
@ -748,7 +748,7 @@ GEM
|
|||
stoplight (3.0.2)
|
||||
redlock (~> 1.0)
|
||||
stringio (3.1.0)
|
||||
strong_migrations (1.6.4)
|
||||
strong_migrations (1.7.0)
|
||||
activerecord (>= 5.2)
|
||||
swd (1.3.0)
|
||||
activesupport (>= 3)
|
||||
|
@ -952,7 +952,7 @@ DEPENDENCIES
|
|||
simplecov-lcov (~> 0.8)
|
||||
stackprof
|
||||
stoplight (~> 3.0.1)
|
||||
strong_migrations (= 1.6.4)
|
||||
strong_migrations (= 1.7.0)
|
||||
test-prof
|
||||
thor (~> 1.2)
|
||||
tty-prompt (~> 0.23)
|
||||
|
|
|
@ -40,7 +40,7 @@ module Admin
|
|||
(@email_domain_block.other_domains || []).uniq.each do |domain|
|
||||
next if EmailDomainBlock.where(domain: domain).exists?
|
||||
|
||||
other_email_domain_block = EmailDomainBlock.create!(domain: domain, parent: @email_domain_block)
|
||||
other_email_domain_block = EmailDomainBlock.create!(domain: domain, allow_with_approval: @email_domain_block.allow_with_approval, parent: @email_domain_block)
|
||||
log_action :create, other_email_domain_block
|
||||
end
|
||||
end
|
||||
|
@ -65,7 +65,7 @@ module Admin
|
|||
end
|
||||
|
||||
def resource_params
|
||||
params.require(:email_domain_block).permit(:domain, other_domains: [])
|
||||
params.require(:email_domain_block).permit(:domain, :allow_with_approval, other_domains: [])
|
||||
end
|
||||
|
||||
def form_email_domain_block_batch_params
|
||||
|
|
|
@ -55,7 +55,7 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
|
|||
end
|
||||
|
||||
def resource_params
|
||||
params.permit(:domain)
|
||||
params.permit(:domain, :allow_with_approval)
|
||||
end
|
||||
|
||||
def insert_pagination_headers
|
||||
|
|
|
@ -3,150 +3,6 @@
|
|||
module CacheConcern
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
module ActiveRecordCoder
|
||||
EMPTY_HASH = {}.freeze
|
||||
|
||||
class << self
|
||||
def dump(record)
|
||||
instances = InstanceTracker.new
|
||||
serialized_associations = serialize_associations(record, instances)
|
||||
serialized_records = instances.map { |r| serialize_record(r) }
|
||||
[serialized_associations, *serialized_records]
|
||||
end
|
||||
|
||||
def load(payload)
|
||||
instances = InstanceTracker.new
|
||||
serialized_associations, *serialized_records = payload
|
||||
serialized_records.each { |attrs| instances.push(deserialize_record(*attrs)) }
|
||||
deserialize_associations(serialized_associations, instances)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Records without associations, or which have already been visited before,
|
||||
# are serialized by their id alone.
|
||||
#
|
||||
# Records with associations are serialized as a two-element array including
|
||||
# their id and the record's association cache.
|
||||
#
|
||||
def serialize_associations(record, instances)
|
||||
return unless record
|
||||
|
||||
if (id = instances.lookup(record))
|
||||
payload = id
|
||||
else
|
||||
payload = instances.push(record)
|
||||
|
||||
cached_associations = record.class.reflect_on_all_associations.select do |reflection|
|
||||
record.association_cached?(reflection.name)
|
||||
end
|
||||
|
||||
unless cached_associations.empty?
|
||||
serialized_associations = cached_associations.map do |reflection|
|
||||
association = record.association(reflection.name)
|
||||
|
||||
serialized_target = if reflection.collection?
|
||||
association.target.map { |target_record| serialize_associations(target_record, instances) }
|
||||
else
|
||||
serialize_associations(association.target, instances)
|
||||
end
|
||||
|
||||
[reflection.name, serialized_target]
|
||||
end
|
||||
|
||||
payload = [payload, serialized_associations]
|
||||
end
|
||||
end
|
||||
|
||||
payload
|
||||
end
|
||||
|
||||
def deserialize_associations(payload, instances)
|
||||
return unless payload
|
||||
|
||||
id, associations = payload
|
||||
record = instances.fetch(id)
|
||||
|
||||
associations&.each do |name, serialized_target|
|
||||
begin
|
||||
association = record.association(name)
|
||||
rescue ActiveRecord::AssociationNotFoundError
|
||||
raise AssociationMissingError, "undefined association: #{name}"
|
||||
end
|
||||
|
||||
target = if association.reflection.collection?
|
||||
serialized_target.map! { |serialized_record| deserialize_associations(serialized_record, instances) }
|
||||
else
|
||||
deserialize_associations(serialized_target, instances)
|
||||
end
|
||||
|
||||
association.target = target
|
||||
end
|
||||
|
||||
record
|
||||
end
|
||||
|
||||
def serialize_record(record)
|
||||
arguments = [record.class.name, attributes_for_database(record)]
|
||||
arguments << true if record.new_record?
|
||||
arguments
|
||||
end
|
||||
|
||||
def attributes_for_database(record)
|
||||
attributes = record.attributes_for_database
|
||||
attributes.transform_values! { |attr| attr.is_a?(::ActiveModel::Type::Binary::Data) ? attr.to_s : attr }
|
||||
attributes
|
||||
end
|
||||
|
||||
def deserialize_record(class_name, attributes_from_database, new_record = false) # rubocop:disable Style/OptionalBooleanParameter
|
||||
begin
|
||||
klass = Object.const_get(class_name)
|
||||
rescue NameError
|
||||
raise ClassMissingError, "undefined class: #{class_name}"
|
||||
end
|
||||
|
||||
# Ideally we'd like to call `klass.instantiate`, however it doesn't allow to pass
|
||||
# wether the record was persisted or not.
|
||||
attributes = klass.attributes_builder.build_from_database(attributes_from_database, EMPTY_HASH)
|
||||
klass.allocate.init_with_attributes(attributes, new_record)
|
||||
end
|
||||
end
|
||||
|
||||
class Error < StandardError
|
||||
end
|
||||
|
||||
class ClassMissingError < Error
|
||||
end
|
||||
|
||||
class AssociationMissingError < Error
|
||||
end
|
||||
|
||||
class InstanceTracker
|
||||
def initialize
|
||||
@instances = []
|
||||
@ids = {}.compare_by_identity
|
||||
end
|
||||
|
||||
def map(&block)
|
||||
@instances.map(&block)
|
||||
end
|
||||
|
||||
def fetch(...)
|
||||
@instances.fetch(...)
|
||||
end
|
||||
|
||||
def push(instance)
|
||||
id = @ids[instance] = @instances.size
|
||||
@instances << instance
|
||||
id
|
||||
end
|
||||
|
||||
def lookup(instance)
|
||||
@ids[instance]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class_methods do
|
||||
def vary_by(value, **kwargs)
|
||||
before_action(**kwargs) do |controller|
|
||||
|
@ -196,11 +52,7 @@ module CacheConcern
|
|||
raw = raw.cache_ids.to_a if raw.is_a?(ActiveRecord::Relation)
|
||||
return [] if raw.empty?
|
||||
|
||||
cached_keys_with_value = begin
|
||||
Rails.cache.read_multi(*raw).transform_keys(&:id).transform_values { |r| ActiveRecordCoder.load(r) }
|
||||
rescue ActiveRecordCoder::Error
|
||||
{} # The serialization format may have changed, let's pretend it's a cache miss.
|
||||
end
|
||||
cached_keys_with_value = Rails.cache.read_multi(*raw).transform_keys(&:id)
|
||||
|
||||
uncached_ids = raw.map(&:id) - cached_keys_with_value.keys
|
||||
|
||||
|
@ -208,10 +60,7 @@ module CacheConcern
|
|||
|
||||
unless uncached_ids.empty?
|
||||
uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id)
|
||||
|
||||
uncached.each_value do |item|
|
||||
Rails.cache.write(item, ActiveRecordCoder.dump(item))
|
||||
end
|
||||
Rails.cache.write_multi(uncached.values.to_h { |i| [i, i] })
|
||||
end
|
||||
|
||||
raw.filter_map { |item| cached_keys_with_value[item.id] || uncached[item.id] }
|
||||
|
|
|
@ -21,7 +21,7 @@ module WellKnown
|
|||
username = username_from_resource
|
||||
|
||||
@account = begin
|
||||
if username == Rails.configuration.x.local_domain
|
||||
if username == Rails.configuration.x.local_domain || username == Rails.configuration.x.web_domain
|
||||
Account.representative
|
||||
else
|
||||
Account.find_local!(username)
|
||||
|
|
|
@ -582,16 +582,20 @@ class Status extends ImmutablePureComponent {
|
|||
));
|
||||
}
|
||||
|
||||
setRef = c => {
|
||||
setContainerRef = c => {
|
||||
this.node = c;
|
||||
};
|
||||
|
||||
setStatusRef = c => {
|
||||
this.statusNode = c;
|
||||
};
|
||||
|
||||
_scrollStatusIntoView () {
|
||||
const { status, multiColumn } = this.props;
|
||||
|
||||
if (status) {
|
||||
window.requestAnimationFrame(() => {
|
||||
this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true);
|
||||
requestIdleCallback(() => {
|
||||
this.statusNode?.scrollIntoView(true);
|
||||
|
||||
// In the single-column interface, `scrollIntoView` will put the post behind the header,
|
||||
// so compensate for that.
|
||||
|
@ -629,9 +633,8 @@ class Status extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
// Scroll to focused post if it is loaded
|
||||
const child = this.node?.querySelector('.detailed-status__wrapper');
|
||||
if (child) {
|
||||
return [0, child.offsetTop];
|
||||
if (this.statusNode) {
|
||||
return [0, this.statusNode.offsetTop];
|
||||
}
|
||||
|
||||
// Do not scroll otherwise, `componentDidUpdate` will take care of that
|
||||
|
@ -692,11 +695,11 @@ class Status extends ImmutablePureComponent {
|
|||
/>
|
||||
|
||||
<ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>
|
||||
<div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>
|
||||
<div className={classNames('scrollable', { fullscreen })} ref={this.setContainerRef}>
|
||||
{ancestors}
|
||||
|
||||
<HotKeys handlers={handlers}>
|
||||
<div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)}>
|
||||
<div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)} ref={this.setStatusRef}>
|
||||
<DetailedStatus
|
||||
key={`details-${status.get('id')}`}
|
||||
status={status}
|
||||
|
|
|
@ -260,6 +260,9 @@
|
|||
"filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα",
|
||||
"filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης",
|
||||
"filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης",
|
||||
"firehose.all": "Όλα",
|
||||
"firehose.local": "Αυτός ο διακομιστής",
|
||||
"firehose.remote": "Άλλοι διακομιστές",
|
||||
"follow_request.authorize": "Εξουσιοδότησε",
|
||||
"follow_request.reject": "Απέρριψε",
|
||||
"follow_requests.unlocked_explanation": "Παρόλο που ο λογαριασμός σου δεν είναι κλειδωμένος, το προσωπικό του {domain} θεώρησαν πως ίσως να θέλεις να ελέγξεις χειροκίνητα αυτά τα αιτήματα ακολούθησης.",
|
||||
|
@ -285,11 +288,15 @@
|
|||
"hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα",
|
||||
"hashtag.follow": "Παρακολούθηση ετικέτας",
|
||||
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
||||
"home.actions.go_to_suggestions": "Βρείτε άτομα για να ακολουθήσετε",
|
||||
"home.column_settings.basic": "Βασικές ρυθμίσεις",
|
||||
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
|
||||
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
||||
"home.explore_prompt.body": "Your home feed will have a mix of posts from the hashtags you've chosen to follow, the people you've chosen to follow, and the posts they boost. If that feels too quiet, you may want to:\nΗ τροφοδοσία της αρχικής σελίδας σας είναι ένα μίγμα από αναρτήσεις με τις ετικέτες και τα άτομα που επιλέξατε να ακολουθείτε, και τις αναρτήσεις που προωθούν. Εάν αυτό σας φαίνεται πολύ ήσυχο, μπορεί να θέλετε:",
|
||||
"home.explore_prompt.title": "Αυτό είναι το σπίτι σας στο Mastodon.",
|
||||
"home.hide_announcements": "Απόκρυψη ανακοινώσεων",
|
||||
"home.pending_critical_update.link": "Δείτε ενημερώσεις",
|
||||
"home.pending_critical_update.title": "Κρίσιμη ενημέρωση ασφαλείας διαθέσιμη!",
|
||||
"home.show_announcements": "Εμφάνιση ανακοινώσεων",
|
||||
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
|
||||
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
|
||||
|
@ -314,6 +321,7 @@
|
|||
"keyboard_shortcuts.direct": "για το άνοιγμα της στήλης ιδιωτικών επισημάνσεων",
|
||||
"keyboard_shortcuts.down": "κίνηση προς τα κάτω στη λίστα",
|
||||
"keyboard_shortcuts.enter": "Εμφάνιση ανάρτησης",
|
||||
"keyboard_shortcuts.favourite": "Αγαπημένη δημοσίευση",
|
||||
"keyboard_shortcuts.federated": "Άνοιγμα ροής συναλλαγών",
|
||||
"keyboard_shortcuts.heading": "Συντομεύσεις πληκτρολογίου",
|
||||
"keyboard_shortcuts.home": "Άνοιγμα ροής αρχικής σελίδας",
|
||||
|
@ -358,6 +366,7 @@
|
|||
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
|
||||
"lists.subheading": "Οι λίστες σου",
|
||||
"load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}",
|
||||
"loading_indicator.label": "Φόρτωση…",
|
||||
"media_gallery.toggle_visible": "{number, plural, one {Απόκρυψη εικόνας} other {Απόκρυψη εικόνων}}",
|
||||
"moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.",
|
||||
"mute_modal.duration": "Διάρκεια",
|
||||
|
@ -380,6 +389,7 @@
|
|||
"navigation_bar.lists": "Λίστες",
|
||||
"navigation_bar.logout": "Αποσύνδεση",
|
||||
"navigation_bar.mutes": "Αποσιωπημένοι χρήστες",
|
||||
"navigation_bar.opened_in_classic_interface": "Δημοσιεύσεις, λογαριασμοί και άλλες συγκεκριμένες σελίδες ανοίγονται από προεπιλογή στην κλασική διεπαφή ιστού.",
|
||||
"navigation_bar.personal": "Προσωπικά",
|
||||
"navigation_bar.pins": "Καρφιτσωμένες αναρτήσεις",
|
||||
"navigation_bar.preferences": "Προτιμήσεις",
|
||||
|
@ -403,6 +413,7 @@
|
|||
"notifications.column_settings.admin.report": "Νέες αναφορές:",
|
||||
"notifications.column_settings.admin.sign_up": "Νέες εγγραφές:",
|
||||
"notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας",
|
||||
"notifications.column_settings.favourite": "Αγαπημένα:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών",
|
||||
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
|
||||
"notifications.column_settings.filter_bar.show_bar": "Εμφάνιση μπάρας φίλτρου",
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
{
|
||||
"about.blocks": "Servitores moderate",
|
||||
"about.contact": "Contacto:",
|
||||
"about.disclaimer": "Mastodon es software libere, de codice aperte, e un marca de Mastodon gGmbH.",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Adder o remover ab listas",
|
||||
"account.badges.group": "Gruppo",
|
||||
"account.block": "Blocar @{name}",
|
||||
|
@ -21,9 +25,12 @@
|
|||
"bundle_column_error.return": "Retornar al initio",
|
||||
"bundle_modal_error.close": "Clauder",
|
||||
"bundle_modal_error.retry": "Tentar novemente",
|
||||
"column.about": "A proposito de",
|
||||
"column.blocks": "Usatores blocate",
|
||||
"column.bookmarks": "Marcapaginas",
|
||||
"column.directory": "Navigar profilos",
|
||||
"column.favourites": "Favoritos",
|
||||
"column.firehose": "Fluxos in directe",
|
||||
"column.home": "Initio",
|
||||
"column.lists": "Listas",
|
||||
"column.notifications": "Notificationes",
|
||||
|
@ -33,23 +40,28 @@
|
|||
"compose.language.change": "Cambiar le lingua",
|
||||
"compose.language.search": "Cercar linguas...",
|
||||
"compose.published.open": "Aperir",
|
||||
"compose_form.direct_message_warning_learn_more": "Apprender plus",
|
||||
"compose_form.poll.add_option": "Adder un option",
|
||||
"compose_form.poll.remove_option": "Remover iste option",
|
||||
"confirmation_modal.cancel": "Cancellar",
|
||||
"confirmations.delete.confirm": "Deler",
|
||||
"confirmations.delete_list.confirm": "Deler",
|
||||
"confirmations.edit.confirm": "Modificar",
|
||||
"confirmations.logout.confirm": "Clauder le session",
|
||||
"copy_icon_button.copied": "Copiate al area de transferentia",
|
||||
"copypaste.copied": "Copiate",
|
||||
"copypaste.copy_to_clipboard": "Copiar al area de transferentia",
|
||||
"disabled_account_banner.account_settings": "Parametros de conto",
|
||||
"dismissable_banner.dismiss": "Dimitter",
|
||||
"emoji_button.activity": "Activitate",
|
||||
"emoji_button.clear": "Rader",
|
||||
"emoji_button.custom": "Personalisate",
|
||||
"emoji_button.search_results": "Resultatos de recerca",
|
||||
"empty_column.account_unavailable": "Profilo non disponibile",
|
||||
"errors.unexpected_crash.report_issue": "Signalar un defecto",
|
||||
"explore.search_results": "Resultatos de recerca",
|
||||
"explore.trending_links": "Novas",
|
||||
"filter_modal.select_filter.prompt_new": "Nove categoria: {name}",
|
||||
"firehose.all": "Toto",
|
||||
"firehose.local": "Iste servitor",
|
||||
"firehose.remote": "Altere servitores",
|
||||
|
@ -62,23 +74,50 @@
|
|||
"keyboard_shortcuts.my_profile": "Aperir tu profilo",
|
||||
"lightbox.close": "Clauder",
|
||||
"lightbox.next": "Sequente",
|
||||
"lightbox.previous": "Precedente",
|
||||
"link_preview.author": "Per {name}",
|
||||
"lists.account.add": "Adder al lista",
|
||||
"lists.delete": "Deler lista",
|
||||
"lists.edit": "Modificar lista",
|
||||
"lists.new.create": "Adder lista",
|
||||
"lists.subheading": "Tu listas",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Celar notificationes de iste usator?",
|
||||
"navigation_bar.about": "A proposito de",
|
||||
"navigation_bar.advanced_interface": "Aperir in un interfacie web avantiate",
|
||||
"navigation_bar.blocks": "Usatores blocate",
|
||||
"navigation_bar.discover": "Discoperir",
|
||||
"navigation_bar.edit_profile": "Modificar profilo",
|
||||
"navigation_bar.favourites": "Favoritos",
|
||||
"navigation_bar.lists": "Listas",
|
||||
"navigation_bar.logout": "Clauder le session",
|
||||
"navigation_bar.preferences": "Preferentias",
|
||||
"navigation_bar.search": "Cercar",
|
||||
"navigation_bar.security": "Securitate",
|
||||
"notifications.column_settings.alert": "Notificationes de scriptorio",
|
||||
"notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias",
|
||||
"notifications.column_settings.sound": "Reproducer sono",
|
||||
"notifications.filter.all": "Toto",
|
||||
"notifications.filter.favourites": "Favoritos",
|
||||
"notifications.grant_permission": "Conceder permission.",
|
||||
"notifications.group": "{count} notificationes",
|
||||
"onboarding.compose.template": "Salute #Mastodon!",
|
||||
"onboarding.profile.save_and_continue": "Salvar e continuar",
|
||||
"onboarding.share.title": "Compartir tu profilo"
|
||||
"onboarding.share.title": "Compartir tu profilo",
|
||||
"onboarding.steps.share_profile.title": "Compartir tu profilo de Mastodon",
|
||||
"relative_time.just_now": "ora",
|
||||
"relative_time.today": "hodie",
|
||||
"reply_indicator.cancel": "Cancellar",
|
||||
"report.next": "Sequente",
|
||||
"report.placeholder": "Commentos additional",
|
||||
"report.reasons.dislike": "Non me place",
|
||||
"search.quick_action.go_to_account": "Vader al profilo {x}",
|
||||
"search_results.accounts": "Profilos",
|
||||
"search_results.see_all": "Vider toto",
|
||||
"status.delete": "Deler",
|
||||
"status.share": "Compartir",
|
||||
"status.translate": "Traducer",
|
||||
"status.translated_from_with": "Traducite ab {lang} usante {provider}",
|
||||
"tabs_bar.home": "Initio",
|
||||
"tabs_bar.notifications": "Notificationes"
|
||||
}
|
||||
|
|
|
@ -501,6 +501,7 @@
|
|||
"onboarding.steps.setup_profile.title": "Personaliza tu profil",
|
||||
"onboarding.steps.share_profile.body": "Informe a tus amigos komo toparte en Mastodon",
|
||||
"onboarding.steps.share_profile.title": "Partaja tu profil de Mastodon",
|
||||
"password_confirmation.mismatching": "Los dos kodes son desferentes",
|
||||
"picture_in_picture.restore": "Restora",
|
||||
"poll.closed": "Serrado",
|
||||
"poll.refresh": "Arefreska",
|
||||
|
|
|
@ -606,7 +606,7 @@
|
|||
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
|
||||
"search.search_or_paste": "Søk eller lim inn URL",
|
||||
"search_popout.full_text_search_disabled_message": "Ikkje tilgjengeleg på {domain}.",
|
||||
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig ved innlogging.",
|
||||
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig når man er logget inn.",
|
||||
"search_popout.language_code": "ISO-språkkode",
|
||||
"search_popout.options": "Søkjealternativ",
|
||||
"search_popout.quick_actions": "Hurtighandlinger",
|
||||
|
|
|
@ -606,7 +606,7 @@
|
|||
"search.quick_action.status_search": "Innlegg som samsvarer med {x}",
|
||||
"search.search_or_paste": "Søk eller lim inn URL",
|
||||
"search_popout.full_text_search_disabled_message": "Ikke tilgjengelig på {domain}.",
|
||||
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig ved innlogging.",
|
||||
"search_popout.full_text_search_logged_out_message": "Bare tilgjengelig når man er logget inn.",
|
||||
"search_popout.language_code": "ISO språkkode",
|
||||
"search_popout.options": "Alternativer for søk",
|
||||
"search_popout.quick_actions": "Hurtighandlinger",
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
"account.featured_tags.last_status_never": "Pa postime",
|
||||
"account.featured_tags.title": "Hashtagë të zgjedhur të {name}",
|
||||
"account.follow": "Ndiqeni",
|
||||
"account.follow_back": "Ndiqe gjithashtu",
|
||||
"account.followers": "Ndjekës",
|
||||
"account.followers.empty": "Këtë përdorues ende s’e ndjek kush.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Ndjekës} other {{counter} Ndjekës}}",
|
||||
|
@ -52,6 +53,7 @@
|
|||
"account.mute_notifications_short": "Mos shfaq njoftime",
|
||||
"account.mute_short": "Mos i shfaq",
|
||||
"account.muted": "Heshtuar",
|
||||
"account.mutual": "Reciproke",
|
||||
"account.no_bio": "S’u dha përshkrim.",
|
||||
"account.open_original_page": "Hap faqen origjinale",
|
||||
"account.posts": "Mesazhe",
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
"account.mute_notifications_short": "关闭通知",
|
||||
"account.mute_short": "隐藏",
|
||||
"account.muted": "已隐藏",
|
||||
"account.mutual": "互相关注",
|
||||
"account.mutual": "互粉好友",
|
||||
"account.no_bio": "未提供描述。",
|
||||
"account.open_original_page": "打开原始页面",
|
||||
"account.posts": "嘟文",
|
||||
|
@ -446,7 +446,7 @@
|
|||
"notifications.column_settings.filter_bar.advanced": "显示所有类别",
|
||||
"notifications.column_settings.filter_bar.category": "快速过滤栏",
|
||||
"notifications.column_settings.filter_bar.show_bar": "显示过滤栏",
|
||||
"notifications.column_settings.follow": "新关注者:",
|
||||
"notifications.column_settings.follow": "新粉丝:",
|
||||
"notifications.column_settings.follow_request": "新关注请求:",
|
||||
"notifications.column_settings.mention": "提及:",
|
||||
"notifications.column_settings.poll": "投票结果:",
|
||||
|
@ -700,7 +700,7 @@
|
|||
"time_remaining.moments": "即将结束",
|
||||
"time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}",
|
||||
"timeline_hint.remote_resource_not_displayed": "不会显示来自其它服务器的{resource}",
|
||||
"timeline_hint.resources.followers": "关注者",
|
||||
"timeline_hint.resources.followers": "粉丝",
|
||||
"timeline_hint.resources.follows": "关注",
|
||||
"timeline_hint.resources.statuses": "更早的嘟文",
|
||||
"trends.counter_by_accounts": "过去 {days, plural, other {{days} 天}}有{count, plural, other { {counter} 人}}讨论",
|
||||
|
|
|
@ -10,7 +10,7 @@ class ContentSecurityPolicy
|
|||
end
|
||||
|
||||
def media_hosts
|
||||
[assets_host, cdn_host_value].concat(extra_data_hosts).compact
|
||||
[assets_host, cdn_host_value, paperclip_root_url].concat(extra_data_hosts).compact
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -27,6 +27,15 @@ class ContentSecurityPolicy
|
|||
s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host
|
||||
end
|
||||
|
||||
def paperclip_root_url
|
||||
root_url = ENV.fetch('PAPERCLIP_ROOT_URL', nil)
|
||||
return if root_url.blank?
|
||||
|
||||
(Addressable::URI.parse(assets_host) + root_url).tap do |uri|
|
||||
uri.path += '/' unless uri.path.blank? || uri.path.end_with?('/')
|
||||
end.to_s
|
||||
end
|
||||
|
||||
def url_from_base_host
|
||||
host_to_url(base_host)
|
||||
end
|
||||
|
|
|
@ -11,11 +11,12 @@ module Attachmentable
|
|||
# For some file extensions, there exist different content
|
||||
# type variants, and browsers often send the wrong one,
|
||||
# for example, sending an audio .ogg file as video/ogg,
|
||||
# likewise, MimeMagic also misreports them as such. For
|
||||
# likewise, kt-paperclip also misreports them as such. For
|
||||
# those files, it is necessary to use the output of the
|
||||
# `file` utility instead
|
||||
INCORRECT_CONTENT_TYPES = %w(
|
||||
audio/vorbis
|
||||
audio/opus
|
||||
video/ogg
|
||||
video/webm
|
||||
).freeze
|
||||
|
|
|
@ -17,23 +17,8 @@
|
|||
class CustomFilter < ApplicationRecord
|
||||
self.ignored_columns += %w(whole_word irreversible)
|
||||
|
||||
# NOTE: We previously used `alias_attribute` but this does not play nicely
|
||||
# with cache
|
||||
def title
|
||||
phrase
|
||||
end
|
||||
|
||||
def title=(value)
|
||||
self.phrase = value
|
||||
end
|
||||
|
||||
def filter_action
|
||||
action
|
||||
end
|
||||
|
||||
def filter_action=(value)
|
||||
self.action = value
|
||||
end
|
||||
alias_attribute :title, :phrase
|
||||
alias_attribute :filter_action, :action
|
||||
|
||||
VALID_CONTEXTS = %w(
|
||||
home
|
||||
|
@ -143,6 +128,10 @@ class CustomFilter < ApplicationRecord
|
|||
end
|
||||
|
||||
def context_must_be_valid
|
||||
errors.add(:context, I18n.t('filters.errors.invalid_context')) if context.empty? || context.any? { |c| !VALID_CONTEXTS.include?(c) }
|
||||
errors.add(:context, I18n.t('filters.errors.invalid_context')) if invalid_context_value?
|
||||
end
|
||||
|
||||
def invalid_context_value?
|
||||
context.blank? || context.difference(VALID_CONTEXTS).any?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,15 +17,7 @@ class CustomFilterKeyword < ApplicationRecord
|
|||
|
||||
validates :keyword, presence: true
|
||||
|
||||
# NOTE: We previously used `alias_attribute` but this does not play nicely
|
||||
# with cache
|
||||
def phrase
|
||||
keyword
|
||||
end
|
||||
|
||||
def phrase=(value)
|
||||
self.keyword = value
|
||||
end
|
||||
alias_attribute :phrase, :keyword
|
||||
|
||||
before_save :prepare_cache_invalidation!
|
||||
before_destroy :prepare_cache_invalidation!
|
||||
|
|
|
@ -4,11 +4,12 @@
|
|||
#
|
||||
# Table name: email_domain_blocks
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# domain :string default(""), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# parent_id :bigint(8)
|
||||
# id :bigint(8) not null, primary key
|
||||
# domain :string default(""), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# parent_id :bigint(8)
|
||||
# allow_with_approval :boolean default(FALSE), not null
|
||||
#
|
||||
|
||||
class EmailDomainBlock < ApplicationRecord
|
||||
|
@ -42,8 +43,8 @@ class EmailDomainBlock < ApplicationRecord
|
|||
@attempt_ip = attempt_ip
|
||||
end
|
||||
|
||||
def match?
|
||||
blocking? || invalid_uri?
|
||||
def match?(...)
|
||||
blocking?(...) || invalid_uri?
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -52,8 +53,8 @@ class EmailDomainBlock < ApplicationRecord
|
|||
@uris.any?(&:nil?)
|
||||
end
|
||||
|
||||
def blocking?
|
||||
blocks = EmailDomainBlock.where(domain: domains_with_variants).order(Arel.sql('char_length(domain) desc'))
|
||||
def blocking?(allow_with_approval: false)
|
||||
blocks = EmailDomainBlock.where(domain: domains_with_variants, allow_with_approval: allow_with_approval).order(Arel.sql('char_length(domain) desc'))
|
||||
blocks.each { |block| block.history.add(@attempt_ip) } if @attempt_ip.present?
|
||||
blocks.any?
|
||||
end
|
||||
|
@ -86,4 +87,8 @@ class EmailDomainBlock < ApplicationRecord
|
|||
def self.block?(domain_or_domains, attempt_ip: nil)
|
||||
Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match?
|
||||
end
|
||||
|
||||
def self.requires_approval?(domain_or_domains, attempt_ip: nil)
|
||||
Matcher.new(domain_or_domains, attempt_ip: attempt_ip).match?(allow_with_approval: true)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -418,7 +418,7 @@ class User < ApplicationRecord
|
|||
|
||||
def set_approved
|
||||
self.approved = begin
|
||||
if sign_up_from_ip_requires_approval?
|
||||
if sign_up_from_ip_requires_approval? || sign_up_email_requires_approval?
|
||||
false
|
||||
else
|
||||
open_registrations? || valid_invitation? || external?
|
||||
|
@ -430,6 +430,12 @@ class User < ApplicationRecord
|
|||
!sign_up_ip.nil? && IpBlock.where(severity: :sign_up_requires_approval).where('ip >>= ?', sign_up_ip.to_s).exists?
|
||||
end
|
||||
|
||||
def sign_up_email_requires_approval?
|
||||
return false unless email.present? || unconfirmed_email.present?
|
||||
|
||||
EmailDomainBlock.requires_approval?(email.presence || unconfirmed_email, attempt_ip: sign_up_ip)
|
||||
end
|
||||
|
||||
def open_registrations?
|
||||
Setting.registrations_mode == 'open'
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class REST::Admin::EmailDomainBlockSerializer < ActiveModel::Serializer
|
||||
attributes :id, :domain, :created_at, :history
|
||||
attributes :id, :domain, :created_at, :history, :allow_with_approval
|
||||
|
||||
def id
|
||||
object.id.to_s
|
||||
|
|
|
@ -47,6 +47,7 @@ class EmailMxValidator < ActiveModel::Validator
|
|||
dns.timeouts = 5
|
||||
|
||||
records = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }
|
||||
next if records == [''] # This domain explicitly rejects emails
|
||||
|
||||
([domain] + records).uniq.each do |hostname|
|
||||
ips.concat(dns.getresources(hostname, Resolv::DNS::Resource::IN::A).to_a.map { |e| e.address.to_s })
|
||||
|
|
|
@ -12,3 +12,7 @@
|
|||
·
|
||||
|
||||
= t('admin.email_domain_blocks.attempts_over_week', count: email_domain_block.history.reduce(0) { |sum, day| sum + day.accounts })
|
||||
|
||||
- if email_domain_block.allow_with_approval?
|
||||
·
|
||||
= t('admin.email_domain_blocks.allow_registrations_with_approval')
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
.fields-group
|
||||
= f.input :domain, wrapper: :with_block_label, label: t('admin.email_domain_blocks.domain'), input_html: { readonly: defined?(@resolved_records) }
|
||||
|
||||
.fields-group
|
||||
= f.input :allow_with_approval, wrapper: :with_label, hint: false, label: I18n.t('admin.email_domain_blocks.allow_registrations_with_approval')
|
||||
|
||||
- if defined?(@resolved_records)
|
||||
%p.hint= t('admin.email_domain_blocks.resolved_dns_records_hint_html')
|
||||
|
||||
|
|
|
@ -63,6 +63,8 @@ module Mastodon
|
|||
# Initialize configuration defaults for originally generated Rails version.
|
||||
config.load_defaults 7.0
|
||||
|
||||
config.active_record.marshalling_format_version = 7.1
|
||||
|
||||
# Please, add to the `ignore` list any other `lib` subdirectories that do
|
||||
# not contain `.rb` files, or that should not be reloaded or eager loaded.
|
||||
# Common ones are `templates`, `generators`, or `middleware`, for example.
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# TODO
|
||||
# The Rails 7.0 framework default here is to set this true. However, we have a
|
||||
# location in devise that redirects where we don't have an easy ability to
|
||||
# override a method or set a config option, but where the redirect does not
|
||||
# provide this option.
|
||||
# https://github.com/heartcombo/devise/blob/v4.9.2/app/controllers/devise/confirmations_controller.rb#L28
|
||||
# Once a solution is found, this line can be removed.
|
||||
Rails.application.config.action_controller.raise_on_open_redirects = false
|
|
@ -158,15 +158,6 @@ Rails.application.config.add_autoload_paths_to_load_path = false
|
|||
# rather than to rely on a global default.
|
||||
# Rails.application.config.active_record.default_column_serializer = nil
|
||||
|
||||
# Enable a performance optimization that serializes Active Record models
|
||||
# in a faster and more compact way.
|
||||
#
|
||||
# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
|
||||
# not yet been upgraded must be able to read caches from upgraded servers,
|
||||
# leave this optimization off on the first deploy, then enable it on a
|
||||
# subsequent deploy.
|
||||
# Rails.application.config.active_record.marshalling_format_version = 7.1
|
||||
|
||||
# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
|
||||
# This matches the behaviour of all other callbacks.
|
||||
# In previous versions of Rails, they ran in the inverse order.
|
||||
|
|
10
config/initializers/open_redirects.rb
Normal file
10
config/initializers/open_redirects.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# TODO
|
||||
# Starting with Rails 7.0, the framework default here is to set this true.
|
||||
# However, we have a location in devise that redirects where we don't have an
|
||||
# easy ability to override the method or set a config option, and where the
|
||||
# redirect does not supply this option itself.
|
||||
# https://github.com/heartcombo/devise/blob/v4.9.2/app/controllers/devise/confirmations_controller.rb#L28
|
||||
# Once a solution is found, this line can be removed.
|
||||
Rails.application.config.action_controller.raise_on_open_redirects = false
|
|
@ -3,6 +3,7 @@ ia:
|
|||
activerecord:
|
||||
attributes:
|
||||
user:
|
||||
email: Adresse de e-mail
|
||||
password: Contrasigno
|
||||
user/account:
|
||||
username: Nomine de usator
|
||||
|
|
|
@ -19,6 +19,7 @@ ie:
|
|||
account:
|
||||
attributes:
|
||||
username:
|
||||
invalid: deve contener solmen lítteres, númeres e sublineas
|
||||
reserved: es reservat
|
||||
admin/webhook:
|
||||
attributes:
|
||||
|
@ -39,6 +40,7 @@ ie:
|
|||
user:
|
||||
attributes:
|
||||
email:
|
||||
blocked: usa un ne-permisset provisor de e-posta
|
||||
unreachable: sembla ne exister
|
||||
role_id:
|
||||
elevated: ne posse esser plu alt quam tui actual rol
|
||||
|
|
|
@ -439,6 +439,7 @@ be:
|
|||
view: Праглядзець новы блок дамену
|
||||
email_domain_blocks:
|
||||
add_new: Дадаць
|
||||
allow_registrations_with_approval: Дазволіць рэгістрацыю з дазволам
|
||||
attempts_over_week:
|
||||
few: "%{count} спробы рэгіістрацыі за апошні тыдзень"
|
||||
many: "%{count} спроб рэгіістрацыі за апошні тыдзень"
|
||||
|
|
|
@ -425,6 +425,7 @@ ca:
|
|||
view: Veure el bloqueig del domini
|
||||
email_domain_blocks:
|
||||
add_new: Afegir nou
|
||||
allow_registrations_with_approval: Registre permès amb validació
|
||||
attempts_over_week:
|
||||
one: "%{count} intent en la darrera setmana"
|
||||
other: "%{count} intents de registre en la darrera setmana"
|
||||
|
|
|
@ -453,6 +453,7 @@ cy:
|
|||
view: Gweld bloc parth
|
||||
email_domain_blocks:
|
||||
add_new: Ychwanegu
|
||||
allow_registrations_with_approval: Caniatáu cofrestriadau wedi'u cymeradwyo
|
||||
attempts_over_week:
|
||||
few: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf"
|
||||
many: "%{count} ymgais i gofrestru dros yr wythnos ddiwethaf"
|
||||
|
|
|
@ -425,6 +425,7 @@ da:
|
|||
view: Vis domæneblokering
|
||||
email_domain_blocks:
|
||||
add_new: Tilføj ny
|
||||
allow_registrations_with_approval: Tillad registreringer med godkendelse
|
||||
attempts_over_week:
|
||||
one: "%{count} tilmeldingsforsøg over den seneste uge"
|
||||
other: "%{count} tilmeldingsforsøg over den seneste uge"
|
||||
|
|
|
@ -34,7 +34,7 @@ el:
|
|||
explanation: Το συνθηματικό του λογαριασμού σου άλλαξε.
|
||||
extra: Αν δεν άλλαξες εσύ το συνθηματικό σου, ίσως κάποιος να έχει αποκτήσει πρόσβαση στο λογαριασμό σου. Παρακαλούμε άλλαξε το συνθηματικό σου άμεσα ή επικοινώνησε με τον διαχειριστή του κόμβου σου αν έχεις κλειδωθεί απ' έξω.
|
||||
subject: 'Mastodon: Αλλαγή συνθηματικού'
|
||||
title: Αλλαγή συνθηματικού
|
||||
title: Ο κωδικός άλλαξε
|
||||
reconfirmation_instructions:
|
||||
explanation: Επιβεβαίωσε τη νέα διεύθυνση για να αλλάξεις το email σου.
|
||||
extra: Αν δεν ζήτησες εσύ αυτή την αλλαγή, παρακαλούμε αγνόησε αυτό το email. Η διεύθυνση email για τον λογαριασμό σου στο Mastodon δεν θα αλλάξει μέχρι να επισκεφτείς τον παραπάνω σύνδεσμο.
|
||||
|
|
|
@ -1 +1,25 @@
|
|||
---
|
||||
ia:
|
||||
devise:
|
||||
mailer:
|
||||
confirmation_instructions:
|
||||
action: Verificar adresse de e-mail
|
||||
action_with_app: Confirmar e retornar a %{app}
|
||||
title: Verificar adresse de e-mail
|
||||
email_changed:
|
||||
title: Nove adresse de e-mail
|
||||
reconfirmation_instructions:
|
||||
title: Verificar adresse de e-mail
|
||||
reset_password_instructions:
|
||||
action: Cambiar contrasigno
|
||||
title: Reinitialisar contrasigno
|
||||
two_factor_disabled:
|
||||
title: 2FA disactivate
|
||||
registrations:
|
||||
updated: Tu conto ha essite actualisate con successo.
|
||||
unlocks:
|
||||
unlocked: Tu conto ha essite disblocate con successo. Initia session a continuar.
|
||||
errors:
|
||||
messages:
|
||||
already_confirmed: jam esseva confirmate, tenta initiar session
|
||||
not_found: non trovate
|
||||
|
|
|
@ -46,17 +46,26 @@ ie:
|
|||
title: 2FA desvalidat
|
||||
two_factor_enabled:
|
||||
title: 2FA permisset
|
||||
two_factor_recovery_codes_changed:
|
||||
explanation: Li anteyan codes de recuperation ha esset ínvalidat, e novis generat.
|
||||
subject: 'Mastodon: 2-factor codes de recuperation regenerat'
|
||||
title: 2FA codes de recuperation changeat
|
||||
unlock_instructions:
|
||||
subject: 'Mastodon: Desserral instructiones'
|
||||
webauthn_credential:
|
||||
added:
|
||||
subject: 'Mastodon: Nov clave de securitá'
|
||||
title: Un nov clave de securitá ha esset adjuntet
|
||||
deleted:
|
||||
subject: 'Mastodon: Clave de securitá deletet'
|
||||
webauthn_disabled:
|
||||
subject: 'Mastodon: Autentication con claves de securitá desactivisat'
|
||||
title: Claves de securitá desactivisat
|
||||
webauthn_enabled:
|
||||
title: Claves de securitá activisat
|
||||
omniauth_callbacks:
|
||||
failure: Ne posset autenticar te de %{kind} pro "%{reason}".
|
||||
success: Successosimen autenticat de conto %{kind}.
|
||||
passwords:
|
||||
no_token: Tu ne posse accessar ti-ci págine sin venir de un email pri reiniciar li passa-parol. Si tu ha venit de un email pri reiniciar li passa-parol, ples far cert que tu usat li complet URL providet.
|
||||
send_instructions: Si tui email-adresse existe in nor database, tu va reciver un ligament por recuperar li passa-parol a tui email-adresse in quelc minutes. Ples vider tui spam-emails si tu ne recivet ti email.
|
||||
|
@ -77,3 +86,6 @@ ie:
|
|||
expired: ha expirat, ples demandar un nov
|
||||
not_found: ne trovat
|
||||
not_locked: ne esset serrat
|
||||
not_saved:
|
||||
one: '1 error prohibit ti %{resource} de esser conservat:'
|
||||
other: "%{count} errores prohibit ti %{resource} de esser conservat:"
|
||||
|
|
|
@ -127,6 +127,7 @@ el:
|
|||
bookmarks: Σελιδοδείκτες
|
||||
conversations: Συνομιλίες
|
||||
crypto: Κρυπτογράφηση από άκρο σε άκρο
|
||||
favourites: Αγαπημένα
|
||||
filters: Φίλτρα
|
||||
follow: Ακολουθείτε, σε Σίγαση και Αποκλεισμοί
|
||||
follows: Ακολουθείτε
|
||||
|
@ -169,9 +170,10 @@ el:
|
|||
read:accounts: να βλέπει τα στοιχεία λογαριασμών
|
||||
read:blocks: να βλέπει τους αποκλεισμένους σου
|
||||
read:bookmarks: εμφάνιση των σελιδοδεικτών σας
|
||||
read:favourites: δείτε τα αγαπημένα σας
|
||||
read:filters: να βλέπει τα φίλτρα σου
|
||||
read:follows: να βλέπει ποιους ακολουθείς
|
||||
read:lists: να βλέπει τις λίστες σου
|
||||
read:follows: δές ποιους ακολουθείς
|
||||
read:lists: δές τις λίστες σου
|
||||
read:mutes: να βλέπει ποιους αποσιωπείς
|
||||
read:notifications: να βλέπει τις ειδοποιήσεις σου
|
||||
read:reports: να βλέπει τις καταγγελίες σου
|
||||
|
@ -183,8 +185,8 @@ el:
|
|||
write:bookmarks: προσθήκη σελιδοδεικτών
|
||||
write:conversations: σίγαση και διαγραφή συνομιλιών
|
||||
write:filters: να δημιουργεί φίλτρα
|
||||
write:follows: να ακολουθεί ανθρώπους
|
||||
write:lists: να δημιουργεί λίστες
|
||||
write:follows: ακολουθήστε ανθρώπους
|
||||
write:lists: δημιουργία λιστών
|
||||
write:media: να ανεβάζει πολυμέσα
|
||||
write:mutes: να αποσιωπεί ανθρώπους και συζητήσεις
|
||||
write:notifications: να καθαρίζει τις ειδοποιήσεις σου
|
||||
|
|
|
@ -1 +1,55 @@
|
|||
---
|
||||
ia:
|
||||
activerecord:
|
||||
attributes:
|
||||
doorkeeper/application:
|
||||
name: Nomine de application
|
||||
website: Sito web de application
|
||||
doorkeeper:
|
||||
applications:
|
||||
buttons:
|
||||
cancel: Cancellar
|
||||
edit: Modificar
|
||||
edit:
|
||||
title: Modificar application
|
||||
index:
|
||||
application: Application
|
||||
delete: Deler
|
||||
name: Nomine
|
||||
new: Nove application
|
||||
show: Monstrar
|
||||
title: Tu applicationes
|
||||
new:
|
||||
title: Nove application
|
||||
show:
|
||||
actions: Actiones
|
||||
title: 'Application: %{name}'
|
||||
authorizations:
|
||||
error:
|
||||
title: Ocurreva un error
|
||||
authorized_applications:
|
||||
confirmations:
|
||||
revoke: Es tu secur?
|
||||
index:
|
||||
scopes: Permissiones
|
||||
title: Tu applicationes autorisate
|
||||
flash:
|
||||
applications:
|
||||
create:
|
||||
notice: Application create.
|
||||
destroy:
|
||||
notice: Application delite.
|
||||
update:
|
||||
notice: Application actualisate.
|
||||
grouped_scopes:
|
||||
title:
|
||||
accounts: Contos
|
||||
admin/accounts: Gestion de contos
|
||||
favourites: Favoritos
|
||||
lists: Listas
|
||||
notifications: Notificationes
|
||||
push: Notificationes push
|
||||
layouts:
|
||||
admin:
|
||||
nav:
|
||||
applications: Applicationes
|
||||
|
|
|
@ -5,6 +5,7 @@ ie:
|
|||
doorkeeper/application:
|
||||
name: Nómine de aplication
|
||||
redirect_uri: URI de redirection
|
||||
scopes: Scopes
|
||||
website: Situ web de aplication
|
||||
errors:
|
||||
models:
|
||||
|
@ -29,12 +30,15 @@ ie:
|
|||
title: Modificar aplication
|
||||
help:
|
||||
redirect_uri: Usar un linea per URI
|
||||
scopes: Separar scopes con intersticies. Lassar blanc por usar li scopes predefinit.
|
||||
index:
|
||||
application: Aplication
|
||||
callback_url: URL de retrovocada
|
||||
delete: Deleter
|
||||
empty: Tu have null aplicationes.
|
||||
name: Nómine
|
||||
new: Nov aplication
|
||||
scopes: Scopes
|
||||
show: Monstrar
|
||||
title: Tui aplicationes
|
||||
new:
|
||||
|
@ -42,6 +46,8 @@ ie:
|
|||
show:
|
||||
actions: Actiones
|
||||
application_id: Clave de client
|
||||
callback_urls: URLs de retrovocada
|
||||
scopes: Scopes
|
||||
secret: Secrete de client
|
||||
title: 'Aplication: %{name}'
|
||||
authorizations:
|
||||
|
@ -51,6 +57,7 @@ ie:
|
|||
error:
|
||||
title: Alquo ha errat
|
||||
new:
|
||||
review_permissions: Inspecter permissiones
|
||||
title: Autorisation besonat
|
||||
authorized_applications:
|
||||
buttons:
|
||||
|
@ -117,9 +124,13 @@ ie:
|
|||
admin:
|
||||
nav:
|
||||
applications: Aplicationes
|
||||
oauth2_provider: Provisor OAuth2
|
||||
application:
|
||||
title: Autorisation OAuth besonat
|
||||
scopes:
|
||||
admin:read: leer li tot data sur li servitor
|
||||
admin:read:accounts: leer sensitiv information de omni contos
|
||||
admin:read:canonical_email_blocks: leer sensitiv information pri omni canonic bloccas de e-posta
|
||||
admin:read:domain_allows: leer sensitiv information pri omni permisses de dominia
|
||||
admin:read:domain_blocks: leer sensitiv information pri omni bloccas de dominia
|
||||
admin:read:email_domain_blocks: leer sensitiv information pri omni bloccas de dominia basat sur e-posta
|
||||
|
@ -134,6 +145,7 @@ ie:
|
|||
admin:write:ip_blocks: fa moderatori actiones sur bloccas de IP
|
||||
admin:write:reports: far moderatori actiones sur raportes
|
||||
follow: modifica li relationes del conto
|
||||
push: reciver tui pussa-notificationes
|
||||
read: lee omni datas de tui conto
|
||||
read:accounts: vide li informationes pri li conto
|
||||
read:blocks: vider tui bloccas
|
||||
|
|
|
@ -962,6 +962,7 @@ el:
|
|||
notification_preferences: Αλλαγή προτιμήσεων email
|
||||
salutation: "%{name},"
|
||||
settings: 'Άλλαξε τις προτιμήσεις email: %{link}'
|
||||
unsubscribe: Κατάργηση εγγραφής
|
||||
view: 'Προβολή:'
|
||||
view_profile: Προβολή προφίλ
|
||||
view_status: Προβολή ανάρτησης
|
||||
|
@ -975,6 +976,8 @@ el:
|
|||
your_token: Το διακριτικό πρόσβασής σου
|
||||
auth:
|
||||
apply_for_account: Ζήτα έναν λογαριασμό
|
||||
captcha_confirmation:
|
||||
title: Ελεγχος ασφαλείας
|
||||
confirmations:
|
||||
wrong_email_hint: Εάν αυτή η διεύθυνση email δεν είναι σωστή, μπορείς να την αλλάξεις στις ρυθμίσεις λογαριασμού.
|
||||
delete_account: Διαγραφή λογαριασμού
|
||||
|
@ -1238,6 +1241,8 @@ el:
|
|||
status: Κατάσταση
|
||||
success: Τα δεδομένα σου μεταφορτώθηκαν επιτυχώς και θα επεξεργαστούν σύντομα
|
||||
time_started: Ξεκίνησε στις
|
||||
titles:
|
||||
following: Εισαγωγή λογαριασμών που ακολουθείτε
|
||||
type: Τύπος εισαγωγής
|
||||
type_groups:
|
||||
destructive: Μπλοκ & σίγαση
|
||||
|
@ -1245,7 +1250,7 @@ el:
|
|||
blocking: Λίστα αποκλεισμού
|
||||
bookmarks: Σελιδοδείκτες
|
||||
domain_blocking: Λίστα αποκλεισμένων τομέων
|
||||
following: Λίστα ακολούθων
|
||||
following: Λίστα ατόμων που ακολουθείτε
|
||||
muting: Λίστα αποσιωπήσεων
|
||||
upload: Μεταμόρφωση
|
||||
invites:
|
||||
|
@ -1420,7 +1425,7 @@ el:
|
|||
follow_failure: Δεν ήταν δυνατή η παρακολούθηση ορισμένων από τους επιλεγμένους λογαριασμούς.
|
||||
follow_selected_followers: Ακολούθησε τους επιλεγμένους ακόλουθους
|
||||
followers: Ακόλουθοι
|
||||
following: Ακολουθείς
|
||||
following: Ακολουθείτε
|
||||
invited: Προσκεκλημένοι
|
||||
last_active: Τελευταία ενεργός
|
||||
most_recent: Πιο πρόσφατος
|
||||
|
|
|
@ -425,6 +425,7 @@ en:
|
|||
view: View domain block
|
||||
email_domain_blocks:
|
||||
add_new: Add new
|
||||
allow_registrations_with_approval: Allow registrations with approval
|
||||
attempts_over_week:
|
||||
one: "%{count} attempt over the last week"
|
||||
other: "%{count} sign-up attempts over the last week"
|
||||
|
|
|
@ -425,6 +425,7 @@ es-AR:
|
|||
view: Ver bloqueo de dominio
|
||||
email_domain_blocks:
|
||||
add_new: Agregar nuevo
|
||||
allow_registrations_with_approval: Permitir crear cuentas con aprobación
|
||||
attempts_over_week:
|
||||
one: "%{count} intento durante la última semana"
|
||||
other: "%{count} intentos durante la última semana"
|
||||
|
|
|
@ -425,6 +425,7 @@ es-MX:
|
|||
view: Ver dominio bloqueado
|
||||
email_domain_blocks:
|
||||
add_new: Añadir nuevo
|
||||
allow_registrations_with_approval: Permitir registros con aprobación
|
||||
attempts_over_week:
|
||||
one: "%{count} intentos durante la última semana"
|
||||
other: "%{count} intentos de registro en la última semana"
|
||||
|
|
|
@ -425,6 +425,7 @@ es:
|
|||
view: Ver dominio bloqueado
|
||||
email_domain_blocks:
|
||||
add_new: Añadir nuevo
|
||||
allow_registrations_with_approval: Permitir registros con aprobación
|
||||
attempts_over_week:
|
||||
one: "%{count} intento durante la última semana"
|
||||
other: "%{count} intentos de registro durante la última semana"
|
||||
|
|
|
@ -427,6 +427,7 @@ eu:
|
|||
view: Ikusi domeinuaren blokeoa
|
||||
email_domain_blocks:
|
||||
add_new: Gehitu berria
|
||||
allow_registrations_with_approval: Baimendu izen-emateak onarpen bidez
|
||||
attempts_over_week:
|
||||
one: Izen-emateko saiakera %{count} azken astean
|
||||
other: Izen-emateko %{count} saiakera azken astean
|
||||
|
|
|
@ -425,6 +425,7 @@ fo:
|
|||
view: Vís navnaøkisblokering
|
||||
email_domain_blocks:
|
||||
add_new: Stovna
|
||||
allow_registrations_with_approval: Loyv skrásetingum við góðkenning
|
||||
attempts_over_week:
|
||||
one: "%{count} roynd seinastu vikuna"
|
||||
other: "%{count} tilmeldingarroyndir seinastu vikuna"
|
||||
|
|
|
@ -425,6 +425,7 @@ fy:
|
|||
view: Domeinblokkade besjen
|
||||
email_domain_blocks:
|
||||
add_new: Nije tafoegje
|
||||
allow_registrations_with_approval: Ynskriuwingen mei tastimming tastean
|
||||
attempts_over_week:
|
||||
one: "%{count} registraasjebesykjen yn de ôfrûne wike"
|
||||
other: "%{count} registraasjebesykjen yn de ôfrûne wike"
|
||||
|
|
|
@ -425,6 +425,7 @@ gl:
|
|||
view: Ollar dominios bloqueados
|
||||
email_domain_blocks:
|
||||
add_new: Engadir novo
|
||||
allow_registrations_with_approval: Permitir crear contas con aprobación
|
||||
attempts_over_week:
|
||||
one: "%{count} intento na última semana"
|
||||
other: "%{count} intentos de conexión na última semana"
|
||||
|
|
|
@ -439,6 +439,7 @@ he:
|
|||
view: צפייה בחסימת דומיינים
|
||||
email_domain_blocks:
|
||||
add_new: הוספת חדש
|
||||
allow_registrations_with_approval: הרשאת הרשמה לאחר אישור
|
||||
attempts_over_week:
|
||||
many: "%{count} נסיונות הרשמה במשך השבוע שעבר"
|
||||
one: "%{count} נסיון במשך השבוע שעבר"
|
||||
|
|
|
@ -425,6 +425,7 @@ hu:
|
|||
view: Domain tiltásának megtekintése
|
||||
email_domain_blocks:
|
||||
add_new: Új hozzáadása
|
||||
allow_registrations_with_approval: Regisztráció engedélyezése jóváhagyással
|
||||
attempts_over_week:
|
||||
one: "%{count} próbálkozás a múlt héten"
|
||||
other: "%{count} próbálkozás feliratkozásra a múlt héten"
|
||||
|
|
|
@ -50,3 +50,26 @@ ia:
|
|||
'15778476': 6 menses
|
||||
'2629746': 1 mense
|
||||
'86400': 1 die
|
||||
statuses_cleanup:
|
||||
min_age:
|
||||
'1209600': 2 septimanas
|
||||
'15778476': 6 menses
|
||||
'2629746': 1 mense
|
||||
'31556952': 1 anno
|
||||
'5259492': 2 menses
|
||||
'604800': 1 septimana
|
||||
'63113904': 2 annos
|
||||
'7889238': 3 menses
|
||||
themes:
|
||||
default: Mastodon (Obscur)
|
||||
mastodon-light: Mastodon (Clar)
|
||||
two_factor_authentication:
|
||||
add: Adder
|
||||
disable: Disactivar 2FA
|
||||
user_mailer:
|
||||
appeal_approved:
|
||||
action: Vader a tu conto
|
||||
welcome:
|
||||
subject: Benvenite in Mastodon
|
||||
webauthn_credentials:
|
||||
delete: Deler
|
||||
|
|
|
@ -424,6 +424,7 @@ ie:
|
|||
view: Vider dominia-blocca
|
||||
email_domain_blocks:
|
||||
add_new: Adjunter un nov
|
||||
allow_registrations_with_approval: Permisser registrationes con aprobation
|
||||
attempts_over_week:
|
||||
one: "%{count} registration-prova durant li ultim semane"
|
||||
other: "%{count} registration-prova durant li ultim semane"
|
||||
|
@ -439,6 +440,7 @@ ie:
|
|||
title: Bloccar nov email-dominia
|
||||
no_email_domain_block_selected: Null email-dominia-bloccas esset changeat pro que null esset selectet
|
||||
not_permitted: Ne permisset
|
||||
resolved_dns_records_hint_html: Li dominia-nómine resolue se al seque dominias MX, queles es in fine responsabil por acceptar e-posta. Bloccar un dominia MX va bloccar inscriptiones de quelcunc e-posta quel usa li sam dominia MX, mem si li visibil dominia-nómine es diferent. <strong>Esse caut e ne blocca majori provisores de e-posta.</strong>
|
||||
resolved_through_html: Resoluet per %{domain}
|
||||
title: Bloccat email-dominias
|
||||
export_domain_allows:
|
||||
|
@ -672,11 +674,13 @@ ie:
|
|||
description_html: Con <strong>roles por usatores</strong>, tu posse customisar li functiones e locs de Mastodon in queles tui usatores posse accesser.
|
||||
edit: Modificar rol '%{name}'
|
||||
everyone: Permissiones predefinit
|
||||
everyone_full_description_html: Ti es li <strong>fundamental rol</strong> quel afecta <strong>omni usatores</strong>, mem tis sin un assignat rol. Omni altri roles hereda permissiones de it.
|
||||
permissions_count:
|
||||
one: "%{count} permission"
|
||||
other: "%{count} permissiones"
|
||||
privileges:
|
||||
administrator: Administrator
|
||||
administrator_description: Usatores con ti permission va trapassar omni permission
|
||||
delete_user_data: Deleter Data de Usator
|
||||
delete_user_data_description: Possibilisa que usatores mey deleter li data de altri usatores strax
|
||||
invite_users: Invitar Usatores
|
||||
|
@ -726,6 +730,8 @@ ie:
|
|||
settings:
|
||||
about:
|
||||
manage_rules: Gerer regules de servitor
|
||||
preamble: Provider detalliat information pri qualmen li servitor es operat, moderat, payat.
|
||||
rules_hint: Hay un dedicat area por regules queles vor usatores es expectat obedir.
|
||||
title: Pri
|
||||
appearance:
|
||||
preamble: Customisar li interfacie web de Mastodon.
|
||||
|
@ -736,7 +742,10 @@ ie:
|
|||
desc_html: To ci usa extern scrites de hCaptcha, quel posse esser ínquietant pro rasones de securitá e privatie. In plu, <strong>it posse far li processu de registration mult plu desfacil (particularimen por tis con deshabilitás)</strong>. Pro ti rasones, ples considerar alternativ mesuras, tales quam registration per aprobation o invitation.
|
||||
title: Exige que nov usatores solue un CAPTCHA por confirmar lor conto
|
||||
content_retention:
|
||||
preamble: Decider qualmen usator-generat contenete es inmagasinat in Mastodon.
|
||||
title: Retention de contenete
|
||||
default_noindex:
|
||||
desc_html: Afecta omni usatores qui ne ha changeat ti parametre personalmen
|
||||
discovery:
|
||||
follow_recommendations: Seque-recomandationes
|
||||
preamble: Exposir interessant contenete es importantissim por incorporar nov usatores qui fórsan conosse nequi che Mastodon. Decider qualmen diferent utensiles de decovrition functiona che vor servitor.
|
||||
|
@ -771,11 +780,13 @@ ie:
|
|||
critical_update: Critic — ples actualisar rapidmen
|
||||
description: On recomanda que vu actualisa vor Mastodon-servitor regularimen por profiter del max recent fixes e facultates. In plu, quelcvez it es critic actualisar Mastodon promptmen por evitar problemas de securitá. Pro ti rasones, Mastodon questiona chascun 30 minutes ca hay actualisationes, e va notificar vos secun vor parametres pri email-notificationes.
|
||||
documentation_link: Aprender plu
|
||||
release_notes: Version-notas
|
||||
title: Actualisationes disponibil
|
||||
type: Specie
|
||||
types:
|
||||
major: Majori lansament
|
||||
minor: Minori lansament
|
||||
patch: Lapp-version — bug-corectiones e changes facil a aplicar
|
||||
version: Version
|
||||
statuses:
|
||||
account: Autor
|
||||
|
@ -967,6 +978,7 @@ ie:
|
|||
body: Nov versiones de Mastodon ha esset lansat, vu fórsan vole actualisar!
|
||||
subject: Nov versiones Mastodon es disponibil por %{instance}!
|
||||
new_trends:
|
||||
body: 'Li sequent elementes besona un revision ante que on posse monstrar les publicmen:'
|
||||
new_trending_links:
|
||||
title: Populari ligamentes
|
||||
new_trending_statuses:
|
||||
|
@ -1385,10 +1397,12 @@ ie:
|
|||
media_attachments:
|
||||
validations:
|
||||
images_and_video: On ne posse atachar un video a un posta quel ja contene images
|
||||
not_ready: Ne posse atachar files ancor sub tractament. Prova denov pos ne long!
|
||||
too_many: Ne posse atachar plu quam 4 files
|
||||
migrations:
|
||||
acct: Translocat a
|
||||
cancel: Anullar redirection
|
||||
cancel_explanation: Anullar li redirection va reactivisar tui actual conto, ma ne va restaurar sequitores queles ha esset movet a ti-ta conto.
|
||||
cancelled_msg: Anullat redirection con successe.
|
||||
errors:
|
||||
already_moved: es li sam conto a equel tu ha ja translocat
|
||||
|
@ -1397,6 +1411,9 @@ ie:
|
|||
not_found: ne posset esser trovat
|
||||
followers_count: Sequitores al témpor de translocation
|
||||
incoming_migrations: Translocant de un conto diferent
|
||||
incoming_migrations_html: Por mover de un altri conto a ti-ci, erstmen tu deve <a href="%{path}">crear un alias de conto</a>.
|
||||
moved_msg: Tui conto nu redirecte a %{acct} e tui sequitores es in li processu de esser movet.
|
||||
not_redirecting: Tui conto redirecte a null altri conto actualmen.
|
||||
on_cooldown: Tu ha recentmen migrat tui conto. Ti function va esser disponibil denov pos %{count} dies.
|
||||
past_migrations: Passat migrationes
|
||||
proceed_with_move: Translocar sequitores
|
||||
|
@ -1406,7 +1423,12 @@ ie:
|
|||
warning:
|
||||
backreference_required: Li nov conto deve in prim esser configurat por retroreferentiar ti-ci conto
|
||||
before: 'Ante proceder, ples leer ti notas cuidosimen:'
|
||||
cooldown: Pos mover se, hay un periode de atendida durant quel tu ne va posser mover te denov
|
||||
disabled_account: Tui actual conto ne va esser completmen usabil pos to. Támen, tu va posser accesser li exportation de data, e anc reactivisation.
|
||||
followers: Ti-ci action va mover omni sequitores del actual conto al nov conto
|
||||
only_redirect_html: Alternativmen, tu posse <a href="%{path}">solmen meter un redirection sur tui profil</a>.
|
||||
other_data: Necun altri data va esser translocat automaticmen
|
||||
redirect: Li profil de tui actual conto va esser actualisat con un anuncie de redirection e va esser excludet de serchas
|
||||
moderation:
|
||||
title: Moderation
|
||||
move_handler:
|
||||
|
@ -1805,6 +1827,7 @@ ie:
|
|||
verification:
|
||||
extra_instructions_html: '<strong>Nota</strong>: Li ligament in tui websitu posse esser ínvisibil. Li important parte es <code>rel="me"</code> quel prevente fals self-identification in websitus con contenete generat de usatores. Tu posse mem usar un <code>link</code> element in li cap-section del págine vice <code>a</code>, ma li HTML code deve esser accessibil sin executer JavaScript.'
|
||||
here_is_how: Vide qualmen
|
||||
hint_html: "<strong>Verificar tui identitá che Mastodon es por omnes.</strong> Basat sur apert web-criteries, líber nu e sempre. Omno quel tu besona es un websitu personal per quel gente reconosse te. Quande tu fa un ligament a tui websitu de tui profil, on va controlar que li websitu have un ligament reciproc a tui profil e monstrar un visual indicator sur it."
|
||||
instructions_html: Copiar e collar li code ci infra in li HTML de tui web-situ. Poy adjunter li adresse de tui web-situ ad-in un del aditional campes sur tui profil ex li section "Modificar profil" e salvar li changes.
|
||||
verification: Verification
|
||||
verified_links: Tui verificat ligamentes
|
||||
|
@ -1815,9 +1838,12 @@ ie:
|
|||
success: Tui clave de securitá esset adjuntet con successe.
|
||||
delete: Deleter
|
||||
delete_confirmation: Vole tu vermen deleter ti-ci clave de securitá?
|
||||
description_html: Si tu activisa <strong>autentication per clave de securitá</strong>, aperter session va postular que tu usa un de tui claves de securitá.
|
||||
destroy:
|
||||
error: Un problema evenit durant li deletion de tui clave de securitá. Ples provar denov.
|
||||
success: Tui clave de securitá esset successosimen deletet.
|
||||
invalid_credential: Ínvalid clave de securitá
|
||||
not_enabled: Tu ancor ne ha possibilisat WebAuthn
|
||||
not_supported: Ti-ci navigator ne subtene claves de securitá
|
||||
otp_required: Por usar claves de securitá, ples activisar 2-factor autentication.
|
||||
registered_on: Adheret ye %{date}
|
||||
|
|
|
@ -425,6 +425,7 @@ it:
|
|||
view: Visualizza blocco di dominio
|
||||
email_domain_blocks:
|
||||
add_new: Aggiungi nuovo
|
||||
allow_registrations_with_approval: Consenti registrazioni con approvazione
|
||||
attempts_over_week:
|
||||
one: "%{count} tentativo nell'ultima settimana"
|
||||
other: "%{count} tentativi di registrazione nell'ultima settimana"
|
||||
|
|
|
@ -420,6 +420,7 @@ ko:
|
|||
view: 도메인 차단 보기
|
||||
email_domain_blocks:
|
||||
add_new: 새로 추가하기
|
||||
allow_registrations_with_approval: 승인을 통한 가입 허용
|
||||
attempts_over_week:
|
||||
other: 지난 주 동안 %{count}건의 가입 시도가 있었습니다
|
||||
created_msg: 이메일 도메인 차단 규칙을 생성했습니다
|
||||
|
|
|
@ -383,7 +383,11 @@ lad:
|
|||
confirm_suspension:
|
||||
cancel: Anula
|
||||
confirm: Suspende
|
||||
permanent_action: Si kites la suspensyon no restoraras dingunos datos ni relasyones.
|
||||
remove_all_data: Esto efasara todo el kontenido, multimedia i datos de profiles de los kuentos en este domeno de tu sirvidor.
|
||||
stop_communication: Tu sirvidor deshara de komunikarse kon estos sirvidores.
|
||||
title: Konfirma bloko de domeno para %{domain}
|
||||
undo_relationships: Esto kitara todas las relasyones de segimyento entre tu kuentos en estos sirvidores i el tu sirvidor.
|
||||
created_msg: El bloko de domeno esta siendo prosesado
|
||||
destroyed_msg: El bloko de domeno se dezizo
|
||||
domain: Domeno
|
||||
|
@ -772,6 +776,8 @@ lad:
|
|||
type: Tipo
|
||||
types:
|
||||
major: Versyon prinsipala
|
||||
minor: Versyon minora
|
||||
patch: Versyon de remendo – koreksyones de yerros i trokamientos simples
|
||||
version: Versyon
|
||||
statuses:
|
||||
account: Autor
|
||||
|
@ -829,8 +835,10 @@ lad:
|
|||
message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq
|
||||
software_version_critical_check:
|
||||
action: Amostra aktualizasyones desponivles
|
||||
message_html: Una aktualizasyon kritika de Mastodon esta desponivle. Por favor aktualiza pishin.
|
||||
software_version_patch_check:
|
||||
action: Amostra aktualizasyones desponivles
|
||||
message_html: Una aktualizasyon de Mastodon kon koreksyon de yerros esta desponivle.
|
||||
upload_check_privacy_error:
|
||||
action: Klika aki para mas enformasyon
|
||||
message_html: "<strong>Tu sirvidor de web es mal konfigurado. La privasita de tus utilizadores esta en riziko.</strong>"
|
||||
|
@ -945,6 +953,7 @@ lad:
|
|||
next_steps: Puedes achetar la apelasyon para dezazer la dechizyon de moderasyon, o ignorarla.
|
||||
subject: "%{username} esta apelando a una dechizyon de moderasyon en %{instance}"
|
||||
new_critical_software_updates:
|
||||
body: Ay mueva versyon kritika de Mastodon. Es posivle ke keras aktualizar pishin!
|
||||
subject: Ay aktualizasyones kritikas de Mastodon desponivles para %{instance}!
|
||||
new_pending_account:
|
||||
body: Los peratim del muevo kuento estan abashos. Puedes achetar o refuzar esta aplikasyon.
|
||||
|
@ -1045,13 +1054,17 @@ lad:
|
|||
accept: Acheta
|
||||
back: Atras
|
||||
preamble: Estas son establesidas i aplikadas por los moderadores de %{domain}.
|
||||
preamble_invited: Antes de kontinuar, por favor reviza las reglas del sirvidor establesidas por los moderatores de %{domain}.
|
||||
title: Algunas reglas bazikas.
|
||||
title_invited: Fuites envitado.
|
||||
security: Sigurita
|
||||
set_new_password: Establese muevo kod
|
||||
setup:
|
||||
email_below_hint_html: Mira en tu kuti de spam o solisita de muevo. Si el adreso de posta elektronika ke aparese aki es yerrado, puedes trokarlo aki.
|
||||
email_settings_hint_html: Klika el atadjiko ke te embimos para verifikar %{email}. Asperaremos aki.
|
||||
link_not_received: No risivites un atadijo?
|
||||
new_confirmation_instructions_sent: Resiviras un muevo mesaj de posta elektronika kon el atadjio de konfirmasyon en unos minutos!
|
||||
title: Reviza tu kuti de arivo
|
||||
sign_in:
|
||||
preamble_html: Konektate kon tus kredensiales de <strong>%{domain}</strong>. Si tu kuento esta balabayado en otruno servidor, no puedras konektarte aki.
|
||||
title: Konektate kon %{domain}
|
||||
|
@ -1246,9 +1259,11 @@ lad:
|
|||
imports:
|
||||
errors:
|
||||
empty: Dosya CSV vaziya
|
||||
incompatible_type: Inkompativle kon el tipo de importo eskojido
|
||||
invalid_csv_file: 'Dosya CSV no valida. Yerro: %{error}'
|
||||
over_rows_processing_limit: kontiene mas de %{count} filas
|
||||
too_large: Dosya es mas grande
|
||||
failures: Yerros
|
||||
imported: Importado
|
||||
modes:
|
||||
merge: Une
|
||||
|
@ -1671,6 +1686,9 @@ lad:
|
|||
month: "%b %Y"
|
||||
time: "%H:%M"
|
||||
with_time_zone: "%d de %b del %Y, %H:%M %Z"
|
||||
translation:
|
||||
errors:
|
||||
too_many_requests: Ay demaziadas solisitudes de servisyo de traduksyon.
|
||||
two_factor_authentication:
|
||||
add: Adjusta
|
||||
disable: Inkapasita autentifikasyon en dos pasos
|
||||
|
@ -1750,9 +1768,12 @@ lad:
|
|||
title: Bienvenido, %{name}!
|
||||
users:
|
||||
follow_limit_reached: No puedes segir a mas de %{limit} personas
|
||||
go_to_sso_account_settings: Va a la konfigurasyon de kuento de tu prokurador de identita
|
||||
invalid_otp_token: Kodiche de dos pasos no valido
|
||||
otp_lost_help_html: Si pedriste akseso a los dos, puedes kontaktarte kon %{email}
|
||||
signed_in_as: 'Konektado komo:'
|
||||
verification:
|
||||
here_is_how: Ansina es komo
|
||||
verification: Verifikasyon
|
||||
verified_links: Tus atadijos verifikados
|
||||
webauthn_credentials:
|
||||
|
|
|
@ -169,6 +169,7 @@ lt:
|
|||
undo: Atkurti domeno bloką
|
||||
email_domain_blocks:
|
||||
add_new: Pridėti naują
|
||||
allow_registrations_with_approval: Leisti registracijas su patvirtinimu
|
||||
created_msg: El pašto domenas sėkmingai pridėtas į juodąjį sąrašą
|
||||
delete: Ištrinti
|
||||
domain: Domenas
|
||||
|
|
|
@ -425,6 +425,7 @@ nl:
|
|||
view: Domeinblokkade bekijken
|
||||
email_domain_blocks:
|
||||
add_new: Nieuwe toevoegen
|
||||
allow_registrations_with_approval: Inschrijvingen met toestemming toestaan
|
||||
attempts_over_week:
|
||||
one: "%{count} registratiepoging tijdens de afgelopen week"
|
||||
other: "%{count} registratiepogingen tijdens de afgelopen week"
|
||||
|
|
|
@ -425,6 +425,7 @@ nn:
|
|||
view: Vis domeneblokkering
|
||||
email_domain_blocks:
|
||||
add_new: Lag ny
|
||||
allow_registrations_with_approval: Tillat registreringer med godkjenning
|
||||
attempts_over_week:
|
||||
one: "%{count} forsøk i løpet av den siste uken"
|
||||
other: "%{count} forsøk på å opprette konto i løpet av den siste uken"
|
||||
|
|
|
@ -425,6 +425,7 @@
|
|||
view: Vis domeneblokkering
|
||||
email_domain_blocks:
|
||||
add_new: Lag ny
|
||||
allow_registrations_with_approval: Tillat registreringer med godkjenning
|
||||
attempts_over_week:
|
||||
one: "%{count} forsøk i løpet av den siste uken"
|
||||
other: "%{count} forsøk på å opprette konto i løpet av den siste uken"
|
||||
|
|
|
@ -439,6 +439,7 @@ pl:
|
|||
view: Zobacz blokadę domeny
|
||||
email_domain_blocks:
|
||||
add_new: Dodaj nową
|
||||
allow_registrations_with_approval: Zezwól na rejestracje po zatwierdzeniu
|
||||
attempts_over_week:
|
||||
few: "%{count} próby w ciągu ostatniego tygodnia"
|
||||
many: "%{count} prób w ciągu ostatniego tygodnia"
|
||||
|
|
|
@ -425,6 +425,7 @@ pt-BR:
|
|||
view: Ver domínios bloqueados
|
||||
email_domain_blocks:
|
||||
add_new: Adicionar novo
|
||||
allow_registrations_with_approval: Permitir inscrições com aprovação
|
||||
attempts_over_week:
|
||||
one: "%{count} tentativa na última semana"
|
||||
other: "%{count} tentativas de inscrição na última semana"
|
||||
|
|
|
@ -425,6 +425,7 @@ pt-PT:
|
|||
view: Ver domínios bloqueados
|
||||
email_domain_blocks:
|
||||
add_new: Adicionar novo
|
||||
allow_registrations_with_approval: Permitir inscrições com aprovação
|
||||
attempts_over_week:
|
||||
one: "%{count} tentativa na última semana"
|
||||
other: "%{count} tentativas de inscrição na última semana"
|
||||
|
|
|
@ -1 +1,46 @@
|
|||
---
|
||||
ia:
|
||||
simple_form:
|
||||
labels:
|
||||
account:
|
||||
fields:
|
||||
name: Etiquetta
|
||||
value: Contento
|
||||
admin_account_action:
|
||||
type: Action
|
||||
defaults:
|
||||
avatar: Pictura de profilo
|
||||
confirm_new_password: Confirmar nove contrasigno
|
||||
confirm_password: Confirmar contrasigno
|
||||
current_password: Contrasigno actual
|
||||
new_password: Nove contrasigno
|
||||
password: Contrasigno
|
||||
setting_display_media_default: Predefinite
|
||||
setting_display_media_hide_all: Celar toto
|
||||
setting_display_media_show_all: Monstrar toto
|
||||
setting_system_font_ui: Usar typo de litteras predefinite del systema
|
||||
setting_theme: Thema de sito
|
||||
setting_trends: Monstrar le tendentias de hodie
|
||||
sign_in_token_attempt: Codice de securitate
|
||||
title: Titulo
|
||||
username: Nomine de usator
|
||||
username_or_email: Nomine de usator o e-mail
|
||||
form_admin_settings:
|
||||
custom_css: CSS personalisate
|
||||
profile_directory: Activar directorio de profilos
|
||||
site_contact_email: Adresse de e-mail de contacto
|
||||
site_contact_username: Nomine de usator de contacto
|
||||
site_terms: Politica de confidentialitate
|
||||
site_title: Nomine de servitor
|
||||
theme: Thema predefinite
|
||||
trends: Activar tendentias
|
||||
notification_emails:
|
||||
software_updates:
|
||||
label: Un nove version de Mastodon es disponibile
|
||||
user:
|
||||
time_zone: Fuso horari
|
||||
user_role:
|
||||
name: Nomine
|
||||
permissions_as_keys: Permissiones
|
||||
position: Prioritate
|
||||
'yes': Si
|
||||
|
|
|
@ -8,6 +8,7 @@ ie:
|
|||
fields: Tui websitu, pronómines, etá, quocunc quel tu vole.
|
||||
indexable: Tui public postas posse aparir in sercha-resultates sur Mastodon. E in omni casu, tis qui ha interactet con tui postas va posser serchar e trovar les.
|
||||
note: 'Tu posse @mentionar altri persones o #hashtags.'
|
||||
show_collections: Gente va posser navigar tra tui sequentes e sequitores. Gente quem tu seque va vider que tu seque les sin egarda.
|
||||
unlocked: Persones va posser sequer te sin petir aprobation. Desselecte si tu vole manualmen tractar petitiones de sequer e decider ca acceptar o rejecter nov sequitores.
|
||||
account_alias:
|
||||
acct: Specificar li usatornomine@dominia del conto ex quel tu vole translocar
|
||||
|
@ -58,6 +59,14 @@ ie:
|
|||
setting_display_media_default: Celar medie marcat quam sensitiv
|
||||
setting_display_media_hide_all: Sempre celar medie
|
||||
setting_display_media_show_all: Sempre monstrar medie
|
||||
setting_use_blurhash: Gradientes es basat sur li colores del celat visuales ma obscura omni detallies
|
||||
setting_use_pending_items: Celar nov postas detra un clicc vice rular li témpor-linea automaticmen
|
||||
username: Tu posse usar lítteres, númeres e sublineas
|
||||
domain_allow:
|
||||
domain: Ti dominia va posser obtener data de ti-ci servitor, e data venient de it va esser tractat e inmagasinat
|
||||
email_domain_block:
|
||||
domain: Ti posse esser li dominia-nómine quel apari in li email-adresse o li MX-registre quel it usa. Ili va esser controlat durant adhesion.
|
||||
with_dns_records: On va far un prova resoluer li DNS-registres del specificat dominia, e li resultates anc va esser bloccat
|
||||
featured_tag:
|
||||
name: 'Vi quelc hashtags usat max recentmen de te:'
|
||||
filters:
|
||||
|
@ -66,8 +75,12 @@ ie:
|
|||
hide: Celar completmen li contenete filtrat, quam si it ne existe
|
||||
warn: Celar li contenete filtrat detra un avise mentionant li titul del filtre
|
||||
form_admin_settings:
|
||||
activity_api_enabled: Númeres de postas publicat localmen, activ usatores, e nov adhesiones in periodes semanal
|
||||
backups_retention_period: Mantener usator-generat archives por li specificat quantitá de dies.
|
||||
bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores.
|
||||
closed_registrations_message: Monstrat quande adhesiones es cludet
|
||||
content_cache_retention_period: Omni postas e boosts de altri servitores va esser deletet pos li specificat quantitá de dies. Quelc postas fórsan va esser ínrestaurabil. Omni pertinent marcatores, favorites e boosts anc va esser perdit e ínpossibil a restaurar.
|
||||
custom_css: On posse aplicar customisat stiles al web-version de Mastodon.
|
||||
mascot: Substitue li ilustration in li avansat interfacie web.
|
||||
peers_api_enabled: Un liste de nómines de dominia queles ti-ci servitor ha incontrat in li fediverse. Ci null data es includet pri ca tu confedera con un cert servitor o ne; it indica solmen que tui servitor conosse it. Usat per servicies colectent general statisticas pri federation.
|
||||
profile_directory: Li profilarium monstra omni usatores volent esser decovribil.
|
||||
|
@ -86,6 +99,7 @@ ie:
|
|||
ip_block:
|
||||
comment: Facultativ. Ne obliviar pro quo tu adjuntet ti-ci regul.
|
||||
expires_in: IP-adresses es un ressurse finit, quelcvez partit e transferet de manu a manu. Pro to, un índefinit bloccada de IP ne es recomandat.
|
||||
ip: Intrar un adresse IPv4 o IPv6. Tu posse bloccar un tot intervalle de ili con li sintaxe CIDR. Atention a ne bloccar te self!
|
||||
severities:
|
||||
no_access: Bloccar accesse a omni ressurses
|
||||
sign_up_block: Nov registrationes ne va esser possibil
|
||||
|
@ -93,6 +107,10 @@ ie:
|
|||
severity: Selecter quo va evenir con demandes ex ti-ci IP
|
||||
rule:
|
||||
text: Descrir un regul o postulation por usatores sur ti-ci servitor. Prova scrir un descrition curt e simplic
|
||||
sessions:
|
||||
otp: 'Intrar li 2-factor code generat del app sur tui portabile o usar un de tui codes de recuperation:'
|
||||
settings:
|
||||
show_application: Totvez, tu va sempre posser vider quel app ha publicat tui posta.
|
||||
user:
|
||||
role: Permissiones de usator decidet per su rol
|
||||
user_role:
|
||||
|
@ -111,6 +129,7 @@ ie:
|
|||
name: Etiquette
|
||||
value: Contenete
|
||||
indexable: Includer public postas in resultates de sercha
|
||||
unlocked: Automaticmen acceptar nov sequitores
|
||||
account_alias:
|
||||
acct: Usator-nómine del anteyan conto
|
||||
account_migration:
|
||||
|
@ -158,6 +177,7 @@ ie:
|
|||
max_uses: Max grand númere de usas
|
||||
new_password: Nov passa-parol
|
||||
note: Biografie
|
||||
otp_attempt: 2-factor code
|
||||
password: Passa-parol
|
||||
phrase: Clave-parol o frase
|
||||
setting_advanced_layout: Possibilisar web-interfacie avansat
|
||||
|
@ -165,10 +185,13 @@ ie:
|
|||
setting_default_language: Lingue in quel postar
|
||||
setting_default_privacy: Privatie de postada
|
||||
setting_default_sensitive: Sempre marcar medie quam sensitiv
|
||||
setting_display_media: Exposition de medie
|
||||
setting_display_media_default: Predefinitiones
|
||||
setting_display_media_hide_all: Celar omno
|
||||
setting_display_media_show_all: Monstrar omno
|
||||
setting_expand_spoilers: Sempre expander postas marcat con admonitiones de contenete
|
||||
setting_hide_network: Celar tui grafica social
|
||||
setting_reduce_motion: Reducter motion in animationes
|
||||
setting_system_font_ui: Usar predefinit fonte de sistema
|
||||
setting_theme: Tema de situ
|
||||
setting_trends: Monstrar li hodial tendenties
|
||||
|
@ -179,7 +202,10 @@ ie:
|
|||
title: Titul
|
||||
type: Specie de importation
|
||||
username: Nómine de usator
|
||||
username_or_email: Usator-nómine o E-posta
|
||||
whole_word: Plen parol
|
||||
email_domain_block:
|
||||
with_dns_records: Includer archives MX e IPs del dominia
|
||||
featured_tag:
|
||||
name: Hashtag
|
||||
filters:
|
||||
|
@ -187,22 +213,36 @@ ie:
|
|||
hide: Celar completmen
|
||||
warn: Celar con un admonition
|
||||
form_admin_settings:
|
||||
activity_api_enabled: Publicar agregat statisticas pri usator-activitá in li API
|
||||
backups_retention_period: Periode de retener archives de usator
|
||||
bootstrap_timeline_accounts: Sempre recomandar ti-ci contos a nov usatores
|
||||
closed_registrations_message: Customisat missage quande registration ne disponibil
|
||||
content_cache_retention_period: Periode de retention por cachat contenete
|
||||
custom_css: Custom CSS
|
||||
media_cache_retention_period: Periode de retention por cachat medie
|
||||
peers_api_enabled: Publicar liste de conosset servitores per li API
|
||||
profile_directory: Possibilisar profilarium
|
||||
registrations_mode: Qui posse registrar se
|
||||
require_invite_text: Exiger un rason por adherer se
|
||||
show_domain_blocks: Vider bloccas de dominia
|
||||
show_domain_blocks_rationale: Monstrar pro quo cert dominias esset bloccat
|
||||
site_contact_email: Contact e-mail adresse
|
||||
site_contact_username: Usator-nómine de contact
|
||||
site_extended_description: Extendet descrition
|
||||
site_short_description: Descrition del servitor
|
||||
site_terms: Politica pri Privatie
|
||||
site_title: Nómine de servitor
|
||||
status_page_url: URL de statu-págine
|
||||
theme: Predefenit tema
|
||||
thumbnail: Miniatura del servitor
|
||||
timeline_preview: Permisser accesse ínautenticat al public témpor-lineas
|
||||
trendable_by_default: Possibilisar tendenties sin priori inspection
|
||||
trends: Possibilisar tendenties
|
||||
trends_as_landing_page: Usar tendenties quam frontispicie
|
||||
interactions:
|
||||
must_be_follower: Bloccar notificationes de tis qui ne seque te
|
||||
must_be_following: Bloccar notificationes de tis quem tu ne seque
|
||||
must_be_following_dm: Bloccar direct missages de tis quem tu ne seque
|
||||
invite:
|
||||
comment: Comentar
|
||||
invite_request:
|
||||
|
@ -216,27 +256,38 @@ ie:
|
|||
sign_up_requires_approval: Limitar usator-registrationes
|
||||
severity: Regul
|
||||
notification_emails:
|
||||
appeal: Alqui apella un decision moderatori
|
||||
digest: Inviar compendies per email
|
||||
favourite: Alqui favoritisat tui posta
|
||||
follow: Alqui sequet te
|
||||
follow_request: Alqui petit sequer te
|
||||
mention: Alqui mentionat te
|
||||
pending_account: Nov conto besonant inspection
|
||||
reblog: Alqui boostat tui posta
|
||||
report: Nov raporte es submisset
|
||||
software_updates:
|
||||
all: Notificar pri omni nov actualisationes
|
||||
critical: Notificar solmen pri critical actualisationes
|
||||
label: Un nov version de Mastodon es disponibil
|
||||
none: Nequande notificar pri actualisationes (ne recomandat)
|
||||
patch: Notificar pri problema-fixant actualisationes
|
||||
trending_tag: Nov tendentie besonant inspection
|
||||
rule:
|
||||
text: Regul
|
||||
settings:
|
||||
indexable: Includer profil-pagine in serchatores
|
||||
show_application: Monstrar de quel aplication tu fat un posta
|
||||
tag:
|
||||
listable: Permisser que ti hashtag apari in serchas e suggestiones
|
||||
name: Hashtag
|
||||
trendable: Permisse que ti-ci hashtag apari sub tendenties
|
||||
usable: Permisser que postas usa ti hashtag
|
||||
user:
|
||||
role: Rol
|
||||
time_zone: Zone temporal
|
||||
user_role:
|
||||
color: Color del insignie
|
||||
highlighted: Monstrar rol quam insigne sur usator-profiles
|
||||
name: Nómine
|
||||
permissions_as_keys: Permissiones
|
||||
position: Prioritá
|
||||
|
|
|
@ -149,6 +149,8 @@ sk:
|
|||
text: Prečo sa k nám chceš pridať?
|
||||
ip_block:
|
||||
comment: Komentár
|
||||
severities:
|
||||
sign_up_requires_approval: Obmedz registrácie
|
||||
severity: Pravidlo
|
||||
notification_emails:
|
||||
digest: Zasielať súhrnné emaily
|
||||
|
|
|
@ -374,6 +374,7 @@ sk:
|
|||
view: Ukáž blokovanie domén
|
||||
email_domain_blocks:
|
||||
add_new: Pridaj nový
|
||||
allow_registrations_with_approval: Povoľ registrovanie so schválením
|
||||
created_msg: Emailová doména bola úspešne pridaná do zoznamu zakázaných
|
||||
delete: Vymaž
|
||||
dns:
|
||||
|
|
|
@ -439,6 +439,7 @@ sl:
|
|||
view: Pokaži domenski blok
|
||||
email_domain_blocks:
|
||||
add_new: Dodaj novo
|
||||
allow_registrations_with_approval: Dovoli registracije z odobritvijo
|
||||
attempts_over_week:
|
||||
few: "%{count} poskusi prijave zadnji teden"
|
||||
one: "%{count} poskus prijave zadnji teden"
|
||||
|
|
|
@ -425,6 +425,7 @@ sq:
|
|||
view: Shihni bllokim përkatësie
|
||||
email_domain_blocks:
|
||||
add_new: Shtoni të ri
|
||||
allow_registrations_with_approval: Lejo regjistrim me miratim
|
||||
attempts_over_week:
|
||||
one: "%{count} përpjekje gjatë javës së shkuar"
|
||||
other: "%{count} përpjekje regjistrimi gjatë javës së kaluar"
|
||||
|
|
|
@ -432,6 +432,7 @@ sr-Latn:
|
|||
view: Pročitaj blok domena
|
||||
email_domain_blocks:
|
||||
add_new: Dodaj novi
|
||||
allow_registrations_with_approval: Dozvoli registraciju uz odobrenje
|
||||
attempts_over_week:
|
||||
few: "%{count} pokušaja tokom prethodne nedelje"
|
||||
one: "%{count} pokušaj tokom prethodne nedelje"
|
||||
|
|
|
@ -432,6 +432,7 @@ sr:
|
|||
view: Прочитај блок домена
|
||||
email_domain_blocks:
|
||||
add_new: Додај нови
|
||||
allow_registrations_with_approval: Дозволи регистрацију уз одобрење
|
||||
attempts_over_week:
|
||||
few: "%{count} покушаја током претходне недеље"
|
||||
one: "%{count} покушај током претходне недеље"
|
||||
|
|
|
@ -418,6 +418,7 @@ th:
|
|||
view: ดูการปิดกั้นโดเมน
|
||||
email_domain_blocks:
|
||||
add_new: เพิ่มใหม่
|
||||
allow_registrations_with_approval: อนุญาตการลงทะเบียนด้วยการอนุมัติ
|
||||
attempts_over_week:
|
||||
other: "%{count} ความพยายามในการลงทะเบียนในช่วงสัปดาห์ที่ผ่านมา"
|
||||
created_msg: ปิดกั้นโดเมนอีเมลสำเร็จ
|
||||
|
|
|
@ -425,6 +425,7 @@ tr:
|
|||
view: Alan adı bloğunu görüntüle
|
||||
email_domain_blocks:
|
||||
add_new: Yeni ekle
|
||||
allow_registrations_with_approval: Onaylı kayıtlara izin ver
|
||||
attempts_over_week:
|
||||
one: Son haftada %{count} deneme
|
||||
other: Son haftada %{count} kayıt denemesi
|
||||
|
|
|
@ -439,6 +439,7 @@ uk:
|
|||
view: Переглянути заблоковані домени
|
||||
email_domain_blocks:
|
||||
add_new: Додати
|
||||
allow_registrations_with_approval: Дозволити реєстрації із затвердженням
|
||||
attempts_over_week:
|
||||
few: "%{count} спроби входу за останній тиждень"
|
||||
many: "%{count} спроб входу за останній тиждень"
|
||||
|
|
|
@ -418,6 +418,7 @@ vi:
|
|||
view: Xem máy chủ chặn
|
||||
email_domain_blocks:
|
||||
add_new: Thêm mới
|
||||
allow_registrations_with_approval: Cho đăng ký nhưng duyệt thủ công
|
||||
attempts_over_week:
|
||||
other: "%{count} lần thử đăng ký vào tuần trước"
|
||||
created_msg: Đã chặn tên miền email này
|
||||
|
|
|
@ -418,6 +418,7 @@ zh-CN:
|
|||
view: 查看域名屏蔽
|
||||
email_domain_blocks:
|
||||
add_new: 添加新条目
|
||||
allow_registrations_with_approval: 注册时需要批准
|
||||
attempts_over_week:
|
||||
other: 上周有 %{count} 次注册尝试
|
||||
created_msg: 成功屏蔽电子邮件域名
|
||||
|
|
|
@ -418,6 +418,7 @@ zh-HK:
|
|||
view: 顯示正被阻隔的網域
|
||||
email_domain_blocks:
|
||||
add_new: 新增
|
||||
allow_registrations_with_approval: 允許經批准的註冊
|
||||
attempts_over_week:
|
||||
other: 上週嘗試了註冊 %{count} 次
|
||||
created_msg: 已新增電郵網域阻隔
|
||||
|
|
|
@ -22,11 +22,9 @@ class TruncatePreviewCards < ActiveRecord::Migration[5.1]
|
|||
end
|
||||
|
||||
def down
|
||||
if ActiveRecord::Base.connection.table_exists? 'deprecated_preview_cards'
|
||||
drop_table :preview_cards
|
||||
rename_table :deprecated_preview_cards, :preview_cards
|
||||
else
|
||||
raise ActiveRecord::IrreversibleMigration, 'Previous preview cards table has already been removed'
|
||||
end
|
||||
raise ActiveRecord::IrreversibleMigration, 'Previous preview cards table has already been removed' unless ActiveRecord::Base.connection.table_exists? 'deprecated_preview_cards'
|
||||
|
||||
drop_table :preview_cards
|
||||
rename_table :deprecated_preview_cards, :preview_cards
|
||||
end
|
||||
end
|
||||
|
|
|
@ -105,7 +105,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
|
|||
end
|
||||
end
|
||||
|
||||
notifications_about_direct_statuses.includes(:account, mention: { status: [:account, mentions: :account] }).find_each do |notification|
|
||||
notifications_about_direct_statuses.includes(:account, mention: { status: [:account, { mentions: :account }] }).find_each do |notification|
|
||||
MigrationAccountConversation.add_status(notification.account, notification.target_status)
|
||||
migrated += 1
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ class PreserveOldLayoutForExistingUsers < ActiveRecord::Migration[5.2]
|
|||
# on the to-be-changed default
|
||||
|
||||
User.where(User.arel_table[:current_sign_in_at].gteq(1.month.ago)).find_each do |user|
|
||||
next if Setting.unscoped.where(thing_type: 'User', thing_id: user.id, var: 'advanced_layout').exists?
|
||||
next if Setting.unscoped.exists?(thing_type: 'User', thing_id: user.id, var: 'advanced_layout')
|
||||
|
||||
user.settings.advanced_layout = true
|
||||
end
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddAllowWithApprovalToEmailDomainBlocks < ActiveRecord::Migration[7.1]
|
||||
def change
|
||||
add_column :email_domain_blocks, :allow_with_approval, :boolean, default: false, null: false
|
||||
end
|
||||
end
|
|
@ -6,36 +6,55 @@ class MigrateSettingsToUserRoles < ActiveRecord::Migration[6.1]
|
|||
class UserRole < ApplicationRecord; end
|
||||
|
||||
def up
|
||||
owner_role = UserRole.find_by(name: 'Owner')
|
||||
admin_role = UserRole.find_by(name: 'Admin')
|
||||
moderator_role = UserRole.find_by(name: 'Moderator')
|
||||
everyone_role = UserRole.find_by(id: -99)
|
||||
|
||||
min_invite_role = Setting.min_invite_role
|
||||
show_staff_badge = Setting.show_staff_badge
|
||||
|
||||
if everyone_role
|
||||
everyone_role.permissions &= ~::UserRole::FLAGS[:invite_users] unless min_invite_role == 'user'
|
||||
everyone_role.save
|
||||
end
|
||||
|
||||
if owner_role
|
||||
owner_role.highlighted = show_staff_badge
|
||||
owner_role.save
|
||||
end
|
||||
|
||||
if admin_role
|
||||
admin_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(admin moderator).include?(min_invite_role)
|
||||
admin_role.highlighted = show_staff_badge
|
||||
admin_role.save
|
||||
end
|
||||
|
||||
if moderator_role
|
||||
moderator_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(moderator).include?(min_invite_role)
|
||||
moderator_role.highlighted = show_staff_badge
|
||||
moderator_role.save
|
||||
end
|
||||
process_role_everyone
|
||||
process_role_owner
|
||||
process_role_admin
|
||||
process_role_moderator
|
||||
end
|
||||
|
||||
def down; end
|
||||
|
||||
private
|
||||
|
||||
def process_role_everyone
|
||||
everyone_role = UserRole.find_by(id: -99)
|
||||
return unless everyone_role
|
||||
|
||||
everyone_role.permissions &= ~::UserRole::FLAGS[:invite_users] unless min_invite_role == 'user'
|
||||
everyone_role.save
|
||||
end
|
||||
|
||||
def process_role_owner
|
||||
owner_role = UserRole.find_by(name: 'Owner')
|
||||
return unless owner_role
|
||||
|
||||
owner_role.highlighted = show_staff_badge
|
||||
owner_role.save
|
||||
end
|
||||
|
||||
def process_role_admin
|
||||
admin_role = UserRole.find_by(name: 'Admin')
|
||||
return unless admin_role
|
||||
|
||||
admin_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(admin moderator).include?(min_invite_role)
|
||||
admin_role.highlighted = show_staff_badge
|
||||
admin_role.save
|
||||
end
|
||||
|
||||
def process_role_moderator
|
||||
moderator_role = UserRole.find_by(name: 'Moderator')
|
||||
return unless moderator_role
|
||||
|
||||
moderator_role.permissions |= ::UserRole::FLAGS[:invite_users] if %w(moderator).include?(min_invite_role)
|
||||
moderator_role.highlighted = show_staff_badge
|
||||
moderator_role.save
|
||||
end
|
||||
|
||||
def min_invite_role
|
||||
Setting.min_invite_role
|
||||
end
|
||||
|
||||
def show_staff_badge
|
||||
Setting.show_staff_badge
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.1].define(version: 2023_12_12_073317) do
|
||||
ActiveRecord::Schema[7.1].define(version: 2023_12_22_100226) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
|
@ -435,6 +435,7 @@ ActiveRecord::Schema[7.1].define(version: 2023_12_12_073317) do
|
|||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.bigint "parent_id"
|
||||
t.boolean "allow_with_approval", default: false, null: false
|
||||
t.index ["domain"], name: "index_email_domain_blocks_on_domain", unique: true
|
||||
end
|
||||
|
||||
|
|
|
@ -48,19 +48,31 @@ module Mastodon::CLI
|
|||
|
||||
exit(1) unless ask('Type in the domain of the server to confirm:') == Rails.configuration.x.local_domain
|
||||
|
||||
say('This operation WILL NOT be reversible.', :yellow)
|
||||
say('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.', :yellow)
|
||||
say('The deletion process itself may take a long time, and will be handled by Sidekiq, so do not shut it down until it has finished (you will be able to re-run this command to see the state of the self-destruct process).', :yellow)
|
||||
say(<<~WARNING, :yellow)
|
||||
This operation WILL NOT be reversible.
|
||||
While the data won't be erased locally, the server will be in a BROKEN STATE afterwards.
|
||||
The deletion process itself may take a long time, and will be handled by Sidekiq, so do not shut it down until it has finished (you will be able to re-run this command to see the state of the self-destruct process).
|
||||
WARNING
|
||||
|
||||
exit(1) if no?('Are you sure you want to proceed?')
|
||||
|
||||
self_destruct_value = Rails.application.message_verifier('self-destruct').generate(Rails.configuration.x.local_domain)
|
||||
say('To switch Mastodon to self-destruct mode, add the following variable to your evironment (e.g. by adding a line to your `.env.production`) and restart all Mastodon processes:', :green)
|
||||
say(" SELF_DESTRUCT=#{self_destruct_value}", :green)
|
||||
say("\nYou can re-run this command to see the state of the self-destruct process.", :green)
|
||||
say(<<~INSTRUCTIONS, :green)
|
||||
To switch Mastodon to self-destruct mode, add the following variable to your evironment (e.g. by adding a line to your `.env.production`) and restart all Mastodon processes:
|
||||
SELF_DESTRUCT=#{self_destruct_value}
|
||||
You can re-run this command to see the state of the self-destruct process.
|
||||
INSTRUCTIONS
|
||||
rescue Interrupt
|
||||
exit(1)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def self_destruct_value
|
||||
Rails
|
||||
.application
|
||||
.message_verifier('self-destruct')
|
||||
.generate(Rails.configuration.x.local_domain)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -34,7 +34,7 @@ REDIS_CACHE_PARAMS = {
|
|||
driver: :hiredis,
|
||||
url: ENV['CACHE_REDIS_URL'],
|
||||
expires_in: 10.minutes,
|
||||
namespace: cache_namespace,
|
||||
namespace: "#{cache_namespace}:7.1",
|
||||
connect_timeout: 5,
|
||||
pool: {
|
||||
size: Sidekiq.server? ? Sidekiq[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
|
||||
|
|
|
@ -205,7 +205,7 @@
|
|||
"prettier": "^3.0.0",
|
||||
"react-test-renderer": "^18.2.0",
|
||||
"stylelint": "^16.0.2",
|
||||
"stylelint-config-standard-scss": "^12.0.0",
|
||||
"stylelint-config-standard-scss": "^13.0.0",
|
||||
"typescript": "^5.0.4",
|
||||
"webpack-dev-server": "^3.11.3",
|
||||
"yargs": "^17.7.2"
|
||||
|
|
|
@ -12,13 +12,14 @@ RSpec.describe Admin::EmailDomainBlocksController do
|
|||
describe 'GET #index' do
|
||||
around do |example|
|
||||
default_per_page = EmailDomainBlock.default_per_page
|
||||
EmailDomainBlock.paginates_per 1
|
||||
EmailDomainBlock.paginates_per 2
|
||||
example.run
|
||||
EmailDomainBlock.paginates_per default_per_page
|
||||
end
|
||||
|
||||
it 'returns http success' do
|
||||
2.times { Fabricate(:email_domain_block) }
|
||||
Fabricate(:email_domain_block, allow_with_approval: true)
|
||||
get :index, params: { page: 2 }
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
@ -34,6 +35,16 @@ RSpec.describe Admin::EmailDomainBlocksController do
|
|||
describe 'POST #create' do
|
||||
context 'when resolve button is pressed' do
|
||||
before do
|
||||
resolver = instance_double(Resolv::DNS)
|
||||
|
||||
allow(resolver).to receive(:getresources)
|
||||
.with('example.com', Resolv::DNS::Resource::IN::MX)
|
||||
.and_return([])
|
||||
allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([])
|
||||
allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([])
|
||||
allow(resolver).to receive(:timeouts=).and_return(nil)
|
||||
allow(Resolv::DNS).to receive(:open).and_yield(resolver)
|
||||
|
||||
post :create, params: { email_domain_block: { domain: 'example.com' } }
|
||||
end
|
||||
|
||||
|
|
|
@ -135,6 +135,25 @@ RSpec.describe Auth::RegistrationsController do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when user has an email address requiring approval' do
|
||||
subject do
|
||||
Setting.registrations_mode = 'open'
|
||||
Fabricate(:email_domain_block, allow_with_approval: true, domain: 'example.com')
|
||||
request.headers['Accept-Language'] = accept_language
|
||||
post :create, params: { user: { account_attributes: { username: 'test' }, email: 'test@example.com', password: '12345678', password_confirmation: '12345678', agreement: 'true' } }
|
||||
end
|
||||
|
||||
it 'creates unapproved user and redirects to setup' do
|
||||
subject
|
||||
expect(response).to redirect_to auth_setup_path
|
||||
|
||||
user = User.find_by(email: 'test@example.com')
|
||||
expect(user).to_not be_nil
|
||||
expect(user.locale).to eq(accept_language)
|
||||
expect(user.approved).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with Approval-based registrations without invite' do
|
||||
subject do
|
||||
Setting.registrations_mode = 'approved'
|
||||
|
|
|
@ -22,7 +22,7 @@ describe 'Admin::Accounts' do
|
|||
|
||||
context 'without selecting any accounts' do
|
||||
it 'displays a notice about account selection' do
|
||||
click_button button_for_suspend
|
||||
click_on button_for_suspend
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
@ -32,7 +32,7 @@ describe 'Admin::Accounts' do
|
|||
it 'suspends the account' do
|
||||
batch_checkbox_for(approved_user_account).check
|
||||
|
||||
click_button button_for_suspend
|
||||
click_on button_for_suspend
|
||||
|
||||
expect(approved_user_account.reload).to be_suspended
|
||||
end
|
||||
|
@ -42,7 +42,7 @@ describe 'Admin::Accounts' do
|
|||
it 'approves the account user' do
|
||||
batch_checkbox_for(unapproved_user_account).check
|
||||
|
||||
click_button button_for_approve
|
||||
click_on button_for_approve
|
||||
|
||||
expect(unapproved_user_account.reload.user).to be_approved
|
||||
end
|
||||
|
@ -52,7 +52,7 @@ describe 'Admin::Accounts' do
|
|||
it 'rejects and removes the account' do
|
||||
batch_checkbox_for(unapproved_user_account).check
|
||||
|
||||
click_button button_for_reject
|
||||
click_on button_for_reject
|
||||
|
||||
expect { unapproved_user_account.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::CustomEmojis' do
|
|||
|
||||
context 'without selecting any records' do
|
||||
it 'displays a notice about selection' do
|
||||
click_button button_for_enable
|
||||
click_on button_for_enable
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
|
|
@ -14,7 +14,7 @@ describe 'blocking domains through the moderation interface' do
|
|||
|
||||
fill_in 'domain_block_domain', with: 'example.com'
|
||||
select I18n.t('admin.domain_blocks.new.severity.silence'), from: 'domain_block_severity'
|
||||
click_button I18n.t('admin.domain_blocks.new.create')
|
||||
click_on I18n.t('admin.domain_blocks.new.create')
|
||||
|
||||
expect(DomainBlock.exists?(domain: 'example.com', severity: 'silence')).to be true
|
||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||
|
@ -27,14 +27,14 @@ describe 'blocking domains through the moderation interface' do
|
|||
|
||||
fill_in 'domain_block_domain', with: 'example.com'
|
||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||
click_button I18n.t('admin.domain_blocks.new.create')
|
||||
click_on I18n.t('admin.domain_blocks.new.create')
|
||||
|
||||
# It doesn't immediately block but presents a confirmation screen
|
||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||
|
||||
# Confirming creates a block
|
||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
|
||||
expect(DomainBlock.exists?(domain: 'example.com', severity: 'suspend')).to be true
|
||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||
|
@ -49,14 +49,14 @@ describe 'blocking domains through the moderation interface' do
|
|||
|
||||
fill_in 'domain_block_domain', with: 'example.com'
|
||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||
click_button I18n.t('admin.domain_blocks.new.create')
|
||||
click_on I18n.t('admin.domain_blocks.new.create')
|
||||
|
||||
# It doesn't immediately block but presents a confirmation screen
|
||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||
|
||||
# Confirming updates the block
|
||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
|
||||
expect(domain_block.reload.severity).to eq 'suspend'
|
||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||
|
@ -71,14 +71,14 @@ describe 'blocking domains through the moderation interface' do
|
|||
|
||||
fill_in 'domain_block_domain', with: 'subdomain.example.com'
|
||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||
click_button I18n.t('admin.domain_blocks.new.create')
|
||||
click_on I18n.t('admin.domain_blocks.new.create')
|
||||
|
||||
# It doesn't immediately block but presents a confirmation screen
|
||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com'))
|
||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||
|
||||
# Confirming creates the block
|
||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
|
||||
expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist
|
||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||
|
@ -96,14 +96,14 @@ describe 'blocking domains through the moderation interface' do
|
|||
visit edit_admin_domain_block_path(domain_block)
|
||||
|
||||
select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
|
||||
click_button I18n.t('generic.save_changes')
|
||||
click_on I18n.t('generic.save_changes')
|
||||
|
||||
# It doesn't immediately block but presents a confirmation screen
|
||||
expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
|
||||
expect(DomainBlockWorker).to_not have_received(:perform_async)
|
||||
|
||||
# Confirming updates the block
|
||||
click_button I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
|
||||
expect(DomainBlockWorker).to have_received(:perform_async)
|
||||
|
||||
expect(domain_block.reload.severity).to eq 'suspend'
|
||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::EmailDomainBlocks' do
|
|||
|
||||
context 'without selecting any records' do
|
||||
it 'displays a notice about selection' do
|
||||
click_button button_for_delete
|
||||
click_on button_for_delete
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::IpBlocks' do
|
|||
|
||||
context 'without selecting any records' do
|
||||
it 'displays a notice about selection' do
|
||||
click_button button_for_delete
|
||||
click_on button_for_delete
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
|
|
@ -11,13 +11,13 @@ describe 'finding software updates through the admin interface' do
|
|||
|
||||
it 'shows a link to the software updates page, which links to release notes' do
|
||||
visit settings_profile_path
|
||||
click_link I18n.t('admin.critical_update_pending')
|
||||
click_on I18n.t('admin.critical_update_pending')
|
||||
|
||||
expect(page).to have_title(I18n.t('admin.software_updates.title'))
|
||||
|
||||
expect(page).to have_content('99.99.99')
|
||||
|
||||
click_link I18n.t('admin.software_updates.release_notes')
|
||||
click_on I18n.t('admin.software_updates.release_notes')
|
||||
expect(page).to have_current_path('https://github.com/mastodon/mastodon/releases/v99', url: true)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,7 +17,7 @@ describe 'Admin::Statuses' do
|
|||
|
||||
context 'without selecting any records' do
|
||||
it 'displays a notice about selection' do
|
||||
click_button button_for_report
|
||||
click_on button_for_report
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::Trends::Links::PreviewCardProviders' do
|
|||
|
||||
context 'without selecting any records' do
|
||||
it 'displays a notice about selection' do
|
||||
click_button button_for_allow
|
||||
click_on button_for_allow
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ describe 'Admin::Trends::Links' do
|
|||
|
||||
context 'without selecting any records' do
|
||||
it 'displays a notice about selection' do
|
||||
click_button button_for_allow
|
||||
click_on button_for_allow
|
||||
|
||||
expect(page).to have_content(selection_error_text)
|
||||
end
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue