Browse Source

Merge tag 'v3.1.1'

Mike Barnes 2 weeks ago
parent
commit
9208487fc7
100 changed files with 1923 additions and 775 deletions
  1. 58
    31
      .circleci/config.yml
  2. 2
    2
      .codeclimate.yml
  3. 7
    2
      .env.nanobox
  4. 17
    3
      .env.production.sample
  5. 1
    1
      .env.test
  6. 1
    0
      .env.vagrant
  7. 5
    0
      .github/ISSUE_TEMPLATE/config.yml
  8. 10
    0
      .github/stale.yml
  9. 5
    1
      .gitignore
  10. 1
    1
      .nvmrc
  11. 6
    0
      .rubocop.yml
  12. 169
    0
      CHANGELOG.md
  13. 2
    2
      CONTRIBUTING.md
  14. 6
    3
      Dockerfile
  15. 46
    43
      Gemfile
  16. 216
    234
      Gemfile.lock
  17. 5
    5
      README.md
  18. 1
    1
      Vagrantfile
  19. 1
    0
      app/controllers/activitypub/inboxes_controller.rb
  20. 1
    15
      app/controllers/admin/accounts_controller.rb
  21. 88
    0
      app/controllers/admin/announcements_controller.rb
  22. 1
    5
      app/controllers/admin/custom_emojis_controller.rb
  23. 0
    18
      app/controllers/admin/followers_controller.rb
  24. 1
    1
      app/controllers/admin/instances_controller.rb
  25. 1
    1
      app/controllers/admin/invites_controller.rb
  26. 25
    0
      app/controllers/admin/relationships_controller.rb
  27. 1
    5
      app/controllers/admin/reports_controller.rb
  28. 1
    1
      app/controllers/admin/tags_controller.rb
  29. 5
    1
      app/controllers/api/base_controller.rb
  30. 12
    2
      app/controllers/api/oembed_controller.rb
  31. 2
    0
      app/controllers/api/proofs_controller.rb
  32. 1
    1
      app/controllers/api/v1/accounts/credentials_controller.rb
  33. 4
    2
      app/controllers/api/v1/accounts/follower_accounts_controller.rb
  34. 4
    2
      app/controllers/api/v1/accounts/following_accounts_controller.rb
  35. 29
    0
      app/controllers/api/v1/announcements/reactions_controller.rb
  36. 29
    0
      app/controllers/api/v1/announcements_controller.rb
  37. 66
    0
      app/controllers/api/v1/bookmarks_controller.rb
  38. 0
    3
      app/controllers/api/v1/media_controller.rb
  39. 1
    1
      app/controllers/api/v1/push/subscriptions_controller.rb
  40. 39
    0
      app/controllers/api/v1/statuses/bookmarks_controller.rb
  41. 3
    1
      app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb
  42. 3
    1
      app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb
  43. 11
    5
      app/controllers/api/web/embeds_controller.rb
  44. 2
    1
      app/controllers/api/web/push_subscriptions_controller.rb
  45. 3
    2
      app/controllers/application_controller.rb
  46. 6
    0
      app/controllers/auth/passwords_controller.rb
  47. 12
    0
      app/controllers/auth/registrations_controller.rb
  48. 0
    16
      app/controllers/concerns/obfuscate_filename.rb
  49. 2
    0
      app/controllers/concerns/signature_verification.rb
  50. 1
    2
      app/controllers/filters_controller.rb
  51. 5
    2
      app/controllers/follower_accounts_controller.rb
  52. 5
    2
      app/controllers/following_accounts_controller.rb
  53. 5
    0
      app/controllers/oauth/authorizations_controller.rb
  54. 4
    44
      app/controllers/relationships_controller.rb
  55. 5
    0
      app/controllers/settings/base_controller.rb
  56. 1
    0
      app/controllers/settings/preferences_controller.rb
  57. 0
    5
      app/controllers/settings/profiles_controller.rb
  58. 2
    2
      app/controllers/statuses_controller.rb
  59. 7
    3
      app/controllers/tags_controller.rb
  60. 1
    5
      app/controllers/well_known/host_meta_controller.rb
  61. 108
    0
      app/helpers/accounts_helper.rb
  62. 12
    2
      app/helpers/admin/action_logs_helper.rb
  63. 11
    0
      app/helpers/admin/announcements_helper.rb
  64. 10
    9
      app/helpers/admin/filter_helper.rb
  65. 1
    1
      app/helpers/domain_control_helper.rb
  66. 2
    2
      app/helpers/routing_helper.rb
  67. 5
    0
      app/helpers/settings_helper.rb
  68. 0
    103
      app/helpers/statuses_helper.rb
  69. 1
    1
      app/javascript/images/elephant_ui_plane.svg
  70. 180
    0
      app/javascript/mastodon/actions/announcements.js
  71. 90
    0
      app/javascript/mastodon/actions/bookmarks.js
  72. 2
    1
      app/javascript/mastodon/actions/compose.js
  73. 15
    1
      app/javascript/mastodon/actions/importer/normalizer.js
  74. 80
    0
      app/javascript/mastodon/actions/interactions.js
  75. 5
    3
      app/javascript/mastodon/actions/notifications.js
  76. 11
    2
      app/javascript/mastodon/actions/statuses.js
  77. 18
    1
      app/javascript/mastodon/actions/streaming.js
  78. 1
    1
      app/javascript/mastodon/actions/timelines.js
  79. 65
    0
      app/javascript/mastodon/components/animated_number.js
  80. 2
    2
      app/javascript/mastodon/components/attachment_list.js
  81. 4
    1
      app/javascript/mastodon/components/column_header.js
  82. 1
    1
      app/javascript/mastodon/components/dropdown_menu.js
  83. 1
    1
      app/javascript/mastodon/components/error_boundary.js
  84. 38
    46
      app/javascript/mastodon/components/icon_button.js
  85. 20
    13
      app/javascript/mastodon/components/media_gallery.js
  86. 11
    4
      app/javascript/mastodon/components/modal_root.js
  87. 26
    5
      app/javascript/mastodon/components/poll.js
  88. 11
    5
      app/javascript/mastodon/components/relative_timestamp.js
  89. 6
    3
      app/javascript/mastodon/components/scrollable_list.js
  90. 27
    43
      app/javascript/mastodon/components/status.js
  91. 87
    11
      app/javascript/mastodon/components/status_action_bar.js
  92. 15
    12
      app/javascript/mastodon/components/status_content.js
  93. 6
    0
      app/javascript/mastodon/containers/dropdown_menu_container.js
  94. 46
    1
      app/javascript/mastodon/containers/status_container.js
  95. 1
    1
      app/javascript/mastodon/extra_polyfills.js
  96. 13
    4
      app/javascript/mastodon/features/account/components/header.js
  97. 7
    7
      app/javascript/mastodon/features/account_gallery/components/media_item.js
  98. 1
    0
      app/javascript/mastodon/features/account_timeline/index.js
  99. 35
    10
      app/javascript/mastodon/features/audio/index.js
  100. 0
    0
      app/javascript/mastodon/features/bookmarked_statuses/index.js

+ 58
- 31
.circleci/config.yml View File

@@ -3,7 +3,7 @@ version: 2
3 3
 aliases:
4 4
   - &defaults
5 5
     docker:
6
-      - image: circleci/ruby:2.6-stretch-node
6
+      - image: circleci/ruby:2.7-buster-node
7 7
         environment: &ruby_environment
8 8
           BUNDLE_APP_CONFIG: ./.bundle/
9 9
           DB_HOST: localhost
@@ -39,7 +39,6 @@ aliases:
39 39
     steps:
40 40
       - checkout
41 41
       - *attach_workspace
42
-
43 42
       - restore_cache:
44 43
           keys:
45 44
             - v1-node-dependencies-{{ checksum "yarn.lock" }}
@@ -49,7 +48,6 @@ aliases:
49 48
           key: v1-node-dependencies-{{ checksum "yarn.lock" }}
50 49
           paths:
51 50
             - ./node_modules/
52
-
53 51
       - *persist_to_workspace
54 52
 
55 53
   - &install_system_dependencies
@@ -58,16 +56,25 @@ aliases:
58 56
         command: |
59 57
           sudo apt-get update
60 58
           sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler
59
+          
60
+          ## TODO: FIX THESE BUSTER DEPENDANCES
61
+          sudo wget http://ftp.au.debian.org/debian/pool/main/i/icu/libicu57_57.1-6+deb9u3_amd64.deb
62
+          sudo dpkg -i libicu57_57.1-6+deb9u3_amd64.deb
63
+          sudo wget http://ftp.au.debian.org/debian/pool/main/p/protobuf/libprotobuf10_3.0.0-9_amd64.deb
64
+          sudo dpkg -i libprotobuf10_3.0.0-9_amd64.deb
61 65
 
62 66
   - &install_ruby_dependencies
63 67
       steps:
64 68
         - *attach_workspace
65
-
66 69
         - *install_system_dependencies
67
-
68 70
         - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
69 71
         - *restore_ruby_dependencies
70
-        - run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production && bundle clean
72
+        - run: bundle config set clean 'true'
73
+        - run: bundle config set deployment 'true'
74
+        - run: bundle config set with 'pam_authentication'
75
+        - run: bundle config set without 'development production'
76
+        - run: bundle config set frozen 'true'
77
+        - run: bundle install --jobs 16 --retry 3 && bundle clean
71 78
         - save_cache:
72 79
             key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
73 80
             paths:
@@ -82,10 +89,8 @@ aliases:
82 89
   - &test_steps
83 90
       steps:
84 91
         - *attach_workspace
85
-
86 92
         - *install_system_dependencies
87 93
         - run: sudo apt-get install -y ffmpeg
88
-
89 94
         - run:
90 95
             name: Prepare Tests
91 96
             command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
@@ -98,21 +103,21 @@ jobs:
98 103
     <<: *defaults
99 104
     <<: *install_steps
100 105
 
101
-  install-ruby2.6:
106
+  install-ruby2.7:
102 107
     <<: *defaults
103 108
     <<: *install_ruby_dependencies
104 109
 
105
-  install-ruby2.5:
110
+  install-ruby2.6:
106 111
     <<: *defaults
107 112
     docker:
108
-      - image: circleci/ruby:2.5-stretch-node
113
+      - image: circleci/ruby:2.6-buster-node
109 114
         environment: *ruby_environment
110 115
     <<: *install_ruby_dependencies
111 116
 
112
-  install-ruby2.4:
117
+  install-ruby2.5:
113 118
     <<: *defaults
114 119
     docker:
115
-      - image: circleci/ruby:2.4-stretch-node
120
+      - image: circleci/ruby:2.5-buster-node
116 121
         environment: *ruby_environment
117 122
     <<: *install_ruby_dependencies
118 123
 
@@ -128,10 +133,29 @@ jobs:
128 133
               - ./mastodon/public/assets
129 134
               - ./mastodon/public/packs-test/
130 135
 
131
-  test-ruby2.6:
136
+  test-migrations:
132 137
     <<: *defaults
133 138
     docker:
134
-      - image: circleci/ruby:2.6-stretch-node
139
+      - image: circleci/ruby:2.7-buster-node
140
+        environment: *ruby_environment
141
+      - image: circleci/postgres:10.6-alpine
142
+        environment:
143
+          POSTGRES_USER: root
144
+      - image: circleci/redis:5-alpine
145
+    steps:
146
+      - *attach_workspace
147
+      - *install_system_dependencies
148
+      - run:
149
+          name: Create database
150
+          command: ./bin/rails parallel:create
151
+      - run:
152
+          name: Run migrations
153
+          command: ./bin/rails parallel:migrate
154
+
155
+  test-ruby2.7:
156
+    <<: *defaults
157
+    docker:
158
+      - image: circleci/ruby:2.7-buster-node
135 159
         environment: *ruby_environment
136 160
       - image: circleci/postgres:10.6-alpine
137 161
         environment:
@@ -139,10 +163,10 @@ jobs:
139 163
       - image: circleci/redis:5-alpine
140 164
     <<: *test_steps
141 165
 
142
-  test-ruby2.5:
166
+  test-ruby2.6:
143 167
     <<: *defaults
144 168
     docker:
145
-      - image: circleci/ruby:2.5-stretch-node
169
+      - image: circleci/ruby:2.6-buster-node
146 170
         environment: *ruby_environment
147 171
       - image: circleci/postgres:10.6-alpine
148 172
         environment:
@@ -150,10 +174,10 @@ jobs:
150 174
       - image: circleci/redis:5-alpine
151 175
     <<: *test_steps
152 176
 
153
-  test-ruby2.4:
177
+  test-ruby2.5:
154 178
     <<: *defaults
155 179
     docker:
156
-      - image: circleci/ruby:2.4-stretch-node
180
+      - image: circleci/ruby:2.5-buster-node
157 181
         environment: *ruby_environment
158 182
       - image: circleci/postgres:10.6-alpine
159 183
         environment:
@@ -164,7 +188,7 @@ jobs:
164 188
   test-webui:
165 189
     <<: *defaults
166 190
     docker:
167
-      - image: circleci/node:12.9-stretch
191
+      - image: circleci/node:12-buster
168 192
     steps:
169 193
       - *attach_workspace
170 194
       - run: ./bin/retry yarn test:jest
@@ -184,20 +208,27 @@ workflows:
184 208
   build-and-test:
185 209
     jobs:
186 210
       - install
187
-      - install-ruby2.6:
211
+      - install-ruby2.7:
188 212
           requires:
189 213
             - install
190
-      - install-ruby2.5:
214
+      - install-ruby2.6:
191 215
           requires:
192 216
             - install
193
-            - install-ruby2.6
194
-      - install-ruby2.4:
217
+            - install-ruby2.7
218
+      - install-ruby2.5:
195 219
           requires:
196 220
             - install
197
-            - install-ruby2.6
221
+            - install-ruby2.7
198 222
       - build:
199 223
           requires:
200
-            - install-ruby2.6
224
+            - install-ruby2.7
225
+      - test-migrations:
226
+          requires:
227
+            - install-ruby2.7
228
+      - test-ruby2.7:
229
+          requires:
230
+            - install-ruby2.7
231
+            - build
201 232
       - test-ruby2.6:
202 233
           requires:
203 234
             - install-ruby2.6
@@ -206,13 +237,9 @@ workflows:
206 237
           requires:
207 238
             - install-ruby2.5
208 239
             - build
209
-      - test-ruby2.4:
210
-          requires:
211
-            - install-ruby2.4
212
-            - build
213 240
       - test-webui:
214 241
           requires:
215 242
             - install
216 243
       - check-i18n:
217 244
           requires:
218
-            - install-ruby2.6
245
+            - install-ruby2.7

+ 2
- 2
.codeclimate.yml View File

@@ -27,10 +27,10 @@ plugins:
27 27
     enabled: true
28 28
   eslint:
29 29
     enabled: true
30
-    channel: eslint-5
30
+    channel: eslint-6
31 31
   rubocop:
32 32
     enabled: true
33
-    channel: rubocop-0-71
33
+    channel: rubocop-0-76
34 34
   sass-lint:
35 35
     enabled: true
36 36
 exclude_patterns:

+ 7
- 2
.env.nanobox View File

@@ -183,6 +183,11 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
183 183
 # LDAP_BIND_DN=
184 184
 # LDAP_PASSWORD=
185 185
 # LDAP_UID=cn
186
+# LDAP_MAIL=mail
187
+# LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email}))
188
+# LDAP_UID_CONVERSION_ENABLED=true
189
+# LDAP_UID_CONVERSION_SEARCH=., -
190
+# LDAP_UID_CONVERSION_REPLACE=_
186 191
 
187 192
 # PAM authentication (optional)
188 193
 # PAM authentication uses for the email generation the "email" pam variable
@@ -226,8 +231,8 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
226 231
 
227 232
 # Optional SAML authentication (cf. omniauth-saml)
228 233
 # SAML_ENABLED=true
229
-# SAML_ACS_URL=
230
-# SAML_ISSUER=http://localhost:3000/auth/auth/saml/callback
234
+# SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback
235
+# SAML_ISSUER=https://example.com
231 236
 # SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO
232 237
 # SAML_IDP_CERT=
233 238
 # SAML_IDP_CERT_FINGERPRINT=

+ 17
- 3
.env.production.sample View File

@@ -178,7 +178,11 @@ STREAMING_CLUSTER_NUM=1
178 178
 # LDAP_BIND_DN=
179 179
 # LDAP_PASSWORD=
180 180
 # LDAP_UID=cn
181
-# LDAP_SEARCH_FILTER=%{uid}=%{email}
181
+# LDAP_MAIL=mail
182
+# LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email}))
183
+# LDAP_UID_CONVERSION_ENABLED=true
184
+# LDAP_UID_CONVERSION_SEARCH=., -
185
+# LDAP_UID_CONVERSION_REPLACE=_
182 186
 
183 187
 # PAM authentication (optional)
184 188
 # PAM authentication uses for the email generation the "email" pam variable
@@ -222,8 +226,8 @@ STREAMING_CLUSTER_NUM=1
222 226
 
223 227
 # Optional SAML authentication (cf. omniauth-saml)
224 228
 # SAML_ENABLED=true
225
-# SAML_ACS_URL=
226
-# SAML_ISSUER=http://localhost:3000/auth/auth/saml/callback
229
+# SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback
230
+# SAML_ISSUER=https://example.com
227 231
 # SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO
228 232
 # SAML_IDP_CERT=
229 233
 # SAML_IDP_CERT_FINGERPRINT=
@@ -246,3 +250,13 @@ STREAMING_CLUSTER_NUM=1
246 250
 # http_proxy=http://gateway.local:8118
247 251
 # Access control for hidden service.
248 252
 # ALLOW_ACCESS_TO_HIDDEN_SERVICE=true
253
+
254
+# Authorized fetch mode (optional)
255
+# Require remote servers to authentify when fetching toots, see
256
+# https://docs.joinmastodon.org/admin/config/#authorized_fetch
257
+# AUTHORIZED_FETCH=true
258
+
259
+# Whitelist mode (optional)
260
+# Only allow federation with whitelisted domains, see
261
+# https://docs.joinmastodon.org/admin/config/#whitelist_mode
262
+# WHITELIST_MODE=true

+ 1
- 1
.env.test View File

@@ -1,5 +1,5 @@
1 1
 # Node.js
2
-NODE_ENV=test
2
+NODE_ENV=tests
3 3
 # Federation
4 4
 LOCAL_DOMAIN=cb6e6126.ngrok.io
5 5
 LOCAL_HTTPS=true

+ 1
- 0
.env.vagrant View File

@@ -1,2 +1,3 @@
1 1
 VAGRANT=true
2 2
 LOCAL_DOMAIN=mastodon.local
3
+BIND=0.0.0.0

+ 5
- 0
.github/ISSUE_TEMPLATE/config.yml View File

@@ -0,0 +1,5 @@
1
+blank_issues_enabled: false
2
+contact_links:
3
+  - name: Mastodon Meta Discussion Board
4
+    url: https://discourse.joinmastodon.org/
5
+    about: Please ask and answer questions here.

+ 10
- 0
.github/stale.yml View File

@@ -0,0 +1,10 @@
1
+daysUntilStale: 120
2
+daysUntilClose: 7
3
+exemptLabels:
4
+  - security
5
+staleLabel: wontfix
6
+markComment: >
7
+  This issue has been automatically marked as stale because it has not had
8
+  recent activity. It will be closed if no further activity occurs. Thank you
9
+  for your contributions.
10
+only: pulls

+ 5
- 1
.gitignore View File

@@ -13,6 +13,7 @@
13 13
 /db/*.sqlite3-journal
14 14
 
15 15
 # Ignore all logfiles and tempfiles.
16
+.eslintcache
16 17
 /log/*
17 18
 !/log/.keep
18 19
 /tmp
@@ -23,6 +24,7 @@ public/packs
23 24
 public/packs-test
24 25
 .env
25 26
 .env.production
27
+.env.development
26 28
 node_modules/
27 29
 build/
28 30
 
@@ -55,6 +57,8 @@ npm-debug.log
55 57
 yarn-error.log
56 58
 yarn-debug.log
57 59
 
60
+# Ignore vagrant log files
61
+ubuntu-xenial-16.04-cloudimg-console.log
62
+
58 63
 # Ignore Docker option files
59 64
 docker-compose.override.yml
60
-

+ 1
- 1
.nvmrc View File

@@ -1 +1 @@
1
-8
1
+12

+ 6
- 0
.rubocop.yml View File

@@ -71,6 +71,9 @@ Naming/MemoizedInstanceVariableName:
71 71
 Rails:
72 72
   Enabled: true
73 73
 
74
+Rails/EnumHash:
75
+  Enabled: false
76
+
74 77
 Rails/HasAndBelongsToMany:
75 78
   Enabled: false
76 79
 
@@ -102,6 +105,9 @@ Style/Documentation:
102 105
 Style/DoubleNegation:
103 106
   Enabled: true
104 107
 
108
+Style/FormatStringToken:
109
+  Enabled: false
110
+
105 111
 Style/FrozenStringLiteralComment:
106 112
   Enabled: true
107 113
 

+ 169
- 0
CHANGELOG.md View File

@@ -3,6 +3,175 @@ Changelog
3 3
 
4 4
 All notable changes to this project will be documented in this file.
5 5
 
6
+## [3.1.1] - 2020-02-10
7
+### Fixed
8
+
9
+- Fix yanked dependency preventing installation ([mayaeh](https://github.com/tootsuite/mastodon/pull/13059))
10
+
11
+## [3.1.0] - 2020-02-09
12
+### Added
13
+
14
+- Add bookmarks ([ThibG](https://github.com/tootsuite/mastodon/pull/7107), [Gargron](https://github.com/tootsuite/mastodon/pull/12494), [Gomasy](https://github.com/tootsuite/mastodon/pull/12381))
15
+- Add announcements ([Gargron](https://github.com/tootsuite/mastodon/pull/12662), [Gargron](https://github.com/tootsuite/mastodon/pull/12967), [Gargron](https://github.com/tootsuite/mastodon/pull/12970), [Gargron](https://github.com/tootsuite/mastodon/pull/12963), [Gargron](https://github.com/tootsuite/mastodon/pull/12950), [Gargron](https://github.com/tootsuite/mastodon/pull/12990), [Gargron](https://github.com/tootsuite/mastodon/pull/12949), [Gargron](https://github.com/tootsuite/mastodon/pull/12989), [Gargron](https://github.com/tootsuite/mastodon/pull/12964), [Gargron](https://github.com/tootsuite/mastodon/pull/12965), [ThibG](https://github.com/tootsuite/mastodon/pull/12958), [ThibG](https://github.com/tootsuite/mastodon/pull/12957), [Gargron](https://github.com/tootsuite/mastodon/pull/12955), [ThibG](https://github.com/tootsuite/mastodon/pull/12946), [ThibG](https://github.com/tootsuite/mastodon/pull/12954))
16
+- Add number animations in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12948), [Gargron](https://github.com/tootsuite/mastodon/pull/12971))
17
+- Add `kab`, `is`, `kn`, `mr`, `ur` to available locales ([Gargron](https://github.com/tootsuite/mastodon/pull/12882), [BoFFire](https://github.com/tootsuite/mastodon/pull/12962), [Gargron](https://github.com/tootsuite/mastodon/pull/12379))
18
+- Add profile filter category ([ThibG](https://github.com/tootsuite/mastodon/pull/12918))
19
+- Add ability to add oneself to lists ([ThibG](https://github.com/tootsuite/mastodon/pull/12271))
20
+- Add hint how to contribute translations to preferences page ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12736))
21
+- Add signatures to statuses in archive takeout ([noellabo](https://github.com/tootsuite/mastodon/pull/12649))
22
+- Add support for `magnet:` and `xmpp` links ([ThibG](https://github.com/tootsuite/mastodon/pull/12905), [ThibG](https://github.com/tootsuite/mastodon/pull/12709))
23
+- Add `follow_request` notification type ([ThibG](https://github.com/tootsuite/mastodon/pull/12198))
24
+- Add ability to filter reports by account domain in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12154))
25
+- Add link to search for users connected from the same IP address to admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12157))
26
+- Add link to reports targeting a specific domain in admin view ([ThibG](https://github.com/tootsuite/mastodon/pull/12513))
27
+- Add support for EventSource streaming in web UI ([BenLubar](https://github.com/tootsuite/mastodon/pull/12887))
28
+- Add hotkey for opening media attachments in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12498), [Kjwon15](https://github.com/tootsuite/mastodon/pull/12546))
29
+- Add relationship-based options to status dropdowns in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12377), [ThibG](https://github.com/tootsuite/mastodon/pull/12535), [Gargron](https://github.com/tootsuite/mastodon/pull/12430))
30
+- Add support for submitting media description with `ctrl`+`enter` in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12272))
31
+- Add download button to audio and video players in web UI ([NimaBoscarino](https://github.com/tootsuite/mastodon/pull/12179))
32
+- Add setting for whether to crop images in timelines in web UI ([duxovni](https://github.com/tootsuite/mastodon/pull/12126))
33
+- Add support for `Event` activities ([tcitworld](https://github.com/tootsuite/mastodon/pull/12637))
34
+- Add basic support for `Group` actors ([noellabo](https://github.com/tootsuite/mastodon/pull/12071))
35
+- Add `S3_OVERRIDE_PATH_STYLE` environment variable ([Gargron](https://github.com/tootsuite/mastodon/pull/12594))
36
+- Add `S3_OPEN_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/12459))
37
+- Add `LDAP_MAIL` environment variable ([madmath03](https://github.com/tootsuite/mastodon/pull/12053))
38
+- Add `LDAP_UID_CONVERSION_ENABLED` environment variable ([madmath03](https://github.com/tootsuite/mastodon/pull/12461))
39
+- Add `--remote-only` option to `tootctl emoji purge` ([ThibG](https://github.com/tootsuite/mastodon/pull/12810))
40
+- Add `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/12568), [Gargron](https://github.com/tootsuite/mastodon/pull/12571))
41
+- Add `tootctl media lookup` command ([irlcatgirl](https://github.com/tootsuite/mastodon/pull/12283))
42
+- Add cache for OEmbed endpoints to avoid extra HTTP requests ([Gargron](https://github.com/tootsuite/mastodon/pull/12403))
43
+- Add support for KaiOS arrow navigation to public pages ([nolanlawson](https://github.com/tootsuite/mastodon/pull/12251))
44
+- Add `discoverable` to accounts in REST API ([trwnh](https://github.com/tootsuite/mastodon/pull/12508))
45
+- Add admin setting to disable default follows ([ArisuOngaku](https://github.com/tootsuite/mastodon/pull/12566))
46
+- Add support for LDAP and PAM in the OAuth password grant strategy ([ntl-purism](https://github.com/tootsuite/mastodon/pull/12390), [Gargron](https://github.com/tootsuite/mastodon/pull/12743))
47
+- Allow support for `Accept`/`Reject` activities with a non-embedded object ([puckipedia](https://github.com/tootsuite/mastodon/pull/12199))
48
+- Add "Show thread" button to public profiles ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/13000))
49
+
50
+### Changed
51
+
52
+- Change `last_status_at` to be a date, not datetime in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/12966))
53
+- Change followers page to relationships page in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12927), [Gargron](https://github.com/tootsuite/mastodon/pull/12934))
54
+- Change reported media attachments to always be hidden in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12879), [ThibG](https://github.com/tootsuite/mastodon/pull/12907))
55
+- Change string from "Disable" to "Disable login" in admin UI ([nileshkumar](https://github.com/tootsuite/mastodon/pull/12201))
56
+- Change report page structure in admin UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12615))
57
+- Change swipe sensitivity to be lower on small screens in web UI ([umonaca](https://github.com/tootsuite/mastodon/pull/12168))
58
+- Change audio/video playback to stop playback when out of view in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12486))
59
+- Change media description label based on upload type in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12270))
60
+- Change large numbers to render without decimal units in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/12706))
61
+- Change "Add a choice" button to be disabled rather than hidden when poll limit reached in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12319), [hinaloe](https://github.com/tootsuite/mastodon/pull/12544))
62
+- Change `tootctl statuses remove` to keep statuses favourited or bookmarked by local users ([ThibG](https://github.com/tootsuite/mastodon/pull/11267), [Gomasy](https://github.com/tootsuite/mastodon/pull/12818))
63
+- Change domain block behavior to update user records (fast) before deleting data (slower) ([ThibG](https://github.com/tootsuite/mastodon/pull/12247))
64
+- Change behaviour to strip audio metadata on uploads ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12171))
65
+- Change accepted length of remote media descriptions from 420 to 1,500 characters ([ThibG](https://github.com/tootsuite/mastodon/pull/12262))
66
+- Change preferences pages structure ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12497), [mayaeh](https://github.com/tootsuite/mastodon/pull/12517), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12801), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12797), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12799), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12793))
67
+- Change format of titles in RSS ([devkral](https://github.com/tootsuite/mastodon/pull/8596))
68
+- Change favourite icon animation from spring-based motion to CSS animation in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12175))
69
+- Change minimum required Node.js version to 10, and default to 12 ([Shleeble](https://github.com/tootsuite/mastodon/pull/12791), [mkody](https://github.com/tootsuite/mastodon/pull/12906), [Shleeble](https://github.com/tootsuite/mastodon/pull/12703))
70
+- Change spam check to exempt server staff ([ThibG](https://github.com/tootsuite/mastodon/pull/12874))
71
+- Change to fallback to to `Create` audience when `object` has no defined audience ([ThibG](https://github.com/tootsuite/mastodon/pull/12249))
72
+- Change Twemoji library to 12.1.3 in web UI ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/12342))
73
+- Change blocked users to be hidden from following/followers lists ([ThibG](https://github.com/tootsuite/mastodon/pull/12733))
74
+- Change signature verification to ignore signatures with invalid host ([Gargron](https://github.com/tootsuite/mastodon/pull/13033))
75
+
76
+### Removed
77
+
78
+- Remove unused dependencies ([ykzts](https://github.com/tootsuite/mastodon/pull/12861), [mayaeh](https://github.com/tootsuite/mastodon/pull/12826), [ThibG](https://github.com/tootsuite/mastodon/pull/12822), [ykzts](https://github.com/tootsuite/mastodon/pull/12533))
79
+
80
+### Fixed
81
+
82
+- Fix some translatable strings being used wrongly ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12569), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12589), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12502), [mayaeh](https://github.com/tootsuite/mastodon/pull/12231))
83
+- Fix headline of public timeline page when set to local-only ([ykzts](https://github.com/tootsuite/mastodon/pull/12224))
84
+- Fix space between tabs not being spread evenly in web UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12944), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12961), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12446))
85
+- Fix interactive delays in database migrations with no TTY ([Gargron](https://github.com/tootsuite/mastodon/pull/12969))
86
+- Fix status overflowing in report dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12959))
87
+- Fix unlocalized dropdown button title in web UI ([Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/12947))
88
+- Fix media attachments without file being uploadable ([Gargron](https://github.com/tootsuite/mastodon/pull/12562))
89
+- Fix unfollow confirmations in profile directory in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12922))
90
+- Fix duplicate `description` meta tag on accounts public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/12923))
91
+- Fix slow query of federated timeline ([notozeki](https://github.com/tootsuite/mastodon/pull/12886))
92
+- Fix not all of account's active IPs showing up in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12909), [Gargron](https://github.com/tootsuite/mastodon/pull/12943))
93
+- Fix search by IP not using alternative browser sessions in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12904))
94
+- Fix “X new items” not showing up for slow mode on empty timelines in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12875))
95
+- Fix OEmbed endpoint being inaccessible in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12864))
96
+- Fix proofs API being inaccessible in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12495))
97
+- Fix Ruby 2.7 incompatibilities ([ThibG](https://github.com/tootsuite/mastodon/pull/12831), [ThibG](https://github.com/tootsuite/mastodon/pull/12824), [Shleeble](https://github.com/tootsuite/mastodon/pull/12759), [zunda](https://github.com/tootsuite/mastodon/pull/12769))
98
+- Fix invalid poll votes being accepted in REST API ([ThibG](https://github.com/tootsuite/mastodon/pull/12601))
99
+- Fix old migrations failing because of strong migrations update ([ThibG](https://github.com/tootsuite/mastodon/pull/12787), [ThibG](https://github.com/tootsuite/mastodon/pull/12692))
100
+- Fix reuse of detailed status components in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12792))
101
+- Fix base64-encoded file uploads not being possible in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/12748), [Gargron](https://github.com/tootsuite/mastodon/pull/12857))
102
+- Fix error due to missing authentication call in filters controller ([Gargron](https://github.com/tootsuite/mastodon/pull/12746))
103
+- Fix uncaught unknown format error in host meta controller ([Gargron](https://github.com/tootsuite/mastodon/pull/12747))
104
+- Fix URL search not returning private toots user has access to ([ThibG](https://github.com/tootsuite/mastodon/pull/12742), [ThibG](https://github.com/tootsuite/mastodon/pull/12336))
105
+- Fix cache digesting log noise on status embeds ([Gargron](https://github.com/tootsuite/mastodon/pull/12750))
106
+- Fix slowness due to layout thrashing when reloading a large set of statuses in web UI ([panarom](https://github.com/tootsuite/mastodon/pull/12661), [panarom](https://github.com/tootsuite/mastodon/pull/12744), [Gargron](https://github.com/tootsuite/mastodon/pull/12712))
107
+- Fix error when fetching followers/following from REST API when user has network hidden ([Gargron](https://github.com/tootsuite/mastodon/pull/12716))
108
+- Fix IDN mentions not being processed, IDN domains not being rendered ([Gargron](https://github.com/tootsuite/mastodon/pull/12715), [Gargron](https://github.com/tootsuite/mastodon/pull/13035), [Gargron](https://github.com/tootsuite/mastodon/pull/13030))
109
+- Fix error when searching for empty phrase ([Gargron](https://github.com/tootsuite/mastodon/pull/12711))
110
+- Fix backups stopping due to read timeouts ([chr-1x](https://github.com/tootsuite/mastodon/pull/12281))
111
+- Fix batch actions on non-pending tags in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12537))
112
+- Fix sample `SAML_ACS_URL`, `SAML_ISSUER` ([orlea](https://github.com/tootsuite/mastodon/pull/12669))
113
+- Fix manual scrolling issue on Firefox/Windows in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12648))
114
+- Fix archive takeout failing if total dump size exceeds 2GB ([scd31](https://github.com/tootsuite/mastodon/pull/12602), [Gargron](https://github.com/tootsuite/mastodon/pull/12653))
115
+- Fix custom emoji category creation silently erroring out on duplicate category ([ThibG](https://github.com/tootsuite/mastodon/pull/12647))
116
+- Fix link crawler not specifying preferred content type ([ThibG](https://github.com/tootsuite/mastodon/pull/12646))
117
+- Fix featured hashtag setting page erroring out instead of rejecting invalid tags ([ThibG](https://github.com/tootsuite/mastodon/pull/12436))
118
+- Fix tooltip messages of single/multiple-choice polls switcher being reversed in web UI ([acid-chicken](https://github.com/tootsuite/mastodon/pull/12616))
119
+- Fix typo in help text of `tootctl statuses remove` ([trwnh](https://github.com/tootsuite/mastodon/pull/12603))
120
+- Fix generic HTTP 500 error on duplicate records ([Gargron](https://github.com/tootsuite/mastodon/pull/12563))
121
+- Fix old migration failing with new status default scope ([ThibG](https://github.com/tootsuite/mastodon/pull/12493))
122
+- Fix errors when using search API with no query ([Gargron](https://github.com/tootsuite/mastodon/pull/12541), [trwnh](https://github.com/tootsuite/mastodon/pull/12549))
123
+- Fix poll options not being selectable via keyboard in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12538))
124
+- Fix conversations not having an unread indicator in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12506))
125
+- Fix lost focus when modals open/close in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12437))
126
+- Fix pending upload count not being decremented on error in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12499))
127
+- Fix empty poll options not being removed on remote poll update ([ThibG](https://github.com/tootsuite/mastodon/pull/12484))
128
+- Fix OCR with delete & redraft in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12465))
129
+- Fix blur behind closed registration message ([ThibG](https://github.com/tootsuite/mastodon/pull/12442))
130
+- Fix OEmbed discovery not handling different URL variants in query ([Gargron](https://github.com/tootsuite/mastodon/pull/12439))
131
+- Fix link crawler crashing on `<a>` tags without `href` ([ThibG](https://github.com/tootsuite/mastodon/pull/12159))
132
+- Fix whitelisted subdomains being ignored in whitelist mode ([noiob](https://github.com/tootsuite/mastodon/pull/12435))
133
+- Fix broken audit log in whitelist mode in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12303))
134
+- Fix unread indicator not honoring "Only media" option in local and federated timelines in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12330))
135
+- Fix error when rebuilding home feeds ([dariusk](https://github.com/tootsuite/mastodon/pull/12324))
136
+- Fix relationship caches being broken as result of a follow request ([ThibG](https://github.com/tootsuite/mastodon/pull/12299))
137
+- Fix more items than the limit being uploadable in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12300))
138
+- Fix various issues with account migration ([ThibG](https://github.com/tootsuite/mastodon/pull/12301))
139
+- Fix filtered out items being counted as pending items in slow mode in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12266))
140
+- Fix notification filters not applying to poll options ([ThibG](https://github.com/tootsuite/mastodon/pull/12269))
141
+- Fix notification message for user's own poll saying it's a poll they voted on in web UI ([ykzts](https://github.com/tootsuite/mastodon/pull/12219))
142
+- Fix polls with an expiration not showing up as expired in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/12222))
143
+- Fix volume slider having an offset between cursor and slider in Chromium in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12158))
144
+- Fix Vagrant image not accepting connections ([shrft](https://github.com/tootsuite/mastodon/pull/12180))
145
+- Fix batch actions being hidden on small screens in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/12183))
146
+- Fix incoming federation not working in whitelist mode ([ThibG](https://github.com/tootsuite/mastodon/pull/12185))
147
+- Fix error when passing empty `source` param to `PUT /api/v1/accounts/update_credentials` ([jglauche](https://github.com/tootsuite/mastodon/pull/12259))
148
+- Fix HTTP-based streaming API being cacheable by proxies ([BenLubar](https://github.com/tootsuite/mastodon/pull/12945))
149
+- Fix users being able to register while `tootctl self-destruct` is in progress ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12877))
150
+- Fix microformats detection in link crawler not ignoring `h-card` links ([nightpool](https://github.com/tootsuite/mastodon/pull/12189))
151
+- Fix outline on full-screen video in web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/12176))
152
+- Fix TLD domain blocks not being editable ([ThibG](https://github.com/tootsuite/mastodon/pull/12805))
153
+- Fix Nanobox deploy hooks ([danhunsaker](https://github.com/tootsuite/mastodon/pull/12663))
154
+- Fix needlessly complicated SQL query when performing account search amongst followings ([ThibG](https://github.com/tootsuite/mastodon/pull/12302))
155
+- Fix favourites count not updating when unfavouriting in web UI ([NimaBoscarino](https://github.com/tootsuite/mastodon/pull/12140))
156
+- Fix occasional crash on scroll in Chromium in web UI ([hinaloe](https://github.com/tootsuite/mastodon/pull/12274))
157
+- Fix intersection observer not working in single-column mode web UI ([panarom](https://github.com/tootsuite/mastodon/pull/12735))
158
+- Fix voting issue with remote polls that contain trailing spaces ([ThibG](https://github.com/tootsuite/mastodon/pull/12515))
159
+- Fix dynamic elements not working in pgHero due to CSP rules ([ykzts](https://github.com/tootsuite/mastodon/pull/12489))
160
+- Fix overly verbose backtraces when delivering ActivityPub payloads ([zunda](https://github.com/tootsuite/mastodon/pull/12798))
161
+- Fix rendering `<a>` without `href` when scheme unsupported ([Gargron](https://github.com/tootsuite/mastodon/pull/13040))
162
+- Fix unfiltered params error when generating ActivityPub tag pagination ([Gargron](https://github.com/tootsuite/mastodon/pull/13049))
163
+- Fix malformed HTML causing uncaught error ([Gargron](https://github.com/tootsuite/mastodon/pull/13042))
164
+- Fix native share button not being displayed for unlisted toots ([ThibG](https://github.com/tootsuite/mastodon/pull/13045))
165
+- Fix remote convertible media attachments (e.g. GIFs) not being saved ([Gargron](https://github.com/tootsuite/mastodon/pull/13032))
166
+- Fix account query not using faster index ([abcang](https://github.com/tootsuite/mastodon/pull/13016))
167
+- Fix error when sending moderation notification ([renatolond](https://github.com/tootsuite/mastodon/pull/13014))
168
+
169
+### Security
170
+
171
+- Fix OEmbed leaking information about existence of non-public statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/12930))
172
+- Fix password change/reset not immediately invalidating other sessions ([Gargron](https://github.com/tootsuite/mastodon/pull/12928))
173
+- Fix settings pages being cacheable by the browser ([Gargron](https://github.com/tootsuite/mastodon/pull/12714))
174
+
6 175
 ## [3.0.1] - 2019-10-10
7 176
 ### Added
8 177
 

+ 2
- 2
CONTRIBUTING.md View File

@@ -14,13 +14,13 @@ If your contributions are accepted into Mastodon, you can request to be paid thr
14 14
 
15 15
 ## Bug reports
16 16
 
17
-Bug reports and feature suggestions can be submitted to [GitHub Issues](https://github.com/tootsuite/mastodon/issues). Please make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected in the past using the search function. Please also use descriptive, concise titles.
17
+Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/tootsuite/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected.
18 18
 
19 19
 ## Translations
20 20
 
21 21
 You can submit translations via [Crowdin](https://crowdin.com/project/mastodon). They are periodically merged into the codebase.
22 22
 
23
-[![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)][crowdin]
23
+[![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)](https://crowdin.com/project/mastodon)
24 24
 
25 25
 ## Pull requests
26 26
 

+ 6
- 3
Dockerfile View File

@@ -3,8 +3,8 @@ FROM ubuntu:18.04 as build-dep
3 3
 # Use bash for the shell
4 4
 SHELL ["bash", "-c"]
5 5
 
6
-# Install Node
7
-ENV NODE_VER="12.11.1"
6
+# Install Node v12 (LTS)
7
+ENV NODE_VER="12.14.0"  
8 8
 RUN	echo "Etc/UTC" > /etc/localtime && \
9 9
 	apt update && \
10 10
 	apt -y install wget python && \
@@ -58,7 +58,9 @@ RUN npm install -g yarn && \
58 58
 COPY Gemfile* package.json yarn.lock /opt/mastodon/
59 59
 
60 60
 RUN cd /opt/mastodon && \
61
-	bundle install -j$(nproc) --deployment --without development test && \
61
+  bundle config set deployment 'true' && \
62
+  bundle config set without 'development test' && \
63
+	bundle install -j$(nproc) && \
62 64
 	yarn install --pure-lockfile
63 65
 
64 66
 FROM ubuntu:18.04
@@ -123,3 +125,4 @@ RUN cd ~ && \
123 125
 # Set the work dir and the container entry point
124 126
 WORKDIR /opt/mastodon
125 127
 ENTRYPOINT ["/tini", "--"]
128
+EXPOSE 3000 4000

+ 46
- 43
Gemfile View File

@@ -1,21 +1,26 @@
1 1
 # frozen_string_literal: true
2 2
 
3 3
 source 'https://rubygems.org'
4
-ruby '>= 2.4.0', '< 2.7.0'
4
+ruby '>= 2.4.0', '< 3.0.0'
5 5
 
6
-gem 'pkg-config', '~> 1.3'
6
+gem 'pkg-config', '~> 1.4'
7 7
 
8
-gem 'puma', '~> 4.2'
9
-gem 'rails', '~> 5.2.3'
8
+gem 'puma', '~> 4.3'
9
+gem 'rails', '~> 5.2.4'
10
+gem 'sprockets', '~> 3.7.2'
10 11
 gem 'thor', '~> 0.20'
12
+gem 'rack', '~> 2.1.2'
13
+
14
+gem 'thwait', '~> 0.1.0'
15
+gem 'e2mmap', '~> 0.1.0'
11 16
 
12 17
 gem 'hamlit-rails', '~> 0.2'
13
-gem 'pg', '~> 1.1'
18
+gem 'pg', '~> 1.2'
14 19
 gem 'makara', '~> 0.4'
15
-gem 'pghero', '~> 2.3'
20
+gem 'pghero', '~> 2.4'
16 21
 gem 'dotenv-rails', '~> 2.7'
17 22
 
18
-gem 'aws-sdk-s3', '~> 1.48', require: false
23
+gem 'aws-sdk-s3', '~> 1.60', require: false
19 24
 gem 'fog-core', '<= 2.1.0'
20 25
 gem 'fog-openstack', '~> 0.3', require: false
21 26
 gem 'paperclip', '~> 6.0'
@@ -27,10 +32,10 @@ gem 'active_model_serializers', '~> 0.10'
27 32
 gem 'addressable', '~> 2.7'
28 33
 gem 'bootsnap', '~> 1.4', require: false
29 34
 gem 'browser'
30
-gem 'charlock_holmes', '~> 0.7.6'
35
+gem 'charlock_holmes', '~> 0.7.7'
31 36
 gem 'iso-639'
32 37
 gem 'chewy', '~> 5.1'
33
-gem 'cld3', '~> 3.2.4'
38
+gem 'cld3', '~> 3.2.6'
34 39
 gem 'devise', '~> 4.7'
35 40
 gem 'devise-two-factor', '~> 3.1'
36 41
 
@@ -38,7 +43,7 @@ group :pam_authentication, optional: true do
38 43
   gem 'devise_pam_authenticatable2', '~> 9.2'
39 44
 end
40 45
 
41
-gem 'net-ldap', '~> 0.10'
46
+gem 'net-ldap', '~> 0.16'
42 47
 gem 'omniauth-cas', '~> 1.1'
43 48
 gem 'omniauth-saml', '~> 1.10'
44 49
 gem 'omniauth', '~> 1.9'
@@ -49,35 +54,34 @@ gem 'fast_blank', '~> 1.0'
49 54
 gem 'fastimage'
50 55
 gem 'goldfinger', '~> 2.1'
51 56
 gem 'hiredis', '~> 0.6'
52
-gem 'redis-namespace', '~> 1.5'
57
+gem 'redis-namespace', '~> 1.7'
53 58
 gem 'health_check', git: 'https://github.com/ianheggie/health_check', ref: '0b799ead604f900ed50685e9b2d469cd2befba5b'
54 59
 gem 'htmlentities', '~> 4.3'
55
-gem 'http', '~> 3.3'
60
+gem 'http', '~> 4.3'
56 61
 gem 'http_accept_language', '~> 2.1'
57 62
 gem 'http_parser.rb', '~> 0.6', git: 'https://github.com/tmm1/http_parser.rb', ref: '54b17ba8c7d8d20a16dfc65d1775241833219cf2', submodules: true
58
-gem 'httplog', '~> 1.3'
63
+gem 'httplog', '~> 1.4.2'
59 64
 gem 'idn-ruby', require: 'idn'
60 65
 gem 'kaminari', '~> 1.1'
61 66
 gem 'link_header', '~> 0.0'
62
-gem 'mime-types', '~> 3.3', require: 'mime/types/columnar'
67
+gem 'mime-types', '~> 3.3.1', require: 'mime/types/columnar'
63 68
 gem 'nilsimsa', git: 'https://github.com/witgo/nilsimsa', ref: 'fd184883048b922b176939f851338d0a4971a532'
64 69
 gem 'nokogiri', '~> 1.10'
65 70
 gem 'nsa', '~> 0.2'
66
-gem 'oj', '~> 3.9'
67
-gem 'ostatus2', '~> 2.0'
68
-gem 'ox', '~> 2.11'
71
+gem 'oj', '~> 3.10'
72
+gem 'ox', '~> 2.12'
69 73
 gem 'parslet'
70
-gem 'parallel', '~> 1.17'
74
+gem 'parallel', '~> 1.19'
71 75
 gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
72 76
 gem 'pundit', '~> 2.1'
73 77
 gem 'premailer-rails'
74
-gem 'rack-attack', '~> 6.1'
75
-gem 'rack-cors', '~> 1.0', require: 'rack/cors'
78
+gem 'rack-attack', '~> 6.2'
79
+gem 'rack-cors', '~> 1.1', require: 'rack/cors'
76 80
 gem 'rails-i18n', '~> 5.1'
77 81
 gem 'rails-settings-cached', '~> 0.6'
78 82
 gem 'redis', '~> 4.1', require: ['redis', 'redis/connection/hiredis']
79 83
 gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
80
-gem 'rqrcode', '~> 0.10'
84
+gem 'rqrcode', '~> 1.1'
81 85
 gem 'ruby-progressbar', '~> 1.10'
82 86
 gem 'sanitize', '~> 5.1'
83 87
 gem 'sidekiq', '~> 5.2'
@@ -85,28 +89,28 @@ gem 'sidekiq-scheduler', '~> 3.0'
85 89
 gem 'sidekiq-unique-jobs', '~> 6.0'
86 90
 gem 'sidekiq-bulk', '~>0.2.0'
87 91
 gem 'simple-navigation', '~> 4.1'
88
-gem 'simple_form', '~> 4.1'
92
+gem 'simple_form', '~> 5.0'
89 93
 gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
90
-gem 'stoplight', '~> 2.1.3'
91
-gem 'strong_migrations', '~> 0.4'
94
+gem 'stoplight', '~> 2.2.0'
95
+gem 'strong_migrations', '~> 0.5'
92 96
 gem 'tty-command', '~> 0.9', require: false
93
-gem 'tty-prompt', '~> 0.19', require: false
97
+gem 'tty-prompt', '~> 0.20', require: false
94 98
 gem 'twitter-text', '~> 1.14'
95 99
 gem 'tzinfo-data', '~> 1.2019'
96
-gem 'webpacker', '~> 4.0'
100
+gem 'webpacker', '~> 4.2'
97 101
 gem 'webpush'
98 102
 
99
-gem 'json-ld', git: 'https://github.com/ruby-rdf/json-ld.git', ref: 'e742697a0906e74e8bb777ef98137bc3955d981d'
103
+gem 'json-ld'
100 104
 gem 'json-ld-preloaded', '~> 3.0'
101
-gem 'rdf-normalize', '~> 0.3'
105
+gem 'rdf-normalize', '~> 0.4'
102 106
 
103 107
 group :development, :test do
104
-  gem 'fabrication', '~> 2.20'
105
-  gem 'fuubar', '~> 2.4'
108
+  gem 'fabrication', '~> 2.21'
109
+  gem 'fuubar', '~> 2.5'
106 110
   gem 'i18n-tasks', '~> 0.9', require: false
107 111
   gem 'pry-byebug', '~> 3.7'
108 112
   gem 'pry-rails', '~> 0.3'
109
-  gem 'rspec-rails', '~> 3.8'
113
+  gem 'rspec-rails', '~> 3.9'
110 114
 end
111 115
 
112 116
 group :production, :test do
@@ -114,29 +118,29 @@ group :production, :test do
114 118
 end
115 119
 
116 120
 group :test do
117
-  gem 'capybara', '~> 3.29'
121
+  gem 'capybara', '~> 3.30'
118 122
   gem 'climate_control', '~> 0.2'
119
-  gem 'faker', '~> 2.5'
120
-  gem 'microformats', '~> 4.1'
123
+  gem 'faker', '~> 2.10'
124
+  gem 'microformats', '~> 4.2'
121 125
   gem 'rails-controller-testing', '~> 1.0'
122 126
   gem 'rspec-sidekiq', '~> 3.0'
123 127
   gem 'simplecov', '~> 0.17', require: false
124
-  gem 'webmock', '~> 3.7'
125
-  gem 'parallel_tests', '~> 2.29'
128
+  gem 'webmock', '~> 3.8'
129
+  gem 'parallel_tests', '~> 2.30'
126 130
 end
127 131
 
128 132
 group :development do
129
-  gem 'active_record_query_trace', '~> 1.6'
130
-  gem 'annotate', '~> 2.7'
133
+  gem 'active_record_query_trace', '~> 1.7'
134
+  gem 'annotate', '~> 3.0'
131 135
   gem 'better_errors', '~> 2.5'
132 136
   gem 'binding_of_caller', '~> 0.7'
133
-  gem 'bullet', '~> 6.0'
137
+  gem 'bullet', '~> 6.1'
134 138
   gem 'letter_opener', '~> 1.7'
135 139
   gem 'letter_opener_web', '~> 1.3'
136 140
   gem 'memory_profiler'
137
-  gem 'rubocop', '~> 0.74', require: false
138
-  gem 'rubocop-rails', '~> 2.3', require: false
139
-  gem 'brakeman', '~> 4.6', require: false
141
+  gem 'rubocop', '~> 0.79', require: false
142
+  gem 'rubocop-rails', '~> 2.4', require: false
143
+  gem 'brakeman', '~> 4.7', require: false
140 144
   gem 'bundler-audit', '~> 0.6', require: false
141 145
 
142 146
   gem 'capistrano', '~> 3.11'
@@ -144,7 +148,6 @@ group :development do
144 148
   gem 'capistrano-rbenv', '~> 2.1'
145 149
   gem 'capistrano-yarn', '~> 2.0'
146 150
 
147
-  gem 'derailed_benchmarks'
148 151
   gem 'stackprof'
149 152
 end
150 153
 

+ 216
- 234
Gemfile.lock View File

@@ -13,19 +13,6 @@ GIT
13 13
   specs:
14 14
     posix-spawn (0.3.13)
15 15
 
16
-GIT
17
-  remote: https://github.com/ruby-rdf/json-ld.git
18
-  revision: e742697a0906e74e8bb777ef98137bc3955d981d
19
-  ref: e742697a0906e74e8bb777ef98137bc3955d981d
20
-  specs:
21
-    json-ld (3.0.2)
22
-      htmlentities (~> 4.3)
23
-      json-canonicalization (~> 0.1)
24
-      link_header (~> 0.0, >= 0.0.8)
25
-      multi_json (~> 1.13)
26
-      rack (>= 1.6, < 3.0)
27
-      rdf (~> 3.0, >= 3.0.8)
28
-
29 16
 GIT
30 17
   remote: https://github.com/tmm1/http_parser.rb
31 18
   revision: 54b17ba8c7d8d20a16dfc65d1775241833219cf2
@@ -44,25 +31,25 @@ GIT
44 31
 GEM
45 32
   remote: https://rubygems.org/
46 33
   specs:
47
-    actioncable (5.2.3)
48
-      actionpack (= 5.2.3)
34
+    actioncable (5.2.4.1)
35
+      actionpack (= 5.2.4.1)
49 36
       nio4r (~> 2.0)
50 37
       websocket-driver (>= 0.6.1)
51
-    actionmailer (5.2.3)
52
-      actionpack (= 5.2.3)
53
-      actionview (= 5.2.3)
54
-      activejob (= 5.2.3)
38
+    actionmailer (5.2.4.1)
39
+      actionpack (= 5.2.4.1)
40
+      actionview (= 5.2.4.1)
41
+      activejob (= 5.2.4.1)
55 42
       mail (~> 2.5, >= 2.5.4)
56 43
       rails-dom-testing (~> 2.0)
57
-    actionpack (5.2.3)
58
-      actionview (= 5.2.3)
59
-      activesupport (= 5.2.3)
60
-      rack (~> 2.0)
44
+    actionpack (5.2.4.1)
45
+      actionview (= 5.2.4.1)
46
+      activesupport (= 5.2.4.1)
47
+      rack (~> 2.0, >= 2.0.8)
61 48
       rack-test (>= 0.6.3)
62 49
       rails-dom-testing (~> 2.0)
63 50
       rails-html-sanitizer (~> 1.0, >= 1.0.2)
64
-    actionview (5.2.3)
65
-      activesupport (= 5.2.3)
51
+    actionview (5.2.4.1)
52
+      activesupport (= 5.2.4.1)
66 53
       builder (~> 3.1)
67 54
       erubi (~> 1.4)
68 55
       rails-dom-testing (~> 2.0)
@@ -72,32 +59,32 @@ GEM
72 59
       activemodel (>= 4.1, < 6.1)
73 60
       case_transform (>= 0.2)
74 61
       jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
75
-    active_record_query_trace (1.6.2)
76
-    activejob (5.2.3)
77
-      activesupport (= 5.2.3)
62
+    active_record_query_trace (1.7)
63
+    activejob (5.2.4.1)
64
+      activesupport (= 5.2.4.1)
78 65
       globalid (>= 0.3.6)
79
-    activemodel (5.2.3)
80
-      activesupport (= 5.2.3)
81
-    activerecord (5.2.3)
82
-      activemodel (= 5.2.3)
83
-      activesupport (= 5.2.3)
66
+    activemodel (5.2.4.1)
67
+      activesupport (= 5.2.4.1)
68
+    activerecord (5.2.4.1)
69
+      activemodel (= 5.2.4.1)
70
+      activesupport (= 5.2.4.1)
84 71
       arel (>= 9.0)
85
-    activestorage (5.2.3)
86
-      actionpack (= 5.2.3)
87
-      activerecord (= 5.2.3)
72
+    activestorage (5.2.4.1)
73
+      actionpack (= 5.2.4.1)
74
+      activerecord (= 5.2.4.1)
88 75
       marcel (~> 0.3.1)
89
-    activesupport (5.2.3)
76
+    activesupport (5.2.4.1)
90 77
       concurrent-ruby (~> 1.0, >= 1.0.2)
91 78
       i18n (>= 0.7, < 2)
92 79
       minitest (~> 5.1)
93 80
       tzinfo (~> 1.1)
94 81
     addressable (2.7.0)
95 82
       public_suffix (>= 2.0.2, < 5.0)
96
-    airbrussh (1.3.4)
83
+    airbrussh (1.4.0)
97 84
       sshkit (>= 1.6.1, != 1.7.0)
98
-    annotate (2.7.5)
85
+    annotate (3.0.3)
99 86
       activerecord (>= 3.2, < 7.0)
100
-      rake (>= 10.4, < 13.0)
87
+      rake (>= 10.4, < 14.0)
101 88
     arel (9.0.0)
102 89
     ast (2.4.0)
103 90
     attr_encrypted (3.1.0)
@@ -105,37 +92,36 @@ GEM
105 92
     av (0.9.0)
106 93
       cocaine (~> 0.5.3)
107 94
     aws-eventstream (1.0.3)
108
-    aws-partitions (1.207.0)
109
-    aws-sdk-core (3.65.1)
95
+    aws-partitions (1.261.0)
96
+    aws-sdk-core (3.86.0)
110 97
       aws-eventstream (~> 1.0, >= 1.0.2)
111
-      aws-partitions (~> 1.0)
98
+      aws-partitions (~> 1, >= 1.239.0)
112 99
       aws-sigv4 (~> 1.1)
113 100
       jmespath (~> 1.0)
114
-    aws-sdk-kms (1.24.0)
115
-      aws-sdk-core (~> 3, >= 3.61.1)
101
+    aws-sdk-kms (1.27.0)
102
+      aws-sdk-core (~> 3, >= 3.71.0)
116 103
       aws-sigv4 (~> 1.1)
117
-    aws-sdk-s3 (1.48.0)
118
-      aws-sdk-core (~> 3, >= 3.61.1)
104
+    aws-sdk-s3 (1.60.1)
105
+      aws-sdk-core (~> 3, >= 3.83.0)
119 106
       aws-sdk-kms (~> 1)
120 107
       aws-sigv4 (~> 1.1)
121 108
     aws-sigv4 (1.1.0)
122 109
       aws-eventstream (~> 1.0, >= 1.0.2)
123 110
     bcrypt (3.1.12)
124
-    benchmark-ips (2.7.2)
125 111
     better_errors (2.5.1)
126 112
       coderay (>= 1.0.0)
127 113
       erubi (>= 1.0.0)
128 114
       rack (>= 0.9.0)
129 115
     binding_of_caller (0.8.0)
130 116
       debug_inspector (>= 0.0.1)
131
-    blurhash (0.1.3)
117
+    blurhash (0.1.4)
132 118
       ffi (~> 1.10.0)
133 119
     bootsnap (1.4.5)
134 120
       msgpack (~> 1.0)
135
-    brakeman (4.6.1)
136
-    browser (2.6.1)
137
-    builder (3.2.3)
138
-    bullet (6.0.2)
121
+    brakeman (4.7.2)
122
+    browser (3.0.3)
123
+    builder (3.2.4)
124
+    bullet (6.1.0)
139 125
       activesupport (>= 3.0.0)
140 126
       uniform_notifier (~> 1.11)
141 127
     bundler-audit (0.6.1)
@@ -153,12 +139,12 @@ GEM
153 139
     capistrano-rails (1.4.0)
154 140
       capistrano (~> 3.1)
155 141
       capistrano-bundler (~> 1.1)
156
-    capistrano-rbenv (2.1.4)
142
+    capistrano-rbenv (2.1.6)
157 143
       capistrano (~> 3.1)
158 144
       sshkit (~> 1.3)
159 145
     capistrano-yarn (2.0.2)
160 146
       capistrano (~> 3.0)
161
-    capybara (3.29.0)
147
+    capybara (3.30.0)
162 148
       addressable
163 149
       mini_mime (>= 0.1.3)
164 150
       nokogiri (~> 1.8)
@@ -168,14 +154,14 @@ GEM
168 154
       xpath (~> 3.2)
169 155
     case_transform (0.2)
170 156
       activesupport
171
-    charlock_holmes (0.7.6)
157
+    charlock_holmes (0.7.7)
172 158
     chewy (5.1.0)
173 159
       activesupport (>= 4.0)
174 160
       elasticsearch (>= 2.0.0)
175 161
       elasticsearch-dsl
176
-    chunky_png (1.3.10)
177
-    cld3 (3.2.4)
178
-      ffi (>= 1.1.0, < 1.11.0)
162
+    chunky_png (1.3.11)
163
+    cld3 (3.2.6)
164
+      ffi (>= 1.1.0, < 1.12.0)
179 165
     climate_control (0.2.0)
180 166
     cocaine (0.5.8)
181 167
       climate_control (>= 0.0.3, < 1.0)
@@ -184,19 +170,10 @@ GEM
184 170
     connection_pool (2.2.2)
185 171
     crack (0.4.3)
186 172
       safe_yaml (~> 1.0.0)
187
-    crass (1.0.4)
188
-    css_parser (1.7.0)
173
+    crass (1.0.6)
174
+    css_parser (1.7.1)
189 175
       addressable
190 176
     debug_inspector (0.0.3)
191
-    derailed_benchmarks (1.4.0)
192
-      benchmark-ips (~> 2)
193
-      get_process_mem (~> 0)
194
-      heapy (~> 0)
195
-      memory_profiler (~> 0)
196
-      rack (>= 1)
197
-      rake (> 10, < 13)
198
-      ruby-statistics (>= 2.1)
199
-      thor (~> 0.19)
200 177
     devise (4.7.1)
201 178
       bcrypt (~> 3.0)
202 179
       orm_adapter (~> 0.1)
@@ -216,14 +193,15 @@ GEM
216 193
     discard (1.1.0)
217 194
       activerecord (>= 4.2, < 7)
218 195
     docile (1.3.2)
219
-    domain_name (0.5.20180417)
196
+    domain_name (0.5.20190701)
220 197
       unf (>= 0.0.5, < 1.0.0)
221
-    doorkeeper (5.2.1)
198
+    doorkeeper (5.2.3)
222 199
       railties (>= 5)
223 200
     dotenv (2.7.5)
224 201
     dotenv-rails (2.7.5)
225 202
       dotenv (= 2.7.5)
226 203
       railties (>= 3.2, < 6.1)
204
+    e2mmap (0.1.0)
227 205
     elasticsearch (7.3.0)
228 206
       elasticsearch-api (= 7.3.0)
229 207
       elasticsearch-transport (= 7.3.0)
@@ -235,18 +213,21 @@ GEM
235 213
       multi_json
236 214
     encryptor (3.0.0)
237 215
     equatable (0.6.1)
238
-    erubi (1.8.0)
216
+    erubi (1.9.0)
239 217
     et-orbi (1.1.6)
240 218
       tzinfo
241
-    excon (0.62.0)
242
-    fabrication (2.20.2)
243
-    faker (2.5.0)
244
-      i18n (~> 1.6.0)
245
-    faraday (0.15.4)
219
+    excon (0.71.0)
220
+    fabrication (2.21.0)
221
+    faker (2.10.1)
222
+      i18n (>= 1.6, < 2)
223
+    faraday (1.0.0)
246 224
       multipart-post (>= 1.2, < 3)
247 225
     fast_blank (1.0.0)
248 226
     fastimage (2.1.7)
249 227
     ffi (1.10.0)
228
+    ffi-compiler (1.0.1)
229
+      ffi (>= 1.0.0)
230
+      rake
250 231
     fog-core (2.1.0)
251 232
       builder
252 233
       excon (~> 0.58)
@@ -263,20 +244,18 @@ GEM
263 244
     fugit (1.1.6)
264 245
       et-orbi (~> 1.1, >= 1.1.6)
265 246
       raabro (~> 1.1)
266
-    fuubar (2.4.1)
247
+    fuubar (2.5.0)
267 248
       rspec-core (~> 3.0)
268 249
       ruby-progressbar (~> 1.4)
269
-    get_process_mem (0.2.4)
270
-      ffi (~> 1.0)
271 250
     globalid (0.4.2)
272 251
       activesupport (>= 4.2.0)
273
-    goldfinger (2.1.0)
252
+    goldfinger (2.1.1)
274 253
       addressable (~> 2.5)
275
-      http (~> 3.0)
254
+      http (~> 4.0)
276 255
       nokogiri (~> 1.8)
277 256
       oj (~> 3.0)
278
-    hamlit (2.9.3)
279
-      temple (>= 0.8.0)
257
+    hamlit (2.11.0)
258
+      temple (>= 0.8.2)
280 259
       thor
281 260
       tilt
282 261
     hamlit-rails (0.2.3)
@@ -288,26 +267,27 @@ GEM
288 267
       concurrent-ruby (~> 1.0)
289 268
     hashdiff (1.0.0)
290 269
     hashie (3.6.0)
291
-    heapy (0.1.4)
292
-    highline (2.0.1)
270
+    highline (2.0.3)
293 271
     hiredis (0.6.3)
294 272
     hkdf (0.3.0)
295 273
     htmlentities (4.3.4)
296
-    http (3.3.0)
274
+    http (4.3.0)
297 275
       addressable (~> 2.3)
298 276
       http-cookie (~> 1.0)
299
-      http-form_data (~> 2.0)
300
-      http_parser.rb (~> 0.6.0)
277
+      http-form_data (~> 2.2)
278
+      http-parser (~> 1.2.0)
301 279
     http-cookie (1.0.3)
302 280
       domain_name (~> 0.5)
303
-    http-form_data (2.1.1)
281
+    http-form_data (2.2.0)
282
+    http-parser (1.2.1)
283
+      ffi-compiler (>= 1.0, < 2.0)
304 284
     http_accept_language (2.1.1)
305
-    httplog (1.3.2)
285
+    httplog (1.4.2)
306 286
       rack (>= 1.0)
307 287
       rainbow (>= 2.0.0)
308
-    i18n (1.6.0)
288
+    i18n (1.8.2)
309 289
       concurrent-ruby (~> 1.0)
310
-    i18n-tasks (0.9.29)
290
+    i18n-tasks (0.9.30)
311 291
       activesupport (>= 4.0.2)
312 292
       ast (>= 2.1.0)
313 293
       erubi
@@ -320,11 +300,18 @@ GEM
320 300
     idn-ruby (0.1.0)
321 301
     ipaddress (0.8.3)
322 302
     iso-639 (0.2.8)
323
-    jaro_winkler (1.5.3)
303
+    jaro_winkler (1.5.4)
324 304
     jmespath (1.4.0)
325
-    json (2.2.0)
326
-    json-canonicalization (0.1.0)
327
-    json-ld-preloaded (3.0.4)
305
+    json (2.3.0)
306
+    json-canonicalization (0.2.0)
307
+    json-ld (3.1.0)
308
+      htmlentities (~> 4.3)
309
+      json-canonicalization (~> 0.1)
310
+      link_header (~> 0.0, >= 0.0.8)
311
+      multi_json (~> 1.14)
312
+      rack (~> 2.0)
313
+      rdf (~> 3.1)
314
+    json-ld-preloaded (3.0.6)
328 315
       json-ld (~> 3.0)
329 316
       multi_json (~> 1.12)
330 317
       rdf (~> 3.0)
@@ -356,7 +343,7 @@ GEM
356 343
       activesupport (>= 4)
357 344
       railties (>= 4)
358 345
       request_store (~> 1.0)
359
-    loofah (2.2.3)
346
+    loofah (2.4.0)
360 347
       crass (~> 1.0.2)
361 348
       nokogiri (>= 1.5.9)
362 349
     mail (2.7.1)
@@ -369,26 +356,26 @@ GEM
369 356
       redis (>= 3.0.5)
370 357
     memory_profiler (0.9.14)
371 358
     method_source (0.9.2)
372
-    microformats (4.1.0)
373
-      json (~> 2.1)
374
-      nokogiri (~> 1.8, >= 1.8.3)
375
-    mime-types (3.3)
359
+    microformats (4.2.0)
360
+      json (~> 2.2)
361
+      nokogiri (~> 1.10)
362
+    mime-types (3.3.1)
376 363
       mime-types-data (~> 3.2015)
377
-    mime-types-data (3.2019.0904)
364
+    mime-types-data (3.2019.1009)
378 365
     mimemagic (0.3.3)
379 366
     mini_mime (1.0.2)
380 367
     mini_portile2 (2.4.0)
381
-    minitest (5.12.0)
368
+    minitest (5.14.0)
382 369
     msgpack (1.3.1)
383
-    multi_json (1.13.1)
370
+    multi_json (1.14.1)
384 371
     multipart-post (2.1.1)
385
-    necromancer (0.5.0)
386
-    net-ldap (0.16.1)
372
+    necromancer (0.5.1)
373
+    net-ldap (0.16.2)
387 374
     net-scp (2.0.0)
388 375
       net-ssh (>= 2.6.5, < 6.0.0)
389 376
     net-ssh (5.2.0)
390
-    nio4r (2.5.1)
391
-    nokogiri (1.10.4)
377
+    nio4r (2.5.2)
378
+    nokogiri (1.10.7)
392 379
       mini_portile2 (~> 2.4.0)
393 380
     nokogumbo (2.0.1)
394 381
       nokogiri (~> 1.8, >= 1.8.4)
@@ -397,7 +384,7 @@ GEM
397 384
       concurrent-ruby (~> 1.0, >= 1.0.2)
398 385
       sidekiq (>= 3.5)
399 386
       statsd-ruby (~> 1.4, >= 1.4.0)
400
-    oj (3.9.1)
387
+    oj (3.10.1)
401 388
     omniauth (1.9.0)
402 389
       hashie (>= 3.4.6, < 3.7.0)
403 390
       rack (>= 1.6.2, < 3)
@@ -409,11 +396,7 @@ GEM
409 396
       omniauth (~> 1.3, >= 1.3.2)
410 397
       ruby-saml (~> 1.7)
411 398
     orm_adapter (0.5.0)
412
-    ostatus2 (2.0.3)
413
-      addressable (~> 2.5)
414
-      http (~> 3.0)
415
-      nokogiri (~> 1.8)
416
-    ox (2.11.0)
399
+    ox (2.12.1)
417 400
     paperclip (6.0.0)
418 401
       activemodel (>= 4.2.0)
419 402
       activesupport (>= 4.2.0)
@@ -423,19 +406,19 @@ GEM
423 406
     paperclip-av-transcoder (0.6.4)
424 407
       av (~> 0.9.0)
425 408
       paperclip (>= 2.5.2)
426
-    parallel (1.17.0)
427
-    parallel_tests (2.29.2)
409
+    parallel (1.19.1)
410
+    parallel_tests (2.30.1)
428 411
       parallel
429
-    parser (2.6.4.0)
412
+    parser (2.7.0.2)
430 413
       ast (~> 2.4.0)
431 414
     parslet (1.8.2)
432 415
     pastel (0.7.3)
433 416
       equatable (~> 0.6)
434 417
       tty-color (~> 0.5)
435
-    pg (1.1.4)
436
-    pghero (2.3.0)
418
+    pg (1.2.2)
419
+    pghero (2.4.1)
437 420
       activerecord (>= 5)
438
-    pkg-config (1.3.9)
421
+    pkg-config (1.4.0)
439 422
     premailer (1.11.1)
440 423
       addressable
441 424
       css_parser (>= 1.6.0)
@@ -452,34 +435,35 @@ GEM
452 435
       pry (~> 0.10)
453 436
     pry-rails (0.3.9)
454 437
       pry (>= 0.10.4)
455
-    public_suffix (4.0.1)
456
-    puma (4.2.0)
438
+    public_suffix (4.0.3)
439
+    puma (4.3.1)
457 440
       nio4r (~> 2.0)
458 441
     pundit (2.1.0)
459 442
       activesupport (>= 3.0.0)
460 443
     raabro (1.1.6)
461
-    rack (2.0.7)
462
-    rack-attack (6.1.0)
444
+    rack (2.1.2)
445
+    rack-attack (6.2.2)
463 446
       rack (>= 1.0, < 3)
464
-    rack-cors (1.0.3)
465
-    rack-protection (2.0.5)
447
+    rack-cors (1.1.1)
448
+      rack (>= 2.0.0)
449
+    rack-protection (2.0.7)
466 450
       rack
467 451
     rack-proxy (0.6.5)
468 452
       rack
469 453
     rack-test (1.1.0)
470 454
       rack (>= 1.0, < 3)
471
-    rails (5.2.3)
472
-      actioncable (= 5.2.3)
473
-      actionmailer (= 5.2.3)
474
-      actionpack (= 5.2.3)
475
-      actionview (= 5.2.3)
476
-      activejob (= 5.2.3)
477
-      activemodel (= 5.2.3)
478
-      activerecord (= 5.2.3)
479
-      activestorage (= 5.2.3)
480
-      activesupport (= 5.2.3)
455
+    rails (5.2.4.1)
456
+      actioncable (= 5.2.4.1)
457
+      actionmailer (= 5.2.4.1)
458
+      actionpack (= 5.2.4.1)
459
+      actionview (= 5.2.4.1)
460
+      activejob (= 5.2.4.1)
461
+      activemodel (= 5.2.4.1)
462
+      activerecord (= 5.2.4.1)
463
+      activestorage (= 5.2.4.1)
464
+      activesupport (= 5.2.4.1)
481 465
       bundler (>= 1.3.0)
482
-      railties (= 5.2.3)
466
+      railties (= 5.2.4.1)
483 467
       sprockets-rails (>= 2.0.0)
484 468
     rails-controller-testing (1.0.4)
485 469
       actionpack (>= 5.0.1.x)
@@ -488,26 +472,26 @@ GEM
488 472
     rails-dom-testing (2.0.3)
489 473
       activesupport (>= 4.2.0)
490 474
       nokogiri (>= 1.6)
491
-    rails-html-sanitizer (1.2.0)
492
-      loofah (~> 2.2, >= 2.2.2)
475
+    rails-html-sanitizer (1.3.0)
476
+      loofah (~> 2.3)
493 477
     rails-i18n (5.1.3)
494 478
       i18n (>= 0.7, < 2)
495 479
       railties (>= 5.0, < 6)
496 480
     rails-settings-cached (0.6.6)
497 481
       rails (>= 4.2.0)
498
-    railties (5.2.3)
499
-      actionpack (= 5.2.3)
500
-      activesupport (= 5.2.3)
482
+    railties (5.2.4.1)
483
+      actionpack (= 5.2.4.1)
484
+      activesupport (= 5.2.4.1)
501 485
       method_source
502 486
       rake (>= 0.8.7)
503 487
       thor (>= 0.19.0, < 2.0)
504 488
     rainbow (3.0.0)
505
-    rake (12.3.3)
506
-    rdf (3.0.12)
489
+    rake (13.0.1)
490
+    rdf (3.1.1)
507 491
       hamster (~> 3.0)
508 492
       link_header (~> 0.0, >= 0.0.8)
509
-    rdf-normalize (0.3.3)
510
-      rdf (>= 2.2, < 4.0)
493
+    rdf-normalize (0.4.0)
494
+      rdf (~> 3.1)
511 495
     redis (4.1.3)
512 496
     redis-actionpack (5.0.2)
513 497
       actionpack (>= 4.0, < 6)
@@ -516,7 +500,7 @@ GEM
516 500
     redis-activesupport (5.0.4)
517 501
       activesupport (>= 3, < 6)
518 502
       redis-store (>= 1.3, < 2)
519
-    redis-namespace (1.6.0)
503
+    redis-namespace (1.7.0)
520 504
       redis (>= 3.0.4)
521 505
     redis-rack (2.0.4)
522 506
       rack (>= 1.5, < 3)
@@ -528,49 +512,50 @@ GEM
528 512
     redis-store (1.5.0)
529 513
       redis (>= 2.2, < 5)
530 514
     regexp_parser (1.6.0)
531
-    request_store (1.4.1)
515
+    request_store (1.5.0)
532 516
       rack (>= 1.4)
533 517
     responders (3.0.0)
534 518
       actionpack (>= 5.0)
535 519
       railties (>= 5.0)
536 520
     rotp (2.1.2)
537 521
     rpam2 (4.0.2)
538
-    rqrcode (0.10.1)
522
+    rqrcode (1.1.2)
539 523
       chunky_png (~> 1.0)
540
-    rspec-core (3.8.0)
541
-      rspec-support (~> 3.8.0)
542
-    rspec-expectations (3.8.2)
524
+      rqrcode_core (~> 0.1)
525
+    rqrcode_core (0.1.1)
526
+    rspec-core (3.9.0)
527
+      rspec-support (~> 3.9.0)
528
+    rspec-expectations (3.9.0)
543 529
       diff-lcs (>= 1.2.0, < 2.0)
544
-      rspec-support (~> 3.8.0)
545
-    rspec-mocks (3.8.0)
530
+      rspec-support (~> 3.9.0)
531
+    rspec-mocks (3.9.0)
546 532
       diff-lcs (>= 1.2.0, < 2.0)
547
-      rspec-support (~> 3.8.0)
548
-    rspec-rails (3.8.2)
533
+      rspec-support (~> 3.9.0)
534
+    rspec-rails (3.9.0)
549 535
       actionpack (>= 3.0)
550 536
       activesupport (>= 3.0)
551 537
       railties (>= 3.0)
552
-      rspec-core (~> 3.8.0)
553
-      rspec-expectations (~> 3.8.0)
554
-      rspec-mocks (~> 3.8.0)
555
-      rspec-support (~> 3.8.0)
538
+      rspec-core (~> 3.9.0)
539
+      rspec-expectations (~> 3.9.0)
540
+      rspec-mocks (~> 3.9.0)
541
+      rspec-support (~> 3.9.0)
556 542
     rspec-sidekiq (3.0.3)
557 543
       rspec-core (~> 3.0, >= 3.0.0)
558 544
       sidekiq (>= 2.4.0)
559
-    rspec-support (3.8.0)
560
-    rubocop (0.74.0)
545
+    rspec-support (3.9.0)
546
+    rubocop (0.79.0)
561 547
       jaro_winkler (~> 1.5.1)
562 548
       parallel (~> 1.10)
563
-      parser (>= 2.6)
549
+      parser (>= 2.7.0.1)
564 550
       rainbow (>= 2.2.2, < 4.0)
565 551
       ruby-progressbar (~> 1.7)
566 552
       unicode-display_width (>= 1.4.0, < 1.7)
567
-    rubocop-rails (2.3.2)
553
+    rubocop-rails (2.4.1)
568 554
       rack (>= 1.1)
569 555
       rubocop (>= 0.72.0)
570 556
     ruby-progressbar (1.10.1)
571 557
     ruby-saml (1.9.0)
572 558
       nokogiri (>= 1.5.10)
573
-    ruby-statistics (2.1.1)
574 559
     rufus-scheduler (3.5.2)
575 560
       fugit (~> 1.1, >= 1.1.5)
576 561
     safe_yaml (1.0.5)
@@ -590,13 +575,13 @@ GEM
590 575
       rufus-scheduler (~> 3.2)
591 576
       sidekiq (>= 3)
592 577
       tilt (>= 1.4.0)
593
-    sidekiq-unique-jobs (6.0.13)
578
+    sidekiq-unique-jobs (6.0.18)
594 579
       concurrent-ruby (~> 1.0, >= 1.0.5)
595 580
       sidekiq (>= 4.0, < 7.0)
596 581
       thor (~> 0)
597 582
     simple-navigation (4.1.0)
598 583
       activesupport (>= 2.3.2)
599
-    simple_form (4.1.0)
584
+    simple_form (5.0.1)
600 585
       actionpack (>= 5.0)
601 586
       activemodel (>= 5.0)
602 587
     simplecov (0.17.1)
@@ -614,62 +599,63 @@ GEM
614 599
     sshkit (1.20.0)
615 600
       net-scp (>= 1.1.2)
616 601
       net-ssh (>= 2.8.0)
617
-    stackprof (0.2.12)
602
+    stackprof (0.2.15)
618 603
     statsd-ruby (1.4.0)
619
-    stoplight (2.1.3)
604
+    stoplight (2.2.0)
620 605
     streamio-ffmpeg (3.0.2)
621 606
       multi_json (~> 1.8)
622
-    strong_migrations (0.4.1)
607
+    strong_migrations (0.5.1)
623 608
       activerecord (>= 5)
624
-    temple (0.8.1)
609
+    temple (0.8.2)
625 610
     terminal-table (1.8.0)
626 611
       unicode-display_width (~> 1.1, >= 1.1.1)
627 612
     terrapin (0.6.0)
628 613
       climate_control (>= 0.0.3, < 1.0)
629 614
     thor (0.20.3)
630 615
     thread_safe (0.3.6)
631
-    tilt (2.0.9)
616
+    thwait (0.1.0)
617
+    tilt (2.0.10)
632 618
     tty-color (0.5.0)
633 619
     tty-command (0.9.0)
634 620
       pastel (~> 0.7.0)
635 621
     tty-cursor (0.7.0)
636
-    tty-prompt (0.19.0)
622
+    tty-prompt (0.20.0)
637 623
       necromancer (~> 0.5.0)
638 624
       pastel (~> 0.7.0)
639
-      tty-reader (~> 0.6.0)
640
-    tty-reader (0.6.0)
625
+      tty-reader (~> 0.7.0)
626
+    tty-reader (0.7.0)
641 627
       tty-cursor (~> 0.7)
642 628
       tty-screen (~> 0.7)
643 629
       wisper (~> 2.0.0)
644 630
     tty-screen (0.7.0)
645 631
     twitter-text (1.14.7)
646 632
       unf (~> 0.1.0)
647
-    tzinfo (1.2.5)
633
+    tzinfo (1.2.6)
648 634
       thread_safe (~> 0.1)
649 635
     tzinfo-data (1.2019.3)
650 636
       tzinfo (>= 1.0.0)
651 637
     unf (0.1.4)
652 638
       unf_ext
653
-    unf_ext (0.0.7.5)
654
-    unicode-display_width (1.6.0)
655
-    uniform_notifier (1.12.1)
639
+    unf_ext (0.0.7.6)
640
+    unicode-display_width (1.6.1)
641
+    uniform_notifier (1.13.0)
656 642
     warden (1.2.8)
657 643
       rack (>= 2.0.6)
658
-    webmock (3.7.6)
644
+    webmock (3.8.0)
659 645
       addressable (>= 2.3.6)
660 646
       crack (>= 0.3.2)
661 647
       hashdiff (>= 0.4.0, < 2.0.0)
662
-    webpacker (4.0.7)
648
+    webpacker (4.2.2)
663 649
       activesupport (>= 4.2)
664 650
       rack-proxy (>= 0.6.1)
665 651
       railties (>= 4.2)
666 652
     webpush (0.3.8)
667 653
       hkdf (~> 0.2)
668 654
       jwt (~> 2.0)
669
-    websocket-driver (0.7.0)
655
+    websocket-driver (0.7.1)
670 656
       websocket-extensions (>= 0.1.0)
671
-    websocket-extensions (0.1.3)
672
-    wisper (2.0.0)
657
+    websocket-extensions (0.1.4)
658
+    wisper (2.0.1)
673 659
     xpath (3.2.0)
674 660
       nokogiri (~> 1.8)
675 661
 
@@ -678,56 +664,56 @@ PLATFORMS
678 664
 
679 665
 DEPENDENCIES
680 666
   active_model_serializers (~> 0.10)
681
-  active_record_query_trace (~> 1.6)
667
+  active_record_query_trace (~> 1.7)
682 668
   addressable (~> 2.7)
683
-  annotate (~> 2.7)
684
-  aws-sdk-s3 (~> 1.48)
669
+  annotate (~> 3.0)
670
+  aws-sdk-s3 (~> 1.60)
685 671
   better_errors (~> 2.5)
686 672
   binding_of_caller (~> 0.7)
687 673
   blurhash (~> 0.1)
688 674
   bootsnap (~> 1.4)
689
-  brakeman (~> 4.6)
675
+  brakeman (~> 4.7)
690 676
   browser
691
-  bullet (~> 6.0)
677
+  bullet (~> 6.1)
692 678
   bundler-audit (~> 0.6)
693 679
   capistrano (~> 3.11)
694 680
   capistrano-rails (~> 1.4)
695 681
   capistrano-rbenv (~> 2.1)
696 682
   capistrano-yarn (~> 2.0)
697
-  capybara (~> 3.29)
698
-  charlock_holmes (~> 0.7.6)
683
+  capybara (~> 3.30)
684
+  charlock_holmes (~> 0.7.7)
699 685
   chewy (~> 5.1)
700
-  cld3 (~> 3.2.4)
686
+  cld3 (~> 3.2.6)
701 687
   climate_control (~> 0.2)
702 688
   concurrent-ruby
703 689
   connection_pool
704
-  derailed_benchmarks
705 690
   devise (~> 4.7)
706 691
   devise-two-factor (~> 3.1)
707 692
   devise_pam_authenticatable2 (~> 9.2)
708 693
   discard (~> 1.1)
709 694
   doorkeeper (~> 5.2)
710 695
   dotenv-rails (~> 2.7)
711
-  fabrication (~> 2.20)
712
-  faker (~> 2.5)
696
+  e2mmap (~> 0.1.0)
697
+  fabrication (~> 2.21)
698
+  faker (~> 2.10)
713 699
   fast_blank (~> 1.0)
714 700
   fastimage
715 701
   fog-core (<= 2.1.0)
716 702
   fog-openstack (~> 0.3)
717
-  fuubar (~> 2.4)
703
+  fuubar (~> 2.5)
718 704
   goldfinger (~> 2.1)
719 705
   hamlit-rails (~> 0.2)
720 706
   health_check!
721 707
   hiredis (~> 0.6)
722 708
   htmlentities (~> 4.3)
723
-  http (~> 3.3)
709
+  http (~> 4.3)
724 710
   http_accept_language (~> 2.1)
725 711
   http_parser.rb (~> 0.6)!
726
-  httplog (~> 1.3)
712
+  httplog (~> 1.4.2)
727 713
   i18n-tasks (~> 0.9)
728 714
   idn-ruby
729 715
   iso-639
730
-  json-ld!
716
+  json-ld
731 717
   json-ld-preloaded (~> 3.0)
732 718
   kaminari (~> 1.1)
733 719
   letter_opener (~> 1.7)
@@ -737,48 +723,48 @@ DEPENDENCIES
737 723
   makara (~> 0.4)
738 724
   mario-redis-lock (~> 1.2)
739 725
   memory_profiler
740
-  microformats (~> 4.1)
741
-  mime-types (~> 3.3)
742
-  net-ldap (~> 0.10)
726
+  microformats (~> 4.2)
727
+  mime-types (~> 3.3.1)
728
+  net-ldap (~> 0.16)
743 729
   nilsimsa!
744 730
   nokogiri (~> 1.10)
745 731
   nsa (~> 0.2)
746
-  oj (~> 3.9)
732
+  oj (~> 3.10)
747 733
   omniauth (~> 1.9)
748 734
   omniauth-cas (~> 1.1)
749 735
   omniauth-saml (~> 1.10)
750
-  ostatus2 (~> 2.0)
751
-  ox (~> 2.11)
736
+  ox (~> 2.12)
752 737
   paperclip (~> 6.0)
753 738
   paperclip-av-transcoder (~> 0.6)
754
-  parallel (~> 1.17)
755
-  parallel_tests (~> 2.29)
739
+  parallel (~> 1.19)
740
+  parallel_tests (~> 2.30)
756 741
   parslet
757
-  pg (~> 1.1)
758
-  pghero (~> 2.3)
759
-  pkg-config (~> 1.3)
742
+  pg (~> 1.2)
743
+  pghero (~> 2.4)
744
+  pkg-config (~> 1.4)
760 745
   posix-spawn!
761 746
   premailer-rails
762 747
   private_address_check (~> 0.5)
763 748
   pry-byebug (~> 3.7)
764 749
   pry-rails (~> 0.3)
765
-  puma (~> 4.2)
750
+  puma (~> 4.3)
766 751
   pundit (~> 2.1)
767
-  rack-attack (~> 6.1)
768
-  rack-cors (~> 1.0)
769
-  rails (~> 5.2.3)
752
+  rack (~> 2.1.2)
753
+  rack-attack (~> 6.2)
754
+  rack-cors (~> 1.1)
755
+  rails (~> 5.2.4)
770 756
   rails-controller-testing (~> 1.0)
771 757
   rails-i18n (~> 5.1)
772 758
   rails-settings-cached (~> 0.6)
773
-  rdf-normalize (~> 0.3)
759
+  rdf-normalize (~> 0.4)
774 760
   redis (~> 4.1)
775
-  redis-namespace (~> 1.5)
761
+  redis-namespace (~> 1.7)
776 762
   redis-rails (~> 5.0)
777
-  rqrcode (~> 0.10)
778
-  rspec-rails (~> 3.8)
763
+  rqrcode (~> 1.1)
764
+  rspec-rails (~> 3.9)
779 765
   rspec-sidekiq (~> 3.0)
780
-  rubocop (~> 0.74)
781
-  rubocop-rails (~> 2.3)
766
+  rubocop (~> 0.79)
767
+  rubocop-rails (~> 2.4)
782 768
   ruby-progressbar (~> 1.10)
783 769
   sanitize (~> 5.1)
784 770
   sidekiq (~> 5.2)
@@ -786,24 +772,20 @@ DEPENDENCIES
786 772
   sidekiq-scheduler (~> 3.0)
787 773
   sidekiq-unique-jobs (~> 6.0)
788 774
   simple-navigation (~> 4.1)
789
-  simple_form (~> 4.1)
775
+  simple_form (~> 5.0)
790 776
   simplecov (~> 0.17)
777
+  sprockets (~> 3.7.2)
791 778
   sprockets-rails (~> 3.2)
792 779
   stackprof
793
-  stoplight (~> 2.1.3)
780
+  stoplight (~> 2.2.0)
794 781
   streamio-ffmpeg (~> 3.0)
795
-  strong_migrations (~> 0.4)
782
+  strong_migrations (~> 0.5)
796 783
   thor (~> 0.20)
784
+  thwait (~> 0.1.0)
797 785
   tty-command (~> 0.9)
798
-  tty-prompt (~> 0.19)
786
+  tty-prompt (~> 0.20)
799 787
   twitter-text (~> 1.14)
800 788
   tzinfo-data (~> 1.2019)
801
-  webmock (~> 3.7)
802
-  webpacker (~> 4.0)
789
+  webmock (~> 3.8)
790
+  webpacker (~> 4.2)
803 791
   webpush
804
-
805
-RUBY VERSION
806
-   ruby 2.6.5p114
807
-
808
-BUNDLED WITH
809
-   1.17.3

+ 5
- 5
README.md View File

@@ -13,7 +13,7 @@
13 13
 [crowdin]: https://crowdin.com/project/mastodon
14 14
 [docker]: https://hub.docker.com/r/tootsuite/mastodon/
15 15
 
16
-Mastodon is a **free, open-source social network server** based on ActivityPub. Follow friends and discover new ones. Publish anything you want: links, pictures, text, video. All servers of Mastodon are interoperable as a federated network, i.e. users on one server can seamlessly communicate with users from another one. This includes non-Mastodon software that also implements ActivityPub!
16
+Mastodon is a **free, open-source social network server** based on ActivityPub where users can follow friends and discover new ones. On Mastodon, users can publish anything they want: links, pictures, text, video. All Mastodon servers are interoperable as a federated network (users on one server can seamlessly communicate with users from another one, including non-Mastodon software that implements ActivityPub)!
17 17
 
18 18
 Click below to **learn more** in a video:
19 19
 
@@ -70,15 +70,15 @@ Mastodon acts as an OAuth2 provider so 3rd party apps can use the REST and Strea
70 70
 - **PostgreSQL** 9.5+
71 71
 - **Redis**
72 72
 - **Ruby** 2.4+
73
-- **Node.js** 8+
73
+- **Node.js** 10.13+
74 74
 
75
-The repository includes deployment configurations for **Docker and docker-compose**, but also a few specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. The [**stand-alone** installation guide](https://docs.joinmastodon.org/administration/installation/) is available in the documentation.
75
+The repository includes deployment configurations for **Docker and docker-compose**, but also a few specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. The [**stand-alone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
76 76
 
77 77
 A **Vagrant** configuration is included for development purposes.
78 78
 
79 79
 ## Contributing
80 80
 
81
-Mastodon is **free, open source software** licensed under **AGPLv3**.
81
+Mastodon is **free, open-source software** licensed under **AGPLv3**.
82 82
 
83 83
 You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository, or submit translations using Weblate. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md). If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
84 84
 
@@ -86,7 +86,7 @@ You can open issues for bugs you've found or features you think are missing. You
86 86
 
87 87
 ## License
88 88
 
89
-Copyright (C) 2016-2019 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md))
89
+Copyright (C) 2016-2020 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md))
90 90
 
91 91
 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
92 92
 

+ 1
- 1
Vagrantfile View File

@@ -12,7 +12,7 @@ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
12 12
 sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
13 13
 
14 14
 # Add repo for NodeJS
15
-curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
15
+curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
16 16
 
17 17
 # Add firewall rule to redirect 80 to PORT and save
18 18
 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}

+ 1
- 0
app/controllers/activitypub/inboxes_controller.rb View File

@@ -7,6 +7,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
7 7
 
8 8
   before_action :skip_unknown_actor_delete
9 9
   before_action :require_signature!
10
+  skip_before_action :authenticate_user!
10 11
 
11 12
   def create
12 13
     upgrade_account

+ 1
- 15
app/controllers/admin/accounts_controller.rb View File

@@ -109,21 +109,7 @@ module Admin
109 109
     end
110 110
 
111 111
     def filter_params
112
-      params.permit(
113
-        :local,
114
-        :remote,
115
-        :by_domain,
116
-        :active,
117
-        :pending,
118
-        :disabled,
119
-        :silenced,
120
-        :suspended,
121
-        :username,
122
-        :display_name,
123
-        :email,
124
-        :ip,
125
-        :staff
126
-      )
112
+      params.slice(*AccountFilter::KEYS).permit(*AccountFilter::KEYS)
127 113
     end
128 114
   end
129 115
 end

+ 88
- 0
app/controllers/admin/announcements_controller.rb View File

@@ -0,0 +1,88 @@
1
+# frozen_string_literal: true
2
+
3
+class Admin::AnnouncementsController < Admin::BaseController
4
+  before_action :set_announcements, only: :index
5
+  before_action :set_announcement, except: [:index, :new, :create]
6
+
7
+  def index
8
+    authorize :announcement, :index?
9
+  end
10
+
11
+  def new
12
+    authorize :announcement, :create?
13
+
14
+    @announcement = Announcement.new
15
+  end
16
+
17
+  def create
18
+    authorize :announcement, :create?
19
+
20
+    @announcement = Announcement.new(resource_params)
21
+
22
+    if @announcement.save
23
+      PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published?
24
+      log_action :create, @announcement
25
+      redirect_to admin_announcements_path, notice: @announcement.published? ? I18n.t('admin.announcements.published_msg') : I18n.t('admin.announcements.scheduled_msg')
26
+    else
27
+      render :new
28
+    end
29
+  end
30
+
31
+  def edit
32
+    authorize :announcement, :update?
33
+  end
34
+
35
+  def update
36
+    authorize :announcement, :update?
37
+
38
+    if @announcement.update(resource_params)
39
+      PublishScheduledAnnouncementWorker.perform_async(@announcement.id) if @announcement.published?
40
+      log_action :update, @announcement
41
+      redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.updated_msg')
42
+    else
43
+      render :edit
44
+    end
45
+  end
46
+
47
+  def publish
48
+    authorize :announcement, :update?
49
+    @announcement.publish!
50
+    PublishScheduledAnnouncementWorker.perform_async(@announcement.id)
51
+    log_action :update, @announcement
52
+    redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.published_msg')
53
+  end
54
+
55
+  def unpublish
56
+    authorize :announcement, :update?
57
+    @announcement.unpublish!
58
+    UnpublishAnnouncementWorker.perform_async(@announcement.id)
59
+    log_action :update, @announcement
60
+    redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.unpublished_msg')
61
+  end
62
+
63
+  def destroy
64
+    authorize :announcement, :destroy?
65
+    @announcement.destroy!
66
+    UnpublishAnnouncementWorker.perform_async(@announcement.id) if @announcement.published?
67
+    log_action :destroy, @announcement
68
+    redirect_to admin_announcements_path, notice: I18n.t('admin.announcements.destroyed_msg')
69
+  end
70
+
71
+  private
72
+
73
+  def set_announcements
74
+    @announcements = AnnouncementFilter.new(filter_params).results.page(params[:page])
75
+  end
76
+
77
+  def set_announcement
78
+    @announcement = Announcement.find(params[:id])
79
+  end
80
+
81
+  def filter_params
82
+    params.slice(*AnnouncementFilter::KEYS).permit(*AnnouncementFilter::KEYS)
83
+  end
84
+
85
+  def resource_params
86
+    params.require(:announcement).permit(:text, :scheduled_at, :starts_at, :ends_at, :all_day)
87
+  end
88
+end

+ 1
- 5
app/controllers/admin/custom_emojis_controller.rb View File

@@ -2,10 +2,6 @@
2 2
 
3 3
 module Admin
4 4
   class CustomEmojisController < BaseController
5
-    include ObfuscateFilename
6
-
7
-    obfuscate_filename [:custom_emoji, :image]
8
-
9 5
     def index
10 6
       authorize :custom_emoji, :index?
11 7
 
@@ -52,7 +48,7 @@ module Admin
52 48
     end
53 49
 
54 50
     def filter_params
55
-      params.slice(:local, :remote, :by_domain, :shortcode, :page).permit(:local, :remote, :by_domain, :shortcode, :page)
51
+      params.slice(:page, *CustomEmojiFilter::KEYS).permit(:page, *CustomEmojiFilter::KEYS)
56 52
     end
57 53
 
58 54
     def action_from_button

+ 0
- 18
app/controllers/admin/followers_controller.rb View File

@@ -1,18 +0,0 @@
1
-# frozen_string_literal: true
2
-
3
-module Admin
4
-  class FollowersController < BaseController
5
-    before_action :set_account
6
-
7
-    PER_PAGE = 40
8
-
9
-    def index
10
-      authorize :account, :index?
11
-      @followers = @account.followers.local.recent.page(params[:page]).per(PER_PAGE)
12
-    end
13
-
14
-    def set_account
15
-      @account = Account.find(params[:account_id])
16
-    end
17
-  end
18
-end

+ 1
- 1
app/controllers/admin/instances_controller.rb View File

@@ -62,7 +62,7 @@ module Admin
62 62
     end
63 63
 
64 64
     def filter_params
65
-      params.permit(:limited, :by_domain)
65
+      params.slice(*InstanceFilter::KEYS).permit(*InstanceFilter::KEYS)
66 66
     end
67 67
   end
68 68
 end

+ 1
- 1
app/controllers/admin/invites_controller.rb View File

@@ -47,7 +47,7 @@ module Admin
47 47
     end
48 48
 
49 49
     def filter_params
50
-      params.permit(:available, :expired)
50
+      params.slice(*InviteFilter::KEYS).permit(*InviteFilter::KEYS)
51 51
     end
52 52
   end
53 53
 end

+ 25
- 0
app/controllers/admin/relationships_controller.rb View File

@@ -0,0 +1,25 @@
1
+# frozen_string_literal: true
2
+
3
+module Admin
4
+  class RelationshipsController < BaseController
5
+    before_action :set_account
6
+
7
+    PER_PAGE = 40
8
+
9
+    def index
10
+      authorize :account, :index?
11
+
12
+      @accounts = RelationshipFilter.new(@account, filter_params).results.page(params[:page]).per(PER_PAGE)
13
+    end
14
+
15
+    private
16
+
17
+    def set_account
18
+      @account = Account.find(params[:account_id])
19
+    end
20
+
21
+    def filter_params
22
+      params.slice(*RelationshipFilter::KEYS).permit(*RelationshipFilter::KEYS)
23
+    end
24
+  end
25
+end

+ 1
- 5
app/controllers/admin/reports_controller.rb View File

@@ -52,11 +52,7 @@ module Admin
52 52
     end
53 53
 
54 54
     def filter_params
55
-      params.permit(
56
-        :account_id,
57
-        :resolved,
58
-        :target_account_id
59
-      )
55
+      params.slice(*ReportFilter::KEYS).permit(*ReportFilter::KEYS)
60 56
     end
61 57
 
62 58
     def set_report

+ 1
- 1
app/controllers/admin/tags_controller.rb View File

@@ -73,7 +73,7 @@ module Admin
73 73
     end
74 74
 
75 75
     def filter_params
76
-      params.slice(:directory, :reviewed, :unreviewed, :pending_review, :page, :popular, :active, :name).permit(:directory, :reviewed, :unreviewed, :pending_review, :page, :popular, :active, :name)
76
+      params.slice(:page, *TagFilter::KEYS).permit(:page, *TagFilter::KEYS)
77 77
     end
78 78
 
79 79
     def tag_params

+ 5
- 1
app/controllers/api/base_controller.rb View File

@@ -20,6 +20,10 @@ class Api::BaseController < ApplicationController
20 20
     render json: { error: e.to_s }, status: 422
21 21
   end
22 22
 
23
+  rescue_from ActiveRecord::RecordNotUnique do
24
+    render json: { error: 'Duplicate record' }, status: 422
25
+  end
26
+
23 27
   rescue_from ActiveRecord::RecordNotFound do
24 28
     render json: { error: 'Record not found' }, status: 404
25 29
   end
@@ -81,7 +85,7 @@ class Api::BaseController < ApplicationController
81 85
   end
82 86
 
83 87
   def require_authenticated_user!
84
-    render json: { error: 'This API requires an authenticated user' }, status: 401 unless current_user
88
+    render json: { error: 'This method requires an authenticated user' }, status: 401 unless current_user
85 89
   end
86 90
 
87 91
   def require_user!

+ 12
- 2
app/controllers/api/oembed_controller.rb View File

@@ -1,15 +1,25 @@
1 1
 # frozen_string_literal: true
2 2
 
3 3
 class Api::OEmbedController < Api::BaseController
4
-  respond_to :json
4
+  skip_before_action :require_authenticated_user!
5
+
6
+  before_action :set_status
7
+  before_action :require_public_status!
5 8
 
6 9
   def show
7
-    @status = status_finder.status
8 10
     render json: @status, serializer: OEmbedSerializer, width: maxwidth_or_default, height: maxheight_or_default
9 11
   end
10 12
 
11 13
   private
12 14
 
15
+  def set_status
16
+    @status = status_finder.status
17
+  end
18
+
19
+  def require_public_status!
20
+    not_found if @status.hidden?
21
+  end
22
+
13 23
   def status_finder
14 24
     StatusFinder.new(params[:url])
15 25
   end

+ 2
- 0
app/controllers/api/proofs_controller.rb View File

@@ -3,6 +3,8 @@
3 3
 class Api::ProofsController < Api::BaseController
4 4
   include AccountOwnedConcern
5 5
 
6
+  skip_before_action :require_authenticated_user!
7
+
6 8
   before_action :set_provider
7 9
 
8 10
   def index

+ 1
- 1
app/controllers/api/v1/accounts/credentials_controller.rb View File

@@ -25,7 +25,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
25 25
   end
26 26
 
27 27
   def user_settings_params
28
-    return nil unless params.key?(:source)
28
+    return nil if params[:source].blank?
29 29
 
30 30
     source_params = params.require(:source)
31 31
 

+ 4
- 2
app/controllers/api/v1/accounts/follower_accounts_controller.rb View File

@@ -21,11 +21,13 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController
21 21
   def load_accounts
22 22
     return [] if hide_results?
23 23
 
24
-    default_accounts.merge(paginated_follows).to_a
24
+    scope = default_accounts
25
+    scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
26
+    scope.merge(paginated_follows).to_a
25 27
   end
26 28
 
27 29
   def hide_results?
28
-    (@account.user_hides_network? && current_account.id != @account.id) || (current_account && @account.blocking?(current_account))
30
+    (@account.user_hides_network? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
29 31
   end
30 32
 
31 33
   def default_accounts

+ 4
- 2
app/controllers/api/v1/accounts/following_accounts_controller.rb View File

@@ -21,11 +21,13 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController
21 21
   def load_accounts
22 22
     return [] if hide_results?
23 23
 
24
-    default_accounts.merge(paginated_follows).to_a
24
+    scope = default_accounts
25
+    scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
26
+    scope.merge(paginated_follows).to_a
25 27
   end
26 28
 
27 29
   def hide_results?
28
-    (@account.user_hides_network? && current_account.id != @account.id) || (current_account && @account.blocking?(current_account))
30
+    (@account.user_hides_network? && current_account&.id != @account.id) || (current_account && @account.blocking?(current_account))
29 31
   end
30 32
 
31 33
   def default_accounts

+ 29
- 0
app/controllers/api/v1/announcements/reactions_controller.rb View File

@@ -0,0 +1,29 @@
1
+# frozen_string_literal: true
2
+
3
+class Api::V1::Announcements::ReactionsController < Api::BaseController
4
+  before_action -> { doorkeeper_authorize! :write, :'write:favourites' }
5
+  before_action :require_user!
6
+
7
+  before_action :set_announcement
8
+  before_action :set_reaction, except: :update
9
+
10
+  def update
11
+    @announcement.announcement_reactions.create!(account: current_account, name: params[:id])
12
+    render_empty
13
+  end
14
+
15
+  def destroy
16
+    @reaction.destroy!
17
+    render_empty
18
+  end
19
+
20
+  private
21
+
22
+  def set_reaction
23
+    @reaction = @announcement.announcement_reactions.where(account: current_account).find_by!(name: params[:id])
24
+  end
25
+
26
+  def set_announcement
27
+    @announcement = Announcement.published.find(params[:announcement_id])
28
+  end
29
+end

+ 29
- 0
app/controllers/api/v1/announcements_controller.rb View File

@@ -0,0 +1,29 @@
1
+# frozen_string_literal: true
2
+
3
+class Api::V1::AnnouncementsController < Api::BaseController
4
+  before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: :dismiss
5
+  before_action :require_user!
6
+  before_action :set_announcements, only: :index
7
+  before_action :set_announcement, except: :index
8
+
9
+  def index
10
+    render json: @announcements, each_serializer: REST::AnnouncementSerializer
11
+  end
12
+
13
+  def dismiss
14
+    AnnouncementMute.create!(account: current_account, announcement: @announcement)
15
+    render_empty
16
+  end
17
+
18
+  private
19
+
20
+  def set_announcements
21
+    @announcements = begin
22
+      Announcement.published.chronological
23
+    end
24
+  end
25
+
26
+  def set_announcement
27
+    @announcement = Announcement.published.find(params[:id])
28
+  end
29
+end

+ 66
- 0
app/controllers/api/v1/bookmarks_controller.rb View File

@@ -0,0 +1,66 @@
1
+# frozen_string_literal: true
2
+
3
+class Api::V1::BookmarksController < Api::BaseController
4
+  before_action -> { doorkeeper_authorize! :read, :'read:bookmarks' }
5
+  before_action :require_user!
6
+  after_action :insert_pagination_headers
7
+
8
+  respond_to :json
9
+
10
+  def index
11
+    @statuses = load_statuses
12
+    render json: @statuses, each_serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id)
13
+  end
14
+
15
+  private
16
+
17
+  def load_statuses
18
+    cached_bookmarks
19
+  end
20
+
21
+  def cached_bookmarks
22
+    cache_collection(
23
+      Status.reorder(nil).joins(:bookmarks).merge(results),
24
+      Status
25
+    )
26
+  end
27
+
28
+  def results
29
+    @_results ||= account_bookmarks.paginate_by_id(
30
+      limit_param(DEFAULT_STATUSES_LIMIT),
31
+      params_slice(:max_id, :since_id, :min_id)
32
+    )
33
+  end
34
+
35
+  def account_bookmarks
36
+    current_account.bookmarks
37
+  end
38
+
39
+  def insert_pagination_headers
40
+    set_pagination_headers(next_path, prev_path)
41
+  end
42
+
43
+  def next_path
44
+    api_v1_bookmarks_url pagination_params(max_id: pagination_max_id) if records_continue?
45
+  end
46
+
47
+  def prev_path
48
+    api_v1_bookmarks_url pagination_params(min_id: pagination_since_id) unless results.empty?
49
+  end
50
+
51
+  def pagination_max_id
52
+    results.last.id
53
+  end
54
+
55
+  def pagination_since_id
56
+    results.first.id
57
+  end
58
+
59
+  def records_continue?
60
+    results.size == limit_param(DEFAULT_STATUSES_LIMIT)
61
+  end
62
+
63
+  def pagination_params(core_params)
64
+    params.slice(:limit).permit(:limit).merge(core_params)
65
+  end
66
+end

+ 0
- 3
app/controllers/api/v1/media_controller.rb View File

@@ -4,9 +4,6 @@ class Api::V1::MediaController < Api::BaseController
4 4
   before_action -> { doorkeeper_authorize! :write, :'write:media' }
5 5
   before_action :require_user!
6 6
 
7
-  include ObfuscateFilename
8
-  obfuscate_filename :file
9
-
10 7
   respond_to :json
11 8
 
12 9
   def create

+ 1
- 1
app/controllers/api/v1/push/subscriptions_controller.rb View File

@@ -51,6 +51,6 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
51 51
 
52 52
   def data_params
53 53
     return {} if params[:data].blank?
54
-    params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention, :poll])
54
+    params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll])
55 55
   end
56 56
 end

+ 39
- 0
app/controllers/api/v1/statuses/bookmarks_controller.rb View File

@@ -0,0 +1,39 @@
1
+# frozen_string_literal: true
2
+
3
+class Api::V1::Statuses::BookmarksController < Api::BaseController
4
+  include Authorization
5
+
6
+  before_action -> { doorkeeper_authorize! :write, :'write:bookmarks' }
7
+  before_action :require_user!
8
+
9
+  respond_to :json
10
+
11
+  def create
12
+    @status = bookmarked_status
13
+    render json: @status, serializer: REST::StatusSerializer
14
+  end
15
+
16
+  def destroy
17
+    @status = requested_status
18
+    @bookmarks_map = { @status.id => false }
19
+
20
+    bookmark = Bookmark.find_by!(account: current_user.account, status: @status)
21
+    bookmark.destroy!
22
+
23
+    render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new([@status], current_user&.account_id, bookmarks_map: @bookmarks_map)
24
+  end
25
+
26
+  private
27
+
28
+  def bookmarked_status
29
+    authorize_with current_user.account, requested_status, :show?
30
+
31
+    bookmark = Bookmark.find_or_create_by!(account: current_user.account, status: requested_status)
32
+
33
+    bookmark.status.reload
34
+  end
35
+
36
+  def requested_status
37
+    Status.find(params[:status_id])
38
+  end
39
+end

+ 3
- 1
app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb View File

@@ -17,7 +17,9 @@ class Api::V1::Statuses::FavouritedByAccountsController < Api::BaseController
17 17
   private
18 18
 
19 19
   def load_accounts
20
-    default_accounts.merge(paginated_favourites).to_a
20
+    scope = default_accounts
21
+    scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
22
+    scope.merge(paginated_favourites).to_a
21 23
   end
22 24
 
23 25
   def default_accounts

+ 3
- 1
app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb View File

@@ -17,7 +17,9 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::BaseController
17 17
   private
18 18
 
19 19
   def load_accounts
20
-    default_accounts.merge(paginated_statuses).to_a
20
+    scope = default_accounts
21
+    scope = scope.where.not(id: current_account.excluded_from_timeline_account_ids) unless current_account.nil?
22
+    scope.merge(paginated_statuses).to_a
21 23
   end
22 24
 
23 25
   def default_accounts

+ 11
- 5
app/controllers/api/web/embeds_controller.rb View File

@@ -7,15 +7,21 @@ class Api::Web::EmbedsController < Api::Web::BaseController
7 7
 
8 8
   def create
9 9
     status = StatusFinder.new(params[:url]).status
10
+
11
+    return not_found if status.hidden?
12
+
10 13
     render json: status, serializer: OEmbedSerializer, width: 400
11 14
   rescue ActiveRecord::RecordNotFound
12 15
     oembed = FetchOEmbedService.new.call(params[:url])
13
-    oembed[:html] = Formatter.instance.sanitize(oembed[:html], Sanitize::Config::MASTODON_OEMBED) if oembed[:html].present?
14 16
 
15
-    if oembed
16
-      render json: oembed
17
-    else
18
-      render json: {}, status: :not_found
17
+    return not_found if oembed.nil?
18
+
19
+    begin
20
+      oembed[:html] = Formatter.instance.sanitize(oembed[:html], Sanitize::Config::MASTODON_OEMBED)
21
+    rescue ArgumentError
22
+      return not_found
19 23
     end
24
+
25
+    render json: oembed
20 26
   end
21 27
 end

+ 2
- 1
app/controllers/api/web/push_subscriptions_controller.rb View File

@@ -19,6 +19,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
19 19
     data = {
20 20
       alerts: {
21 21
         follow: alerts_enabled,
22
+        follow_request: false,
22 23
         favourite: alerts_enabled,
23 24
         reblog: alerts_enabled,
24 25
         mention: alerts_enabled,
@@ -58,6 +59,6 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
58 59
   end
59 60
 
60 61
   def data_params
61
-    @data_params ||= params.require(:data).permit(alerts: [:follow, :favourite, :reblog, :mention, :poll])
62
+    @data_params ||= params.require(:data).permit(alerts: [:follow, :follow_request, :favourite, :reblog, :mention, :poll])
62 63
   end
63 64
 end

+ 3
- 2
app/controllers/application_controller.rb View File

@@ -24,6 +24,7 @@ class ApplicationController < ActionController::Base
24 24
   rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
25 25
   rescue_from ActionController::UnknownFormat, with: :not_acceptable
26 26
   rescue_from ActionController::ParameterMissing, with: :bad_request