diff --git a/.codeclimate.yml b/.codeclimate.yml
index dc8ca9a6f2d60..2d1de877cea68 100644
--- a/.codeclimate.yml
+++ b/.codeclimate.yml
@@ -30,7 +30,7 @@ plugins:
channel: eslint-7
rubocop:
enabled: true
- channel: rubocop-0-92
+ channel: rubocop-1-70
sass-lint:
enabled: true
exclude_patterns:
diff --git a/.rubocop.yml b/.rubocop.yml
index 14728bf0e9417..2af0f59bbe0c7 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -2,7 +2,8 @@ require:
- rubocop-rails
AllCops:
- TargetRubyVersion: 2.4
+ TargetRubyVersion: 2.5
+ NewCops: disable
Exclude:
- 'spec/**/*'
- 'db/**/*'
diff --git a/Dockerfile b/Dockerfile
index 95d45bab42700..136b2a35ae6b9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
FROM ubuntu:20.04 as build-dep
# Use bash for the shell
-SHELL ["bash", "-c"]
+SHELL ["/usr/bin/bash", "-c"]
# Install Node v12 (LTS)
ENV NODE_VER="12.20.0"
diff --git a/Gemfile b/Gemfile
index 3aee5d7ccf9b6..5454140ea60ed 100644
--- a/Gemfile
+++ b/Gemfile
@@ -5,7 +5,7 @@ ruby '>= 2.5.0', '< 3.0.0'
gem 'pkg-config', '~> 1.4'
-gem 'puma', '~> 5.0'
+gem 'puma', '~> 5.1'
gem 'rails', '~> 5.2.4.4'
gem 'sprockets', '~> 3.7.2'
gem 'thor', '~> 1.0'
@@ -17,7 +17,7 @@ gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.7'
gem 'dotenv-rails', '~> 2.7'
-gem 'aws-sdk-s3', '~> 1.85', require: false
+gem 'aws-sdk-s3', '~> 1.87', require: false
gem 'fog-core', '<= 2.1.0'
gem 'fog-openstack', '~> 0.3', require: false
gem 'paperclip', '~> 6.0'
@@ -32,7 +32,7 @@ gem 'browser'
gem 'charlock_holmes', '~> 0.7.7'
gem 'iso-639'
gem 'chewy', '~> 5.1'
-gem 'cld3', '~> 3.3.0'
+gem 'cld3', '~> 3.4.1'
gem 'devise', '~> 4.7'
gem 'devise-two-factor', '~> 3.1'
@@ -40,7 +40,7 @@ group :pam_authentication, optional: true do
gem 'devise_pam_authenticatable2', '~> 9.2'
end
-gem 'net-ldap', '~> 0.16'
+gem 'net-ldap', '~> 0.17'
gem 'omniauth-cas', '~> 2.0'
gem 'omniauth-saml', '~> 1.10'
gem 'omniauth', '~> 1.9'
@@ -64,10 +64,10 @@ gem 'kaminari', '~> 1.2'
gem 'link_header', '~> 0.0'
gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar'
gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
-gem 'nokogiri', '~> 1.10'
+gem 'nokogiri', '~> 1.11'
gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.10'
-gem 'ox', '~> 2.13'
+gem 'ox', '~> 2.14'
gem 'parslet'
gem 'parallel', '~> 1.20'
gem 'posix-spawn'
@@ -79,8 +79,8 @@ gem 'rails-i18n', '~> 5.1'
gem 'rails-settings-cached', '~> 0.6'
gem 'redis', '~> 4.2', require: ['redis', 'redis/connection/hiredis']
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
-gem 'rqrcode', '~> 1.1'
-gem 'ruby-progressbar', '~> 1.10'
+gem 'rqrcode', '~> 1.2'
+gem 'ruby-progressbar', '~> 1.11'
gem 'sanitize', '~> 5.2'
gem 'scenic', '~> 1.5'
gem 'sidekiq', '~> 6.1'
@@ -92,7 +92,7 @@ gem 'simple_form', '~> 5.0'
gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
gem 'stoplight', '~> 2.2.1'
gem 'strong_migrations', '~> 0.7'
-gem 'tty-prompt', '~> 0.22', require: false
+gem 'tty-prompt', '~> 0.23', require: false
gem 'twitter-text', '~> 1.14'
gem 'tzinfo-data', '~> 1.2020'
gem 'webpacker', '~> 5.2'
@@ -117,14 +117,14 @@ group :production, :test do
end
group :test do
- gem 'capybara', '~> 3.33'
+ gem 'capybara', '~> 3.34'
gem 'climate_control', '~> 0.2'
- gem 'faker', '~> 2.14'
+ gem 'faker', '~> 2.15'
gem 'microformats', '~> 4.2'
gem 'rails-controller-testing', '~> 1.0'
gem 'rspec-sidekiq', '~> 3.1'
- gem 'simplecov', '~> 0.19', require: false
- gem 'webmock', '~> 3.10'
+ gem 'simplecov', '~> 0.21', require: false
+ gem 'webmock', '~> 3.11'
gem 'parallel_tests', '~> 3.4'
gem 'rspec_junit_formatter', '~> 0.4'
end
@@ -133,17 +133,17 @@ group :development do
gem 'active_record_query_trace', '~> 1.8'
gem 'annotate', '~> 3.1'
gem 'better_errors', '~> 2.9'
- gem 'binding_of_caller', '~> 0.7'
+ gem 'binding_of_caller', '~> 1.0'
gem 'bullet', '~> 6.1'
gem 'letter_opener', '~> 1.7'
gem 'letter_opener_web', '~> 1.4'
gem 'memory_profiler'
- gem 'rubocop', '~> 1.3', require: false
- gem 'rubocop-rails', '~> 2.8', require: false
+ gem 'rubocop', '~> 1.7', require: false
+ gem 'rubocop-rails', '~> 2.9', require: false
gem 'brakeman', '~> 4.10', require: false
gem 'bundler-audit', '~> 0.7', require: false
- gem 'capistrano', '~> 3.14'
+ gem 'capistrano', '~> 3.15'
gem 'capistrano-rails', '~> 1.6'
gem 'capistrano-rbenv', '~> 2.2'
gem 'capistrano-yarn', '~> 2.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index ecd4f210ca669..fa517a2384c02 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -39,9 +39,9 @@ GEM
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
- active_model_serializers (0.10.10)
- actionpack (>= 4.1, < 6.1)
- activemodel (>= 4.1, < 6.1)
+ active_model_serializers (0.10.12)
+ actionpack (>= 4.1, < 6.2)
+ activemodel (>= 4.1, < 6.2)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
active_record_query_trace (1.8)
@@ -79,16 +79,16 @@ GEM
cocaine (~> 0.5.3)
awrence (1.1.1)
aws-eventstream (1.1.0)
- aws-partitions (1.397.0)
- aws-sdk-core (3.109.3)
+ aws-partitions (1.413.0)
+ aws-sdk-core (3.110.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
- aws-sdk-kms (1.39.0)
+ aws-sdk-kms (1.40.0)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.85.0)
+ aws-sdk-s3 (1.87.0)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
@@ -100,23 +100,23 @@ GEM
erubi (>= 1.0.0)
rack (>= 0.9.0)
bindata (2.4.8)
- binding_of_caller (0.8.0)
+ binding_of_caller (1.0.0)
debug_inspector (>= 0.0.1)
blurhash (0.1.4)
ffi (~> 1.10.0)
bootsnap (1.5.1)
msgpack (~> 1.0)
- brakeman (4.10.0)
+ brakeman (4.10.1)
browser (4.2.0)
builder (3.2.4)
- bullet (6.1.0)
+ bullet (6.1.2)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
bundler-audit (0.7.0.1)
bundler (>= 1.2.0, < 3)
thor (>= 0.18, < 2)
byebug (11.1.3)
- capistrano (3.14.1)
+ capistrano (3.15.0)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
@@ -131,7 +131,7 @@ GEM
sshkit (~> 1.3)
capistrano-yarn (2.0.2)
capistrano (~> 3.0)
- capybara (3.33.0)
+ capybara (3.34.0)
addressable
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
@@ -147,9 +147,9 @@ GEM
activesupport (>= 4.0)
elasticsearch (>= 2.0.0)
elasticsearch-dsl
- chunky_png (1.3.12)
- cld3 (3.3.0)
- ffi (>= 1.1.0, < 1.12.0)
+ chunky_png (1.3.15)
+ cld3 (3.4.1)
+ ffi (>= 1.1.0, < 1.15.0)
climate_control (0.2.0)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
@@ -160,11 +160,12 @@ GEM
cose (1.0.0)
cbor (~> 0.5.9)
openssl-signature_algorithm (~> 0.4.0)
- crack (0.4.4)
+ crack (0.4.5)
+ rexml
crass (1.0.6)
css_parser (1.7.1)
addressable
- debug_inspector (0.0.3)
+ debug_inspector (1.0.0)
devise (4.7.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
@@ -183,7 +184,7 @@ GEM
diff-lcs (1.4.4)
discard (1.2.0)
activerecord (>= 4.2, < 7)
- docile (1.3.2)
+ docile (1.3.4)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
doorkeeper (5.4.0)
@@ -204,17 +205,17 @@ GEM
faraday (~> 1)
multi_json
encryptor (3.0.0)
- erubi (1.9.0)
+ erubi (1.10.0)
et-orbi (1.2.4)
tzinfo
excon (0.76.0)
fabrication (2.21.1)
- faker (2.14.0)
+ faker (2.15.1)
i18n (>= 1.6, < 2)
faraday (1.0.1)
multipart-post (>= 1.2, < 3)
fast_blank (1.0.0)
- fastimage (2.2.0)
+ fastimage (2.2.1)
ffi (1.10.0)
ffi-compiler (1.0.1)
ffi (>= 1.0.0)
@@ -235,7 +236,7 @@ GEM
fugit (1.3.9)
et-orbi (~> 1.1, >= 1.1.8)
raabro (~> 1.3)
- fuubar (2.5.0)
+ fuubar (2.5.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
globalid (0.4.2)
@@ -271,9 +272,9 @@ GEM
httplog (1.4.3)
rack (>= 1.0)
rainbow (>= 2.0.0)
- i18n (1.8.5)
+ i18n (1.8.7)
concurrent-ruby (~> 1.0)
- i18n-tasks (0.9.31)
+ i18n-tasks (0.9.33)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
erubi
@@ -289,14 +290,14 @@ GEM
jmespath (1.4.0)
json (2.3.1)
json-canonicalization (0.2.0)
- json-ld (3.1.5)
+ json-ld (3.1.7)
htmlentities (~> 4.3)
json-canonicalization (~> 0.2)
link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.14)
rack (~> 2.0)
rdf (~> 3.1)
- json-ld-preloaded (3.1.3)
+ json-ld-preloaded (3.1.4)
json-ld (~> 3.1)
rdf (~> 3.1)
jsonapi-renderer (0.2.2)
@@ -327,7 +328,7 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
- loofah (2.7.0)
+ loofah (2.8.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
@@ -338,7 +339,7 @@ GEM
mimemagic (~> 0.3.2)
mario-redis-lock (1.2.1)
redis (>= 3.0.5)
- memory_profiler (0.9.14)
+ memory_profiler (1.0.0)
method_source (1.0.0)
microformats (4.2.1)
json (~> 2.2)
@@ -348,26 +349,27 @@ GEM
mime-types-data (3.2020.0512)
mimemagic (0.3.7)
mini_mime (1.0.2)
- mini_portile2 (2.4.0)
+ mini_portile2 (2.5.0)
minitest (5.14.2)
msgpack (1.3.3)
multi_json (1.15.0)
multipart-post (2.1.1)
- net-ldap (0.16.3)
+ net-ldap (0.17.0)
net-scp (3.0.0)
net-ssh (>= 2.6.5, < 7.0.0)
net-ssh (6.1.0)
nio4r (2.5.4)
- nokogiri (1.10.10)
- mini_portile2 (~> 2.4.0)
- nokogumbo (2.0.2)
+ nokogiri (1.11.1)
+ mini_portile2 (~> 2.5.0)
+ racc (~> 1.4)
+ nokogumbo (2.0.4)
nokogiri (~> 1.8, >= 1.8.4)
nsa (0.2.7)
activesupport (>= 4.2, < 6)
concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0)
- oj (3.10.16)
+ oj (3.10.18)
omniauth (1.9.1)
hashie (>= 3.4.6)
rack (>= 1.6.2, < 3)
@@ -384,7 +386,7 @@ GEM
openssl (2.2.0)
openssl-signature_algorithm (0.4.0)
orm_adapter (0.5.0)
- ox (2.13.4)
+ ox (2.14.0)
paperclip (6.0.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
@@ -397,13 +399,13 @@ GEM
parallel (1.20.1)
parallel_tests (3.4.0)
parallel
- parser (2.7.2.0)
+ parser (3.0.0.0)
ast (~> 2.4.1)
parslet (2.0.0)
pastel (0.8.0)
tty-color (~> 0.5)
pg (1.2.3)
- pghero (2.7.2)
+ pghero (2.7.3)
activerecord (>= 5)
pkg-config (1.4.4)
pluck_each (0.1.3)
@@ -427,11 +429,12 @@ GEM
pry-rails (0.3.9)
pry (>= 0.10.4)
public_suffix (4.0.6)
- puma (5.0.4)
+ puma (5.1.1)
nio4r (~> 2.0)
pundit (2.1.0)
activesupport (>= 3.0.0)
raabro (1.3.3)
+ racc (1.5.2)
rack (2.2.3)
rack-attack (6.3.1)
rack (>= 1.0, < 3)
@@ -475,8 +478,8 @@ GEM
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
rainbow (3.0.0)
- rake (13.0.1)
- rdf (3.1.7)
+ rake (13.0.3)
+ rdf (3.1.8)
hamster (~> 3.0)
link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.4.0)
@@ -509,55 +512,55 @@ GEM
rexml (3.2.4)
rotp (2.1.2)
rpam2 (4.0.2)
- rqrcode (1.1.2)
+ rqrcode (1.2.0)
chunky_png (~> 1.0)
- rqrcode_core (~> 0.1)
- rqrcode_core (0.1.2)
- rspec-core (3.9.3)
- rspec-support (~> 3.9.3)
- rspec-expectations (3.9.2)
+ rqrcode_core (~> 0.2)
+ rqrcode_core (0.2.0)
+ rspec-core (3.10.1)
+ rspec-support (~> 3.10.0)
+ rspec-expectations (3.10.1)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.9.0)
- rspec-mocks (3.9.1)
+ rspec-support (~> 3.10.0)
+ rspec-mocks (3.10.1)
diff-lcs (>= 1.2.0, < 2.0)
- rspec-support (~> 3.9.0)
- rspec-rails (4.0.1)
+ rspec-support (~> 3.10.0)
+ rspec-rails (4.0.2)
actionpack (>= 4.2)
activesupport (>= 4.2)
railties (>= 4.2)
- rspec-core (~> 3.9)
- rspec-expectations (~> 3.9)
- rspec-mocks (~> 3.9)
- rspec-support (~> 3.9)
+ rspec-core (~> 3.10)
+ rspec-expectations (~> 3.10)
+ rspec-mocks (~> 3.10)
+ rspec-support (~> 3.10)
rspec-sidekiq (3.1.0)
rspec-core (~> 3.0, >= 3.0.0)
sidekiq (>= 2.4.0)
- rspec-support (3.9.3)
+ rspec-support (3.10.1)
rspec_junit_formatter (0.4.1)
rspec-core (>= 2, < 4, != 2.12.0)
- rubocop (1.3.1)
+ rubocop (1.7.0)
parallel (~> 1.10)
parser (>= 2.7.1.5)
rainbow (>= 2.2.2, < 4.0)
- regexp_parser (>= 1.8)
+ regexp_parser (>= 1.8, < 3.0)
rexml
- rubocop-ast (>= 1.1.1)
+ rubocop-ast (>= 1.2.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 2.0)
- rubocop-ast (1.1.1)
+ rubocop-ast (1.3.0)
parser (>= 2.7.1.5)
- rubocop-rails (2.8.1)
+ rubocop-rails (2.9.1)
activesupport (>= 4.2.0)
rack (>= 1.1)
- rubocop (>= 0.87.0)
- ruby-progressbar (1.10.1)
+ rubocop (>= 0.90.0, < 2.0)
+ ruby-progressbar (1.11.0)
ruby-saml (1.11.0)
nokogiri (>= 1.5.10)
rufus-scheduler (3.6.0)
fugit (~> 1.1, >= 1.1.6)
safety_net_attestation (0.4.0)
jwt (~> 2.0)
- sanitize (5.2.1)
+ sanitize (5.2.2)
crass (~> 1.0.2)
nokogiri (>= 1.8.0)
nokogumbo (~> 2.0)
@@ -588,10 +591,12 @@ GEM
simple_form (5.0.3)
actionpack (>= 5.0)
activemodel (>= 5.0)
- simplecov (0.19.1)
+ simplecov (0.21.2)
docile (~> 1.1)
simplecov-html (~> 0.11)
+ simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3)
+ simplecov_json_formatter (0.1.2)
sprockets (3.7.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
@@ -599,7 +604,7 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
- sshkit (1.21.0)
+ sshkit (1.21.1)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
stackprof (0.2.16)
@@ -607,10 +612,10 @@ GEM
stoplight (2.2.1)
streamio-ffmpeg (3.0.2)
multi_json (~> 1.8)
- strong_migrations (0.7.2)
+ strong_migrations (0.7.4)
activerecord (>= 5)
temple (0.8.2)
- terminal-table (1.8.0)
+ terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
terrapin (0.6.0)
climate_control (>= 0.0.3, < 1.0)
@@ -622,21 +627,21 @@ GEM
tpm-key_attestation (0.9.0)
bindata (~> 2.4)
openssl-signature_algorithm (~> 0.4.0)
- tty-color (0.5.2)
+ tty-color (0.6.0)
tty-cursor (0.7.1)
- tty-prompt (0.22.0)
+ tty-prompt (0.23.0)
pastel (~> 0.8)
tty-reader (~> 0.8)
- tty-reader (0.8.0)
+ tty-reader (0.9.0)
tty-cursor (~> 0.7)
tty-screen (~> 0.8)
wisper (~> 2.0)
tty-screen (0.8.1)
twitter-text (1.14.7)
unf (~> 0.1.0)
- tzinfo (1.2.7)
+ tzinfo (1.2.9)
thread_safe (~> 0.1)
- tzinfo-data (1.2020.4)
+ tzinfo-data (1.2020.6)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
@@ -655,7 +660,7 @@ GEM
safety_net_attestation (~> 0.4.0)
securecompare (~> 1.0)
tpm-key_attestation (~> 0.9.0)
- webmock (3.10.0)
+ webmock (3.11.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -683,23 +688,23 @@ DEPENDENCIES
active_record_query_trace (~> 1.8)
addressable (~> 2.7)
annotate (~> 3.1)
- aws-sdk-s3 (~> 1.85)
+ aws-sdk-s3 (~> 1.87)
better_errors (~> 2.9)
- binding_of_caller (~> 0.7)
+ binding_of_caller (~> 1.0)
blurhash (~> 0.1)
bootsnap (~> 1.5)
brakeman (~> 4.10)
browser
bullet (~> 6.1)
bundler-audit (~> 0.7)
- capistrano (~> 3.14)
+ capistrano (~> 3.15)
capistrano-rails (~> 1.6)
capistrano-rbenv (~> 2.2)
capistrano-yarn (~> 2.0)
- capybara (~> 3.33)
+ capybara (~> 3.34)
charlock_holmes (~> 0.7.7)
chewy (~> 5.1)
- cld3 (~> 3.3.0)
+ cld3 (~> 3.4.1)
climate_control (~> 0.2)
color_diff (~> 0.1)
concurrent-ruby
@@ -712,7 +717,7 @@ DEPENDENCIES
dotenv-rails (~> 2.7)
ed25519 (~> 1.2)
fabrication (~> 2.21)
- faker (~> 2.14)
+ faker (~> 2.15)
fast_blank (~> 1.0)
fastimage
fog-core (<= 2.1.0)
@@ -740,16 +745,16 @@ DEPENDENCIES
memory_profiler
microformats (~> 4.2)
mime-types (~> 3.3.1)
- net-ldap (~> 0.16)
+ net-ldap (~> 0.17)
nilsimsa!
- nokogiri (~> 1.10)
+ nokogiri (~> 1.11)
nsa (~> 0.2)
oj (~> 3.10)
omniauth (~> 1.9)
omniauth-cas (~> 2.0)
omniauth-rails_csrf_protection (~> 0.1)
omniauth-saml (~> 1.10)
- ox (~> 2.13)
+ ox (~> 2.14)
paperclip (~> 6.0)
paperclip-av-transcoder (~> 0.6)
parallel (~> 1.20)
@@ -764,7 +769,7 @@ DEPENDENCIES
private_address_check (~> 0.5)
pry-byebug (~> 3.9)
pry-rails (~> 0.3)
- puma (~> 5.0)
+ puma (~> 5.1)
pundit (~> 2.1)
rack (~> 2.2.3)
rack-attack (~> 6.3)
@@ -777,13 +782,13 @@ DEPENDENCIES
redis (~> 4.2)
redis-namespace (~> 1.8)
redis-rails (~> 5.0)
- rqrcode (~> 1.1)
+ rqrcode (~> 1.2)
rspec-rails (~> 4.0)
rspec-sidekiq (~> 3.1)
rspec_junit_formatter (~> 0.4)
- rubocop (~> 1.3)
- rubocop-rails (~> 2.8)
- ruby-progressbar (~> 1.10)
+ rubocop (~> 1.7)
+ rubocop-rails (~> 2.9)
+ ruby-progressbar (~> 1.11)
sanitize (~> 5.2)
scenic (~> 1.5)
sidekiq (~> 6.1)
@@ -792,7 +797,7 @@ DEPENDENCIES
sidekiq-unique-jobs (~> 6.0)
simple-navigation (~> 4.1)
simple_form (~> 5.0)
- simplecov (~> 0.19)
+ simplecov (~> 0.21)
sprockets (~> 3.7.2)
sprockets-rails (~> 3.2)
stackprof
@@ -800,11 +805,11 @@ DEPENDENCIES
streamio-ffmpeg (~> 3.0)
strong_migrations (~> 0.7)
thor (~> 1.0)
- tty-prompt (~> 0.22)
+ tty-prompt (~> 0.23)
twitter-text (~> 1.14)
tzinfo-data (~> 1.2020)
webauthn (~> 3.0.0.alpha1)
- webmock (~> 3.10)
+ webmock (~> 3.11)
webpacker (~> 5.2)
webpush
xorcist (~> 1.1)
diff --git a/Procfile.dev b/Procfile.dev
index e589bbf6305fc..ba04fb661b344 100644
--- a/Procfile.dev
+++ b/Procfile.dev
@@ -1,4 +1,4 @@
-web: env PORT=3000 bundle exec puma -C config/puma.rb
-sidekiq: env PORT=3000 bundle exec sidekiq
+web: env PORT=3000 RAILS_ENV=development bundle exec puma -C config/puma.rb
+sidekiq: env PORT=3000 RAILS_ENV=development bundle exec sidekiq
stream: env PORT=4000 yarn run start
webpack: ./bin/webpack-dev-server --listen-host 0.0.0.0
diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb
index d3044f180f819..92dcb5ac77570 100644
--- a/app/controllers/activitypub/inboxes_controller.rb
+++ b/app/controllers/activitypub/inboxes_controller.rb
@@ -5,7 +5,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
include JsonLdHelper
include AccountOwnedConcern
- before_action :skip_unknown_actor_delete
+ before_action :skip_unknown_actor_activity
before_action :require_signature!
skip_before_action :authenticate_user!
@@ -18,13 +18,13 @@ def create
private
- def skip_unknown_actor_delete
- head 202 if unknown_deleted_account?
+ def skip_unknown_actor_activity
+ head 202 if unknown_affected_account?
end
- def unknown_deleted_account?
+ def unknown_affected_account?
json = Oj.load(body, mode: :strict)
- json.is_a?(Hash) && json['type'] == 'Delete' && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists?
+ json.is_a?(Hash) && %w(Delete Update).include?(json['type']) && json['actor'].present? && json['actor'] == value_or_id(json['object']) && !Account.where(uri: json['actor']).exists?
rescue Oj::ParseError
false
end
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index 3e66ff212eba9..953874e1abef0 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -42,7 +42,7 @@ def block
end
def mute
- MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: (params[:duration] || 0))
+ MuteService.new.call(current_user.account, @account, notifications: truthy_param?(:notifications), duration: (params[:duration]&.to_i || 0))
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships
end
diff --git a/app/controllers/api/v1/crypto/keys/claims_controller.rb b/app/controllers/api/v1/crypto/keys/claims_controller.rb
index 34b21a38096a9..f9d202d67b8ed 100644
--- a/app/controllers/api/v1/crypto/keys/claims_controller.rb
+++ b/app/controllers/api/v1/crypto/keys/claims_controller.rb
@@ -12,7 +12,7 @@ def create
private
def set_claim_results
- @claim_results = devices.map { |device_params| ::Keys::ClaimService.new.call(current_account, device_params[:account_id], device_params[:device_id]) }.compact
+ @claim_results = devices.filter_map { |device_params| ::Keys::ClaimService.new.call(current_account, device_params[:account_id], device_params[:device_id]) }
end
def resource_params
diff --git a/app/controllers/api/v1/crypto/keys/queries_controller.rb b/app/controllers/api/v1/crypto/keys/queries_controller.rb
index 0851d797d33b8..e6ce9f9192ac8 100644
--- a/app/controllers/api/v1/crypto/keys/queries_controller.rb
+++ b/app/controllers/api/v1/crypto/keys/queries_controller.rb
@@ -17,7 +17,7 @@ def set_accounts
end
def set_query_results
- @query_results = @accounts.map { |account| ::Keys::QueryService.new.call(account) }.compact
+ @query_results = @accounts.filter_map { |account| ::Keys::QueryService.new.call(account) }
end
def account_ids
diff --git a/app/controllers/api/v1/markers_controller.rb b/app/controllers/api/v1/markers_controller.rb
index 28c2ec7916847..867e6facf4517 100644
--- a/app/controllers/api/v1/markers_controller.rb
+++ b/app/controllers/api/v1/markers_controller.rb
@@ -7,7 +7,7 @@ class Api::V1::MarkersController < Api::BaseController
before_action :require_user!
def index
- @markers = current_user.markers.where(timeline: Array(params[:timeline])).each_with_object({}) { |marker, h| h[marker.timeline] = marker }
+ @markers = current_user.markers.where(timeline: Array(params[:timeline])).index_by(&:timeline)
render json: serialize_map(@markers)
end
diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb
index abbdb410a59fb..3fb4b962a3a50 100644
--- a/app/controllers/concerns/cache_concern.rb
+++ b/app/controllers/concerns/cache_concern.rb
@@ -38,14 +38,14 @@ def cache_collection(raw, klass)
klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!)
unless uncached_ids.empty?
- uncached = klass.where(id: uncached_ids).with_includes.each_with_object({}) { |item, h| h[item.id] = item }
+ uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id)
uncached.each_value do |item|
Rails.cache.write(item, item)
end
end
- raw.map { |item| cached_keys_with_value[item.id] || uncached[item.id] }.compact
+ raw.filter_map { |item| cached_keys_with_value[item.id] || uncached[item.id] }
end
def cache_collection_paginated_by_id(raw, klass, limit, options)
diff --git a/app/controllers/settings/pictures_controller.rb b/app/controllers/settings/pictures_controller.rb
index 28df65f8ffacf..58a4325307f3b 100644
--- a/app/controllers/settings/pictures_controller.rb
+++ b/app/controllers/settings/pictures_controller.rb
@@ -7,8 +7,12 @@ class PicturesController < BaseController
def destroy
if valid_picture?
- msg = I18n.t('generic.changes_saved_msg') if UpdateAccountService.new.call(@account, { @picture => nil, "#{@picture}_remote_url" => '' })
- redirect_to settings_profile_path, notice: msg, status: 303
+ if UpdateAccountService.new.call(@account, { @picture => nil, "#{@picture}_remote_url" => '' })
+ ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
+ redirect_to settings_profile_path, notice: I18n.t('generic.changes_saved_msg'), status: 303
+ else
+ redirect_to settings_profile_path
+ end
else
bad_request
end
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index 17ddd31fbbf84..87612a29662a4 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -8,7 +8,7 @@ class StatusesController < ApplicationController
layout 'public'
- before_action :require_signature!, only: :show, if: -> { request.format == :json && authorized_fetch_mode? }
+ before_action :require_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? }
before_action :set_status
before_action :set_instance_presenter
before_action :set_link_headers
diff --git a/app/javascript/mastodon/containers/media_container.js b/app/javascript/mastodon/containers/media_container.js
index afed6868e1219..52fdc9294b89c 100644
--- a/app/javascript/mastodon/containers/media_container.js
+++ b/app/javascript/mastodon/containers/media_container.js
@@ -2,7 +2,7 @@ import React, { PureComponent, Fragment } from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
import { IntlProvider, addLocaleData } from 'react-intl';
-import { List as ImmutableList, fromJS } from 'immutable';
+import { fromJS } from 'immutable';
import { getLocale } from 'mastodon/locales';
import { getScrollbarWidth } from 'mastodon/utils/scrollbar';
import MediaGallery from 'mastodon/components/media_gallery';
@@ -31,6 +31,7 @@ export default class MediaContainer extends PureComponent {
index: null,
time: null,
backgroundColor: null,
+ options: null,
};
handleOpenMedia = (media, index) => {
@@ -40,13 +41,15 @@ export default class MediaContainer extends PureComponent {
this.setState({ media, index });
}
- handleOpenVideo = (video, time) => {
- const media = ImmutableList([video]);
+ handleOpenVideo = (options) => {
+ const { components } = this.props;
+ const { media } = JSON.parse(components[options.componetIndex].getAttribute('data-props'));
+ const mediaList = fromJS(media);
document.body.classList.add('with-modals--active');
document.documentElement.style.marginRight = `${getScrollbarWidth()}px`;
- this.setState({ media, time });
+ this.setState({ media: mediaList, options });
}
handleCloseMedia = () => {
@@ -58,6 +61,7 @@ export default class MediaContainer extends PureComponent {
index: null,
time: null,
backgroundColor: null,
+ options: null,
});
}
@@ -83,6 +87,7 @@ export default class MediaContainer extends PureComponent {
...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
...(componentName === 'Video' ? {
+ componetIndex: i,
onOpenVideo: this.handleOpenVideo,
} : {
onOpenMedia: this.handleOpenMedia,
@@ -100,7 +105,9 @@ export default class MediaContainer extends PureComponent {
diff --git a/app/javascript/mastodon/features/list_timeline/index.js b/app/javascript/mastodon/features/list_timeline/index.js
index 02b0182473534..8eb6456302bba 100644
--- a/app/javascript/mastodon/features/list_timeline/index.js
+++ b/app/javascript/mastodon/features/list_timeline/index.js
@@ -194,7 +194,7 @@ class ListTimeline extends React.PureComponent {
{ ['none', 'list', 'followed'].map(policy => (
-
+
))}
diff --git a/app/javascript/mastodon/features/ui/components/focal_point_modal.js b/app/javascript/mastodon/features/ui/components/focal_point_modal.js
index 578375a7f4929..ffa783e3b0ab1 100644
--- a/app/javascript/mastodon/features/ui/components/focal_point_modal.js
+++ b/app/javascript/mastodon/features/ui/components/focal_point_modal.js
@@ -227,7 +227,7 @@ class FocalPointModal extends ImmutablePureComponent {
const worker = createWorker({
workerPath: tesseractWorkerPath,
corePath: tesseractCorePath,
- langPath: assetHost,
+ langPath: `${assetHost}/ocr/lang-data/`,
logger: ({ status, progress }) => {
if (status === 'recognizing text') {
this.setState({ ocrStatus: 'detecting', progress });
diff --git a/app/javascript/mastodon/features/ui/components/media_modal.js b/app/javascript/mastodon/features/ui/components/media_modal.js
index 7fe7ed09473de..08da1033042b6 100644
--- a/app/javascript/mastodon/features/ui/components/media_modal.js
+++ b/app/javascript/mastodon/features/ui/components/media_modal.js
@@ -32,6 +32,9 @@ class MediaModal extends ImmutablePureComponent {
onClose: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
onChangeBackgroundColor: PropTypes.func.isRequired,
+ currentTime: PropTypes.number,
+ autoPlay: PropTypes.bool,
+ volume: PropTypes.number,
};
static contextTypes = {
@@ -183,7 +186,7 @@ class MediaModal extends ImmutablePureComponent {
/>
);
} else if (image.get('type') === 'video') {
- const { time } = this.props;
+ const { currentTime, autoPlay, volume } = this.props;
return (