channel: eslint-7
rubocop:
enabled: true
- channel: rubocop-0-82
+ channel: rubocop-0-88
sass-lint:
enabled: true
exclude_patterns:
Layout/EmptyLineAfterMagicComment:
Enabled: false
+Layout/EmptyLineAfterGuardClause:
+ Enabled: false
+
+Layout/EmptyLinesAroundAttributeAccessor:
+ Enabled: true
+
+Layout/HashAlignment:
+ Enabled: false
+ # EnforcedHashRocketStyle: table
+ # EnforcedColonStyle: table
+
+Layout/SpaceAroundMethodCallOperator:
+ Enabled: true
+
Layout/SpaceInsideHashLiteralBraces:
EnforcedStyle: space
+Lint/DeprecatedOpenSSLConstant:
+ Enabled: true
+
+Lint/DuplicateElsifCondition:
+ Enabled: true
+
+Lint/MixedRegexpCaptureTypes:
+ Enabled: true
+
+Lint/RaiseException:
+ Enabled: true
+
+Lint/StructNewOverride:
+ Enabled: true
+
Lint/UselessAccessModifier:
ContextCreatingMethods:
- class_methods
Metrics/AbcSize:
Max: 100
+ Exclude:
+ - 'lib/mastodon/*_cli.rb'
Metrics/BlockLength:
- Max: 35
+ Max: 55
Exclude:
- 'lib/tasks/**/*'
+ - 'lib/mastodon/*_cli.rb'
Metrics/BlockNesting:
Max: 3
+ Exclude:
+ - 'lib/mastodon/*_cli.rb'
Metrics/ClassLength:
CountComments: false
- Max: 300
+ Max: 400
+ Exclude:
+ - 'lib/mastodon/*_cli.rb'
Metrics/CyclomaticComplexity:
Max: 25
+ Exclude:
+ - 'lib/mastodon/*_cli.rb'
Layout/LineLength:
AllowURI: true
Metrics/MethodLength:
CountComments: false
- Max: 55
+ Max: 65
+ Exclude:
+ - 'lib/mastodon/*_cli.rb'
Metrics/ModuleLength:
CountComments: false
CountKeywordArgs: true
Metrics/PerceivedComplexity:
- Max: 20
+ Max: 25
Naming/MemoizedInstanceVariableName:
Enabled: false
+Naming/MethodParameterName:
+ Enabled: true
+
Rails:
Enabled: true
-Rails/EnumHash:
+Rails/ApplicationController:
Enabled: false
+ Exclude:
+ - 'app/controllers/well_known/**/*.rb'
-Rails/HasAndBelongsToMany:
+Rails/BelongsTo:
Enabled: false
-Rails/SkipsModelValidations:
+Rails/ContentTag:
Enabled: false
-Rails/HttpStatus:
+Rails/EnumHash:
Enabled: false
Rails/Exit:
- 'lib/mastodon/*'
- 'lib/cli.rb'
+Rails/FilePath:
+ Enabled: false
+
+Rails/HasAndBelongsToMany:
+ Enabled: false
+
+Rails/HasManyOrHasOneDependent:
+ Enabled: false
+
Rails/HelperInstanceVariable:
Enabled: false
+Rails/HttpStatus:
+ Enabled: false
+
+Rails/IndexBy:
+ Enabled: false
+
+Rails/InverseOf:
+ Enabled: false
+
+Rails/LexicallyScopedActionFilter:
+ Enabled: false
+
+Rails/OutputSafety:
+ Enabled: true
+
+Rails/RakeEnvironment:
+ Enabled: false
+
+Rails/RedundantForeignKey:
+ Enabled: false
+
+Rails/SkipsModelValidations:
+ Enabled: false
+
+Rails/UniqueValidationWithoutIndex:
+ Enabled: false
+
+Style/AccessorGrouping:
+ Enabled: true
+
+Style/AccessModifierDeclarations:
+ Enabled: false
+
+Style/ArrayCoercion:
+ Enabled: true
+
+Style/BisectedAttrAccessor:
+ Enabled: true
+
+Style/CaseLikeIf:
+ Enabled: false
+
Style/ClassAndModuleChildren:
Enabled: false
Style/DoubleNegation:
Enabled: true
+Style/ExpandPathArguments:
+ Enabled: false
+
+Style/ExponentialNotation:
+ Enabled: true
+
+Style/FormatString:
+ Enabled: false
+
Style/FormatStringToken:
Enabled: false
Style/GuardClause:
Enabled: false
+Style/HashAsLastArrayItem:
+ Enabled: false
+
+Style/HashEachMethods:
+ Enabled: true
+
+Style/HashLikeCase:
+ Enabled: true
+
+Style/HashTransformKeys:
+ Enabled: true
+
+Style/HashTransformValues:
+ Enabled: false
+
+Style/IfUnlessModifier:
+ Enabled: false
+
+Style/InverseMethods:
+ Enabled: false
+
Style/Lambda:
Enabled: false
+Style/MutableConstant:
+ Enabled: false
+
Style/PercentLiteralDelimiters:
PreferredDelimiters:
'%i': '()'
Style/PerlBackrefs:
AutoCorrect: false
+Style/RedundantAssignment:
+ Enabled: false
+
+Style/RedundantFetchBlock:
+ Enabled: true
+
+Style/RedundantFileExtensionInRequire:
+ Enabled: true
+
+Style/RedundantRegexpCharacterClass:
+ Enabled: false
+
+Style/RedundantRegexpEscape:
+ Enabled: false
+
+Style/RedundantReturn:
+ Enabled: true
+
Style/RegexpLiteral:
Enabled: false
+Style/RescueStandardError:
+ Enabled: false
+
+Style/SignalException:
+ Enabled: false
+
+Style/SlicingWithRange:
+ Enabled: true
+
Style/SymbolArray:
Enabled: false
Style/TrailingCommaInHashLiteral:
EnforcedStyleForMultiline: 'comma'
+
+Style/UnpackFirst:
+ Enabled: false
gem 'letter_opener', '~> 1.7'
gem 'letter_opener_web', '~> 1.4'
gem 'memory_profiler'
- gem 'rubocop', '~> 0.86', require: false
+ gem 'rubocop', '~> 0.88', require: false
gem 'rubocop-rails', '~> 2.6', require: false
gem 'brakeman', '~> 4.9', require: false
gem 'bundler-audit', '~> 0.7', require: false
rspec-support (3.9.3)
rspec_junit_formatter (0.4.1)
rspec-core (>= 2, < 4, != 2.12.0)
- rubocop (0.86.0)
+ rubocop (0.88.0)
parallel (~> 1.10)
- parser (>= 2.7.0.1)
+ parser (>= 2.7.1.1)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.7)
rexml
- rubocop-ast (>= 0.0.3, < 1.0)
+ rubocop-ast (>= 0.1.0, < 1.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 2.0)
rubocop-ast (0.3.0)
rspec-rails (~> 4.0)
rspec-sidekiq (~> 3.1)
rspec_junit_formatter (~> 0.4)
- rubocop (~> 0.86)
+ rubocop (~> 0.88)
rubocop-rails (~> 2.6)
ruby-progressbar (~> 1.10)
sanitize (~> 5.2)
def limit_param(default_limit)
return default_limit unless params[:limit]
+
[params[:limit].to_i.abs, default_limit * 2].min
end
if params.key?(:form_challenge)
if challenge_passed?
session[:challenge_passed_at] = Time.now.utc
- return
else
flash.now[:alert] = I18n.t('challenge.invalid_password')
render_challenge
end
def verify_signature(account, signature, compare_signed_string)
- if account.keypair.public_key.verify(OpenSSL::Digest::SHA256.new, signature, compare_signed_string)
+ if account.keypair.public_key.verify(OpenSSL::Digest.new('SHA256'), signature, compare_signed_string)
@signed_request_account = account
@signed_request_account
end
end
json = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(state_params), serializer: InitialStateSerializer).to_json
+ # rubocop:disable Rails/OutputSafety
content_tag(:script, json_escape(json).html_safe, id: 'initial-state', type: 'application/json')
+ # rubocop:enable Rails/OutputSafety
end
end
document_hash = hash(@json.without('signature'))
to_be_verified = options_hash + document_hash
- if creator.keypair.public_key.verify(OpenSSL::Digest::SHA256.new, Base64.decode64(signature), to_be_verified)
+ if creator.keypair.public_key.verify(OpenSSL::Digest.new('SHA256'), Base64.decode64(signature), to_be_verified)
creator
end
end
to_be_signed = options_hash + document_hash
keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : creator.keypair
- signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest::SHA256.new, to_be_signed))
+ signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), to_be_signed))
@json.merge('signature' => options.merge('signatureValue' => signature))
end
end
def emoji(shortcodes, domain)
- shortcodes = [shortcodes] unless shortcodes.is_a?(Array)
+ shortcodes = Array(shortcodes)
cached = Rails.cache.read_multi(*shortcodes.map { |shortcode| to_key(:emoji, shortcode, domain) })
uncached_ids = []
end
end
+ # rubocop:disable Metrics/BlockNesting
def encode_custom_emojis(html, emojis, animate = false)
return html if emojis.empty?
html
end
+ # rubocop:enable Metrics/BlockNesting
def rewrite(text, entities)
text = text.to_s
def signature
algorithm = 'rsa-sha256'
- signature = Base64.strict_encode64(@keypair.sign(OpenSSL::Digest::SHA256.new, signed_string))
+ signature = Base64.strict_encode64(@keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string))
"keyId=\"#{key_id}\",algorithm=\"#{algorithm}\",headers=\"#{signed_headers.keys.join(' ').downcase}\",signature=\"#{signature}\""
end
private
+ # rubocop:disable Naming/MethodParameterName
def limit_backtrace_and_raise(e)
e.set_backtrace(e.backtrace.first(BACKTRACE_LIMIT))
raise e
end
+ # rubocop:enable Naming/MethodParameterName
end
class << self
private
+ # rubocop:disable Naming/MethodParameterName
def image_styles(f)
styles = {
original: {
styles[:original][:format] = 'jpg' if f.instance.image_content_type == 'image/gif'
styles
end
+ # rubocop:enable Naming/MethodParameterName
end
private
@shows_application ||= settings.show_application
end
+ # rubocop:disable Naming/MethodParameterName
def token_for_app(a)
return nil if a.nil? || a.owner != self
- Doorkeeper::AccessToken
- .find_or_create_by(application_id: a.id, resource_owner_id: id) do |t|
-
+ Doorkeeper::AccessToken.find_or_create_by(application_id: a.id, resource_owner_id: id) do |t|
t.scopes = a.scopes
t.expires_in = Doorkeeper.configuration.access_token_expires_in
t.use_refresh_token = Doorkeeper.configuration.refresh_token_enabled?
end
end
+ # rubocop:enable Naming/MethodParameterName
def activate_session(request)
session_activations.activate(session_id: SecureRandom.hex,
end
def notify_staff_about_pending_account!
- User.staff.includes(:account).each do |u|
+ User.staff.includes(:account).find_each do |u|
next unless u.allows_pending_account_emails?
AdminMailer.new_pending_account(u.account, self).deliver_later
end
uri.host.blank? || TagManager.instance.local_url?(uri.to_s) || !%w(http https).include?(uri.scheme)
end
+ # rubocop:disable Naming/MethodParameterName
def mention_link?(a)
@status.mentions.any? do |mention|
a['href'] == ActivityPub::TagManager.instance.url_for(mention.account)
# Avoid links for hashtags and mentions (microformats)
a['rel']&.include?('tag') || a['class']&.match?(/u-url|h-card/) || mention_link?(a)
end
+ # rubocop:enable Naming/MethodParameterName
def attempt_oembed
service = FetchOEmbedService.new
push_to_conversation! if direct_message?
send_email! if email_enabled?
rescue ActiveRecord::RecordInvalid
+ # rubocop:disable Style/RedundantReturn
return
+ # rubocop:enable Style/RedundantReturn
end
private
check_links(account)
process_hashtags(account)
end
- rescue Mastodon::DimensionsValidationError, Mastodon::StreamValidationError => de
- account.errors.add(:avatar, de.message)
+ rescue Mastodon::DimensionsValidationError, Mastodon::StreamValidationError => e
+ account.errors.add(:avatar, e.message)
false
end
setup_redis_env_url
setup_redis_env_url(:cache, false)
-namespace = ENV.fetch('REDIS_NAMESPACE') { nil }
+namespace = ENV.fetch('REDIS_NAMESPACE', nil)
cache_namespace = namespace ? namespace + '_cache' : 'cache'
REDIS_CACHE_PARAMS = {
end
def repository
- ENV.fetch('GITHUB_REPOSITORY') { 'tootsuite/mastodon' }
+ ENV.fetch('GITHUB_REPOSITORY', 'tootsuite/mastodon')
end
def source_base_url
- ENV.fetch('SOURCE_BASE_URL') { "https://github.com/#{repository}" }
+ ENV.fetch('SOURCE_BASE_URL', "https://github.com/#{repository}")
end
# specify git tag or commit hash here
def source_tag
- ENV.fetch('SOURCE_TAG') { nil }
+ ENV.fetch('SOURCE_TAG', nil)
end
def source_url
end
end
- # rubocop:disable Style/MethodParameterName
+ # rubocop:disable Naming/MethodParameterName
def rgb_to_hsl(r, g, b)
r /= 255.0
g /= 255.0
[(r * 255).round, (g * 255).round, (b * 255).round]
end
- # rubocop:enable Style/MethodParameterName
+ # rubocop:enable Naming/MethodParameterName
def lighten_or_darken(color, by)
hue, saturation, light = rgb_to_hsl(color.r, color.g, color.b)