Merge commit 'b896b16cb3c8626fbee12a7eda7f882114b1a040' into glitch-soc/merge-upstream
This commit is contained in:
commit
6dbd44faea
21
.rubocop.yml
21
.rubocop.yml
|
@ -43,7 +43,7 @@ Layout/LineLength:
|
||||||
- !ruby/regexp / \# .*$/
|
- !ruby/regexp / \# .*$/
|
||||||
- !ruby/regexp /^\# .*$/
|
- !ruby/regexp /^\# .*$/
|
||||||
Exclude:
|
Exclude:
|
||||||
- lib/**/*cli*.rb
|
- 'lib/mastodon/cli/*.rb'
|
||||||
- db/*migrate/**/*
|
- db/*migrate/**/*
|
||||||
- db/seeds/**/*
|
- db/seeds/**/*
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ Lint/UselessAccessModifier:
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsabcsize
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsabcsize
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/**/*cli*.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
- db/*migrate/**/*
|
- db/*migrate/**/*
|
||||||
|
|
||||||
# Reason: Some functions cannot be broken up, but others may be refactor candidates
|
# Reason: Some functions cannot be broken up, but others may be refactor candidates
|
||||||
|
@ -66,7 +66,7 @@ Metrics/BlockLength:
|
||||||
CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
|
CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'config/routes.rb'
|
- 'config/routes.rb'
|
||||||
- 'lib/mastodon/*_cli.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
- 'lib/tasks/*.rake'
|
- 'lib/tasks/*.rake'
|
||||||
- 'app/models/concerns/account_associations.rb'
|
- 'app/models/concerns/account_associations.rb'
|
||||||
- 'app/models/concerns/account_interactions.rb'
|
- 'app/models/concerns/account_interactions.rb'
|
||||||
|
@ -95,14 +95,14 @@ Metrics/BlockLength:
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsblocknesting
|
||||||
Metrics/BlockNesting:
|
Metrics/BlockNesting:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/mastodon/*_cli.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
|
|
||||||
# Reason: Some Excluded files would be candidates for refactoring but not currently addressed
|
# Reason: Some Excluded files would be candidates for refactoring but not currently addressed
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsclasslength
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsclasslength
|
||||||
Metrics/ClassLength:
|
Metrics/ClassLength:
|
||||||
CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
|
CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/mastodon/*_cli.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
- 'app/controllers/admin/accounts_controller.rb'
|
- 'app/controllers/admin/accounts_controller.rb'
|
||||||
- 'app/controllers/api/base_controller.rb'
|
- 'app/controllers/api/base_controller.rb'
|
||||||
- 'app/controllers/api/v1/admin/accounts_controller.rb'
|
- 'app/controllers/api/v1/admin/accounts_controller.rb'
|
||||||
|
@ -146,7 +146,7 @@ Metrics/ClassLength:
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricscyclomaticcomplexity
|
||||||
Metrics/CyclomaticComplexity:
|
Metrics/CyclomaticComplexity:
|
||||||
Exclude:
|
Exclude:
|
||||||
- lib/mastodon/*cli*.rb
|
- lib/mastodon/cli/*.rb
|
||||||
- db/*migrate/**/*
|
- db/*migrate/**/*
|
||||||
|
|
||||||
# Reason: Currently disabled in .rubocop_todo.yml
|
# Reason: Currently disabled in .rubocop_todo.yml
|
||||||
|
@ -154,7 +154,7 @@ Metrics/CyclomaticComplexity:
|
||||||
Metrics/MethodLength:
|
Metrics/MethodLength:
|
||||||
CountAsOne: [array, heredoc]
|
CountAsOne: [array, heredoc]
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/mastodon/*_cli.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
|
|
||||||
# Reason:
|
# Reason:
|
||||||
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmodulelength
|
# https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmodulelength
|
||||||
|
@ -171,13 +171,12 @@ Rails/FilePath:
|
||||||
Rails/HttpStatus:
|
Rails/HttpStatus:
|
||||||
EnforcedStyle: numeric
|
EnforcedStyle: numeric
|
||||||
|
|
||||||
# Reason: Allowed only in the `tootctl` CLI application code
|
# Reason: Allowed in `tootctl` CLI code and in boot ENV checker
|
||||||
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
|
# https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsexit
|
||||||
Rails/Exit:
|
Rails/Exit:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'lib/mastodon/*_cli.rb'
|
- 'config/boot.rb'
|
||||||
- 'lib/mastodon/cli_helper.rb'
|
- 'lib/mastodon/cli/*.rb'
|
||||||
- 'lib/cli.rb'
|
|
||||||
|
|
||||||
# Reason: Some single letter camel case files shouldn't be split
|
# Reason: Some single letter camel case files shouldn't be split
|
||||||
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
|
||||||
|
|
|
@ -396,12 +396,6 @@ RSpec/ExpectChange:
|
||||||
- 'spec/services/unsuspend_account_service_spec.rb'
|
- 'spec/services/unsuspend_account_service_spec.rb'
|
||||||
- 'spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb'
|
- 'spec/workers/scheduler/accounts_statuses_cleanup_scheduler_spec.rb'
|
||||||
|
|
||||||
RSpec/ExpectInHook:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/api/v1/media_controller_spec.rb'
|
|
||||||
- 'spec/controllers/settings/applications_controller_spec.rb'
|
|
||||||
- 'spec/lib/status_filter_spec.rb'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
# This cop supports safe autocorrection (--autocorrect).
|
||||||
# Configuration parameters: EnforcedStyle.
|
# Configuration parameters: EnforcedStyle.
|
||||||
# SupportedStyles: implicit, each, example
|
# SupportedStyles: implicit, each, example
|
||||||
|
@ -565,15 +559,6 @@ RSpec/PendingWithoutReason:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'spec/models/account_spec.rb'
|
- 'spec/models/account_spec.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
||||||
# Configuration parameters: Strict, EnforcedStyle, AllowedExplicitMatchers.
|
|
||||||
# SupportedStyles: inflected, explicit
|
|
||||||
RSpec/PredicateMatcher:
|
|
||||||
Exclude:
|
|
||||||
- 'spec/controllers/api/v1/accounts/notes_controller_spec.rb'
|
|
||||||
- 'spec/models/user_spec.rb'
|
|
||||||
- 'spec/services/post_status_service_spec.rb'
|
|
||||||
|
|
||||||
RSpec/StubbedMock:
|
RSpec/StubbedMock:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'spec/controllers/api/base_controller_spec.rb'
|
- 'spec/controllers/api/base_controller_spec.rb'
|
||||||
|
@ -715,12 +700,6 @@ Rails/DuplicateAssociation:
|
||||||
- 'app/serializers/activitypub/collection_serializer.rb'
|
- 'app/serializers/activitypub/collection_serializer.rb'
|
||||||
- 'app/serializers/activitypub/note_serializer.rb'
|
- 'app/serializers/activitypub/note_serializer.rb'
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
|
||||||
# Include: app/**/*.rb, config/**/*.rb, lib/**/*.rb
|
|
||||||
Rails/Exit:
|
|
||||||
Exclude:
|
|
||||||
- 'config/boot.rb'
|
|
||||||
|
|
||||||
# Configuration parameters: Include.
|
# Configuration parameters: Include.
|
||||||
# Include: app/models/**/*.rb
|
# Include: app/models/**/*.rb
|
||||||
Rails/HasAndBelongsToMany:
|
Rails/HasAndBelongsToMany:
|
||||||
|
@ -855,9 +834,9 @@ Rails/SkipsModelValidations:
|
||||||
- 'db/post_migrate/20220617202502_migrate_roles.rb'
|
- 'db/post_migrate/20220617202502_migrate_roles.rb'
|
||||||
- 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb'
|
- 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb'
|
||||||
- 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb'
|
- 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb'
|
||||||
- 'lib/cli.rb'
|
- 'lib/mastodon/cli/accounts.rb'
|
||||||
- 'lib/mastodon/accounts_cli.rb'
|
- 'lib/mastodon/cli/main.rb'
|
||||||
- 'lib/mastodon/maintenance_cli.rb'
|
- 'lib/mastodon/cli/maintenance.rb'
|
||||||
- 'spec/controllers/api/v1/admin/accounts_controller_spec.rb'
|
- 'spec/controllers/api/v1/admin/accounts_controller_spec.rb'
|
||||||
- 'spec/lib/activitypub/activity/follow_spec.rb'
|
- 'spec/lib/activitypub/activity/follow_spec.rb'
|
||||||
- 'spec/services/follow_service_spec.rb'
|
- 'spec/services/follow_service_spec.rb'
|
||||||
|
@ -939,7 +918,7 @@ Rails/WhereExists:
|
||||||
- 'app/validators/vote_validator.rb'
|
- 'app/validators/vote_validator.rb'
|
||||||
- 'app/workers/move_worker.rb'
|
- 'app/workers/move_worker.rb'
|
||||||
- 'db/migrate/20190529143559_preserve_old_layout_for_existing_users.rb'
|
- 'db/migrate/20190529143559_preserve_old_layout_for_existing_users.rb'
|
||||||
- 'lib/mastodon/email_domain_blocks_cli.rb'
|
- 'lib/mastodon/cli/email_domain_blocks.rb'
|
||||||
- 'lib/tasks/tests.rake'
|
- 'lib/tasks/tests.rake'
|
||||||
- 'spec/controllers/api/v1/accounts/notes_controller_spec.rb'
|
- 'spec/controllers/api/v1/accounts/notes_controller_spec.rb'
|
||||||
- 'spec/controllers/api/v1/tags_controller_spec.rb'
|
- 'spec/controllers/api/v1/tags_controller_spec.rb'
|
||||||
|
@ -1001,7 +980,7 @@ Style/FormatStringToken:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/models/privacy_policy.rb'
|
- 'app/models/privacy_policy.rb'
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'lib/mastodon/maintenance_cli.rb'
|
- 'lib/mastodon/cli/maintenance.rb'
|
||||||
- 'lib/paperclip/color_extractor.rb'
|
- 'lib/paperclip/color_extractor.rb'
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
|
@ -1446,9 +1425,9 @@ Style/GuardClause:
|
||||||
- 'db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb'
|
- 'db/post_migrate/20220704024901_migrate_settings_to_user_roles.rb'
|
||||||
- 'lib/devise/two_factor_ldap_authenticatable.rb'
|
- 'lib/devise/two_factor_ldap_authenticatable.rb'
|
||||||
- 'lib/devise/two_factor_pam_authenticatable.rb'
|
- 'lib/devise/two_factor_pam_authenticatable.rb'
|
||||||
- 'lib/mastodon/accounts_cli.rb'
|
- 'lib/mastodon/cli/accounts.rb'
|
||||||
- 'lib/mastodon/maintenance_cli.rb'
|
- 'lib/mastodon/cli/maintenance.rb'
|
||||||
- 'lib/mastodon/media_cli.rb'
|
- 'lib/mastodon/cli/media.rb'
|
||||||
- 'lib/paperclip/attachment_extensions.rb'
|
- 'lib/paperclip/attachment_extensions.rb'
|
||||||
- 'lib/tasks/repo.rake'
|
- 'lib/tasks/repo.rake'
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,4 @@ class Api::V1::FeaturedTagsController < Api::BaseController
|
||||||
def set_featured_tags
|
def set_featured_tags
|
||||||
@featured_tags = current_account.featured_tags.order(statuses_count: :desc)
|
@featured_tags = current_account.featured_tags.order(statuses_count: :desc)
|
||||||
end
|
end
|
||||||
|
|
||||||
def featured_tag_params
|
|
||||||
params.require(:name)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,7 +46,7 @@ class MediaController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def allow_iframing
|
def allow_iframing
|
||||||
response.headers['X-Frame-Options'] = 'ALLOWALL'
|
response.headers.delete('X-Frame-Options')
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_pack
|
def set_pack
|
||||||
|
|
|
@ -46,7 +46,7 @@ class StatusesController < ApplicationController
|
||||||
return not_found if @status.hidden? || @status.reblog?
|
return not_found if @status.hidden? || @status.reblog?
|
||||||
|
|
||||||
expires_in 180, public: true
|
expires_in 180, public: true
|
||||||
response.headers['X-Frame-Options'] = 'ALLOWALL'
|
response.headers.delete('X-Frame-Options')
|
||||||
|
|
||||||
render layout: 'embedded'
|
render layout: 'embedded'
|
||||||
end
|
end
|
||||||
|
|
|
@ -52,7 +52,7 @@ module ApplicationHelper
|
||||||
if closed_registrations? || omniauth_only?
|
if closed_registrations? || omniauth_only?
|
||||||
'https://joinmastodon.org/#getting-started'
|
'https://joinmastodon.org/#getting-started'
|
||||||
else
|
else
|
||||||
new_user_registration_path
|
ENV.fetch('SSO_ACCOUNT_SIGN_UP', new_user_registration_path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,13 @@ export default class MediaContainer extends PureComponent {
|
||||||
render () {
|
render () {
|
||||||
const { locale, components } = this.props;
|
const { locale, components } = this.props;
|
||||||
|
|
||||||
|
let handleOpenVideo;
|
||||||
|
|
||||||
|
// Don't offer to expand the video in a lightbox if we're in a frame
|
||||||
|
if (window.self === window.top) {
|
||||||
|
handleOpenVideo = this.handleOpenVideo;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<IntlProvider locale={locale} messages={messages}>
|
<IntlProvider locale={locale} messages={messages}>
|
||||||
<>
|
<>
|
||||||
|
@ -89,7 +96,7 @@ export default class MediaContainer extends PureComponent {
|
||||||
|
|
||||||
...(componentName === 'Video' ? {
|
...(componentName === 'Video' ? {
|
||||||
componentIndex: i,
|
componentIndex: i,
|
||||||
onOpenVideo: this.handleOpenVideo,
|
onOpenVideo: handleOpenVideo,
|
||||||
} : {
|
} : {
|
||||||
onOpenMedia: this.handleOpenMedia,
|
onOpenMedia: this.handleOpenMedia,
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { openModal, closeModal } from 'mastodon/actions/modal';
|
||||||
|
|
||||||
const mapStateToProps = (state, { accountId }) => ({
|
const mapStateToProps = (state, { accountId }) => ({
|
||||||
displayNameHtml: state.getIn(['accounts', accountId, 'display_name_html']),
|
displayNameHtml: state.getIn(['accounts', accountId, 'display_name_html']),
|
||||||
|
signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], '/auth/sign_up'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
|
@ -81,6 +82,7 @@ class InteractionModal extends PureComponent {
|
||||||
url: PropTypes.string,
|
url: PropTypes.string,
|
||||||
type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow']),
|
type: PropTypes.oneOf(['reply', 'reblog', 'favourite', 'follow']),
|
||||||
onSignupClick: PropTypes.func.isRequired,
|
onSignupClick: PropTypes.func.isRequired,
|
||||||
|
signupUrl: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
handleSignupClick = () => {
|
handleSignupClick = () => {
|
||||||
|
@ -88,7 +90,7 @@ class InteractionModal extends PureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { url, type, displayNameHtml } = this.props;
|
const { url, type, displayNameHtml, signupUrl } = this.props;
|
||||||
|
|
||||||
const name = <bdi dangerouslySetInnerHTML={{ __html: displayNameHtml }} />;
|
const name = <bdi dangerouslySetInnerHTML={{ __html: displayNameHtml }} />;
|
||||||
|
|
||||||
|
@ -121,7 +123,7 @@ class InteractionModal extends PureComponent {
|
||||||
|
|
||||||
if (registrationsOpen) {
|
if (registrationsOpen) {
|
||||||
signupButton = (
|
signupButton = (
|
||||||
<a href='/auth/sign_up' className='button button--block button-tertiary'>
|
<a href={signupUrl} className='button button--block button-tertiary'>
|
||||||
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
|
|
|
@ -16,6 +16,10 @@ const Account = connect(state => ({
|
||||||
</Link>
|
</Link>
|
||||||
));
|
));
|
||||||
|
|
||||||
|
const mapStateToProps = (state) => ({
|
||||||
|
signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], '/auth/sign_up'),
|
||||||
|
});
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
openClosedRegistrationsModal() {
|
openClosedRegistrationsModal() {
|
||||||
dispatch(openModal('CLOSED_REGISTRATIONS'));
|
dispatch(openModal('CLOSED_REGISTRATIONS'));
|
||||||
|
@ -31,11 +35,12 @@ class Header extends PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
openClosedRegistrationsModal: PropTypes.func,
|
openClosedRegistrationsModal: PropTypes.func,
|
||||||
location: PropTypes.object,
|
location: PropTypes.object,
|
||||||
|
signupUrl: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { signedIn } = this.context.identity;
|
const { signedIn } = this.context.identity;
|
||||||
const { location, openClosedRegistrationsModal } = this.props;
|
const { location, openClosedRegistrationsModal, signupUrl } = this.props;
|
||||||
|
|
||||||
let content;
|
let content;
|
||||||
|
|
||||||
|
@ -51,7 +56,7 @@ class Header extends PureComponent {
|
||||||
|
|
||||||
if (registrationsOpen) {
|
if (registrationsOpen) {
|
||||||
signupButton = (
|
signupButton = (
|
||||||
<a href='/auth/sign_up' className='button'>
|
<a href={signupUrl} className='button'>
|
||||||
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
|
@ -87,4 +92,4 @@ class Header extends PureComponent {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default withRouter(connect(null, mapDispatchToProps)(Header));
|
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Header));
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useAppDispatch, useAppSelector } from 'mastodon/store';
|
||||||
import { registrationsOpen } from 'mastodon/initial_state';
|
import { registrationsOpen } from 'mastodon/initial_state';
|
||||||
import { openModal } from 'mastodon/actions/modal';
|
import { openModal } from 'mastodon/actions/modal';
|
||||||
|
|
||||||
const SignInBanner = () => {
|
const SignInBanner = () => {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const openClosedRegistrationsModal = useCallback(
|
const openClosedRegistrationsModal = useCallback(
|
||||||
() => dispatch(openModal('CLOSED_REGISTRATIONS')),
|
() => dispatch(openModal('CLOSED_REGISTRATIONS')),
|
||||||
|
@ -14,9 +14,11 @@ const SignInBanner = () => {
|
||||||
|
|
||||||
let signupButton;
|
let signupButton;
|
||||||
|
|
||||||
|
const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], '/auth/sign_up'));
|
||||||
|
|
||||||
if (registrationsOpen) {
|
if (registrationsOpen) {
|
||||||
signupButton = (
|
signupButton = (
|
||||||
<a href='/auth/sign_up' className='button button--block'>
|
<a href={signupUrl} className='button button--block'>
|
||||||
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
class Identity < ApplicationRecord
|
class Identity < ApplicationRecord
|
||||||
belongs_to :user, dependent: :destroy
|
belongs_to :user
|
||||||
validates :uid, presence: true, uniqueness: { scope: :provider }
|
validates :uid, presence: true, uniqueness: { scope: :provider }
|
||||||
validates :provider, presence: true
|
validates :provider, presence: true
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
||||||
enabled: registrations_enabled?,
|
enabled: registrations_enabled?,
|
||||||
approval_required: Setting.registrations_mode == 'approved',
|
approval_required: Setting.registrations_mode == 'approved',
|
||||||
message: registrations_enabled? ? nil : registrations_message,
|
message: registrations_enabled? ? nil : registrations_message,
|
||||||
|
url: ENV.fetch('SSO_ACCOUNT_SIGN_UP', nil),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
APP_PATH = File.expand_path('../config/application', __dir__)
|
APP_PATH = File.expand_path('../config/application', __dir__)
|
||||||
|
|
||||||
require_relative '../config/boot'
|
require_relative '../config/boot'
|
||||||
require_relative '../lib/cli'
|
require_relative '../lib/mastodon/cli/main'
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Chewy.strategy(:mastodon) do
|
Chewy.strategy(:mastodon) do
|
||||||
Mastodon::CLI.start(ARGV)
|
Mastodon::CLI::Main.start(ARGV)
|
||||||
end
|
end
|
||||||
rescue Interrupt
|
rescue Interrupt
|
||||||
exit(130)
|
exit(130)
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'set'
|
require 'set'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class AccountsCLI < Thor
|
class Accounts < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class CacheCLI < Thor
|
class Cache < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,13 +1,13 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'concurrent'
|
require 'concurrent'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class CanonicalEmailBlocksCLI < Thor
|
class CanonicalEmailBlocks < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,13 +1,13 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'concurrent'
|
require 'concurrent'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class DomainsCLI < Thor
|
class Domains < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,13 +1,13 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'concurrent'
|
require 'concurrent'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class EmailDomainBlocksCLI < Thor
|
class EmailDomainBlocks < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'rubygems/package'
|
require 'rubygems/package'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class EmojiCLI < Thor
|
class Emoji < Thor
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
||||||
end
|
end
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class FeedsCLI < Thor
|
class Feeds < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
include Redisable
|
include Redisable
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
|
@ -9,8 +9,8 @@ HttpLog.configuration.logger = dev_null
|
||||||
Paperclip.options[:log] = false
|
Paperclip.options[:log] = false
|
||||||
Chewy.logger = dev_null
|
Chewy.logger = dev_null
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
module CLIHelper
|
module Helper
|
||||||
def dry_run?
|
def dry_run?
|
||||||
options[:dry_run]
|
options[:dry_run]
|
||||||
end
|
end
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'rubygems/package'
|
require 'rubygems/package'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class IpBlocksCLI < Thor
|
class IpBlocks < Thor
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
||||||
end
|
end
|
|
@ -1,73 +1,73 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'thor'
|
require 'thor'
|
||||||
require_relative 'mastodon/media_cli'
|
require_relative 'media'
|
||||||
require_relative 'mastodon/emoji_cli'
|
require_relative 'emoji'
|
||||||
require_relative 'mastodon/accounts_cli'
|
require_relative 'accounts'
|
||||||
require_relative 'mastodon/feeds_cli'
|
require_relative 'feeds'
|
||||||
require_relative 'mastodon/search_cli'
|
require_relative 'search'
|
||||||
require_relative 'mastodon/settings_cli'
|
require_relative 'settings'
|
||||||
require_relative 'mastodon/statuses_cli'
|
require_relative 'statuses'
|
||||||
require_relative 'mastodon/domains_cli'
|
require_relative 'domains'
|
||||||
require_relative 'mastodon/preview_cards_cli'
|
require_relative 'preview_cards'
|
||||||
require_relative 'mastodon/cache_cli'
|
require_relative 'cache'
|
||||||
require_relative 'mastodon/upgrade_cli'
|
require_relative 'upgrade'
|
||||||
require_relative 'mastodon/email_domain_blocks_cli'
|
require_relative 'email_domain_blocks'
|
||||||
require_relative 'mastodon/canonical_email_blocks_cli'
|
require_relative 'canonical_email_blocks'
|
||||||
require_relative 'mastodon/ip_blocks_cli'
|
require_relative 'ip_blocks'
|
||||||
require_relative 'mastodon/maintenance_cli'
|
require_relative 'maintenance'
|
||||||
require_relative 'mastodon/version'
|
require_relative '../version'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class CLI < Thor
|
class Main < Thor
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'media SUBCOMMAND ...ARGS', 'Manage media files'
|
desc 'media SUBCOMMAND ...ARGS', 'Manage media files'
|
||||||
subcommand 'media', Mastodon::MediaCLI
|
subcommand 'media', Media
|
||||||
|
|
||||||
desc 'emoji SUBCOMMAND ...ARGS', 'Manage custom emoji'
|
desc 'emoji SUBCOMMAND ...ARGS', 'Manage custom emoji'
|
||||||
subcommand 'emoji', Mastodon::EmojiCLI
|
subcommand 'emoji', Emoji
|
||||||
|
|
||||||
desc 'accounts SUBCOMMAND ...ARGS', 'Manage accounts'
|
desc 'accounts SUBCOMMAND ...ARGS', 'Manage accounts'
|
||||||
subcommand 'accounts', Mastodon::AccountsCLI
|
subcommand 'accounts', Accounts
|
||||||
|
|
||||||
desc 'feeds SUBCOMMAND ...ARGS', 'Manage feeds'
|
desc 'feeds SUBCOMMAND ...ARGS', 'Manage feeds'
|
||||||
subcommand 'feeds', Mastodon::FeedsCLI
|
subcommand 'feeds', Feeds
|
||||||
|
|
||||||
desc 'search SUBCOMMAND ...ARGS', 'Manage the search engine'
|
desc 'search SUBCOMMAND ...ARGS', 'Manage the search engine'
|
||||||
subcommand 'search', Mastodon::SearchCLI
|
subcommand 'search', Search
|
||||||
|
|
||||||
desc 'settings SUBCOMMAND ...ARGS', 'Manage dynamic settings'
|
desc 'settings SUBCOMMAND ...ARGS', 'Manage dynamic settings'
|
||||||
subcommand 'settings', Mastodon::SettingsCLI
|
subcommand 'settings', Settings
|
||||||
|
|
||||||
desc 'statuses SUBCOMMAND ...ARGS', 'Manage statuses'
|
desc 'statuses SUBCOMMAND ...ARGS', 'Manage statuses'
|
||||||
subcommand 'statuses', Mastodon::StatusesCLI
|
subcommand 'statuses', Statuses
|
||||||
|
|
||||||
desc 'domains SUBCOMMAND ...ARGS', 'Manage account domains'
|
desc 'domains SUBCOMMAND ...ARGS', 'Manage account domains'
|
||||||
subcommand 'domains', Mastodon::DomainsCLI
|
subcommand 'domains', Domains
|
||||||
|
|
||||||
desc 'preview_cards SUBCOMMAND ...ARGS', 'Manage preview cards'
|
desc 'preview_cards SUBCOMMAND ...ARGS', 'Manage preview cards'
|
||||||
subcommand 'preview_cards', Mastodon::PreviewCardsCLI
|
subcommand 'preview_cards', PreviewCards
|
||||||
|
|
||||||
desc 'cache SUBCOMMAND ...ARGS', 'Manage cache'
|
desc 'cache SUBCOMMAND ...ARGS', 'Manage cache'
|
||||||
subcommand 'cache', Mastodon::CacheCLI
|
subcommand 'cache', Cache
|
||||||
|
|
||||||
desc 'upgrade SUBCOMMAND ...ARGS', 'Various version upgrade utilities'
|
desc 'upgrade SUBCOMMAND ...ARGS', 'Various version upgrade utilities'
|
||||||
subcommand 'upgrade', Mastodon::UpgradeCLI
|
subcommand 'upgrade', Upgrade
|
||||||
|
|
||||||
desc 'email_domain_blocks SUBCOMMAND ...ARGS', 'Manage e-mail domain blocks'
|
desc 'email_domain_blocks SUBCOMMAND ...ARGS', 'Manage e-mail domain blocks'
|
||||||
subcommand 'email_domain_blocks', Mastodon::EmailDomainBlocksCLI
|
subcommand 'email_domain_blocks', EmailDomainBlocks
|
||||||
|
|
||||||
desc 'ip_blocks SUBCOMMAND ...ARGS', 'Manage IP blocks'
|
desc 'ip_blocks SUBCOMMAND ...ARGS', 'Manage IP blocks'
|
||||||
subcommand 'ip_blocks', Mastodon::IpBlocksCLI
|
subcommand 'ip_blocks', IpBlocks
|
||||||
|
|
||||||
desc 'canonical_email_blocks SUBCOMMAND ...ARGS', 'Manage canonical e-mail blocks'
|
desc 'canonical_email_blocks SUBCOMMAND ...ARGS', 'Manage canonical e-mail blocks'
|
||||||
subcommand 'canonical_email_blocks', Mastodon::CanonicalEmailBlocksCLI
|
subcommand 'canonical_email_blocks', CanonicalEmailBlocks
|
||||||
|
|
||||||
desc 'maintenance SUBCOMMAND ...ARGS', 'Various maintenance utilities'
|
desc 'maintenance SUBCOMMAND ...ARGS', 'Various maintenance utilities'
|
||||||
subcommand 'maintenance', Mastodon::MaintenanceCLI
|
subcommand 'maintenance', Maintenance
|
||||||
|
|
||||||
option :dry_run, type: :boolean
|
option :dry_run, type: :boolean
|
||||||
desc 'self-destruct', 'Erase the server from the federation'
|
desc 'self-destruct', 'Erase the server from the federation'
|
|
@ -1,13 +1,13 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'tty-prompt'
|
require 'tty-prompt'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class MaintenanceCLI < Thor
|
class Maintenance < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,13 +1,13 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class MediaCLI < Thor
|
class Media < Thor
|
||||||
include ActionView::Helpers::NumberHelper
|
include ActionView::Helpers::NumberHelper
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
VALID_PATH_SEGMENTS_SIZE = [7, 10].freeze
|
VALID_PATH_SEGMENTS_SIZE = [7, 10].freeze
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'tty-prompt'
|
require 'tty-prompt'
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class PreviewCardsCLI < Thor
|
class PreviewCards < Thor
|
||||||
include ActionView::Helpers::NumberHelper
|
include ActionView::Helpers::NumberHelper
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class SearchCLI < Thor
|
class Search < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
# Indices are sorted by amount of data to be expected in each, so that
|
# Indices are sorted by amount of data to be expected in each, so that
|
||||||
# smaller indices can go online sooner
|
# smaller indices can go online sooner
|
|
@ -1,11 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class RegistrationsCLI < Thor
|
class Registrations < Thor
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
@ -37,8 +37,8 @@ module Mastodon
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SettingsCLI < Thor
|
class Settings < Thor
|
||||||
desc 'registrations SUBCOMMAND ...ARGS', 'Manage state of registrations'
|
desc 'registrations SUBCOMMAND ...ARGS', 'Manage state of registrations'
|
||||||
subcommand 'registrations', RegistrationsCLI
|
subcommand 'registrations', Registrations
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class StatusesCLI < Thor
|
class Statuses < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
include ActionView::Helpers::NumberHelper
|
include ActionView::Helpers::NumberHelper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../config/boot'
|
require_relative '../../../config/boot'
|
||||||
require_relative '../../config/environment'
|
require_relative '../../../config/environment'
|
||||||
require_relative 'cli_helper'
|
require_relative 'helper'
|
||||||
|
|
||||||
module Mastodon
|
module Mastodon::CLI
|
||||||
class UpgradeCLI < Thor
|
class Upgrade < Thor
|
||||||
include CLIHelper
|
include Helper
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
|
@ -43,7 +43,7 @@ describe Api::V1::Accounts::NotesController do
|
||||||
|
|
||||||
it 'does not create account note' do
|
it 'does not create account note' do
|
||||||
subject
|
subject
|
||||||
expect(AccountNote.where(account_id: user.account.id, target_account_id: account.id).exists?).to be_falsey
|
expect(AccountNote.where(account_id: user.account.id, target_account_id: account.id)).to_not exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,23 +15,19 @@ RSpec.describe Api::V1::MediaController do
|
||||||
describe 'POST #create' do
|
describe 'POST #create' do
|
||||||
describe 'with paperclip errors' do
|
describe 'with paperclip errors' do
|
||||||
context 'when imagemagick cant identify the file type' do
|
context 'when imagemagick cant identify the file type' do
|
||||||
before do
|
it 'returns http 422' do
|
||||||
expect_any_instance_of(Account).to receive_message_chain(:media_attachments, :create!).and_raise(Paperclip::Errors::NotIdentifiedByImageMagickError)
|
expect_any_instance_of(Account).to receive_message_chain(:media_attachments, :create!).and_raise(Paperclip::Errors::NotIdentifiedByImageMagickError)
|
||||||
post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') }
|
post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') }
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http 422' do
|
|
||||||
expect(response).to have_http_status(422)
|
expect(response).to have_http_status(422)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a generic error' do
|
context 'when there is a generic error' do
|
||||||
before do
|
it 'returns http 422' do
|
||||||
expect_any_instance_of(Account).to receive_message_chain(:media_attachments, :create!).and_raise(Paperclip::Error)
|
expect_any_instance_of(Account).to receive_message_chain(:media_attachments, :create!).and_raise(Paperclip::Error)
|
||||||
post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') }
|
post :create, params: { file: fixture_file_upload('attachment.jpg', 'image/jpeg') }
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http 422' do
|
|
||||||
expect(response).to have_http_status(500)
|
expect(response).to have_http_status(500)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -182,12 +182,10 @@ describe Settings::ApplicationsController do
|
||||||
describe 'regenerate' do
|
describe 'regenerate' do
|
||||||
let(:token) { user.token_for_app(app) }
|
let(:token) { user.token_for_app(app) }
|
||||||
|
|
||||||
before do
|
it 'creates new token' do
|
||||||
expect(token).to_not be_nil
|
expect(token).to_not be_nil
|
||||||
post :regenerate, params: { id: app.id }
|
post :regenerate, params: { id: app.id }
|
||||||
end
|
|
||||||
|
|
||||||
it 'creates new token' do
|
|
||||||
expect(user.token_for_app(app)).to_not eql(token)
|
expect(user.token_for_app(app)).to_not eql(token)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
require 'mastodon/ip_blocks_cli'
|
require 'mastodon/cli/ip_blocks'
|
||||||
|
|
||||||
RSpec.describe Mastodon::IpBlocksCLI do
|
RSpec.describe Mastodon::CLI::IpBlocks do
|
||||||
let(:cli) { described_class.new }
|
let(:cli) { described_class.new }
|
||||||
|
|
||||||
describe '#add' do
|
describe '#add' do
|
|
@ -1,9 +1,9 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
require 'cli'
|
require 'mastodon/cli/main'
|
||||||
|
|
||||||
describe Mastodon::CLI do
|
describe Mastodon::CLI::Main do
|
||||||
describe 'version' do
|
describe 'version' do
|
||||||
it 'returns the Mastodon version' do
|
it 'returns the Mastodon version' do
|
||||||
expect { described_class.new.invoke(:version) }.to output(
|
expect { described_class.new.invoke(:version) }.to output(
|
|
@ -1,11 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
require 'mastodon/settings_cli'
|
require 'mastodon/cli/settings'
|
||||||
|
|
||||||
RSpec.describe Mastodon::SettingsCLI do
|
RSpec.describe Mastodon::CLI::Settings do
|
||||||
describe 'subcommand "registrations"' do
|
describe 'subcommand "registrations"' do
|
||||||
let(:cli) { Mastodon::RegistrationsCLI.new }
|
let(:cli) { Mastodon::CLI::Registrations.new }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
Setting.registrations_mode = nil
|
Setting.registrations_mode = nil
|
|
@ -7,7 +7,7 @@ describe StatusFilter do
|
||||||
let(:status) { Fabricate(:status) }
|
let(:status) { Fabricate(:status) }
|
||||||
|
|
||||||
context 'without an account' do
|
context 'without an account' do
|
||||||
subject { described_class.new(status, nil) }
|
subject(:filter) { described_class.new(status, nil) }
|
||||||
|
|
||||||
context 'when there are no connections' do
|
context 'when there are no connections' do
|
||||||
it { is_expected.to_not be_filtered }
|
it { is_expected.to_not be_filtered }
|
||||||
|
@ -22,16 +22,16 @@ describe StatusFilter do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when status policy does not allow show' do
|
context 'when status policy does not allow show' do
|
||||||
before do
|
it 'filters the status' do
|
||||||
expect_any_instance_of(StatusPolicy).to receive(:show?).and_return(false)
|
expect_any_instance_of(StatusPolicy).to receive(:show?).and_return(false)
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_filtered }
|
expect(filter).to be_filtered
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with real account' do
|
context 'with real account' do
|
||||||
subject { described_class.new(status, account) }
|
subject(:filter) { described_class.new(status, account) }
|
||||||
|
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
|
|
||||||
|
@ -73,11 +73,11 @@ describe StatusFilter do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when status policy does not allow show' do
|
context 'when status policy does not allow show' do
|
||||||
before do
|
it 'filters the status' do
|
||||||
expect_any_instance_of(StatusPolicy).to receive(:show?).and_return(false)
|
expect_any_instance_of(StatusPolicy).to receive(:show?).and_return(false)
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_filtered }
|
expect(filter).to be_filtered
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -115,19 +115,19 @@ RSpec.describe User do
|
||||||
it 'allows a non-blacklisted user to be created' do
|
it 'allows a non-blacklisted user to be created' do
|
||||||
user = User.new(email: 'foo@example.com', account: account, password: password, agreement: true)
|
user = User.new(email: 'foo@example.com', account: account, password: password, agreement: true)
|
||||||
|
|
||||||
expect(user.valid?).to be_truthy
|
expect(user).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not allow a blacklisted user to be created' do
|
it 'does not allow a blacklisted user to be created' do
|
||||||
user = User.new(email: 'foo@mvrht.com', account: account, password: password, agreement: true)
|
user = User.new(email: 'foo@mvrht.com', account: account, password: password, agreement: true)
|
||||||
|
|
||||||
expect(user.valid?).to be_falsey
|
expect(user).to_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not allow a subdomain blacklisted user to be created' do
|
it 'does not allow a subdomain blacklisted user to be created' do
|
||||||
user = User.new(email: 'foo@mvrht.com.topdomain.tld', account: account, password: password, agreement: true)
|
user = User.new(email: 'foo@mvrht.com.topdomain.tld', account: account, password: password, agreement: true)
|
||||||
|
|
||||||
expect(user.valid?).to be_falsey
|
expect(user).to_not be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -350,17 +350,17 @@ RSpec.describe User do
|
||||||
|
|
||||||
it 'does not allow a user to be created unless they are whitelisted' do
|
it 'does not allow a user to be created unless they are whitelisted' do
|
||||||
user = User.new(email: 'foo@example.com', account: account, password: password, agreement: true)
|
user = User.new(email: 'foo@example.com', account: account, password: password, agreement: true)
|
||||||
expect(user.valid?).to be_falsey
|
expect(user).to_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'allows a user to be created if they are whitelisted' do
|
it 'allows a user to be created if they are whitelisted' do
|
||||||
user = User.new(email: 'foo@mastodon.space', account: account, password: password, agreement: true)
|
user = User.new(email: 'foo@mastodon.space', account: account, password: password, agreement: true)
|
||||||
expect(user.valid?).to be_truthy
|
expect(user).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not allow a user with a whitelisted top domain as subdomain in their email address to be created' do
|
it 'does not allow a user with a whitelisted top domain as subdomain in their email address to be created' do
|
||||||
user = User.new(email: 'foo@mastodon.space.userdomain.com', account: account, password: password, agreement: true)
|
user = User.new(email: 'foo@mastodon.space.userdomain.com', account: account, password: password, agreement: true)
|
||||||
expect(user.valid?).to be_falsey
|
expect(user).to_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
context do
|
context do
|
||||||
|
@ -374,7 +374,7 @@ RSpec.describe User do
|
||||||
Rails.configuration.x.email_domains_blacklist = 'blacklisted.mastodon.space'
|
Rails.configuration.x.email_domains_blacklist = 'blacklisted.mastodon.space'
|
||||||
|
|
||||||
user = User.new(email: 'foo@blacklisted.mastodon.space', account: account, password: password)
|
user = User.new(email: 'foo@blacklisted.mastodon.space', account: account, password: password)
|
||||||
expect(user.valid?).to be_falsey
|
expect(user).to_not be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
26
spec/requests/backups_spec.rb
Normal file
26
spec/requests/backups_spec.rb
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe 'Backups' do
|
||||||
|
include RoutingHelper
|
||||||
|
|
||||||
|
describe 'GET backups#download' do
|
||||||
|
let(:user) { Fabricate(:user) }
|
||||||
|
let(:backup) { Fabricate(:backup, user: user) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in user
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'Downloads a user backup' do
|
||||||
|
get download_backup_path(backup)
|
||||||
|
|
||||||
|
expect(response).to redirect_to(backup_dump_url)
|
||||||
|
end
|
||||||
|
|
||||||
|
def backup_dump_url
|
||||||
|
full_asset_url(backup.dump.url)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -48,7 +48,7 @@ RSpec.describe PostStatusService, type: :service do
|
||||||
expect(status.params['text']).to eq 'Hi future!'
|
expect(status.params['text']).to eq 'Hi future!'
|
||||||
expect(status.params['media_ids']).to eq [media.id]
|
expect(status.params['media_ids']).to eq [media.id]
|
||||||
expect(media.reload.status).to be_nil
|
expect(media.reload.status).to be_nil
|
||||||
expect(Status.where(text: 'Hi future!').exists?).to be_falsey
|
expect(Status.where(text: 'Hi future!')).to_not exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not change statuses count' do
|
it 'does not change statuses count' do
|
||||||
|
|
Loading…
Reference in a new issue