Browse Source

Merge tag 'v2.7.0' of github.com:tootsuite/mastodon

Matt Baer 5 months ago
parent
commit
7cfc852a59
100 changed files with 2588 additions and 1273 deletions
  1. 0
    66
      .babelrc
  2. 1
    0
      .buildpacks
  3. 45
    46
      .circleci/config.yml
  4. 1
    1
      .codeclimate.yml
  5. 2
    2
      .env.nanobox
  6. 3
    2
      .env.production.sample
  7. 0
    4
      .env.test
  8. 1
    1
      .env.vagrant
  9. 13
    30
      .eslintignore
  10. 199
    0
      .eslintrc.js
  11. 0
    170
      .eslintrc.yml
  12. 20
    5
      .github/ISSUE_TEMPLATE/bug_report.md
  13. 10
    4
      .github/ISSUE_TEMPLATE/feature_request.md
  14. 10
    0
      .github/ISSUE_TEMPLATE/support.md
  15. 1
    1
      .nvmrc
  16. 0
    9
      .postcssrc.yml
  17. 12
    0
      .rubocop.yml
  18. 1
    1
      .ruby-version
  19. 522
    141
      AUTHORS.md
  20. 19
    0
      Aptfile
  21. 330
    0
      CHANGELOG.md
  22. 21
    40
      CONTRIBUTING.md
  23. 17
    14
      Dockerfile
  24. 54
    51
      Gemfile
  25. 272
    262
      Gemfile.lock
  26. 42
    43
      README.md
  27. 12
    6
      Vagrantfile
  28. 1
    1
      app/chewy/statuses_index.rb
  29. 7
    3
      app/controllers/about_controller.rb
  30. 5
    3
      app/controllers/accounts_controller.rb
  31. 2
    2
      app/controllers/activitypub/collections_controller.rb
  32. 1
    1
      app/controllers/activitypub/inboxes_controller.rb
  33. 36
    0
      app/controllers/admin/account_actions_controller.rb
  34. 1
    0
      app/controllers/admin/account_moderation_notes_controller.rb
  35. 30
    11
      app/controllers/admin/accounts_controller.rb
  36. 12
    1
      app/controllers/admin/base_controller.rb
  37. 0
    4
      app/controllers/admin/confirmations_controller.rb
  38. 44
    0
      app/controllers/admin/dashboard_controller.rb
  39. 4
    9
      app/controllers/admin/domain_blocks_controller.rb
  40. 18
    0
      app/controllers/admin/followers_controller.rb
  41. 14
    13
      app/controllers/admin/instances_controller.rb
  42. 6
    0
      app/controllers/admin/invites_controller.rb
  43. 58
    0
      app/controllers/admin/relays_controller.rb
  44. 23
    53
      app/controllers/admin/reports_controller.rb
  45. 0
    6
      app/controllers/admin/resets_controller.rb
  46. 0
    6
      app/controllers/admin/roles_controller.rb
  47. 7
    0
      app/controllers/admin/settings_controller.rb
  48. 0
    27
      app/controllers/admin/silences_controller.rb
  49. 13
    0
      app/controllers/admin/statuses_controller.rb
  50. 0
    27
      app/controllers/admin/suspensions_controller.rb
  51. 44
    0
      app/controllers/admin/tags_controller.rb
  52. 2
    2
      app/controllers/admin/two_factor_authentications_controller.rb
  53. 58
    0
      app/controllers/admin/warning_presets_controller.rb
  54. 10
    6
      app/controllers/api/base_controller.rb
  55. 1
    1
      app/controllers/api/v1/accounts/credentials_controller.rb
  56. 1
    1
      app/controllers/api/v1/accounts/follower_accounts_controller.rb
  57. 1
    1
      app/controllers/api/v1/accounts/following_accounts_controller.rb
  58. 32
    0
      app/controllers/api/v1/accounts/pins_controller.rb
  59. 8
    7
      app/controllers/api/v1/accounts/statuses_controller.rb
  60. 24
    4
      app/controllers/api/v1/accounts_controller.rb
  61. 1
    1
      app/controllers/api/v1/blocks_controller.rb
  62. 71
    0
      app/controllers/api/v1/conversations_controller.rb
  63. 3
    1
      app/controllers/api/v1/custom_emojis_controller.rb
  64. 72
    0
      app/controllers/api/v1/endorsements_controller.rb
  65. 3
    4
      app/controllers/api/v1/favourites_controller.rb
  66. 2
    1
      app/controllers/api/v1/follow_requests_controller.rb
  67. 3
    1
      app/controllers/api/v1/instances_controller.rb
  68. 3
    3
      app/controllers/api/v1/lists/accounts_controller.rb
  69. 1
    1
      app/controllers/api/v1/lists_controller.rb
  70. 12
    14
      app/controllers/api/v1/mutes_controller.rb
  71. 3
    4
      app/controllers/api/v1/notifications_controller.rb
  72. 1
    7
      app/controllers/api/v1/reports_controller.rb
  73. 77
    0
      app/controllers/api/v1/scheduled_statuses_controller.rb
  74. 1
    1
      app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb
  75. 2
    2
      app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb
  76. 6
    6
      app/controllers/api/v1/statuses_controller.rb
  77. 3
    2
      app/controllers/api/v1/timelines/home_controller.rb
  78. 3
    2
      app/controllers/api/v1/timelines/list_controller.rb
  79. 3
    4
      app/controllers/api/v1/timelines/public_controller.rb
  80. 4
    5
      app/controllers/api/v1/timelines/tag_controller.rb
  81. 1
    0
      app/controllers/api/web/embeds_controller.rb
  82. 14
    14
      app/controllers/application_controller.rb
  83. 14
    1
      app/controllers/auth/confirmations_controller.rb
  84. 5
    0
      app/controllers/auth/passwords_controller.rb
  85. 6
    0
      app/controllers/auth/registrations_controller.rb
  86. 12
    1
      app/controllers/auth/sessions_controller.rb
  87. 0
    66
      app/controllers/authorize_follows_controller.rb
  88. 66
    0
      app/controllers/authorize_interactions_controller.rb
  89. 5
    0
      app/controllers/concerns/account_controller_concern.rb
  90. 0
    21
      app/controllers/concerns/remote_account_controller_concern.rb
  91. 47
    18
      app/controllers/concerns/signature_verification.rb
  92. 10
    0
      app/controllers/custom_css_controller.rb
  93. 43
    0
      app/controllers/directories_controller.rb
  94. 1
    1
      app/controllers/emojis_controller.rb
  95. 6
    1
      app/controllers/filters_controller.rb
  96. 1
    1
      app/controllers/home_controller.rb
  97. 1
    1
      app/controllers/intents_controller.rb
  98. 6
    1
      app/controllers/invites_controller.rb
  99. 5
    0
      app/controllers/media_controller.rb
  100. 0
    0
      app/controllers/oauth/authorizations_controller.rb

+ 0
- 66
.babelrc View File

@@ -1,66 +0,0 @@
1
-{
2
-  "presets": [
3
-    "react",
4
-    [
5
-      "env",
6
-      {
7
-        "exclude": ["transform-async-to-generator", "transform-regenerator"],
8
-        "loose": true,
9
-        "modules": false,
10
-        "targets": {
11
-          "browsers": ["last 2 versions", "IE >= 11", "iOS >= 9"]
12
-        }
13
-      }
14
-    ]
15
-  ],
16
-  "plugins": [
17
-    "syntax-dynamic-import",
18
-    ["transform-object-rest-spread", { "useBuiltIns": true }],
19
-    "transform-decorators-legacy",
20
-    "transform-class-properties",
21
-    [
22
-      "react-intl",
23
-      {
24
-        "messagesDir": "./build/messages"
25
-      }
26
-    ],
27
-    "preval"
28
-  ],
29
-  "env": {
30
-    "development": {
31
-      "plugins": [
32
-        "transform-react-jsx-source",
33
-        "transform-react-jsx-self"
34
-      ]
35
-    },
36
-    "production": {
37
-      "plugins": [
38
-        "lodash",
39
-        [
40
-          "transform-react-remove-prop-types",
41
-          {
42
-            "mode": "remove",
43
-            "removeImport": true,
44
-            "additionalLibraries": [
45
-              "react-immutable-proptypes"
46
-            ]
47
-          }
48
-        ],
49
-        "transform-react-inline-elements",
50
-        [
51
-          "transform-runtime",
52
-          {
53
-            "helpers": true,
54
-            "polyfill": false,
55
-            "regenerator": false
56
-          }
57
-        ]
58
-      ]
59
-    },
60
-    "test": {
61
-      "plugins": [
62
-        "transform-es2015-modules-commonjs"
63
-      ]
64
-    }
65
-  }
66
-}

+ 1
- 0
.buildpacks View File

@@ -1,3 +1,4 @@
1 1
 https://github.com/heroku/heroku-buildpack-apt
2
+https://github.com/Scalingo/ffmpeg-buildpack
2 3
 https://github.com/Scalingo/nodejs-buildpack
3 4
 https://github.com/Scalingo/ruby-buildpack

+ 45
- 46
.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.5.1-stretch-node
6
+      - image: circleci/ruby:2.6.0-stretch-node
7 7
         environment: &ruby_environment
8 8
           BUNDLE_APP_CONFIG: ./.bundle/
9 9
           DB_HOST: localhost
@@ -13,6 +13,9 @@ aliases:
13 13
           ALLOW_NOPAM: true
14 14
           CONTINUOUS_INTEGRATION: true
15 15
           DISABLE_SIMPLECOV: true
16
+          PAM_ENABLED: true
17
+          PAM_DEFAULT_SERVICE: pam_test
18
+          PAM_CONTROLLED_SERVICE: pam_test_controlled
16 19
     working_directory: ~/projects/mastodon/
17 20
 
18 21
   - &attach_workspace
@@ -64,12 +67,17 @@ aliases:
64 67
 
65 68
         - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
66 69
         - *restore_ruby_dependencies
67
-        - run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production
70
+        - run: bundle install --clean --jobs 16 --path ./vendor/bundle/ --retry 3 --with pam_authentication --without development production && bundle clean
68 71
         - save_cache:
69 72
             key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
70 73
             paths:
71 74
               - ./.bundle/
72 75
               - ./vendor/bundle/
76
+        - persist_to_workspace:
77
+            root: ~/projects/
78
+            paths:
79
+                - ./mastodon/.bundle/
80
+                - ./mastodon/vendor/bundle/
73 81
 
74 82
   - &test_steps
75 83
       steps:
@@ -78,15 +86,6 @@ aliases:
78 86
         - *install_system_dependencies
79 87
         - run: sudo apt-get install -y ffmpeg
80 88
 
81
-        - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
82
-        - *restore_ruby_dependencies
83
-
84
-        - restore_cache:
85
-            keys:
86
-              - precompiled-assets-{{ .Branch }}-{{ .Revision }}
87
-              - precompiled-assets-{{ .Branch }}-
88
-              - precompiled-assets-
89
-
90 89
         - run:
91 90
             name: Prepare Tests
92 91
             command: ./bin/rails parallel:create parallel:load_schema parallel:prepare
@@ -99,21 +98,21 @@ jobs:
99 98
     <<: *defaults
100 99
     <<: *install_steps
101 100
 
102
-  install-ruby2.5:
101
+  install-ruby2.6:
103 102
     <<: *defaults
104 103
     <<: *install_ruby_dependencies
105 104
 
106
-  install-ruby2.4:
105
+  install-ruby2.5:
107 106
     <<: *defaults
108 107
     docker:
109
-      - image: circleci/ruby:2.4.4-stretch-node
108
+      - image: circleci/ruby:2.5.3-stretch-node
110 109
         environment: *ruby_environment
111 110
     <<: *install_ruby_dependencies
112 111
 
113
-  install-ruby2.3:
112
+  install-ruby2.4:
114 113
     <<: *defaults
115 114
     docker:
116
-      - image: circleci/ruby:2.3.7-stretch-node
115
+      - image: circleci/ruby:2.4.5-stretch-node
117 116
         environment: *ruby_environment
118 117
     <<: *install_ruby_dependencies
119 118
 
@@ -122,52 +121,50 @@ jobs:
122 121
     steps:
123 122
       - *attach_workspace
124 123
       - *install_system_dependencies
125
-      - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
126
-      - *restore_ruby_dependencies
127 124
       - run: ./bin/rails assets:precompile
128
-      - save_cache:
129
-          key: precompiled-assets-{{ .Branch }}-{{ .Revision }}
125
+      - persist_to_workspace:
126
+          root: ~/projects/
130 127
           paths:
131
-            - ./public/assets
132
-            - ./public/packs-test/
128
+              - ./mastodon/public/assets
129
+              - ./mastodon/public/packs-test/
133 130
 
134
-  test-ruby2.5:
131
+  test-ruby2.6:
135 132
     <<: *defaults
136 133
     docker:
137
-      - image: circleci/ruby:2.5.1-stretch-node
134
+      - image: circleci/ruby:2.6.0-stretch-node
138 135
         environment: *ruby_environment
139
-      - image: circleci/postgres:10.3-alpine
136
+      - image: circleci/postgres:10.6-alpine
140 137
         environment:
141 138
           POSTGRES_USER: root
142
-      - image: circleci/redis:4.0.9-alpine
139
+      - image: circleci/redis:5.0.3-alpine3.8
143 140
     <<: *test_steps
144 141
 
145
-  test-ruby2.4:
142
+  test-ruby2.5:
146 143
     <<: *defaults
147 144
     docker:
148
-      - image: circleci/ruby:2.4.4-stretch-node
145
+      - image: circleci/ruby:2.5.3-stretch-node
149 146
         environment: *ruby_environment
150
-      - image: circleci/postgres:10.3-alpine
147
+      - image: circleci/postgres:10.6-alpine
151 148
         environment:
152 149
           POSTGRES_USER: root
153
-      - image: circleci/redis:4.0.9-alpine
150
+      - image: circleci/redis:4.0.12-alpine
154 151
     <<: *test_steps
155 152
 
156
-  test-ruby2.3:
153
+  test-ruby2.4:
157 154
     <<: *defaults
158 155
     docker:
159
-      - image: circleci/ruby:2.3.7-stretch-node
156
+      - image: circleci/ruby:2.4.5-stretch-node
160 157
         environment: *ruby_environment
161
-      - image: circleci/postgres:10.3-alpine
158
+      - image: circleci/postgres:10.6-alpine
162 159
         environment:
163 160
           POSTGRES_USER: root
164
-      - image: circleci/redis:4.0.9-alpine
161
+      - image: circleci/redis:4.0.12-alpine
165 162
     <<: *test_steps
166 163
 
167 164
   test-webui:
168 165
     <<: *defaults
169 166
     docker:
170
-      - image: circleci/node:8.11.1-stretch
167
+      - image: circleci/node:8.15.0-stretch
171 168
     steps:
172 169
       - *attach_workspace
173 170
       - run: ./bin/retry yarn test:jest
@@ -176,28 +173,34 @@ jobs:
176 173
     <<: *defaults
177 174
     steps:
178 175
       - *attach_workspace
179
-      - run: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version
180
-      - *restore_ruby_dependencies
181 176
       - run: bundle exec i18n-tasks check-normalized
182 177
       - run: bundle exec i18n-tasks unused
178
+      - run: bundle exec i18n-tasks missing -t plural
179
+      - run: bundle exec i18n-tasks check-consistent-interpolations
183 180
 
184 181
 workflows:
185 182
   version: 2
186 183
   build-and-test:
187 184
     jobs:
188 185
       - install
189
-      - install-ruby2.5:
186
+      - install-ruby2.6:
190 187
           requires:
191 188
             - install
192
-      - install-ruby2.4:
189
+      - install-ruby2.5:
193 190
           requires:
194 191
             - install
195
-      - install-ruby2.3:
192
+            - install-ruby2.6
193
+      - install-ruby2.4:
196 194
           requires:
197 195
             - install
196
+            - install-ruby2.6
198 197
       - build:
199 198
           requires:
200
-            - install-ruby2.5
199
+            - install-ruby2.6
200
+      - test-ruby2.6:
201
+          requires:
202
+            - install-ruby2.6
203
+            - build
201 204
       - test-ruby2.5:
202 205
           requires:
203 206
             - install-ruby2.5
@@ -206,13 +209,9 @@ workflows:
206 209
           requires:
207 210
             - install-ruby2.4
208 211
             - build
209
-      - test-ruby2.3:
210
-          requires:
211
-            - install-ruby2.3
212
-            - build
213 212
       - test-webui:
214 213
           requires:
215 214
             - install
216 215
       - check-i18n:
217 216
           requires:
218
-            - install-ruby2.5
217
+            - install-ruby2.6

+ 1
- 1
.codeclimate.yml View File

@@ -27,7 +27,7 @@ plugins:
27 27
     enabled: true
28 28
   eslint:
29 29
     enabled: true
30
-    channel: eslint-4
30
+    channel: eslint-5
31 31
   rubocop:
32 32
     enabled: true
33 33
     channel: rubocop-0-54

+ 2
- 2
.env.nanobox View File

@@ -136,8 +136,8 @@ SMTP_FROM_ADDRESS=notifications@${APP_NAME}.nanoapp.io
136 136
 # Defaults to 60 seconds. Set to 0 to disable
137 137
 # SWIFT_CACHE_TTL=
138 138
 
139
-# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
140
-# S3_CLOUDFRONT_HOST=
139
+# Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare)
140
+# S3_ALIAS_HOST=
141 141
 
142 142
 # Streaming API integration
143 143
 # STREAMING_API_BASE_URL=

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

@@ -134,8 +134,8 @@ SMTP_FROM_ADDRESS=notifications@example.com
134 134
 # Defaults to 60 seconds. Set to 0 to disable
135 135
 # SWIFT_CACHE_TTL=
136 136
 
137
-# Optional alias for S3 if you want to use Cloudfront or Cloudflare in front
138
-# S3_CLOUDFRONT_HOST=
137
+# Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare)
138
+# S3_ALIAS_HOST=
139 139
 
140 140
 # Streaming API integration
141 141
 # STREAMING_API_BASE_URL=
@@ -162,6 +162,7 @@ STREAMING_CLUSTER_NUM=1
162 162
 # LDAP_BIND_DN=
163 163
 # LDAP_PASSWORD=
164 164
 # LDAP_UID=cn
165
+# LDAP_SEARCH_FILTER="%{uid}=%{email}"
165 166
 
166 167
 # PAM authentication (optional)
167 168
 # PAM authentication uses for the email generation the "email" pam variable

+ 0
- 4
.env.test View File

@@ -3,7 +3,3 @@ NODE_ENV=test
3 3
 # Federation
4 4
 LOCAL_DOMAIN=cb6e6126.ngrok.io
5 5
 LOCAL_HTTPS=true
6
-# test pam authentication
7
-PAM_ENABLED=true
8
-PAM_DEFAULT_SERVICE=pam_test
9
-PAM_CONTROLLED_SERVICE=pam_test_controlled

+ 1
- 1
.env.vagrant View File

@@ -1,2 +1,2 @@
1 1
 VAGRANT=true
2
-LOCAL_DOMAIN=mastodon.dev
2
+LOCAL_DOMAIN=mastodon.local

+ 13
- 30
.eslintignore View File

@@ -1,30 +1,13 @@
1
-# See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
-#
3
-# If you find yourself ignoring temporary files generated by your text editor
4
-# or operating system, you probably want to add a global ignore instead:
5
-#   git config --global core.excludesfile '~/.gitignore_global'
6
-
7
-# Ignore bundler config.
8
-/.bundle
9
-
10
-# Ignore the default SQLite database.
11
-/db/*.sqlite3
12
-/db/*.sqlite3-journal
13
-
14
-# Ignore all logfiles and tempfiles.
15
-/log/*
16
-!/log/.keep
17
-/tmp
18
-coverage
19
-public/system
20
-public/assets
21
-.env
22
-.env.production
23
-node_modules/
24
-neo4j/
25
-
26
-# Ignore Vagrant files
27
-.vagrant/
28
-
29
-# Ignore Capistrano customizations
30
-config/deploy/*
1
+/build/**
2
+/coverage/**
3
+/db/**
4
+/lib/**
5
+/log/**
6
+/node_modules/**
7
+/nonobox/**
8
+/public/**
9
+!/public/embed.js
10
+/spec/**
11
+/tmp/**
12
+/vendor/**
13
+!.eslintrc.js

+ 199
- 0
.eslintrc.js View File

@@ -0,0 +1,199 @@
1
+module.exports = {
2
+  root: true,
3
+
4
+  env: {
5
+    browser: true,
6
+    node: true,
7
+    es6: true,
8
+    jest: true,
9
+  },
10
+
11
+  globals: {
12
+    ATTACHMENT_HOST: false,
13
+  },
14
+
15
+  parser: 'babel-eslint',
16
+
17
+  plugins: [
18
+    'react',
19
+    'jsx-a11y',
20
+    'import',
21
+    'promise',
22
+  ],
23
+
24
+  parserOptions: {
25
+    sourceType: 'module',
26
+    ecmaFeatures: {
27
+      experimentalObjectRestSpread: true,
28
+      jsx: true,
29
+    },
30
+    ecmaVersion: 2018,
31
+  },
32
+
33
+  settings: {
34
+    react: {
35
+      version: 'detect',
36
+    },
37
+    'import/extensions': [
38
+      '.js',
39
+    ],
40
+    'import/ignore': [
41
+      'node_modules',
42
+      '\\.(css|scss|json)$',
43
+    ],
44
+  },
45
+
46
+  rules: {
47
+    'brace-style': 'warn',
48
+    'comma-dangle': ['error', 'always-multiline'],
49
+    'comma-spacing': [
50
+      'warn',
51
+      {
52
+        before: false,
53
+        after: true,
54
+      },
55
+    ],
56
+    'comma-style': ['warn', 'last'],
57
+    'consistent-return': 'error',
58
+    'dot-notation': 'error',
59
+    eqeqeq: 'error',
60
+    indent: ['warn', 2],
61
+    'jsx-quotes': ['error', 'prefer-single'],
62
+    'no-catch-shadow': 'error',
63
+    'no-cond-assign': 'error',
64
+    'no-console': [
65
+      'warn',
66
+      {
67
+        allow: [
68
+          'error',
69
+          'warn',
70
+        ],
71
+      },
72
+    ],
73
+    'no-fallthrough': 'error',
74
+    'no-irregular-whitespace': 'error',
75
+    'no-mixed-spaces-and-tabs': 'warn',
76
+    'no-nested-ternary': 'warn',
77
+    'no-trailing-spaces': 'warn',
78
+    'no-undef': 'error',
79
+    'no-unreachable': 'error',
80
+    'no-unused-expressions': 'error',
81
+    'no-unused-vars': [
82
+      'error',
83
+      {
84
+        vars: 'all',
85
+        args: 'after-used',
86
+        ignoreRestSiblings: true,
87
+      },
88
+    ],
89
+    'object-curly-spacing': ['error', 'always'],
90
+    'padded-blocks': [
91
+      'error',
92
+      {
93
+        classes: 'always',
94
+      },
95
+    ],
96
+    quotes: ['error', 'single'],
97
+    semi: 'error',
98
+    strict: 'off',
99
+    'valid-typeof': 'error',
100
+
101
+    'react/jsx-boolean-value': 'error',
102
+    'react/jsx-closing-bracket-location': ['error', 'line-aligned'],
103
+    'react/jsx-curly-spacing': 'error',
104
+    'react/jsx-equals-spacing': 'error',
105
+    'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'],
106
+    'react/jsx-indent': ['error', 2],
107
+    'react/jsx-no-bind': 'error',
108
+    'react/jsx-no-duplicate-props': 'error',
109
+    'react/jsx-no-undef': 'error',
110
+    'react/jsx-tag-spacing': 'error',
111
+    'react/jsx-uses-react': 'error',
112
+    'react/jsx-uses-vars': 'error',
113
+    'react/jsx-wrap-multilines': 'error',
114
+    'react/no-multi-comp': 'off',
115
+    'react/no-string-refs': 'error',
116
+    'react/prop-types': 'error',
117
+    'react/self-closing-comp': 'error',
118
+
119
+    'jsx-a11y/accessible-emoji': 'warn',
120
+    'jsx-a11y/alt-text': 'warn',
121
+    'jsx-a11y/anchor-has-content': 'warn',
122
+    'jsx-a11y/anchor-is-valid': [
123
+      'warn',
124
+      {
125
+        components: [
126
+          'Link',
127
+          'NavLink',
128
+        ],
129
+        specialLink: [
130
+          'to',
131
+        ],
132
+        aspect: [
133
+          'noHref',
134
+          'invalidHref',
135
+          'preferButton',
136
+        ],
137
+      },
138
+    ],
139
+    'jsx-a11y/aria-activedescendant-has-tabindex': 'warn',
140
+    'jsx-a11y/aria-props': 'warn',
141
+    'jsx-a11y/aria-proptypes': 'warn',
142
+    'jsx-a11y/aria-role': 'warn',
143
+    'jsx-a11y/aria-unsupported-elements': 'warn',
144
+    'jsx-a11y/heading-has-content': 'warn',
145
+    'jsx-a11y/html-has-lang': 'warn',
146
+    'jsx-a11y/iframe-has-title': 'warn',
147
+    'jsx-a11y/img-redundant-alt': 'warn',
148
+    'jsx-a11y/interactive-supports-focus': 'warn',
149
+    'jsx-a11y/label-has-for': 'off',
150
+    'jsx-a11y/mouse-events-have-key-events': 'warn',
151
+    'jsx-a11y/no-access-key': 'warn',
152
+    'jsx-a11y/no-distracting-elements': 'warn',
153
+    'jsx-a11y/no-noninteractive-element-interactions': [
154
+      'warn',
155
+      {
156
+        handlers: [
157
+          'onClick',
158
+        ],
159
+      },
160
+    ],
161
+    'jsx-a11y/no-onchange': 'warn',
162
+    'jsx-a11y/no-redundant-roles': 'warn',
163
+    'jsx-a11y/no-static-element-interactions': [
164
+      'warn',
165
+      {
166
+        handlers: [
167
+          'onClick',
168
+        ],
169
+      },
170
+    ],
171
+    'jsx-a11y/role-has-required-aria-props': 'warn',
172
+    'jsx-a11y/role-supports-aria-props': 'off',
173
+    'jsx-a11y/scope': 'warn',
174
+    'jsx-a11y/tabindex-no-positive': 'warn',
175
+
176
+    'import/extensions': [
177
+      'error',
178
+      'always',
179
+      {
180
+        js: 'never',
181
+      },
182
+    ],
183
+    'import/newline-after-import': 'error',
184
+    'import/no-extraneous-dependencies': [
185
+      'error',
186
+      {
187
+        devDependencies: [
188
+          'config/webpack/**',
189
+          'app/javascript/mastodon/test_setup.js',
190
+          'app/javascript/**/__tests__/**',
191
+        ],
192
+      },
193
+    ],
194
+    'import/no-unresolved': 'error',
195
+    'import/no-webpack-loader-syntax': 'error',
196
+
197
+    'promise/catch-or-return': 'error',
198
+  },
199
+};

+ 0
- 170
.eslintrc.yml View File

@@ -1,170 +0,0 @@
1
----
2
-root: true
3
-
4
-env:
5
-  browser: true
6
-  node: true
7
-  es6: true
8
-  jest: true
9
-
10
-globals:
11
-  ATTACHMENT_HOST: false
12
-
13
-parser: babel-eslint
14
-
15
-plugins:
16
-- react
17
-- jsx-a11y
18
-- import
19
-- promise
20
-
21
-parserOptions:
22
-  sourceType: module
23
-  ecmaFeatures:
24
-    experimentalObjectRestSpread: true
25
-    jsx: true
26
-  ecmaVersion: 2018
27
-
28
-settings:
29
-  import/extensions:
30
-  - .js
31
-  import/ignore:
32
-  - node_modules
33
-  - \\.(css|scss|json)$
34
-
35
-rules:
36
-  brace-style: warn
37
-  comma-dangle:
38
-  - error
39
-  - always-multiline
40
-  comma-spacing:
41
-  - warn
42
-  - before: false
43
-    after: true
44
-  comma-style:
45
-  - warn
46
-  - last
47
-  consistent-return: error
48
-  dot-notation: error
49
-  eqeqeq: error
50
-  indent:
51
-  - warn
52
-  - 2
53
-  jsx-quotes:
54
-  - error
55
-  - prefer-single
56
-  no-catch-shadow: error
57
-  no-cond-assign: error
58
-  no-console:
59
-  - warn
60
-  - allow:
61
-    - error
62
-    - warn
63
-  no-fallthrough: error
64
-  no-irregular-whitespace: error
65
-  no-mixed-spaces-and-tabs: warn
66
-  no-nested-ternary: warn
67
-  no-trailing-spaces: warn
68
-  no-undef: error
69
-  no-unreachable: error
70
-  no-unused-expressions: error
71
-  no-unused-vars:
72
-  - error
73
-  - vars: all
74
-    args: after-used
75
-    ignoreRestSiblings: true
76
-  object-curly-spacing:
77
-  - error
78
-  - always
79
-  padded-blocks:
80
-  - error
81
-  - classes: always
82
-  quotes:
83
-  - error
84
-  - single
85
-  semi: error
86
-  strict: off
87
-  valid-typeof: error
88
-
89
-  react/jsx-boolean-value: error
90
-  react/jsx-closing-bracket-location:
91
-  - error
92
-  - line-aligned
93
-  react/jsx-curly-spacing: error
94
-  react/jsx-equals-spacing: error
95
-  react/jsx-first-prop-new-line:
96
-  - error
97
-  - multiline-multiprop
98
-  react/jsx-indent:
99
-  - error
100
-  - 2
101
-  react/jsx-no-bind: error
102
-  react/jsx-no-duplicate-props: error
103
-  react/jsx-no-undef: error
104
-  react/jsx-tag-spacing: error
105
-  react/jsx-uses-react: error
106
-  react/jsx-uses-vars: error
107
-  react/jsx-wrap-multilines: error
108
-  react/no-multi-comp: off
109
-  react/no-string-refs: error
110
-  react/prop-types: error
111
-  react/self-closing-comp: error
112
-
113
-  jsx-a11y/accessible-emoji: warn
114
-  jsx-a11y/alt-text: warn
115
-  jsx-a11y/anchor-has-content: warn
116
-  jsx-a11y/anchor-is-valid:
117
-  - warn
118
-  - components:
119
-    - Link
120
-    - NavLink
121
-    specialLink:
122
-    - to
123
-    aspect:
124
-    - noHref
125
-    - invalidHref
126
-    - preferButton
127
-  jsx-a11y/aria-activedescendant-has-tabindex: warn
128
-  jsx-a11y/aria-props: warn
129
-  jsx-a11y/aria-proptypes: warn
130
-  jsx-a11y/aria-role: warn
131
-  jsx-a11y/aria-unsupported-elements: warn
132
-  jsx-a11y/heading-has-content: warn
133
-  jsx-a11y/html-has-lang: warn
134
-  jsx-a11y/iframe-has-title: warn
135
-  jsx-a11y/img-redundant-alt: warn
136
-  jsx-a11y/interactive-supports-focus: warn
137
-  jsx-a11y/label-has-for: off
138
-  jsx-a11y/mouse-events-have-key-events: warn
139
-  jsx-a11y/no-access-key: warn
140
-  jsx-a11y/no-distracting-elements: warn
141
-  jsx-a11y/no-noninteractive-element-interactions:
142
-  - warn
143
-  - handlers:
144
-    - onClick
145
-  jsx-a11y/no-onchange: warn
146
-  jsx-a11y/no-redundant-roles: warn
147
-  jsx-a11y/no-static-element-interactions:
148
-  - warn
149
-  - handlers:
150
-    - onClick
151
-  jsx-a11y/role-has-required-aria-props: warn
152
-  jsx-a11y/role-supports-aria-props: off
153
-  jsx-a11y/scope: warn
154
-  jsx-a11y/tabindex-no-positive: warn
155
-
156
-  import/extensions:
157
-  - error
158
-  - always
159
-  - js: never
160
-  import/newline-after-import: error
161
-  import/no-extraneous-dependencies:
162
-  - error
163
-  - devDependencies:
164
-    - "config/webpack/**"
165
-    - "app/javascript/mastodon/test_setup.js"
166
-    - "app/javascript/**/__tests__/**"
167
-  import/no-unresolved: error
168
-  import/no-webpack-loader-syntax: error
169
-
170
-  promise/catch-or-return: error

+ 20
- 5
.github/ISSUE_TEMPLATE/bug_report.md View File

@@ -1,12 +1,27 @@
1 1
 ---
2 2
 name: Bug Report
3
-about: Create a report to help us improve
3
+about: If something isn't working as expected
4 4
 
5 5
 ---
6 6
 
7
-[Issue text goes here].
7
+<!-- Make sure that you are submitting a new bug that was not previously reported or already fixed -->
8 8
 
9
-* * * *
9
+<!-- Please use a concise and distinct title for the issue -->
10 10
 
11
-- [ ] I searched or browsed the repo’s other issues to ensure this is not a duplicate.
12
-- [ ] This bug happens on a [tagged release](https://github.com/tootsuite/mastodon/releases) and not on `master` (If you're a user, don't worry about this).
11
+### Expected behaviour
12
+
13
+<!-- What should have happened? -->
14
+
15
+### Actual behaviour
16
+
17
+<!-- What happened? -->
18
+
19
+### Steps to reproduce the problem
20
+
21
+<!-- What were you trying to do? -->
22
+
23
+### Specifications
24
+
25
+<!-- What version or commit hash of Mastodon did you find this bug in? -->
26
+
27
+<!-- If a front-end issue, what browser and operating systems were you using? -->

+ 10
- 4
.github/ISSUE_TEMPLATE/feature_request.md View File

@@ -1,11 +1,17 @@
1 1
 ---
2 2
 name: Feature Request
3
-about: Suggest an idea for this project
3
+about: I have a suggestion
4 4
 
5 5
 ---
6 6
 
7
-[Issue text goes here].
7
+<!-- Please use a concise and distinct title for the issue -->
8 8
 
9
-* * * *
9
+<!-- Consider: Could it be implemented as a 3rd party app using the REST API instead? -->
10 10
 
11
-- [ ] I searched or browsed the repo’s other issues to ensure this is not a duplicate.
11
+### Pitch
12
+
13
+<!-- Describe your idea for a feature. Make sure it has not already been suggested/implemented/turned down before -->
14
+
15
+### Motivation
16
+
17
+<!-- Why do you think this feature is needed? Who would benefit from it? -->

+ 10
- 0
.github/ISSUE_TEMPLATE/support.md View File

@@ -0,0 +1,10 @@
1
+---
2
+name: Support
3
+about: Ask for help with your deployment
4
+
5
+---
6
+
7
+We primarily use GitHub as a bug and feature tracker. For usage questions, troubleshooting of deployments and other individual technical assistance, please use one of the resources below:
8
+
9
+- https://discourse.joinmastodon.org
10
+- #mastodon on irc.freenode.net

+ 1
- 1
.nvmrc View File

@@ -1 +1 @@
1
-6
1
+8

+ 0
- 9
.postcssrc.yml View File

@@ -1,9 +0,0 @@
1
-plugins:
2
-  postcss-smart-import: {}
3
-  precss: {}
4
-  autoprefixer:
5
-    browsers:
6
-      - last 2 versions
7
-      - IE >= 11
8
-      - iOS >= 9
9
-  postcss-object-fit-images: {}

+ 12
- 0
.rubocop.yml View File

@@ -11,6 +11,7 @@ AllCops:
11 11
   - 'Vagrantfile'
12 12
   - 'vendor/**/*'
13 13
   - 'lib/json_ld/*'
14
+  - 'lib/templates/**/*'
14 15
 
15 16
 Bundler/OrderedGems:
16 17
   Enabled: false
@@ -61,6 +62,9 @@ Metrics/ParameterLists:
61 62
 Metrics/PerceivedComplexity:
62 63
   Max: 20
63 64
 
65
+Naming/MemoizedInstanceVariableName:
66
+  Enabled: false
67
+
64 68
 Rails:
65 69
   Enabled: true
66 70
 
@@ -70,6 +74,14 @@ Rails/HasAndBelongsToMany:
70 74
 Rails/SkipsModelValidations:
71 75
   Enabled: false
72 76
 
77
+Rails/HttpStatus:
78
+  Enabled: false
79
+
80
+Rails/Exit:
81
+  Exclude:
82
+    - 'lib/mastodon/*'
83
+    - 'lib/cli'
84
+
73 85
 Style/ClassAndModuleChildren:
74 86
   Enabled: false
75 87
 

+ 1
- 1
.ruby-version View File

@@ -1 +1 @@
1
-2.5.1
1
+2.6.0

+ 522
- 141
AUTHORS.md View File

@@ -1,158 +1,199 @@
1
+Authors
2
+=======
3
+
1 4
 Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon)
2 5
 and provided thanks to the work of the following contributors:
3 6
 
4 7
 * [Gargron](https://github.com/Gargron)
5 8
 * [ykzts](https://github.com/ykzts)
6
-* [mjankowski](https://github.com/mjankowski)
7 9
 * [akihikodaki](https://github.com/akihikodaki)
10
+* [ThibG](https://github.com/ThibG)
11
+* [mjankowski](https://github.com/mjankowski)
8 12
 * [unarist](https://github.com/unarist)
9
-* [yiskah](https://github.com/yiskah)
10 13
 * [m4sk1n](https://github.com/m4sk1n)
14
+* [dependabot[bot]](https://github.com/apps/dependabot)
15
+* [yiskah](https://github.com/yiskah)
11 16
 * [nolanlawson](https://github.com/nolanlawson)
12 17
 * [sorin-davidoi](https://github.com/sorin-davidoi)
18
+* [ysksn](https://github.com/ysksn)
13 19
 * [abcang](https://github.com/abcang)
14
-* [ThibG](https://github.com/ThibG)
15 20
 * [lynlynlynx](https://github.com/lynlynlynx)
16 21
 * [alpaca-tc](https://github.com/alpaca-tc)
22
+* [mayaeh](https://github.com/mayaeh)
23
+* [renatolond](https://github.com/renatolond)
17 24
 * [nclm](https://github.com/nclm)
18 25
 * [ineffyble](https://github.com/ineffyble)
19 26
 * [jeroenpraat](https://github.com/jeroenpraat)
20 27
 * [blackle](https://github.com/blackle)
21 28
 * [Quent-in](https://github.com/Quent-in)
22 29
 * [JantsoP](https://github.com/JantsoP)
30
+* [mabkenar](https://github.com/mabkenar)
23 31
 * [nullkal](https://github.com/nullkal)
24 32
 * [yookoala](https://github.com/yookoala)
25
-* [ysksn](https://github.com/ysksn)
33
+* [Kjwon15](https://github.com/Kjwon15)
34
+* [shuheiktgw](https://github.com/shuheiktgw)
26 35
 * [ashfurrow](https://github.com/ashfurrow)
27
-* [eramdam](https://github.com/eramdam)
28
-* [mayaeh](https://github.com/mayaeh)
36
+* [Quenty31](https://github.com/Quenty31)
29 37
 * [zunda](https://github.com/zunda)
30
-* [ticky](https://github.com/ticky)
38
+* [eramdam](https://github.com/eramdam)
39
+* [takayamaki](https://github.com/takayamaki)
31 40
 * [masarakki](https://github.com/masarakki)
41
+* [ticky](https://github.com/ticky)
42
+* [danhunsaker](https://github.com/danhunsaker)
43
+* [ThisIsMissEm](https://github.com/ThisIsMissEm)
44
+* [hcmiya](https://github.com/hcmiya)
45
+* [stephenburgess8](https://github.com/stephenburgess8)
32 46
 * [Wonderfall](https://github.com/Wonderfall)
33 47
 * [matteoaquila](https://github.com/matteoaquila)
34 48
 * [rkarabut](https://github.com/rkarabut)
35
-* [stephenburgess8](https://github.com/stephenburgess8)
36
-* [Kjwon15](https://github.com/Kjwon15)
37
-* [Artoria2e5](https://github.com/Artoria2e5)
38 49
 * [yukimochi](https://github.com/yukimochi)
50
+* [Artoria2e5](https://github.com/Artoria2e5)
39 51
 * [marrus-sh](https://github.com/marrus-sh)
40 52
 * [krainboltgreene](https://github.com/krainboltgreene)
41
-* [renatolond](https://github.com/renatolond)
42
-* [BoFFire](https://github.com/BoFFire)
43
-* [clworld](https://github.com/clworld)
44
-* [danhunsaker](https://github.com/danhunsaker)
45 53
 * [patf](https://github.com/patf)
46
-* [Quenty31](https://github.com/Quenty31)
47
-* [MitarashiDango](https://github.com/MitarashiDango)
48 54
 * [Aldarone](https://github.com/Aldarone)
55
+* [BoFFire](https://github.com/BoFFire)
56
+* [clworld](https://github.com/clworld)
57
+* [dracos](https://github.com/dracos)
58
+* [SerCom_KC](mailto:sercom-kc@users.noreply.github.com)
59
+* [Sylvhem](https://github.com/Sylvhem)
60
+* [nightpool](https://github.com/nightpool)
61
+* [MasterGroosha](https://github.com/MasterGroosha)
49 62
 * [JeanGauthier](https://github.com/JeanGauthier)
50 63
 * [kschaper](https://github.com/kschaper)
51
-* [takayamaki](https://github.com/takayamaki)
64
+* [MaciekBaron](https://github.com/MaciekBaron)
65
+* [MitarashiDango](mailto:mitarashidango@users.noreply.github.com)
66
+* [beatrix-bitrot](https://github.com/beatrix-bitrot)
52 67
 * [adbelle](https://github.com/adbelle)
53 68
 * [evanminto](https://github.com/evanminto)
54
-* [mabkenar](https://github.com/mabkenar)
55 69
 * [MightyPork](https://github.com/MightyPork)
56
-* [beatrix-bitrot](https://github.com/beatrix-bitrot)
57 70
 * [yhirano55](https://github.com/yhirano55)
58 71
 * [camponez](https://github.com/camponez)
72
+* [SerCom-KC](https://github.com/SerCom-KC)
59 73
 * [aschmitz](https://github.com/aschmitz)
74
+* [devkral](https://github.com/devkral)
60 75
 * [fpiesche](https://github.com/fpiesche)
61 76
 * [gandaro](https://github.com/gandaro)
62 77
 * [johnsudaar](https://github.com/johnsudaar)
63 78
 * [trebmuh](https://github.com/trebmuh)
64
-* [Sylvhem](https://github.com/Sylvhem)
79
+* [Rakib Hasan](mailto:rmhasan@gmail.com)
65 80
 * [lindwurm](https://github.com/lindwurm)
81
+* [victorhck](mailto:victorhck@geeko.site)
66 82
 * [voidsatisfaction](https://github.com/voidsatisfaction)
67
-* [neetshin](https://github.com/neetshin)
68
-* [valentin2105](https://github.com/valentin2105)
69 83
 * [hikari-no-yume](https://github.com/hikari-no-yume)
70
-* [Angristan](https://github.com/Angristan)
84
+* [angristan](https://github.com/angristan)
71 85
 * [seefood](https://github.com/seefood)
72 86
 * [jackjennings](https://github.com/jackjennings)
73
-* [hcmiya](https://github.com/hcmiya)
74
-* [nightpool](https://github.com/nightpool)
75
-* [salvadorpla](https://github.com/salvadorpla)
87
+* [spla](mailto:spla@mastodont.cat)
76 88
 * [expenses](https://github.com/expenses)
77 89
 * [walf443](https://github.com/walf443)
78 90
 * [JoelQ](https://github.com/JoelQ)
79 91
 * [mistydemeo](https://github.com/mistydemeo)
80 92
 * [dunn](https://github.com/dunn)
81 93
 * [xqus](https://github.com/xqus)
94
+* [hugogameiro](https://github.com/hugogameiro)
82 95
 * [pfm-eyesightjp](https://github.com/pfm-eyesightjp)
83 96
 * [fakenine](https://github.com/fakenine)
84 97
 * [tsuwatch](https://github.com/tsuwatch)
85 98
 * [victorhck](https://github.com/victorhck)
99
+* [ashleyhull-versent](https://github.com/ashleyhull-versent)
100
+* [kedamaDQ](https://github.com/kedamaDQ)
86 101
 * [puckipedia](https://github.com/puckipedia)
102
+* [fvh-P](https://github.com/fvh-P)
87 103
 * [contraexemplo](https://github.com/contraexemplo)
88 104
 * [kazu9su](https://github.com/kazu9su)
89 105
 * [Komic](https://github.com/Komic)
106
+* [lmorchard](https://github.com/lmorchard)
90 107
 * [diomed](https://github.com/diomed)
108
+* [ariasuni](https://github.com/ariasuni)
109
+* [Neetshin](mailto:neetshin@neetsh.in)
91 110
 * [rainyday](https://github.com/rainyday)
111
+* [ProgVal](https://github.com/ProgVal)
112
+* [valentin2105](https://github.com/valentin2105)
113
+* [yuntan](https://github.com/yuntan)
114
+* [goofy-bz](mailto:goofy@babelzilla.org)
92 115
 * [kadiix](https://github.com/kadiix)
93 116
 * [kodacs](https://github.com/kodacs)
94
-* [ProgVal](https://github.com/ProgVal)
117
+* [rtucker](https://github.com/rtucker)
118
+* [KScl](https://github.com/KScl)
95 119
 * [sterdev](https://github.com/sterdev)
96 120
 * [TheKinrar](https://github.com/TheKinrar)
97 121
 * [AA4ch1](https://github.com/AA4ch1)
98 122
 * [alexgleason](https://github.com/alexgleason)
99 123
 * [cpytel](https://github.com/cpytel)
100 124
 * [northerner](https://github.com/northerner)
101
-* [hnrysmth](https://github.com/hnrysmth)
102
-* [hugogameiro](https://github.com/hugogameiro)
125
+* [fhemberger](https://github.com/fhemberger)
126
+* [greysteil](https://github.com/greysteil)
127
+* [hensmith](https://github.com/hensmith)
128
+* [hinaloe](https://github.com/hinaloe)
129
+* [d6rkaiz](https://github.com/d6rkaiz)
130
+* [Reverite](https://github.com/Reverite)
131
+* [JMendyk](https://github.com/JMendyk)
103 132
 * [JohnD28](https://github.com/JohnD28)
104 133
 * [znz](https://github.com/znz)
105 134
 * [Naouak](https://github.com/Naouak)
106
-* [rtucker](https://github.com/rtucker)
135
+* [pawelngei](https://github.com/pawelngei)
107 136
 * [reneklacan](https://github.com/reneklacan)
108
-* [KScl](https://github.com/KScl)
109
-* [SerCom-KC](https://github.com/SerCom-KC)
137
+* [ekiru](https://github.com/ekiru)
110 138
 * [tcitworld](https://github.com/tcitworld)
111 139
 * [geta6](https://github.com/geta6)
112
-* [goofy-bz](https://github.com/goofy-bz)
113 140
 * [happycoloredbanana](https://github.com/happycoloredbanana)
114 141
 * [leopku](https://github.com/leopku)
115 142
 * [SansPseudoFix](https://github.com/SansPseudoFix)
116 143
 * [tomfhowe](https://github.com/tomfhowe)
117 144
 * [noraworld](https://github.com/noraworld)
118
-* [fvh-P](https://github.com/fvh-P)
145
+* [theboss](https://github.com/theboss)
119 146
 * [178inaba](https://github.com/178inaba)
120
-* [devkral](https://github.com/devkral)
147
+* [Aditoo17](https://github.com/Aditoo17)
121 148
 * [alyssais](https://github.com/alyssais)
122 149
 * [kodnaplakal](https://github.com/kodnaplakal)
123 150
 * [stalker314314](https://github.com/stalker314314)
124 151
 * [huertanix](https://github.com/huertanix)
125 152
 * [genesixx](https://github.com/genesixx)
126
-* [fhemberger](https://github.com/fhemberger)
127 153
 * [halkeye](https://github.com/halkeye)
128 154
 * [treby](https://github.com/treby)
129
-* [d6rkaiz](https://github.com/d6rkaiz)
130 155
 * [jpdevries](https://github.com/jpdevries)
131
-* [rndm-stranger](https://github.com/rndm-stranger)
156
+* [gdpelican](https://github.com/gdpelican)
157
+* [kmichl](https://github.com/kmichl)
158
+* [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name)
132 159
 * [saper](https://github.com/saper)
133 160
 * [nevillepark](https://github.com/nevillepark)
134 161
 * [ornithocoder](https://github.com/ornithocoder)
135 162
 * [pierreozoux](https://github.com/pierreozoux)
136
-* [ramlmn](https://github.com/ramlmn)
163
+* [qguv](https://github.com/qguv)
164
+* [Ram Lmn](mailto:ramlmn@users.noreply.github.com)
137 165
 * [harukasan](https://github.com/harukasan)
138 166
 * [stamak](https://github.com/stamak)
167
+* [noellabo](https://github.com/noellabo)
168
+* [Technowix](mailto:technowix@users.noreply.github.com)
139 169
 * [Eychics](https://github.com/Eychics)
140
-* [thor-the-norseman](https://github.com/thor-the-norseman)
170
+* [Thor Harald Johansen](mailto:thj@thj.no)
141 171
 * [0x70b1a5](https://github.com/0x70b1a5)
142 172
 * [gled-rs](https://github.com/gled-rs)
173
+* [Valentin_NC](mailto:valentin.ouvrard@nautile.sarl)
143 174
 * [R0ckweb](https://github.com/R0ckweb)
175
+* [caasi](https://github.com/caasi)
176
+* [chr-1x](https://github.com/chr-1x)
144 177
 * [esetomo](https://github.com/esetomo)
145 178
 * [foxiehkins](https://github.com/foxiehkins)
146
-* [sdukhovni](https://github.com/sdukhovni)
179
+* [hoodie](mailto:hoodiekitten@outlook.com)
180
+* [luzi82](https://github.com/luzi82)
181
+* [duxovni](https://github.com/duxovni)
182
+* [trwnh](https://github.com/trwnh)
147 183
 * [unsmell](https://github.com/unsmell)
184
+* [valerauko](https://github.com/valerauko)
148 185
 * [chriswmartin](https://github.com/chriswmartin)
149 186
 * [vahnj](https://github.com/vahnj)
150 187
 * [ikuradon](https://github.com/ikuradon)
151 188
 * [AndreLewin](https://github.com/AndreLewin)
189
+* [rinsuki](https://github.com/rinsuki)
190
+* [0xflotus](https://github.com/0xflotus)
152 191
 * [redtachyons](https://github.com/redtachyons)
153 192
 * [thurloat](https://github.com/thurloat)
154 193
 * [aaribaud](https://github.com/aaribaud)
194
+* [Andrew](mailto:andrewlchronister@gmail.com)
155 195
 * [estuans](https://github.com/estuans)
196
+* [BenLubar](https://github.com/BenLubar)
156 197
 * [dissolve](https://github.com/dissolve)
157 198
 * [PurpleBooth](https://github.com/PurpleBooth)
158 199
 * [bradurani](https://github.com/bradurani)
@@ -164,37 +205,50 @@ and provided thanks to the work of the following contributors:
164 205
 * [cdutson](https://github.com/cdutson)
165 206
 * [farlistener](https://github.com/farlistener)
166 207
 * [DavidLibeau](https://github.com/DavidLibeau)
167
-* [SirCmpwn](https://github.com/SirCmpwn)
168
-* [MasterGroosha](https://github.com/MasterGroosha)
208
+* [ddevault](https://github.com/ddevault)
169 209
 * [Fjoerfoks](https://github.com/Fjoerfoks)
170 210
 * [fmauNeko](https://github.com/fmauNeko)
171 211
 * [gloaec](https://github.com/gloaec)
172
-* [greysteil](https://github.com/greysteil)
212
+* [Gomasy](https://github.com/Gomasy)
173 213
 * [unstabler](https://github.com/unstabler)
174 214
 * [potato4d](https://github.com/potato4d)
175 215
 * [h-izumi](https://github.com/h-izumi)
176 216
 * [ErikXXon](https://github.com/ErikXXon)
177 217
 * [ian-kelling](https://github.com/ian-kelling)
218
+* [immae](https://github.com/immae)
178 219
 * [foozmeat](https://github.com/foozmeat)
179 220
 * [jasonrhodes](https://github.com/jasonrhodes)
180
-* [asm](https://github.com/asm)
221
+* [Jason Snell](mailto:jason@newrelic.com)
181 222
 * [jviide](https://github.com/jviide)
223
+* [YuleZ](https://github.com/YuleZ)
182 224
 * [crakaC](https://github.com/crakaC)
183 225
 * [tkbky](https://github.com/tkbky)
226
+* [Kaylee](mailto:kaylee@codethat.sucks)
184 227
 * [Kazhnuz](https://github.com/Kazhnuz)
228
+* [connyduck](https://github.com/connyduck)
229
+* [Lindsey Bieda](mailto:lindseyb@users.noreply.github.com)
230
+* [Lorenz Diener](mailto:halcyon@icosahedron.website)
185 231
 * [alimony](https://github.com/alimony)
186 232
 * [mig5](https://github.com/mig5)
187 233
 * [ndarville](https://github.com/ndarville)
188 234
 * [Abzol](https://github.com/Abzol)
235
+* [pwoolcoc](https://github.com/pwoolcoc)
189 236
 * [xPaw](https://github.com/xPaw)
237
+* [petzah](https://github.com/petzah)
238
+* [ignisf](https://github.com/ignisf)
190 239
 * [raymestalez](https://github.com/raymestalez)
240
+* [remram44](https://github.com/remram44)
241
+* [sascha-sl](https://github.com/sascha-sl)
242
+* [u1-liquid](https://github.com/u1-liquid)
191 243
 * [sim6](https://github.com/sim6)
192
-* [ekiru](https://github.com/ekiru)
193
-* [Technowix](https://github.com/Technowix)
244
+* [stemid](https://github.com/stemid)
245
+* [sumdog](https://github.com/sumdog)
194 246
 * [ThomasLeister](https://github.com/ThomasLeister)
195 247
 * [mcat-ee](https://github.com/mcat-ee)
196 248
 * [tototoshi](https://github.com/tototoshi)
249
+* [TrashMacNugget](https://github.com/TrashMacNugget)
197 250
 * [VirtuBox](https://github.com/VirtuBox)
251
+* [Vladyslav](mailto:vaden@tuta.io)
198 252
 * [kaniini](https://github.com/kaniini)
199 253
 * [vayan](https://github.com/vayan)
200 254
 * [yannicka](https://github.com/yannicka)
@@ -202,45 +256,61 @@ and provided thanks to the work of the following contributors:
202 256
 * [zacanger](https://github.com/zacanger)
203 257
 * [amazedkoumei](https://github.com/amazedkoumei)
204 258
 * [anon5r](https://github.com/anon5r)
259
+* [aus-social](https://github.com/aus-social)
260
+* [imbsky](https://github.com/imbsky)
261
+* [bsky](mailto:me@imbsky.net)
205 262
 * [codl](https://github.com/codl)
263
+* [cpsdqs](https://github.com/cpsdqs)
206 264
 * [barzamin](https://github.com/barzamin)
207 265
 * [fhalna](https://github.com/fhalna)
208 266
 * [haoyayoi](https://github.com/haoyayoi)
209 267
 * [ik11235](https://github.com/ik11235)
210 268
 * [kawax](https://github.com/kawax)
211 269
 * [007lva](https://github.com/007lva)
270
+* [mbajur](https://github.com/mbajur)
212 271
 * [matsurai25](https://github.com/matsurai25)
213 272
 * [mecab](https://github.com/mecab)
214 273
 * [nicobz25](https://github.com/nicobz25)
215 274
 * [oliverkeeble](https://github.com/oliverkeeble)
216 275
 * [pinfort](https://github.com/pinfort)
217 276
 * [rbaumert](https://github.com/rbaumert)
277
+* [rhoio](https://github.com/rhoio)
218 278
 * [usagi-f](https://github.com/usagi-f)
219 279
 * [vidarlee](https://github.com/vidarlee)
220 280
 * [vjackson725](https://github.com/vjackson725)
221 281
 * [wxcafe](https://github.com/wxcafe)
222
-* [rinsuki](https://github.com/rinsuki)
282
+* [新都心(Neet Shin)](mailto:nucx@dio-vox.com)
223 283
 * [cygnan](https://github.com/cygnan)
224 284
 * [Awea](https://github.com/Awea)
225 285
 * [halcy](https://github.com/halcy)
226
-* [bounshi](https://github.com/bounshi)
286
+* [naaaaaaaaaaaf](https://github.com/naaaaaaaaaaaf)
227 287
 * [8398a7](https://github.com/8398a7)
228 288
 * [857b](https://github.com/857b)
289
+* [insom](https://github.com/insom)
290
+* [tachyons](https://github.com/tachyons)
291
+* [Esteth](https://github.com/Esteth)
229 292
 * [unascribed](https://github.com/unascribed)
230 293
 * [Aguay-val](https://github.com/Aguay-val)
294
+* [Akihiko Odaki](mailto:nekomanma@pixiv.co.jp)
231 295
 * [knu](https://github.com/knu)
296
+* [h3poteto](https://github.com/h3poteto)
297
+* [unleashed](https://github.com/unleashed)
232 298
 * [alxrcs](https://github.com/alxrcs)
233 299
 * [console-cowboy](https://github.com/console-cowboy)
234 300
 * [pointlessone](https://github.com/pointlessone)
301
+* [Alkarex](https://github.com/Alkarex)
235 302
 * [a2](https://github.com/a2)
236 303
 * [0xa](https://github.com/0xa)
304
+* [palindromordnilap](https://github.com/palindromordnilap)
237 305
 * [virtualpain](https://github.com/virtualpain)
238 306
 * [sapphirus](https://github.com/sapphirus)
239 307
 * [amandavisconti](https://github.com/amandavisconti)
240 308
 * [ameliavoncat](https://github.com/ameliavoncat)
241 309
 * [ilpianista](https://github.com/ilpianista)
242
-* [andydrop](https://github.com/andydrop)
310
+* [Andreas Drop](mailto:andy@remline.de)
311
+* [andi1984](https://github.com/andi1984)
243 312
 * [schas002](https://github.com/schas002)
313
+* [abackstrom](https://github.com/abackstrom)
244 314
 * [jumbosushi](https://github.com/jumbosushi)
245 315
 * [ayumin](https://github.com/ayumin)
246 316
 * [BaptisteGelez](https://github.com/BaptisteGelez)
@@ -251,6 +321,7 @@ and provided thanks to the work of the following contributors:
251 321
 * [brycied00d](https://github.com/brycied00d)
252 322
 * [carlosjs23](https://github.com/carlosjs23)
253 323
 * [cgxxx](https://github.com/cgxxx)
324
+* [kibitan](https://github.com/kibitan)
254 325
 * [chrisheninger](https://github.com/chrisheninger)
255 326
 * [chris-martin](https://github.com/chris-martin)
256 327
 * [DoubleMalt](https://github.com/DoubleMalt)
@@ -259,22 +330,34 @@ and provided thanks to the work of the following contributors:
259 330
 * [chriswk](https://github.com/chriswk)
260 331
 * [csu](https://github.com/csu)
261 332
 * [kklleemm](https://github.com/kklleemm)
262
-* [monsterpit-daggertooth](https://github.com/monsterpit-daggertooth)
333
+* [colindean](https://github.com/colindean)
334
+* [dachinat](https://github.com/dachinat)
335
+* [multiple-creatures](https://github.com/multiple-creatures)
263 336
 * [watilde](https://github.com/watilde)
264 337
 * [daprice](https://github.com/daprice)
265 338
 * [dar5hak](https://github.com/dar5hak)
266 339
 * [kant](https://github.com/kant)
340
+* [maxolasersquad](https://github.com/maxolasersquad)
267 341
 * [singingwolfboy](https://github.com/singingwolfboy)
268 342
 * [davidcelis](https://github.com/davidcelis)
343
+* [davefp](https://github.com/davefp)
269 344
 * [yipdw](https://github.com/yipdw)
270 345
 * [debanshuk](https://github.com/debanshuk)
346
+* [Derek Lewis](mailto:derekcecillewis@gmail.com)
271 347
 * [dblandin](https://github.com/dblandin)
272
-* [aranaur](https://github.com/aranaur)
348
+* [Drew Gates](mailto:aranaur@users.noreply.github.com)
349
+* [dtschust](https://github.com/dtschust)
350
+* [Dryusdan](https://github.com/Dryusdan)
351
+* [eai04191](https://github.com/eai04191)
273 352
 * [d3vgru](https://github.com/d3vgru)
274 353
 * [Elizafox](https://github.com/Elizafox)
275 354
 * [ericblade](https://github.com/ericblade)
276 355
 * [mikoim](https://github.com/mikoim)
356
+* [espenronnevik](https://github.com/espenronnevik)
357
+* [Finariel](https://github.com/Finariel)
277 358
 * [siuying](https://github.com/siuying)
359
+* [fwenzel](https://github.com/fwenzel)
360
+* [GenbuHase](https://github.com/GenbuHase)
278 361
 * [hattori6789](https://github.com/hattori6789)
279 362
 * [algernon](https://github.com/algernon)
280 363
 * [Fastbyte01](https://github.com/Fastbyte01)
@@ -283,22 +366,25 @@ and provided thanks to the work of the following contributors:
283 366
 * [Fiaxhs](https://github.com/Fiaxhs)
284 367
 * [reedcourty](https://github.com/reedcourty)
285 368
 * [anneau](https://github.com/anneau)
369
+* [lanodan](https://github.com/lanodan)
370
+* [Harmon758](https://github.com/Harmon758)
286 371
 * [HellPie](https://github.com/HellPie)
287 372
 * [Habu-Kagumba](https://github.com/Habu-Kagumba)
288
-* [hinaloe](https://github.com/hinaloe)
289 373
 * [suzukaze](https://github.com/suzukaze)
290 374
 * [Hiromi-Kai](https://github.com/Hiromi-Kai)
375
+* [hishamhm](https://github.com/hishamhm)
291 376
 * [musashino205](https://github.com/musashino205)
292 377
 * [iwaim](https://github.com/iwaim)
293 378
 * [valrus](https://github.com/valrus)
294 379
 * [IMcD23](https://github.com/IMcD23)
295 380
 * [yi0713](https://github.com/yi0713)
296
-* [immae](https://github.com/immae)
297 381
 * [iblech](https://github.com/iblech)
382
+* [usbsnowcrash](https://github.com/usbsnowcrash)
298 383
 * [jack-michaud](https://github.com/jack-michaud)
299 384
 * [Floppy](https://github.com/Floppy)
300 385
 * [loomchild](https://github.com/loomchild)
301
-* [docjkl](https://github.com/docjkl)
386
+* [jenkr55](https://github.com/jenkr55)
387
+* [press5](https://github.com/press5)
302 388
 * [TrollDecker](https://github.com/TrollDecker)
303 389
 * [jmontane](https://github.com/jmontane)
304 390
 * [jonathanklee](https://github.com/jonathanklee)
@@ -307,28 +393,33 @@ and provided thanks to the work of the following contributors:
307 393
 * [joshuap](https://github.com/joshuap)
308 394
 * [Tiwy57](https://github.com/Tiwy57)
309 395
 * [xuv](https://github.com/xuv)
310
-* [Jnsll](https://github.com/Jnsll)
396
+* [June Sallou](mailto:jnsll@users.noreply.github.com)
311 397
 * [j0k3r](https://github.com/j0k3r)
312 398
 * [KEINOS](https://github.com/KEINOS)
313 399
 * [futoase](https://github.com/futoase)
314
-* [abjectio](https://github.com/abjectio)
400
+* [Pneumaticat](https://github.com/Pneumaticat)
401
+* [Kit Redgrave](mailto:qwertyitis@gmail.com)
402
+* [Knut Erik](mailto:abjectio@users.noreply.github.com)
315 403
 * [mkody](https://github.com/mkody)
316
-* [connyduck](https://github.com/connyduck)
317 404
 * [k0ta0uchi](https://github.com/k0ta0uchi)
318 405
 * [KrzysiekJ](https://github.com/KrzysiekJ)
319 406
 * [leowzukw](https://github.com/leowzukw)
320
-* [lmorchard](https://github.com/lmorchard)
407
+* [Tak](https://github.com/Tak)
321 408
 * [cacheflow](https://github.com/cacheflow)
322 409
 * [ldidry](https://github.com/ldidry)
323 410
 * [jemus42](https://github.com/jemus42)
324 411
 * [lfuelling](https://github.com/lfuelling)
325 412
 * [Grabacr07](https://github.com/Grabacr07)
326 413
 * [mistermantas](https://github.com/mistermantas)
414
+* [mareklach](https://github.com/mareklach)
327 415
 * [wirehack7](https://github.com/wirehack7)
416
+* [martymcguire](https://github.com/martymcguire)
328 417
 * [marvinkopf](https://github.com/marvinkopf)
329 418
 * [otsune](https://github.com/otsune)
330
-* [m-blc](https://github.com/m-blc)
419
+* [Mathias B](mailto:10813340+mathias-b@users.noreply.github.com)
331 420
 * [matt-auckland](https://github.com/matt-auckland)
421
+* [webroo](https://github.com/webroo)
422
+* [matthiasbeyer](https://github.com/matthiasbeyer)
332 423
 * [mattjmattj](https://github.com/mattjmattj)
333 424
 * [mtparet](https://github.com/mtparet)
334 425
 * [maximeborges](https://github.com/maximeborges)
@@ -336,16 +427,21 @@ and provided thanks to the work of the following contributors:
336 427
 * [michaeljdeeb](https://github.com/michaeljdeeb)
337 428
 * [Themimitoof](https://github.com/Themimitoof)
338 429
 * [cyweo](https://github.com/cyweo)
339
-* [M1dgard](https://github.com/M1dgard)
430
+* [Midgard](mailto:m1dgard@users.noreply.github.com)
340 431
 * [mike-burns](https://github.com/mike-burns)
341 432
 * [verymilan](https://github.com/verymilan)
342 433
 * [milmazz](https://github.com/milmazz)
434
+* [premist](https://github.com/premist)
343 435
 * [Mnkai](https://github.com/Mnkai)
344 436
 * [mitchhentges](https://github.com/mitchhentges)
345 437
 * [moritzheiber](https://github.com/moritzheiber)
346 438
 * [mouse-reeve](https://github.com/mouse-reeve)
439
+* [Mozinet-fr](https://github.com/Mozinet-fr)
347 440
 * [lae](https://github.com/lae)
348 441
 * [Nanamachi](https://github.com/Nanamachi)
442
+* [orinthe](https://github.com/orinthe)
443
+* [NecroTechno](https://github.com/NecroTechno)
444
+* [Dar13](https://github.com/Dar13)
349 445
 * [ngerakines](https://github.com/ngerakines)
350 446
 * [vonneudeck](https://github.com/vonneudeck)
351 447
 * [Ninetailed](https://github.com/Ninetailed)
@@ -355,96 +451,381 @@ and provided thanks to the work of the following contributors:
355 451
 * [norayr](https://github.com/norayr)
356 452
 * [joyeusenoelle](https://github.com/joyeusenoelle)
357 453
 * [OlivierNicole](https://github.com/OlivierNicole)
454
+* [noppa](https://github.com/noppa)
358 455
 * [Otakan951](https://github.com/Otakan951)
359 456
 * [fahy](https://github.com/fahy)
457
+* [PatrickRWells](https://github.com/PatrickRWells)
360 458
 * [Pangoraw](https://github.com/Pangoraw)
361
-* [pwoolcoc](https://github.com/pwoolcoc)
362 459
 * [peterkeen](https://github.com/peterkeen)
363
-* [petzah](https://github.com/petzah)
364
-* [ignisf](https://github.com/ignisf)
460
+* [pgate](https://github.com/pgate)
461
+* [retokromer](https://github.com/retokromer)
365 462
 * [rfwatson](https://github.com/rfwatson)
366 463
 * [rfreebern](https://github.com/rfreebern)
464
+* [Ryan Wade](mailto:ryan.wade@protonmail.com)
367 465
 * [sylph01](https://github.com/sylph01)
466
+* [S-H-GAMELINKS](https://github.com/S-H-GAMELINKS)
368 467
 * [staticsafe](https://github.com/staticsafe)
369 468
 * [snwh](https://github.com/snwh)
469
+* [sts10](https://github.com/sts10)
370 470
 * [skoji](https://github.com/skoji)
371 471
 * [ScienJus](https://github.com/ScienJus)
372
-* [larkinscott](https://github.com/larkinscott)
373
-* [imolein](https://github.com/imolein)
374
-* [blinry](https://github.com/blinry)
375
-* [Noiwex](https://github.com/Noiwex)
376
-* [yuki764](https://github.com/yuki764)
377
-* [shnjp](https://github.com/shnjp)
378
-* [ernix](https://github.com/ernix)
379
-* [rosylilly](https://github.com/rosylilly)
380
-* [shouko](https://github.com/shouko)
381
-* [sossii](https://github.com/sossii)
382
-* [StefOfficiel](https://github.com/StefOfficiel)
383
-* [svetlik](https://github.com/svetlik)
384
-* [dereckson](https://github.com/dereckson)
385
-* [theboss](https://github.com/theboss)
386
-* [takp](https://github.com/takp)
387
-* [tkusano](https://github.com/tkusano)
388
-* [TheInventrix](https://github.com/TheInventrix)
389
-* [shug0](https://github.com/shug0)
390
-* [Fortyseven](https://github.com/Fortyseven)
391
-* [tobypinder](https://github.com/tobypinder)
392
-* [tomosm](https://github.com/tomosm)
393
-* [TomoyaShibata](https://github.com/TomoyaShibata)
394
-* [TrashMacNugget](https://github.com/TrashMacNugget)
395
-* [treyssatvincent](https://github.com/treyssatvincent)
396
-* [optikfluffel](https://github.com/optikfluffel)
397
-* [vmincev](https://github.com/vmincev)
398
-* [waldyrious](https://github.com/waldyrious)
399
-* [tahnok](https://github.com/tahnok)
400
-* [YDrogen](https://github.com/YDrogen)
401
-* [YOSHIOKAEiichiro](https://github.com/YOSHIOKAEiichiro)
402
-* [S-YOU](https://github.com/S-YOU)
403
-* [YaQ00](https://github.com/YaQ00)
404
-* [yanakend](https://github.com/yanakend)
405
-* [orzFly](https://github.com/orzFly)
406
-* [chansuke](https://github.com/chansuke)
407
-* [yuntan](https://github.com/yuntan)
408
-* [LogicalDash](https://github.com/LogicalDash)
409
-* [ZiiX](https://github.com/ZiiX)
410
-* [benklop](https://github.com/benklop)
411
-* [caasi](https://github.com/caasi)
412
-* [caesarologia](https://github.com/caesarologia)
413
-* [chrolis](https://github.com/chrolis)
414
-* [cormojs](https://github.com/cormojs)
415
-* [cpsdqs](https://github.com/cpsdqs)
416
-* [d0p1s4m4](https://github.com/d0p1s4m4)
417
-* [evilny0](https://github.com/evilny0)
418
-* [febrezo](https://github.com/febrezo)
419
-* [fsubal](https://github.com/fsubal)
420
-* [dikky1218](https://github.com/dikky1218)
421
-* [gentarok](https://github.com/gentarok)
422
-* [hakoai](https://github.com/hakoai)
423
-* [chaosbunker](https://github.com/chaosbunker)
424
-* [isati](https://github.com/isati)
425
-* [jkap](https://github.com/jkap)
426
-* [jirayudech](https://github.com/jirayudech)
427
-* [jukper](https://github.com/jukper)
428
-* [karlyeurl](https://github.com/karlyeurl)
429
-* [kedamaDQ](https://github.com/kedamaDQ)
430
-* [kuro5hin](https://github.com/kuro5hin)
431
-* [maxypy](https://github.com/maxypy)
432
-* [marcus-herrmann](https://github.com/marcus-herrmann)
433
-* [mshrtkch](https://github.com/mshrtkch)
434
-* [muan](https://github.com/muan)
435
-* [rch850](https://github.com/rch850)
436
-* [roikale](https://github.com/roikale)
437
-* [rysiekpl](https://github.com/rysiekpl)
438
-* [saturday06](https://github.com/saturday06)
439
-* [scriptjunkie](https://github.com/scriptjunkie)
440
-* [seekr](https://github.com/seekr)
441
-* [syui](https://github.com/syui)
442
-* [tackeyy](https://github.com/tackeyy)
443
-* [tmyt](https://github.com/tmyt)
444
-* [utam0k](https://github.com/utam0k)
445
-* [vpzomtrrfrt](https://github.com/vpzomtrrfrt)
446
-* [walfie](https://github.com/walfie)
447
-* [y-temp4](https://github.com/y-temp4)
448
-* [ymmtmdk](https://github.com/ymmtmdk)
472
+* [Scott Larkin](mailto:scott@codeclimate.com)
473
+* [Sebastian Hübner](mailto:imolein@users.noreply.github.com)
474
+* [Sebastian Morr](mailto:sebastian@morr.cc)
475
+* [Sergei Č](mailto:noiwex1911@gmail.com)
476
+* [Setuu](mailto:yuki764setuu@gmail.com)
477
+* [Shaun Gillies](mailto:me@shaungillies.net)
478
+* [Shin Adachi](mailto:shn@glucose.jp)
479
+* [Shin Kojima](mailto:shin@kojima.org)
480
+* [Sho Kusano](mailto:rosylilly@aduca.org)
481
+* [Shouko Yu](mailto:imshouko@gmail.com)
482
+* [Sina Mashek](mailto:sina@mashek.xyz)
483
+* [Sir-Boops](mailto:admin@boops.me)
484
+* [Soshi Kato](mailto:mail@sossii.com)
485
+* [Spanky](mailto:2788886+spankyworks@users.noreply.github.com)
486
+* [StefOfficiel](mailto:pichard.stephane@free.fr)
487
+* [Steven Tappert](mailto:admin@dark-it.net)
488
+* [Svetlozar Todorov](mailto:svetlik@users.noreply.github.com)
489
+* [Sébastien Santoro](mailto:dereckson@espace-win.org)
490
+* [Tad Thorley](mailto:phaedryx@users.noreply.github.com)
491
+* [Takayoshi Nishida](mailto:takayoshi.nishida@gmail.com)
492
+* [Takayuki KUSANO](mailto:github@tkusano.jp)
493
+* [TakesxiSximada](mailto:takesxi.sximada@gmail.com)
494
+* [TheInventrix](mailto:theinventrix@users.noreply.github.com)
495
+* [Thomas Alberola](mailto:thomas@needacoffee.fr)
496
+* [Toby Deshane](mailto:fortyseven@users.noreply.github.com)
497
+* [Toby Pinder](mailto:gigitrix@gmail.com)
498
+* [Tomonori Murakami](mailto:crosslife777@gmail.com)
499
+* [TomoyaShibata](mailto:wind.of.hometown@gmail.com)
500
+* [Treyssat-Vincent Nino](mailto:treyssatvincent@users.noreply.github.com)
501
+* [Udo Kramer](mailto:optik@fluffel.io)
502
+* [Una](mailto:una@unascribed.com)
503
+* [Ushitora Anqou](mailto:ushitora_anqou@yahoo.co.jp)
504
+* [Valentin Lorentz](mailto:progval+git@progval.net)
505
+* [Vladimir Mincev](mailto:vladimir@canicinteractive.com)
506
+* [Waldir Pimenta](mailto:waldyrious@gmail.com)
507
+* [Wesley Ellis](mailto:tahnok@gmail.com)
508
+* [Wiktor](mailto:wiktor@metacode.biz)
509
+* [Wonderfall](mailto:wonderfall@schrodinger.io)
510
+* [YDrogen](mailto:ydrogen45@gmail.com)
511
+* [YMHuang](mailto:ymhuang@fmbase.tw)
512
+* [YOSHIOKA Eiichiro](mailto:yoshioka.eiichiro@gmail.com)
513
+* [YOU](mailto:stackexchange.you@gmail.com)
514
+* [YaQ](mailto:i_k_o_m_a_7@yahoo.co.jp)
515
+* [Yanaken](mailto:yanakend@gmail.com)
516
+* [Yann Klis](mailto:yann.klis@gmail.com)
517
+* [Yeechan Lu](mailto:wz.bluesnow@gmail.com)
518
+* [Yusuke Abe](mailto:moonset20@gmail.com)
519
+* [Zachary Spector](mailto:logicaldash@gmail.com)
520
+* [ZiiX](mailto:ziix@users.noreply.github.com)
521
+* [asria-jp](mailto:is@alicematic.com)
522
+* [ava](mailto:vladooku@users.noreply.github.com)
523
+* [benklop](mailto:benklop@gmail.com)
524
+* [bsky](mailto:git@imbsky.net)
525
+* [caesarologia](mailto:lopesgemelli.1@gmail.com)
526
+* [cbayerlein](mailto:c.bayerlein@gmail.com)
527
+* [chrolis](mailto:chrolis@users.noreply.github.com)
528
+* [cormo](mailto:cormorant2+github@gmail.com)
529
+* [d0p1](mailto:dopi-sama@hush.com)
530
+* [evilny0](mailto:evilny0@moomoocamp.net)
531
+* [febrezo](mailto:felixbrezo@gmail.com)
532
+* [fsubal](mailto:fsubal@users.noreply.github.com)
533
+* [fusshi-](mailto:dikky1218@users.noreply.github.com)
534
+* [gentaro](mailto:gentaroooo@gmail.com)
535
+* [hakoai](mailto:hk--76@qa2.so-net.ne.jp)
536
+* [haosbvnker](mailto:github@chaosbunker.com)
537
+* [isati](mailto:phil@juchnowi.cz)
538
+* [jacob](mailto:jacobherringtondeveloper@gmail.com)
539
+* [jenn kaplan](mailto:me@jkap.io)
540
+* [jirayudech](mailto:jirayudech@gmail.com)
541
+* [jomo](mailto:github@jomo.tv)
542
+* [jooops](mailto:joops@autistici.org)
543
+* [jukper](mailto:jukkaperanto@gmail.com)
544
+* [jumoru](mailto:jumoru@mailbox.org)
545
+* [karlyeurl](mailto:karl.yeurl@gmail.com)
546
+* [kedama](mailto:32974885+kedamadq@users.noreply.github.com)
547
+* [kodai](mailto:shirafuta.kodai@gmail.com)
548
+* [kuro5hin](mailto:rusty@kuro5hin.org)
549
+* [luzpaz](mailto:luzpaz@users.noreply.github.com)
550
+* [maxypy](mailto:maxime@mpigou.fr)
551
+* [mhe](mailto:mail@marcus-herrmann.com)
552
+* [mimikun](mailto:dzdzble_effort_311@outlook.jp)
553
+* [mshrtkch](mailto:mshrtkch@users.noreply.github.com)
554
+* [muan](mailto:muan@github.com)
555
+* [namelessGonbai](mailto:43787036+namelessgonbai@users.noreply.github.com)
556
+* [neetshin](mailto:neetshin@neetsh.in)
557
+* [nightpool](mailto:nightpool@users.noreply.github.com)
558
+* [rch850](mailto:rich850@gmail.com)
559
+* [roikale](mailto:roikale@users.noreply.github.com)
560
+* [rysiekpl](mailto:rysiek@hackerspace.pl)
561
+* [saturday06](mailto:dyob@lunaport.net)
562
+* [scriptjunkie](mailto:scriptjunkie@scriptjunkie.us)
563
+* [seekr](mailto:mario.drs@gmail.com)
564
+* [sundevour](mailto:31990469+sundevour@users.noreply.github.com)
565
+* [syui](mailto:syui@users.noreply.github.com)
566
+* [tackeyy](mailto:mailto.takita.yusuke@gmail.com)
567
+* [tateisu](mailto:tateisu@gmail.com)
568
+* [tmyt](mailto:shigure@refy.net)
569
+* [trevDev()](mailto:trev@trevdev.ca)
570
+* [utam0k](mailto:k0ma@utam0k.jp)
571
+* [vpzomtrrfrt](mailto:vpzomtrrfrt@gmail.com)
572
+* [walfie](mailto:walfington@gmail.com)
573
+* [y-temp4](mailto:y.temp4@gmail.com)
574
+* [ymmtmdk](mailto:ymmtmdk@gmail.com)
575
+* [yoshipc](mailto:yoooo@yoshipc.net)
576
+* [Özcan Zafer AYAN](mailto:ozcanzaferayan@gmail.com)
577
+* [ばん](mailto:detteiu0321@gmail.com)
578
+* [みたらしだんご](mailto:mitarashidango@users.noreply.github.com)
579
+* [りんすき](mailto:6533808+rinsuki@users.noreply.github.com)
580
+* [ヨイツの賢狼ホロ | 3rd style](mailto:horo@yoitsu.moe)
581
+* [猫吸血鬼ディフリス / 猫ロキP](mailto:deflis@gmail.com)
582
+* [艮 鮟鱇](mailto:ushitora_anqou@yahoo.co.jp)
583
+* [西小倉宏信](mailto:nishiko@mindia.jp)
584
+* [雨宮美羽](mailto:k737566@gmail.com)
449 585
 
450 586
 This document is provided for informational purposes only. Since it is only updated once per release, the version you are looking at may be currently out of date. To see the full list of contributors, consider looking at the [git history](https://github.com/tootsuite/mastodon/graphs/contributors) instead.
587
+
588
+## Translators
589
+
590
+Following people have contributed to translation of Mastodon:
591
+
592
+- **Arabic**
593
+  - ButterflyOfFire
594
+- **Asturian**
595
+  - ButterflyOfFire
596
+  - Enol P.
597
+- **Basque**
598
+  - Aitzol
599
+  - ButterflyOfFire
600
+  - Gorka Azkarate
601
+  - Osoitz
602
+  - Peru Iparragirre
603
+- **Bulgarian**
604
+  - ButterflyOfFire
605
+- **Catalan**
606
+  - ButterflyOfFire
607
+  - Joan Montané
608
+  - Jose Luis
609
+  - spla
610
+- **Chinese (Hong Kong)**
611
+  - ButterflyOfFire
612
+  - Luzi Leung
613
+- **Chinese (Simplified)**
614
+  - Allen Zhong
615
+  - ButterflyOfFire
616
+  - SerCom_KC
617
+- **Chinese (Traditional)**
618
+  - ButterflyOfFire
619
+  - James58899
620
+  - Jeff Huang
621
+  - S1ttidoe477
622
+  - SHA265
623
+- **Corsican**
624
+  - Alix D. R.
625
+  - ButterflyOfFire
626
+- **Croatian**
627
+  - ButterflyOfFire
628
+- **Czech**
629
+  - ButterflyOfFire
630
+  - Lorem Ipsum
631
+  - Marek Ľach
632
+- **Danish**
633
+  - ButterflyOfFire
634
+  - Rasmus Sæderup
635
+- **Dutch**
636
+  - ButterflyOfFire
637
+  - Jelv
638
+  - jeroenpraat
639
+  - rscmbbng
640
+- **English**
641
+  - ButterflyOfFire
642
+  - Renato "Lond" Cerqueira
643
+- **Esperanto**
644
+  - ButterflyOfFire
645
+  - Jeong Arm
646
+  - Martin Bodin
647
+  - Mélanie Chauvel
648
+  - Vanege
649
+  - tuxayo/Victor Grousset
650
+- **Finnish**
651
+  - ButterflyOfFire
652
+  - Jonne Arjoranta
653
+  - S Heija
654
+  - Taru Luojola
655
+- **French**
656
+  - Alda Marteau-Hardi
657
+  - Alix D. R.
658
+  - Baptiste Jonglez
659
+  - ButterflyOfFire
660
+  - Franck Paul
661
+  - Jean-Baptiste Holcroft
662
+  - Jonathan Chan
663
+  - Letiteuf55
664
+  - Martin Bodin
665
+  - Mélanie Chauvel
666
+  - Olivier Humbert
667
+  - Paul Marques Mota
668
+  - Sylvhem
669
+  - Technowix
670
+  - Thibaut Girka
671
+  - Théodore
672
+  - azenet
673
+  - codl
674
+- **Galician**
675
+  - ButterflyOfFire
676
+  - Xose M.
677
+  - manequim
678
+- **Georgian**
679
+  - ButterflyOfFire
680
+- **German**
681
+  - Benedikt Geißler
682
+  - ButterflyOfFire
683
+  - Daniel
684
+  - Eugen Rochko
685
+  - Koyu Berteon
686
+  - Patrick Figel
687
+  - Weblate Admin
688
+  - averageunicorn
689
+  - ePirat
690
+  - koyu
691
+  - larsreineke
692
+  - lilo
693
+- **Greek**
694
+  - Antonis
695
+  - ButterflyOfFire
696
+  - Dimitris Maroulidis
697
+  - Konstantinos Grevenitis
698
+- **Hebrew**
699
+  - ButterflyOfFire
700
+  - Ira
701
+  - Yaron Shahrabani
702
+- **Hungarian**
703
+  - Adam Paszternak
704
+  - ButterflyOfFire
705
+  - Tibike Miklós
706
+- **Ido**
707
+  - ButterflyOfFire
708
+- **Indonesian**
709
+  - Alfiana Sibuea
710
+  - ButterflyOfFire
711
+  - Dito Kurnia Pratama
712
+  - Eirworks
713
+  - afachri
714
+  - se7entime
715
+- **Italian**
716
+  - Alessandro Levati
717
+  - ButterflyOfFire
718
+  - Giuseppe Pignataro
719
+  - Stefano
720
+- **Japanese**
721
+  - ButterflyOfFire
722
+  - Kumasun Morino
723
+  - Yamagishi Kazutoshi
724
+  - mayaeh
725
+  - osapon
726
+  - unarist
727
+  - 小鳥遊まりあ
728
+  - 森の子リスのミーコの大冒険
729
+- **Korean**
730
+  - ButterflyOfFire
731
+  - Jeong Arm
732
+  - Minori Hiraoka
733
+  - Yamagishi Kazutoshi
734
+- **Malay**
735
+  - ButterflyOfFire
736
+  - Muhammad Nur Hidayat (MNH48)
737
+- **Norwegian (old code)**
738
+  - ButterflyOfFire
739
+  - Espen Rønnevik
740
+  - Tale
741
+- **Occitan**
742
+  - ButterflyOfFire
743
+  - Maxenç
744
+  - Quenti2
745
+  - Quentí
746
+- **Persian**
747
+  - ButterflyOfFire
748
+  - Masoud Abkenar
749
+- **Polish**
750
+  - ButterflyOfFire
751
+  - Jakub Mendyk
752
+  - Marcin Mikołajczak
753
+  - Marek Ľach
754
+  - Stasiek Michalski
755
+  - krkk
756
+- **Portuguese**
757
+  - ButterflyOfFire
758
+  - Hugo Gameiro
759
+  - manequim
760
+- **Portuguese (Brazil)**
761
+  - André Andrade
762
+  - Anna e só
763
+  - ButterflyOfFire
764
+  - Renato "Lond" Cerqueira
765
+- **Romanian**
766
+  - ButterflyOfFire
767
+  - adrianbblk
768
+- **Russian**
769
+  - Andrew Zyabin
770
+  - ButterflyOfFire
771
+  - Evgeny Petrov
772
+  - Yaron Shahrabani
773
+- **Serbian**
774
+  - Branko Kokanovic
775
+  - Burekz Finezt
776
+  - ButterflyOfFire
777
+- **Serbian (latin)**
778
+  - ButterflyOfFire
779
+- **Slovak**
780
+  - ButterflyOfFire
781
+  - Ivan Pleva
782
+  - Lorem Ipsum
783
+  - Marek Ľach
784
+  - Peter
785
+- **Slovenian**
786
+  - ButterflyOfFire
787
+  - Kristijan Tkalec
788
+- **Spanish**
789
+  - Angeles Broullón
790
+  - Antón López
791
+  - ButterflyOfFire
792
+  - Carlos Mondragon
793
+  - David Charte
794
+  - Emmanuel
795
+  - Lothar Wolf
796
+  - Pablo de la Concepción Sanz
797
+- **Swedish**
798
+  - ButterflyOfFire
799
+  - Elias Mårtenson
800
+  - Isak Holmström
801
+  - Shellkr
802
+  - Stefan Midjich
803
+  - Tim Stahel
804
+- **Telugu**
805
+  - ButterflyOfFire
806
+  - Joseph Nuthalapati
807
+  - Ranjith Tellakula
808
+  - avndp
809
+- **Thai**
810
+  - ButterflyOfFire
811
+- **Turkish**
812
+  - ButterflyOfFire
813
+- **Ukrainian**
814
+  - ButterflyOfFire
815
+  - Ivan Verchenko
816
+  - alexcleac
817
+- **Welsh**
818
+  - ButterflyOfFire
819
+  - Jaz-Michael King
820
+  - Kevin Beynon
821
+  - Owain Rhys Lewis
822
+  - Renato "Lond" Cerqueira
823
+  - Rhoslyn Prys
824
+  - carl morris
825
+- **Armenian**
826
+  - ButterflyOfFire
827
+- **Latvian**
828
+  - ButterflyOfFire
829
+- **Tamil**
830
+  - ButterflyOfFire
831
+  - Prasanna Venkadesh

+ 19
- 0
Aptfile View File

@@ -5,6 +5,25 @@ libidn11
5 5
 libidn11-dev
6 6
 libpq-dev
7 7
 libprotobuf-dev
8
+libssl-dev
8 9
 libxdamage1
9 10
 libxfixes3
10 11
 protobuf-compiler
12
+zlib1g-dev
13
+libcairo2
14
+libcroco3
15
+libdatrie1
16
+libgdk-pixbuf2.0-0
17
+libgraphite2-3
18
+libharfbuzz0b
19
+libpango-1.0-0
20
+libpangocairo-1.0-0
21
+libpangoft2-1.0-0
22
+libpixman-1-0
23
+librsvg2-2
24
+libthai-data
25
+libthai0
26
+libvpx5
27
+libxcb-render0
28
+libxcb-shm0
29
+libxrender1

+ 330
- 0
CHANGELOG.md View File

@@ -0,0 +1,330 @@
1
+Changelog
2
+=========
3
+
4
+All notable changes to this project will be documented in this file.
5
+
6
+## [2.7.0] - 2019-01-20
7
+### Added
8
+
9
+- Add link for adding a user to a list from their profile ([namelessGonbai](https://github.com/tootsuite/mastodon/pull/9062))
10
+- Add joining several hashtags in a single column ([gdpelican](https://github.com/tootsuite/mastodon/pull/8904))
11
+- Add volume sliders for videos ([sumdog](https://github.com/tootsuite/mastodon/pull/9366))
12
+- Add a tooltip explaining what a locked account is ([pawelngei](https://github.com/tootsuite/mastodon/pull/9403))
13
+- Add preloaded cache for common JSON-LD contexts ([ThibG](https://github.com/tootsuite/mastodon/pull/9412))
14
+- Add profile directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9427))
15
+- Add setting to not group reblogs in home feed ([ThibG](https://github.com/tootsuite/mastodon/pull/9248))
16
+- Add admin ability to remove a user's header image ([ThibG](https://github.com/tootsuite/mastodon/pull/9495))
17
+- Add account hashtags to ActivityPub actor JSON ([Gargron](https://github.com/tootsuite/mastodon/pull/9450))
18
+- Add error message for avatar image that's too large ([sumdog](https://github.com/tootsuite/mastodon/pull/9518))
19
+- Add notification quick-filter bar ([pawelngei](https://github.com/tootsuite/mastodon/pull/9399))
20
+- Add new first-time tutorial ([Gargron](https://github.com/tootsuite/mastodon/pull/9531))
21
+- Add moderation warnings ([Gargron](https://github.com/tootsuite/mastodon/pull/9519))
22
+- Add emoji codepoint mappings for v11.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9618))
23
+- Add REST API for creating an account ([Gargron](https://github.com/tootsuite/mastodon/pull/9572))
24
+- Add support for Malayalam in language filter ([tachyons](https://github.com/tootsuite/mastodon/pull/9624))
25
+- Add exclude_reblogs option to account statuses API ([Gargron](https://github.com/tootsuite/mastodon/pull/9640))
26
+- Add local followers page to admin account UI ([chr-1x](https://github.com/tootsuite/mastodon/pull/9610))
27
+- Add healthcheck commands to docker-compose.yml ([BenLubar](https://github.com/tootsuite/mastodon/pull/9143))
28
+- Add handler for Move activity to migrate followers ([Gargron](https://github.com/tootsuite/mastodon/pull/9629))
29
+- Add CSV export for lists and domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/9677))
30
+- Add `tootctl accounts follow ACCT` ([Gargron](https://github.com/tootsuite/mastodon/pull/9414))
31
+- Add scheduled statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9706))
32
+- Add immutable caching for S3 objects ([nolanlawson](https://github.com/tootsuite/mastodon/pull/9722))
33
+- Add cache to custom emojis API ([Gargron](https://github.com/tootsuite/mastodon/pull/9732))
34
+- Add preview cards to non-detailed statuses on public pages ([Gargron](https://github.com/tootsuite/mastodon/pull/9714))
35
+- Add `mod` and `moderator` to list of default reserved usernames ([Gargron](https://github.com/tootsuite/mastodon/pull/9713))
36
+- Add quick links to the admin interface in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/8545))
37
+- Add `tootctl domains crawl` ([Gargron](https://github.com/tootsuite/mastodon/pull/9809))
38
+- Add attachment list fallback to public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9780))
39
+- Add `tootctl --version` ([Gargron](https://github.com/tootsuite/mastodon/pull/9835))
40
+- Add information about how to opt-in to the directory on the directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9834))
41
+- Add timeouts for S3 ([Gargron](https://github.com/tootsuite/mastodon/pull/9842))
42
+- Add support for non-public reblogs from ActivityPub ([Gargron](https://github.com/tootsuite/mastodon/pull/9841))
43
+- Add sending of `Reject` activity when sending a `Block` activity ([ThibG](https://github.com/tootsuite/mastodon/pull/9811))
44
+
45
+### Changed
46
+
47
+- Temporarily pause timeline if mouse moved recently ([lmorchard](https://github.com/tootsuite/mastodon/pull/9200))
48
+- Change the password form order ([mayaeh](https://github.com/tootsuite/mastodon/pull/9267))
49
+- Redesign admin UI for accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/9340), [Gargron](https://github.com/tootsuite/mastodon/pull/9643))
50
+- Redesign admin UI for instances/domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/9645))
51
+- Swap avatar and header input fields in profile page ([ThibG](https://github.com/tootsuite/mastodon/pull/9271))
52
+- When posting in mobile mode, go back to previous history location ([ThibG](https://github.com/tootsuite/mastodon/pull/9502))
53
+- Split out is_changing_upload from is_submitting ([ThibG](https://github.com/tootsuite/mastodon/pull/9536))
54
+- Back to the getting-started when pins the timeline. ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9561))
55
+- Allow unauthenticated REST API access to GET /api/v1/accounts/:id/statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9573))
56
+- Limit maximum visibility of local silenced users to unlisted ([ThibG](https://github.com/tootsuite/mastodon/pull/9583))
57
+- Change API error message for unconfirmed accounts ([noellabo](https://github.com/tootsuite/mastodon/pull/9625))
58
+- Change the icon to "reply-all" when it's a reply to other accounts ([mayaeh](https://github.com/tootsuite/mastodon/pull/9378))
59
+- Do not ignore federated reports targetting already-reported accounts ([ThibG](https://github.com/tootsuite/mastodon/pull/9534))
60
+- Upgrade default Ruby version to 2.6.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9688))
61
+- Change e-mail digest frequency ([Gargron](https://github.com/tootsuite/mastodon/pull/9689))
62
+- Change Docker images for Tor support in docker-compose.yml ([Sir-Boops](https://github.com/tootsuite/mastodon/pull/9438))
63
+- Display fallback link card thumbnail when none is given ([Gargron](https://github.com/tootsuite/mastodon/pull/9715))
64
+- Change account bio length validation to ignore mention domains and URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/9717))
65
+- Use configured contact user for "anonymous" federation activities ([yukimochi](https://github.com/tootsuite/mastodon/pull/9661))
66
+- Change remote interaction dialog to use specific actions instead of generic "interact" ([Gargron](https://github.com/tootsuite/mastodon/pull/9743))
67
+- Always re-fetch public key when signature verification fails to support blind key rotation ([ThibG](https://github.com/tootsuite/mastodon/pull/9667))
68
+- Make replies to boosts impossible, connect reply to original status instead ([valerauko](https://github.com/tootsuite/mastodon/pull/9129))
69
+- Change e-mail MX validation to check both A and MX records against blacklist ([Gargron](https://github.com/tootsuite/mastodon/pull/9489))
70
+- Hide floating action button on search and getting started pages ([tmm576](https://github.com/tootsuite/mastodon/pull/9826))
71
+- Redesign public hashtag page to use a masonry layout ([Gargron](https://github.com/tootsuite/mastodon/pull/9822))
72
+- Use `summary` as summary instead of content warning for converted ActivityPub objects ([Gargron](https://github.com/tootsuite/mastodon/pull/9823))
73
+- Display a double reply arrow on public pages for toots that are replies ([ThibG](https://github.com/tootsuite/mastodon/pull/9808))
74
+- Change admin UI right panel size to be wider ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9768))
75
+
76
+### Removed
77
+
78
+- Remove links to bridge.joinmastodon.org (non-functional) ([Gargron](https://github.com/tootsuite/mastodon/pull/9608))
79
+- Remove LD-Signatures from activities that do not need them ([ThibG](https://github.com/tootsuite/mastodon/pull/9659))
80
+
81
+### Fixed
82
+
83
+- Remove unused computation of reblog references from updateTimeline ([ThibG](https://github.com/tootsuite/mastodon/pull/9244))
84
+- Fix loaded embeds resetting if a status arrives from API again ([ThibG](https://github.com/tootsuite/mastodon/pull/9270))
85
+- Fix race condition causing shallow status with only a "favourited" attribute ([ThibG](https://github.com/tootsuite/mastodon/pull/9272))
86
+- Remove intermediary arrays when creating hash maps from results ([Gargron](https://github.com/tootsuite/mastodon/pull/9291))
87
+- Extract counters from accounts table to account_stats table to improve performance ([Gargron](https://github.com/tootsuite/mastodon/pull/9295))
88
+- Change identities id column to a bigint ([Gargron](https://github.com/tootsuite/mastodon/pull/9371))
89
+- Fix conversations API pagination ([ThibG](https://github.com/tootsuite/mastodon/pull/9407))
90
+- Improve account suspension speed and completeness ([Gargron](https://github.com/tootsuite/mastodon/pull/9290))
91
+- Fix thread depth computation in statuses_controller ([ThibG](https://github.com/tootsuite/mastodon/pull/9426))
92
+- Fix database deadlocks by moving account stats update outside transaction ([ThibG](https://github.com/tootsuite/mastodon/pull/9437))
93
+- Escape HTML in profile name preview in profile settings ([pawelngei](https://github.com/tootsuite/mastodon/pull/9446))
94
+- Use same CORS policy for /@:username and /users/:username ([ThibG](https://github.com/tootsuite/mastodon/pull/9485))
95
+- Make custom emoji domains case insensitive ([Esteth](https://github.com/tootsuite/mastodon/pull/9474))
96
+- Various fixes to scrollable lists and media gallery ([ThibG](https://github.com/tootsuite/mastodon/pull/9501))
97
+- Fix bootsnap cache directory being declared relatively ([Gargron](https://github.com/tootsuite/mastodon/pull/9511))
98
+- Fix timeline pagination in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9516))
99
+- Fix padding on dropdown elements in preferences ([ThibG](https://github.com/tootsuite/mastodon/pull/9517))
100
+- Make avatar and headers respect GIF autoplay settings ([ThibG](https://github.com/tootsuite/mastodon/pull/9515))
101
+- Do no retry Web Push workers if the server returns a 4xx response ([Gargron](https://github.com/tootsuite/mastodon/pull/9434))
102
+- Minor scrollable list fixes ([ThibG](https://github.com/tootsuite/mastodon/pull/9551))
103
+- Ignore low-confidence CharlockHolmes guesses when parsing link cards ([ThibG](https://github.com/tootsuite/mastodon/pull/9510))
104
+- Fix `tootctl accounts rotate` not updating public keys ([Gargron](https://github.com/tootsuite/mastodon/pull/9556))
105
+- Fix CSP / X-Frame-Options for media players ([jomo](https://github.com/tootsuite/mastodon/pull/9558))
106
+- Fix unnecessary loadMore calls when the end of a timeline has been reached ([ThibG](https://github.com/tootsuite/mastodon/pull/9581))
107
+- Skip mailer job retries when a record no longer exists ([Gargron](https://github.com/tootsuite/mastodon/pull/9590))
108
+- Fix composer not getting focus after reply confirmation dialog ([ThibG](https://github.com/tootsuite/mastodon/pull/9602))
109
+- Fix signature verification stoplight triggering on non-timeout errors ([Gargron](https://github.com/tootsuite/mastodon/pull/9617))
110
+- Fix ThreadResolveWorker getting queued with invalid URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/9628))
111
+- Fix crash when clearing uninitialized timeline ([ThibG](https://github.com/tootsuite/mastodon/pull/9662))
112
+- Avoid duplicate work by merging ReplyDistributionWorker into DistributionWorker ([ThibG](https://github.com/tootsuite/mastodon/pull/9660))
113
+- Skip full text search if it fails, instead of erroring out completely ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9654))
114
+- Fix profile metadata links not verifying correctly sometimes ([shrft](https://github.com/tootsuite/mastodon/pull/9673))
115
+- Ensure blocked user unfollows blocker if Block/Undo-Block activities are processed out of order ([ThibG](https://github.com/tootsuite/mastodon/pull/9687))
116
+- Fix unreadable text color in report modal for some statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9716))
117
+- Stop GIFV timeline preview explicitly when it's opened in modal ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9749))
118
+- Fix scrollbar width compensation ([ThibG](https://github.com/tootsuite/mastodon/pull/9824))
119
+- Fix race conditions when processing deleted toots ([ThibG](https://github.com/tootsuite/mastodon/pull/9815))
120
+- Fix SSO issues on WebKit browsers by disabling Same-Site cookie again ([moritzheiber](https://github.com/tootsuite/mastodon/pull/9819))
121
+- Fix empty OEmbed error ([renatolond](https://github.com/tootsuite/mastodon/pull/9807))
122
+- Fix drag & drop modal not disappearing sometimes ([hinaloe](https://github.com/tootsuite/mastodon/pull/9797))
123
+- Fix statuses with content warnings being displayed in web push notifications sometimes ([ThibG](https://github.com/tootsuite/mastodon/pull/9778))
124
+- Fix scroll-to-detailed status not working on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9773))
125
+- Fix media modal loading indicator ([ThibG](https://github.com/tootsuite/mastodon/pull/9771))
126
+- Fix hashtag search results not having a permalink fallback in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9810))
127
+- Fix slightly cropped font on settings page dropdowns when using system font ([ariasuni](https://github.com/tootsuite/mastodon/pull/9839))
128
+- Fix not being able to drag & drop text into forms ([tmm576](https://github.com/tootsuite/mastodon/pull/9840))
129
+
130
+### Security
131
+
132
+- Sanitize and sandbox toot embeds in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9552))
133
+- Add tombstones for remote statuses to prevent replay attacks ([ThibG](https://github.com/tootsuite/mastodon/pull/9830))
134
+
135
+## [2.6.5] - 2018-12-01
136
+### Changed
137
+
138
+- Change lists to display replies to others on the list and list owner ([ThibG](https://github.com/tootsuite/mastodon/pull/9324))
139
+
140
+### Fixed
141
+
142
+- Fix failures caused by commonly-used JSON-LD contexts being unavailable ([ThibG](https://github.com/tootsuite/mastodon/pull/9412))
143
+
144
+## [2.6.4] - 2018-11-30
145
+### Fixed
146
+
147
+- Fix yarn dependencies not installing due to yanked event-stream package ([Gargron](https://github.com/tootsuite/mastodon/pull/9401))
148
+
149
+## [2.6.3] - 2018-11-30
150
+### Added
151
+
152
+- Add hyphen to characters allowed in remote usernames ([ThibG](https://github.com/tootsuite/mastodon/pull/9345))
153
+
154
+### Changed
155
+
156
+- Change server user count to exclude suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/9380))
157
+
158
+### Fixed
159
+
160
+- Fix ffmpeg processing sometimes stalling due to overfilled stdout buffer ([hugogameiro](https://github.com/tootsuite/mastodon/pull/9368))
161
+- Fix missing DNS records raising the wrong kind of exception ([Gargron](https://github.com/tootsuite/mastodon/pull/9379))
162
+- Fix already queued deliveries still trying to reach inboxes marked as unavailable ([Gargron](https://github.com/tootsuite/mastodon/pull/9358))
163
+
164
+### Security
165
+
166
+- Fix TLS handshake timeout not being enforced ([Gargron](https://github.com/tootsuite/mastodon/pull/9381))
167
+
168
+## [2.6.2] - 2018-11-23
169
+### Added
170
+
171
+- Add Page to whitelisted ActivityPub types ([mbajur](https://github.com/tootsuite/mastodon/pull/9188))
172
+- Add 20px to column width in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9227))
173
+- Add amount of freed disk space in `tootctl media remove` ([Gargron](https://github.com/tootsuite/mastodon/pull/9229), [Gargron](https://github.com/tootsuite/mastodon/pull/9239), [mayaeh](https://github.com/tootsuite/mastodon/pull/9288))
174
+- Add "Show thread" link to self-replies ([Gargron](https://github.com/tootsuite/mastodon/pull/9228))
175
+
176
+### Changed
177
+
178
+- Change order of Atom and RSS links so Atom is first ([Alkarex](https://github.com/tootsuite/mastodon/pull/9302))
179
+- Change Nginx configuration for Nanobox apps ([danhunsaker](https://github.com/tootsuite/mastodon/pull/9310))
180
+- Change the follow action to appear instant in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9220))
181
+- Change how the ActiveRecord connection is instantiated in on_worker_boot ([Gargron](https://github.com/tootsuite/mastodon/pull/9238))
182
+- Change `tootctl accounts cull` to always touch accounts so they can be skipped ([renatolond](https://github.com/tootsuite/mastodon/pull/9293))
183
+- Change mime type comparison to ignore JSON-LD profile ([valerauko](https://github.com/tootsuite/mastodon/pull/9179))
184
+
185
+### Fixed
186
+
187
+- Fix web UI crash when conversation has no last status ([sammy8806](https://github.com/tootsuite/mastodon/pull/9207))
188
+- Fix follow limit validator reporting lower number past threshold ([Gargron](https://github.com/tootsuite/mastodon/pull/9230))
189
+- Fix form validation flash message color and input borders ([Gargron](https://github.com/tootsuite/mastodon/pull/9235))
190
+- Fix invalid twitter:player cards being displayed ([ThibG](https://github.com/tootsuite/mastodon/pull/9254))
191
+- Fix emoji update date being processed incorrectly ([ThibG](https://github.com/tootsuite/mastodon/pull/9255))
192
+- Fix playing embed resetting if status is reloaded in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9270), [Gargron](https://github.com/tootsuite/mastodon/pull/9275))
193
+- Fix web UI crash when favouriting a deleted status ([ThibG](https://github.com/tootsuite/mastodon/pull/9272))
194
+- Fix intermediary arrays being created for hash maps ([Gargron](https://github.com/tootsuite/mastodon/pull/9291))
195
+- Fix filter ID not being a string in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9303))
196
+
197
+### Security
198
+
199
+- Fix multiple remote account deletions being able to deadlock the database ([Gargron](https://github.com/tootsuite/mastodon/pull/9292))
200
+- Fix HTTP connection timeout of 10s not being enforced ([Gargron](https://github.com/tootsuite/mastodon/pull/9329))
201
+
202
+## [2.6.1] - 2018-10-30
203
+### Fixed
204
+
205
+- Fix resolving resources by URL not working due to a regression in [valerauko](https://github.com/tootsuite/mastodon/pull/9132) ([Gargron](https://github.com/tootsuite/mastodon/pull/9171))
206
+- Fix reducer error in web UI when a conversation has no last status ([Gargron](https://github.com/tootsuite/mastodon/pull/9173))
207
+
208
+## [2.6.0] - 2018-10-30
209
+### Added
210
+
211
+- Add link ownership verification ([Gargron](https://github.com/tootsuite/mastodon/pull/8703))
212
+- Add conversations API ([Gargron](https://github.com/tootsuite/mastodon/pull/8832))
213
+- Add limit for the number of people that can be followed from one account ([Gargron](https://github.com/tootsuite/mastodon/pull/8807))
214
+- Add admin setting to customize mascot ([ashleyhull-versent](https://github.com/tootsuite/mastodon/pull/8766))
215
+- Add support for more granular ActivityPub audiences from other software, i.e. circles ([Gargron](https://github.com/tootsuite/mastodon/pull/8950), [Gargron](https://github.com/tootsuite/mastodon/pull/9093), [Gargron](https://github.com/tootsuite/mastodon/pull/9150))
216
+- Add option to block all reports from a domain ([Gargron](https://github.com/tootsuite/mastodon/pull/8830))
217
+- Add user preference to always expand toots marked with content warnings ([webroo](https://github.com/tootsuite/mastodon/pull/8762))
218
+- Add user preference to always hide all media ([fvh-P](https://github.com/tootsuite/mastodon/pull/8569))
219
+- Add `force_login` param to OAuth authorize page ([Gargron](https://github.com/tootsuite/mastodon/pull/8655))
220
+- Add `tootctl accounts backup` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
221
+- Add `tootctl accounts create` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
222
+- Add `tootctl accounts cull` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
223
+- Add `tootctl accounts delete` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
224
+- Add `tootctl accounts modify` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
225
+- Add `tootctl accounts refresh` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
226
+- Add `tootctl feeds build` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
227
+- Add `tootctl feeds clear` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
228
+- Add `tootctl settings registrations open` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
229
+- Add `tootctl settings registrations close` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
230
+- Add `min_id` param to REST API to support backwards pagination ([Gargron](https://github.com/tootsuite/mastodon/pull/8736))
231
+- Add a confirmation dialog when hitting reply and the compose box isn't empty ([ThibG](https://github.com/tootsuite/mastodon/pull/8893))
232
+- Add PostgreSQL disk space growth tracking in PGHero ([Gargron](https://github.com/tootsuite/mastodon/pull/8906))
233
+- Add button for disabling local account to report quick actions bar ([Gargron](https://github.com/tootsuite/mastodon/pull/9024))
234
+- Add Czech language ([Aditoo17](https://github.com/tootsuite/mastodon/pull/8594))
235
+- Add `same-site` (`lax`) attribute to cookies ([sorin-davidoi](https://github.com/tootsuite/mastodon/pull/8626))
236
+- Add support for styled scrollbars in Firefox Nightly ([sorin-davidoi](https://github.com/tootsuite/mastodon/pull/8653))
237
+- Add highlight to the active tab in web UI profiles ([rhoio](https://github.com/tootsuite/mastodon/pull/8673))
238
+- Add auto-focus for comment textarea in report modal ([ThibG](https://github.com/tootsuite/mastodon/pull/8689))
239
+- Add auto-focus for emoji picker's search field ([ThibG](https://github.com/tootsuite/mastodon/pull/8688))
240
+- Add nginx and systemd templates to `dist/` directory ([Gargron](https://github.com/tootsuite/mastodon/pull/8770))
241
+- Add support for `/.well-known/change-password` ([Gargron](https://github.com/tootsuite/mastodon/pull/8828))
242
+- Add option to override FFMPEG binary path ([sascha-sl](https://github.com/tootsuite/mastodon/pull/8855))
243
+- Add `dns-prefetch` tag when using different host for assets or uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/8942))
244
+- Add `description` meta tag ([Gargron](https://github.com/tootsuite/mastodon/pull/8941))
245
+- Add `Content-Security-Policy` header ([ThibG](https://github.com/tootsuite/mastodon/pull/8957))
246
+- Add cache for the instance info API ([ykzts](https://github.com/tootsuite/mastodon/pull/8765))
247
+- Add suggested follows to search screen in mobile layout ([Gargron](https://github.com/tootsuite/mastodon/pull/9010))
248
+- Add CORS header to `/.well-known/*` routes ([BenLubar](https://github.com/tootsuite/mastodon/pull/9083))
249
+- Add `card` attribute to statuses returned from REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9120))
250
+- Add in-stream link preview ([Gargron](https://github.com/tootsuite/mastodon/pull/9120))
251
+- Add support for ActivityPub `Page` objects ([mbajur](https://github.com/tootsuite/mastodon/pull/9121))
252
+
253
+### Changed
254
+
255
+- Change forms design ([Gargron](https://github.com/tootsuite/mastodon/pull/8703))
256
+- Change reports overview to group by target account ([Gargron](https://github.com/tootsuite/mastodon/pull/8674))
257
+- Change web UI to show "read more" link on overly long in-stream statuses ([lanodan](https://github.com/tootsuite/mastodon/pull/8205))
258
+- Change design of direct messages column ([Gargron](https://github.com/tootsuite/mastodon/pull/8832), [Gargron](https://github.com/tootsuite/mastodon/pull/9022))
259
+- Change home timelines to exclude DMs ([Gargron](https://github.com/tootsuite/mastodon/pull/8940))
260
+- Change list timelines to exclude all replies ([cbayerlein](https://github.com/tootsuite/mastodon/pull/8683))
261
+- Change admin accounts UI default sort to most recent ([Gargron](https://github.com/tootsuite/mastodon/pull/8813))
262
+- Change documentation URL in the UI ([Gargron](https://github.com/tootsuite/mastodon/pull/8898))
263
+- Change style of success and failure messages ([Gargron](https://github.com/tootsuite/mastodon/pull/8973))
264
+- Change DM filtering to always allow DMs from staff ([qguv](https://github.com/tootsuite/mastodon/pull/8993))
265
+- Change recommended Ruby version to 2.5.3 ([zunda](https://github.com/tootsuite/mastodon/pull/9003))
266
+- Change docker-compose default to persist volumes in current directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9055))
267
+- Change character counters on edit profile page to input length limit ([Gargron](https://github.com/tootsuite/mastodon/pull/9100))
268
+- Change notification filtering to always let through messages from staff ([Gargron](https://github.com/tootsuite/mastodon/pull/9152))
269
+- Change "hide boosts from user" function also hiding notifications about boosts ([ThibG](https://github.com/tootsuite/mastodon/pull/9147))
270
+- Change CSS `detailed-status__wrapper` class actually wrap the detailed status ([trwnh](https://github.com/tootsuite/mastodon/pull/8547))
271
+
272
+### Deprecated
273
+
274
+- `GET /api/v1/timelines/direct` → `GET /api/v1/conversations` ([Gargron](https://github.com/tootsuite/mastodon/pull/8832))
275
+- `POST /api/v1/notifications/dismiss` → `POST /api/v1/notifications/:id/dismiss` ([Gargron](https://github.com/tootsuite/mastodon/pull/8905))
276
+- `GET /api/v1/statuses/:id/card` → `card` attributed included in status ([Gargron](https://github.com/tootsuite/mastodon/pull/9120))
277
+
278
+### Removed
279
+
280
+- Remove "on this device" label in column push settings ([rhoio](https://github.com/tootsuite/mastodon/pull/8704))
281
+- Remove rake tasks in favour of tootctl commands ([Gargron](https://github.com/tootsuite/mastodon/pull/8675))
282
+
283
+### Fixed
284
+
285
+- Fix remote statuses using instance's default locale if no language given ([Kjwon15](https://github.com/tootsuite/mastodon/pull/8861))
286
+- Fix streaming API not exiting when port or socket is unavailable ([Gargron](https://github.com/tootsuite/mastodon/pull/9023))
287
+- Fix network calls being performed in database transaction in ActivityPub handler ([Gargron](https://github.com/tootsuite/mastodon/pull/8951))
288
+- Fix dropdown arrow position ([ThibG](https://github.com/tootsuite/mastodon/pull/8637))
289
+- Fix first element of dropdowns being focused even if not using keyboard ([ThibG](https://github.com/tootsuite/mastodon/pull/8679))
290
+- Fix tootctl requiring `bundle exec` invocation ([abcang](https://github.com/tootsuite/mastodon/pull/8619))
291
+- Fix public pages not using animation preference for avatars ([renatolond](https://github.com/tootsuite/mastodon/pull/8614))
292
+- Fix OEmbed/OpenGraph cards not understanding relative URLs ([ThibG](https://github.com/tootsuite/mastodon/pull/8669))
293
+- Fix some dark emojis not having a white outline ([ThibG](https://github.com/tootsuite/mastodon/pull/8597))
294
+- Fix media description not being displayed in various media modals ([ThibG](https://github.com/tootsuite/mastodon/pull/8678))
295
+- Fix generated URLs of desktop notifications missing base URL ([GenbuHase](https://github.com/tootsuite/mastodon/pull/8758))
296
+- Fix RTL styles ([mabkenar](https://github.com/tootsuite/mastodon/pull/8764), [mabkenar](https://github.com/tootsuite/mastodon/pull/8767), [mabkenar](https://github.com/tootsuite/mastodon/pull/8823), [mabkenar](https://github.com/tootsuite/mastodon/pull/8897), [mabkenar](https://github.com/tootsuite/mastodon/pull/9005), [mabkenar](https://github.com/tootsuite/mastodon/pull/9007), [mabkenar](https://github.com/tootsuite/mastodon/pull/9018), [mabkenar](https://github.com/tootsuite/mastodon/pull/9021), [mabkenar](https://github.com/tootsuite/mastodon/pull/9145), [mabkenar](https://github.com/tootsuite/mastodon/pull/9146))
297
+- Fix crash in streaming API when tag param missing ([Gargron](https://github.com/tootsuite/mastodon/pull/8955))
298
+- Fix hotkeys not working when no element is focused ([ThibG](https://github.com/tootsuite/mastodon/pull/8998))
299
+- Fix some hotkeys not working on detailed status view ([ThibG](https://github.com/tootsuite/mastodon/pull/9006))
300
+- Fix og:url on status pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9047))
301
+- Fix upload option buttons only being visible on hover ([Gargron](https://github.com/tootsuite/mastodon/pull/9074))
302
+- Fix tootctl not returning exit code 1 on wrong arguments ([sascha-sl](https://github.com/tootsuite/mastodon/pull/9094))
303
+- Fix preview cards for appearing for profiles mentioned in toot ([ThibG](https://github.com/tootsuite/mastodon/pull/6934), [ThibG](https://github.com/tootsuite/mastodon/pull/9158))
304
+- Fix local accounts sometimes being duplicated as faux-remote ([Gargron](https://github.com/tootsuite/mastodon/pull/9109))
305
+- Fix emoji search when the shortcode has multiple separators ([ThibG](https://github.com/tootsuite/mastodon/pull/9124))
306
+- Fix dropdowns sometimes being partially obscured by other elements ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9126))
307
+- Fix cache not updating when reply/boost/favourite counters or media sensitivity update ([Gargron](https://github.com/tootsuite/mastodon/pull/9119))
308
+- Fix empty display name precedence over username in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9163))
309
+- Fix td instead of th in sessions table header ([Gargron](https://github.com/tootsuite/mastodon/pull/9162))
310
+- Fix handling of content types with profile ([valerauko](https://github.com/tootsuite/mastodon/pull/9132))
311
+
312
+## [2.5.2] - 2018-10-12
313
+### Security
314
+
315
+- Fix XSS vulnerability ([Gargron](https://github.com/tootsuite/mastodon/pull/8959))
316
+
317
+## [2.5.1] - 2018-10-07
318
+### Fixed
319
+
320
+- Fix database migrations for PostgreSQL below 9.5 ([Gargron](https://github.com/tootsuite/mastodon/pull/8903))
321
+- Fix class autoloading issue in ActivityPub Create handler ([Gargron](https://github.com/tootsuite/mastodon/pull/8820))
322
+- Fix cache statistics not being sent via statsd when statsd enabled ([ykzts](https://github.com/tootsuite/mastodon/pull/8831))
323
+- Bump puma from 3.11.4 to 3.12.0 ([dependabot[bot]](https://github.com/tootsuite/mastodon/pull/8883))
324
+
325
+### Security
326
+
327
+- Fix some local images not having their EXIF metadata stripped on upload ([ThibG](https://github.com/tootsuite/mastodon/pull/8714))
328
+- Fix being able to enable a disabled relay via ActivityPub Accept handler ([ThibG](https://github.com/tootsuite/mastodon/pull/8864))
329
+- Bump nokogiri from 1.8.4 to 1.8.5 ([dependabot[bot]](https://github.com/tootsuite/mastodon/pull/8881))
330
+- Fix being able to report statuses not belonging to the reported account ([ThibG](https://github.com/tootsuite/mastodon/pull/8916))

+ 21
- 40
CONTRIBUTING.md View File

@@ -1,56 +1,37 @@
1
-CONTRIBUTING
1
+Contributing
2 2
 ============
3 3
 
4
-There are three ways in which you can contribute to this repository:
4
+Thank you for considering contributing to Mastodon 🐘 
5 5
 
6
-1. By improving the documentation
7
-2. By working on the back-end application
8
-3. By working on the front-end application
6
+You can contribute in the following ways:
9 7
 
10
-Choosing what to work on in a large open source project is not easy. The list of [GitHub issues](https://github.com/tootsuite/mastodon/issues) may provide some ideas, but not every feature request has been greenlit. Likewise, not every change or feature that resolves a personal itch will be merged into the main repository. Some communication ahead of time may be wise. If your addition creates a new feature or setting, or otherwise changes how things work in some substantial way, please remember to submit a correlating pull request to document your changes in the [documentation](http://github.com/tootsuite/documentation).
8
+- Finding and reporting bugs
9
+- Translating the Mastodon interface into various languages
10
+- Contributing code to Mastodon by fixing bugs or implementing features
11
+- Improving the documentation
11 12
 
12
-Below are the guidelines for working on pull requests:
13
+## Bug reports
13 14
 
14
-## General
15
+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.
15 16
 
16
-- 2 spaces indentation
17
+## Translations
17 18
 
18
-## Documentation
19
-
20
-- No spelling mistakes
21
-- No orthographic mistakes
22
-- No Markdown syntax errors
23
-
24
-## Requirements
25
-
26
-- Ruby
27
-- Node.js
28
-- PostgreSQL
29
-- Redis
30
-- Nginx (optional)
31
-
32
-## Back-end application
19
+You can submit translations via [Weblate](https://weblate.joinmastodon.org/). They are periodically merged into the codebase.
33 20
 
34
-It is expected that you have a working development environment set up. The development environment includes [rubocop](https://github.com/bbatsov/rubocop), which checks your Ruby code for compliance with our style guide and best practices. Sublime Text, likely like other editors, has a [Rubocop plugin](https://github.com/pderichs/sublime_rubocop) that runs checks on files as you edit them. The codebase also has a test suite.
35
-
36
-* The codebase is not perfect, at the time of writing, but it is expected that you do not introduce new code style violations
37
-* The rspec test suite must pass
38
-* To the extent that it is possible, verify your changes. In the best case, by adding new tests to the test suite. At the very least, by running the server or console and checking it manually
39
-* If you are introducing new strings to the user interface, they must be using localization methods
21
+[![Mastodon translation statistics by language](https://weblate.joinmastodon.org/widgets/mastodon/-/multi-auto.svg)](https://weblate.joinmastodon.org/)
40 22
 
41
-If your code has syntax errors that won't let it run, it's a good sign that the pull request isn't ready for submission yet.
23
+## Pull requests
42 24
 
43
-## Front-end application
25
+Please use clean, concise titles for your pull requests. We use commit squashing, so the final commit in the master branch will carry the title of the pull request.
44 26
 
45
-It is expected that you have a working development environment set up (see back-end application section). This project includes an ESLint configuration file, with which you can lint your changes.
27
+The smaller the set of changes in the pull request is, the quicker it can be reviewed and merged. Splitting tasks into multiple smaller pull requests is often preferable.
46 28
 
47
-* Avoid grave ESLint violations
48
-* Verify that your changes work
49
-* If you are introducing new strings, they must be using localization methods
29
+**Pull requests that do not pass automated checks may not be reviewed**. In particular, you need to keep in mind:
50 30
 
51
-If the JavaScript or CSS assets won't compile due to a syntax error, it's a good sign that the pull request isn't ready for submission yet.
31
+- Unit and integration tests (rspec, jest)
32
+- Code style rules (rubocop, eslint)
33
+- Normalization of locale files (i18n-tasks)
52 34
 
53
-## Translate
35
+## Documentation
54 36
 
55
-You can contribute to translating Mastodon via Weblate at [weblate.joinmastodon.org](https://weblate.joinmastodon.org/).
56
-[![Mastodon translation statistics by language](https://weblate.joinmastodon.org/widgets/mastodon/-/multi-auto.svg)](https://weblate.joinmastodon.org/)
37
+The [Mastodon documentation](https://docs.joinmastodon.org) is a statically generated site. You can [submit merge requests to mastodon/docs](https://source.joinmastodon.org/mastodon/docs).

+ 17
- 14
Dockerfile View File

@@ -1,4 +1,5 @@
1
-FROM ruby:2.4.4-alpine3.6
1
+FROM node:8.15-alpine as node
2
+FROM ruby:2.6-alpine3.8
2 3
 
3 4
 LABEL maintainer="https://github.com/tootsuite/mastodon" \
4 5
       description="Your self-hosted, globally interconnected microblogging community"
@@ -11,8 +12,6 @@ ENV PATH=/mastodon/bin:$PATH \
11 12
     RAILS_ENV=production \
12 13
     NODE_ENV=production
13 14
 
14
-ARG YARN_VERSION=1.3.2
15
-ARG YARN_DOWNLOAD_SHA256=6cfe82e530ef0837212f13e45c1565ba53f5199eec2527b85ecbcd88bf26821d
16 15
 ARG LIBICONV_VERSION=1.15
17 16
 ARG LIBICONV_DOWNLOAD_SHA256=ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
18 17
 
@@ -20,6 +19,11 @@ EXPOSE 3000 4000
20 19
 
21 20
 WORKDIR /mastodon
22 21
 
22
+COPY --from=node /usr/local/bin/node /usr/local/bin/node
23
+COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
24
+COPY --from=node /usr/local/bin/npm /usr/local/bin/npm
25
+COPY --from=node /opt/yarn-* /opt/yarn
26
+
23 27
 RUN apk -U upgrade \
24 28
  && apk add -t build-dependencies \
25 29
     build-base \
@@ -27,6 +31,8 @@ RUN apk -U upgrade \
27 31
     libidn-dev \
28 32
     libressl \
29 33
     libtool \
34
+    libxml2-dev \
35
+    libxslt-dev \
30 36
     postgresql-dev \
31 37
     protobuf-dev \
32 38
     python \
@@ -39,20 +45,15 @@ RUN apk -U upgrade \
39 45
     imagemagick \
40 46
     libidn \
41 47
     libpq \
42
-    nodejs \
43
-    nodejs-npm \
48
+    libxml2 \
49
+    libxslt \
44 50
     protobuf \
45 51
     tini \
46 52
     tzdata \
47 53
  && update-ca-certificates \
48
- && mkdir -p /tmp/src /opt \
49
- && wget -O yarn.tar.gz "https://github.com/yarnpkg/yarn/releases/download/v$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
50
- && echo "$YARN_DOWNLOAD_SHA256 *yarn.tar.gz" | sha256sum -c - \
51
- && tar -xzf yarn.tar.gz -C /tmp/src \
52
- && rm yarn.tar.gz \
53
- && mv /tmp/src/yarn-v$YARN_VERSION /opt/yarn \
54 54
  && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
55 55
  && ln -s /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg \
56
+ && mkdir -p /tmp/src /opt \
56 57
  && wget -O libiconv.tar.gz "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$LIBICONV_VERSION.tar.gz" \
57 58
  && echo "$LIBICONV_DOWNLOAD_SHA256 *libiconv.tar.gz" | sha256sum -c - \
58 59
  && tar -xzf libiconv.tar.gz -C /tmp/src \
@@ -67,9 +68,9 @@ RUN apk -U upgrade \
67 68
 
68 69
 COPY Gemfile Gemfile.lock package.json yarn.lock .yarnclean /mastodon/
69 70
 
70
-RUN bundle config build.nokogiri --with-iconv-lib=/usr/local/lib --with-iconv-include=/usr/local/include \
71
+RUN bundle config build.nokogiri --use-system-libraries --with-iconv-lib=/usr/local/lib --with-iconv-include=/usr/local/include \
71 72
  && bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without test development \
72
- && yarn --pure-lockfile \
73
+ && yarn install --pure-lockfile --ignore-engines \
73 74
  && yarn cache clean
74 75
 
75 76
 RUN addgroup -g ${GID} mastodon && adduser -h /mastodon -s /bin/sh -D -G mastodon -u ${UID} mastodon \
@@ -80,8 +81,10 @@ COPY . /mastodon
80 81
 
81 82
 RUN chown -R mastodon:mastodon /mastodon
82 83
 
83
-VOLUME /mastodon/public/system /mastodon/public/assets /mastodon/public/packs
84
+VOLUME /mastodon/public/system
84 85
 
85 86
 USER mastodon
86 87
 
88
+RUN OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder bundle exec rails assets:precompile
89
+
87 90
 ENTRYPOINT ["/sbin/tini", "--"]

+ 54
- 51
Gemfile View File

@@ -1,138 +1,139 @@
1 1
 # frozen_string_literal: true
2 2
 
3 3
 source 'https://rubygems.org'
4
-ruby '>= 2.3.0', '< 2.6.0'
4
+ruby '>= 2.4.0', '< 2.7.0'
5 5
 
6 6
 gem 'pkg-config', '~> 1.3'
7 7
 
8
-gem 'puma', '~> 3.11'
9
-gem 'rails', '~> 5.2.0'
8
+gem 'puma', '~> 3.12'
9
+gem 'rails', '~> 5.2.2'
10
+gem 'thor', '~> 0.20'
10 11
 
11 12
 gem 'hamlit-rails', '~> 0.2'
12
-gem 'pg', '~> 1.0'
13
-gem 'pghero', '~> 2.1'
14
-gem 'dotenv-rails', '~> 2.2', '< 2.3'
15
-
16
-gem 'aws-sdk-s3', '~> 1.9', require: false
17
-gem 'fog-core', '~> 1.45'
18
-gem 'fog-local', '~> 0.5', require: false
19
-gem 'fog-openstack', '~> 0.1', require: false
13
+gem 'pg', '~> 1.1'
14
+gem 'makara', '~> 0.4'
15
+gem 'pghero', '~> 2.2'
16
+gem 'dotenv-rails', '~> 2.6'
17
+
18
+gem 'aws-sdk-s3', '~> 1.30', require: false
19
+gem 'fog-core', '<= 2.1.0'
20
+gem 'fog-openstack', '~> 0.3', require: false
20 21
 gem 'paperclip', '~> 6.0'
21 22
 gem 'paperclip-av-transcoder', '~> 0.6'
22 23
 gem 'streamio-ffmpeg', '~> 3.0'
23 24
 
24 25
 gem 'active_model_serializers', '~> 0.10'
25 26
 gem 'addressable', '~> 2.5'
26
-gem 'bootsnap', '~> 1.3'
27
+gem 'bootsnap', '~> 1.3', require: false
27 28
 gem 'browser'
28 29
 gem 'charlock_holmes', '~> 0.7.6'
29 30
 gem 'iso-639'
30 31
 gem 'chewy', '~> 5.0'
31
-gem 'cld3', '~> 3.2.0'
32
-gem 'devise', '~> 4.4'
32
+gem 'cld3', '~> 3.2.3'
33
+gem 'devise', '~> 4.5'
33 34
 gem 'devise-two-factor', '~> 3.0'
34 35
 
35 36
 group :pam_authentication, optional: true do
36
-  gem 'devise_pam_authenticatable2', '~> 9.1'
37
+  gem 'devise_pam_authenticatable2', '~> 9.2'
37 38
 end
38 39
 
39 40
 gem 'net-ldap', '~> 0.10'
40 41
 gem 'omniauth-cas', '~> 1.1'
41 42
 gem 'omniauth-saml', '~> 1.10'
42
-gem 'omniauth', '~> 1.2'
43
+gem 'omniauth', '~> 1.9'
43 44
 
44
-gem 'doorkeeper', '~> 4.4'
45
+gem 'doorkeeper', '~> 5.0'
45 46
 gem 'fast_blank', '~> 1.0'
46 47
 gem 'fastimage'
47 48
 gem 'goldfinger', '~> 2.1'
48 49
 gem 'hiredis', '~> 0.6'
49 50
 gem 'redis-namespace', '~> 1.5'
50 51
 gem 'htmlentities', '~> 4.3'
51
-gem 'http', '~> 3.2'
52
+gem 'http', '~> 3.3'
52 53
 gem 'http_accept_language', '~> 2.1'
53 54
 gem 'http_parser.rb', '~> 0.6', git: 'https://github.com/tmm1/http_parser.rb', ref: '54b17ba8c7d8d20a16dfc65d1775241833219cf2'
54
-gem 'httplog', '~> 1.0'
55
+gem 'httplog', '~> 1.2'
55 56
 gem 'idn-ruby', require: 'idn'
56 57
 gem 'kaminari', '~> 1.1'
57 58
 gem 'link_header', '~> 0.0'
58
-gem 'mime-types', '~> 3.1', require: 'mime/types/columnar'
59
-gem 'nokogiri', '~> 1.8'
59