summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile2
-rw-r--r--config/config.exs10
-rw-r--r--lib/pleroma/emoji-test.txt125
-rw-r--r--lib/pleroma/user_relationship.ex5
-rw-r--r--lib/pleroma/web/plugs/o_auth_plug.ex12
-rw-r--r--priv/gettext/nl/LC_MESSAGES/errors.po158
-rw-r--r--priv/gettext/nl/LC_MESSAGES/posix_errors.po165
-rw-r--r--priv/gettext/nl/LC_MESSAGES/static_pages.po567
-rw-r--r--priv/static/instance/static.css4
-rw-r--r--restarter/lib/pleroma.ex12
-rw-r--r--restarter/mix.exs3
-rw-r--r--test/pleroma/config/transfer_task_test.exs61
-rw-r--r--test/pleroma/conversation/participation_test.exs4
-rw-r--r--test/pleroma/user_relationship_test.exs10
-rw-r--r--test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs57
-rw-r--r--test/pleroma/web/plugs/rate_limiter_test.exs44
16 files changed, 1047 insertions, 192 deletions
diff --git a/Dockerfile b/Dockerfile
index c51ebbab0..e68b7ea7c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -12,7 +12,7 @@ RUN apk add git gcc g++ musl-dev make cmake file-dev &&\
mkdir release &&\
mix release --path release
-FROM alpine:3.14
+FROM alpine
ARG BUILD_DATE
ARG VCS_REF
diff --git a/config/config.exs b/config/config.exs
index 0fc959807..1653358a0 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -741,7 +741,7 @@ config :pleroma, :frontends,
"name" => "fedi-fe",
"git" => "https://git.pleroma.social/pleroma/fedi-fe",
"build_url" =>
- "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
+ "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build_release",
"ref" => "master",
"custom-http-headers" => [
{"service-worker-allowed", "/"}
@@ -761,6 +761,14 @@ config :pleroma, :frontends,
"https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/${ref}/download?job=build-production",
"ref" => "v1.0.0",
"build_dir" => "static"
+ },
+ "glitch-lily" => %{
+ "name" => "glitch-lily",
+ "git" => "https://lily-is.land/infra/glitch-lily",
+ "build_url" =>
+ "https://lily-is.land/infra/glitch-lily/-/jobs/artifacts/${ref}/download?job=build",
+ "ref" => "servant",
+ "build_dir" => "public"
}
}
diff --git a/lib/pleroma/emoji-test.txt b/lib/pleroma/emoji-test.txt
index dd5493366..87d093d64 100644
--- a/lib/pleroma/emoji-test.txt
+++ b/lib/pleroma/emoji-test.txt
@@ -1,13 +1,13 @@
# emoji-test.txt
-# Date: 2021-08-26, 17:22:23 GMT
-# ยฉ 2021 Unicodeยฎ, Inc.
+# Date: 2022-08-12, 20:24:39 GMT
+# ยฉ 2022 Unicodeยฎ, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Emoji Keyboard/Display Test Data for UTS #51
-# Version: 14.0
+# Version: 15.0
#
-# For documentation and usage, see http://www.unicode.org/reports/tr51
+# For documentation and usage, see https://www.unicode.org/reports/tr51
#
# This file provides data for testing which emoji forms should be in keyboards and which should also be displayed/processed.
# Format: code points; status # emoji name
@@ -92,6 +92,7 @@
1F62C ; fully-qualified # ๐Ÿ˜ฌ E1.0 grimacing face
1F62E 200D 1F4A8 ; fully-qualified # ๐Ÿ˜ฎโ€๐Ÿ’จ E13.1 face exhaling
1F925 ; fully-qualified # ๐Ÿคฅ E3.0 lying face
+1FAE8 ; fully-qualified # ๐Ÿซจ E15.0 shaking face
# subgroup: face-sleepy
1F60C ; fully-qualified # ๐Ÿ˜Œ E0.6 relieved face
@@ -155,7 +156,7 @@
# subgroup: face-negative
1F624 ; fully-qualified # ๐Ÿ˜ค E0.6 face with steam from nose
-1F621 ; fully-qualified # ๐Ÿ˜ก E0.6 pouting face
+1F621 ; fully-qualified # ๐Ÿ˜ก E0.6 enraged face
1F620 ; fully-qualified # ๐Ÿ˜  E0.6 angry face
1F92C ; fully-qualified # ๐Ÿคฌ E5.0 face with symbols on mouth
1F608 ; fully-qualified # ๐Ÿ˜ˆ E1.0 smiling face with horns
@@ -190,8 +191,7 @@
1F649 ; fully-qualified # ๐Ÿ™‰ E0.6 hear-no-evil monkey
1F64A ; fully-qualified # ๐Ÿ™Š E0.6 speak-no-evil monkey
-# subgroup: emotion
-1F48B ; fully-qualified # ๐Ÿ’‹ E0.6 kiss mark
+# subgroup: heart
1F48C ; fully-qualified # ๐Ÿ’Œ E0.6 love letter
1F498 ; fully-qualified # ๐Ÿ’˜ E0.6 heart with arrow
1F49D ; fully-qualified # ๐Ÿ’ E0.6 heart with ribbon
@@ -210,14 +210,20 @@
2764 200D 1FA79 ; unqualified # โคโ€๐Ÿฉน E13.1 mending heart
2764 FE0F ; fully-qualified # โค๏ธ E0.6 red heart
2764 ; unqualified # โค E0.6 red heart
+1FA77 ; fully-qualified # ๐Ÿฉท E15.0 pink heart
1F9E1 ; fully-qualified # ๐Ÿงก E5.0 orange heart
1F49B ; fully-qualified # ๐Ÿ’› E0.6 yellow heart
1F49A ; fully-qualified # ๐Ÿ’š E0.6 green heart
1F499 ; fully-qualified # ๐Ÿ’™ E0.6 blue heart
+1FA75 ; fully-qualified # ๐Ÿฉต E15.0 light blue heart
1F49C ; fully-qualified # ๐Ÿ’œ E0.6 purple heart
1F90E ; fully-qualified # ๐ŸคŽ E12.0 brown heart
1F5A4 ; fully-qualified # ๐Ÿ–ค E3.0 black heart
+1FA76 ; fully-qualified # ๐Ÿฉถ E15.0 grey heart
1F90D ; fully-qualified # ๐Ÿค E12.0 white heart
+
+# subgroup: emotion
+1F48B ; fully-qualified # ๐Ÿ’‹ E0.6 kiss mark
1F4AF ; fully-qualified # ๐Ÿ’ฏ E0.6 hundred points
1F4A2 ; fully-qualified # ๐Ÿ’ข E0.6 anger symbol
1F4A5 ; fully-qualified # ๐Ÿ’ฅ E0.6 collision
@@ -226,21 +232,20 @@
1F4A8 ; fully-qualified # ๐Ÿ’จ E0.6 dashing away
1F573 FE0F ; fully-qualified # ๐Ÿ•ณ๏ธ E0.7 hole
1F573 ; unqualified # ๐Ÿ•ณ E0.7 hole
-1F4A3 ; fully-qualified # ๐Ÿ’ฃ E0.6 bomb
1F4AC ; fully-qualified # ๐Ÿ’ฌ E0.6 speech balloon
1F441 FE0F 200D 1F5E8 FE0F ; fully-qualified # ๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ E2.0 eye in speech bubble
1F441 200D 1F5E8 FE0F ; unqualified # ๐Ÿ‘โ€๐Ÿ—จ๏ธ E2.0 eye in speech bubble
-1F441 FE0F 200D 1F5E8 ; unqualified # ๐Ÿ‘๏ธโ€๐Ÿ—จ E2.0 eye in speech bubble
+1F441 FE0F 200D 1F5E8 ; minimally-qualified # ๐Ÿ‘๏ธโ€๐Ÿ—จ E2.0 eye in speech bubble
1F441 200D 1F5E8 ; unqualified # ๐Ÿ‘โ€๐Ÿ—จ E2.0 eye in speech bubble
1F5E8 FE0F ; fully-qualified # ๐Ÿ—จ๏ธ E2.0 left speech bubble
1F5E8 ; unqualified # ๐Ÿ—จ E2.0 left speech bubble
1F5EF FE0F ; fully-qualified # ๐Ÿ—ฏ๏ธ E0.7 right anger bubble
1F5EF ; unqualified # ๐Ÿ—ฏ E0.7 right anger bubble
1F4AD ; fully-qualified # ๐Ÿ’ญ E1.0 thought balloon
-1F4A4 ; fully-qualified # ๐Ÿ’ค E0.6 zzz
+1F4A4 ; fully-qualified # ๐Ÿ’ค E0.6 ZZZ
-# Smileys & Emotion subtotal: 177
-# Smileys & Emotion subtotal: 177 w/o modifiers
+# Smileys & Emotion subtotal: 180
+# Smileys & Emotion subtotal: 180 w/o modifiers
# group: People & Body
@@ -300,6 +305,18 @@
1FAF4 1F3FD ; fully-qualified # ๐Ÿซด๐Ÿฝ E14.0 palm up hand: medium skin tone
1FAF4 1F3FE ; fully-qualified # ๐Ÿซด๐Ÿพ E14.0 palm up hand: medium-dark skin tone
1FAF4 1F3FF ; fully-qualified # ๐Ÿซด๐Ÿฟ E14.0 palm up hand: dark skin tone
+1FAF7 ; fully-qualified # ๐Ÿซท E15.0 leftwards pushing hand
+1FAF7 1F3FB ; fully-qualified # ๐Ÿซท๐Ÿป E15.0 leftwards pushing hand: light skin tone
+1FAF7 1F3FC ; fully-qualified # ๐Ÿซท๐Ÿผ E15.0 leftwards pushing hand: medium-light skin tone
+1FAF7 1F3FD ; fully-qualified # ๐Ÿซท๐Ÿฝ E15.0 leftwards pushing hand: medium skin tone
+1FAF7 1F3FE ; fully-qualified # ๐Ÿซท๐Ÿพ E15.0 leftwards pushing hand: medium-dark skin tone
+1FAF7 1F3FF ; fully-qualified # ๐Ÿซท๐Ÿฟ E15.0 leftwards pushing hand: dark skin tone
+1FAF8 ; fully-qualified # ๐Ÿซธ E15.0 rightwards pushing hand
+1FAF8 1F3FB ; fully-qualified # ๐Ÿซธ๐Ÿป E15.0 rightwards pushing hand: light skin tone
+1FAF8 1F3FC ; fully-qualified # ๐Ÿซธ๐Ÿผ E15.0 rightwards pushing hand: medium-light skin tone
+1FAF8 1F3FD ; fully-qualified # ๐Ÿซธ๐Ÿฝ E15.0 rightwards pushing hand: medium skin tone
+1FAF8 1F3FE ; fully-qualified # ๐Ÿซธ๐Ÿพ E15.0 rightwards pushing hand: medium-dark skin tone
+1FAF8 1F3FF ; fully-qualified # ๐Ÿซธ๐Ÿฟ E15.0 rightwards pushing hand: dark skin tone
# subgroup: hand-fingers-partial
1F44C ; fully-qualified # ๐Ÿ‘Œ E0.6 OK hand
@@ -473,11 +490,11 @@
1F932 1F3FE ; fully-qualified # ๐Ÿคฒ๐Ÿพ E5.0 palms up together: medium-dark skin tone
1F932 1F3FF ; fully-qualified # ๐Ÿคฒ๐Ÿฟ E5.0 palms up together: dark skin tone
1F91D ; fully-qualified # ๐Ÿค E3.0 handshake
-1F91D 1F3FB ; fully-qualified # ๐Ÿค๐Ÿป E3.0 handshake: light skin tone
-1F91D 1F3FC ; fully-qualified # ๐Ÿค๐Ÿผ E3.0 handshake: medium-light skin tone
-1F91D 1F3FD ; fully-qualified # ๐Ÿค๐Ÿฝ E3.0 handshake: medium skin tone
-1F91D 1F3FE ; fully-qualified # ๐Ÿค๐Ÿพ E3.0 handshake: medium-dark skin tone
-1F91D 1F3FF ; fully-qualified # ๐Ÿค๐Ÿฟ E3.0 handshake: dark skin tone
+1F91D 1F3FB ; fully-qualified # ๐Ÿค๐Ÿป E14.0 handshake: light skin tone
+1F91D 1F3FC ; fully-qualified # ๐Ÿค๐Ÿผ E14.0 handshake: medium-light skin tone
+1F91D 1F3FD ; fully-qualified # ๐Ÿค๐Ÿฝ E14.0 handshake: medium skin tone
+1F91D 1F3FE ; fully-qualified # ๐Ÿค๐Ÿพ E14.0 handshake: medium-dark skin tone
+1F91D 1F3FF ; fully-qualified # ๐Ÿค๐Ÿฟ E14.0 handshake: dark skin tone
1FAF1 1F3FB 200D 1FAF2 1F3FC ; fully-qualified # ๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ๐Ÿผ E14.0 handshake: light skin tone, medium-light skin tone
1FAF1 1F3FB 200D 1FAF2 1F3FD ; fully-qualified # ๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ๐Ÿฝ E14.0 handshake: light skin tone, medium skin tone
1FAF1 1F3FB 200D 1FAF2 1F3FE ; fully-qualified # ๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ๐Ÿพ E14.0 handshake: light skin tone, medium-dark skin tone
@@ -1455,7 +1472,7 @@
1F575 1F3FF ; fully-qualified # ๐Ÿ•ต๐Ÿฟ E2.0 detective: dark skin tone
1F575 FE0F 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๏ธโ€โ™‚๏ธ E4.0 man detective
1F575 200D 2642 FE0F ; unqualified # ๐Ÿ•ตโ€โ™‚๏ธ E4.0 man detective
-1F575 FE0F 200D 2642 ; unqualified # ๐Ÿ•ต๏ธโ€โ™‚ E4.0 man detective
+1F575 FE0F 200D 2642 ; minimally-qualified # ๐Ÿ•ต๏ธโ€โ™‚ E4.0 man detective
1F575 200D 2642 ; unqualified # ๐Ÿ•ตโ€โ™‚ E4.0 man detective
1F575 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ E4.0 man detective: light skin tone
1F575 1F3FB 200D 2642 ; minimally-qualified # ๐Ÿ•ต๐Ÿปโ€โ™‚ E4.0 man detective: light skin tone
@@ -1469,7 +1486,7 @@
1F575 1F3FF 200D 2642 ; minimally-qualified # ๐Ÿ•ต๐Ÿฟโ€โ™‚ E4.0 man detective: dark skin tone
1F575 FE0F 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๏ธโ€โ™€๏ธ E4.0 woman detective
1F575 200D 2640 FE0F ; unqualified # ๐Ÿ•ตโ€โ™€๏ธ E4.0 woman detective
-1F575 FE0F 200D 2640 ; unqualified # ๐Ÿ•ต๏ธโ€โ™€ E4.0 woman detective
+1F575 FE0F 200D 2640 ; minimally-qualified # ๐Ÿ•ต๏ธโ€โ™€ E4.0 woman detective
1F575 200D 2640 ; unqualified # ๐Ÿ•ตโ€โ™€ E4.0 woman detective
1F575 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ•ต๐Ÿปโ€โ™€๏ธ E4.0 woman detective: light skin tone
1F575 1F3FB 200D 2640 ; minimally-qualified # ๐Ÿ•ต๐Ÿปโ€โ™€ E4.0 woman detective: light skin tone
@@ -2302,7 +2319,7 @@
1F3CC 1F3FF ; fully-qualified # ๐ŸŒ๐Ÿฟ E4.0 person golfing: dark skin tone
1F3CC FE0F 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๏ธโ€โ™‚๏ธ E4.0 man golfing
1F3CC 200D 2642 FE0F ; unqualified # ๐ŸŒโ€โ™‚๏ธ E4.0 man golfing
-1F3CC FE0F 200D 2642 ; unqualified # ๐ŸŒ๏ธโ€โ™‚ E4.0 man golfing
+1F3CC FE0F 200D 2642 ; minimally-qualified # ๐ŸŒ๏ธโ€โ™‚ E4.0 man golfing
1F3CC 200D 2642 ; unqualified # ๐ŸŒโ€โ™‚ E4.0 man golfing
1F3CC 1F3FB 200D 2642 FE0F ; fully-qualified # ๐ŸŒ๐Ÿปโ€โ™‚๏ธ E4.0 man golfing: light skin tone
1F3CC 1F3FB 200D 2642 ; minimally-qualified # ๐ŸŒ๐Ÿปโ€โ™‚ E4.0 man golfing: light skin tone
@@ -2316,7 +2333,7 @@
1F3CC 1F3FF 200D 2642 ; minimally-qualified # ๐ŸŒ๐Ÿฟโ€โ™‚ E4.0 man golfing: dark skin tone
1F3CC FE0F 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๏ธโ€โ™€๏ธ E4.0 woman golfing
1F3CC 200D 2640 FE0F ; unqualified # ๐ŸŒโ€โ™€๏ธ E4.0 woman golfing
-1F3CC FE0F 200D 2640 ; unqualified # ๐ŸŒ๏ธโ€โ™€ E4.0 woman golfing
+1F3CC FE0F 200D 2640 ; minimally-qualified # ๐ŸŒ๏ธโ€โ™€ E4.0 woman golfing
1F3CC 200D 2640 ; unqualified # ๐ŸŒโ€โ™€ E4.0 woman golfing
1F3CC 1F3FB 200D 2640 FE0F ; fully-qualified # ๐ŸŒ๐Ÿปโ€โ™€๏ธ E4.0 woman golfing: light skin tone
1F3CC 1F3FB 200D 2640 ; minimally-qualified # ๐ŸŒ๐Ÿปโ€โ™€ E4.0 woman golfing: light skin tone
@@ -2427,7 +2444,7 @@
26F9 1F3FF ; fully-qualified # โ›น๐Ÿฟ E2.0 person bouncing ball: dark skin tone
26F9 FE0F 200D 2642 FE0F ; fully-qualified # โ›น๏ธโ€โ™‚๏ธ E4.0 man bouncing ball
26F9 200D 2642 FE0F ; unqualified # โ›นโ€โ™‚๏ธ E4.0 man bouncing ball
-26F9 FE0F 200D 2642 ; unqualified # โ›น๏ธโ€โ™‚ E4.0 man bouncing ball
+26F9 FE0F 200D 2642 ; minimally-qualified # โ›น๏ธโ€โ™‚ E4.0 man bouncing ball
26F9 200D 2642 ; unqualified # โ›นโ€โ™‚ E4.0 man bouncing ball
26F9 1F3FB 200D 2642 FE0F ; fully-qualified # โ›น๐Ÿปโ€โ™‚๏ธ E4.0 man bouncing ball: light skin tone
26F9 1F3FB 200D 2642 ; minimally-qualified # โ›น๐Ÿปโ€โ™‚ E4.0 man bouncing ball: light skin tone
@@ -2441,7 +2458,7 @@
26F9 1F3FF 200D 2642 ; minimally-qualified # โ›น๐Ÿฟโ€โ™‚ E4.0 man bouncing ball: dark skin tone
26F9 FE0F 200D 2640 FE0F ; fully-qualified # โ›น๏ธโ€โ™€๏ธ E4.0 woman bouncing ball
26F9 200D 2640 FE0F ; unqualified # โ›นโ€โ™€๏ธ E4.0 woman bouncing ball
-26F9 FE0F 200D 2640 ; unqualified # โ›น๏ธโ€โ™€ E4.0 woman bouncing ball
+26F9 FE0F 200D 2640 ; minimally-qualified # โ›น๏ธโ€โ™€ E4.0 woman bouncing ball
26F9 200D 2640 ; unqualified # โ›นโ€โ™€ E4.0 woman bouncing ball
26F9 1F3FB 200D 2640 FE0F ; fully-qualified # โ›น๐Ÿปโ€โ™€๏ธ E4.0 woman bouncing ball: light skin tone
26F9 1F3FB 200D 2640 ; minimally-qualified # โ›น๐Ÿปโ€โ™€ E4.0 woman bouncing ball: light skin tone
@@ -2462,7 +2479,7 @@
1F3CB 1F3FF ; fully-qualified # ๐Ÿ‹๐Ÿฟ E2.0 person lifting weights: dark skin tone
1F3CB FE0F 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๏ธโ€โ™‚๏ธ E4.0 man lifting weights
1F3CB 200D 2642 FE0F ; unqualified # ๐Ÿ‹โ€โ™‚๏ธ E4.0 man lifting weights
-1F3CB FE0F 200D 2642 ; unqualified # ๐Ÿ‹๏ธโ€โ™‚ E4.0 man lifting weights
+1F3CB FE0F 200D 2642 ; minimally-qualified # ๐Ÿ‹๏ธโ€โ™‚ E4.0 man lifting weights
1F3CB 200D 2642 ; unqualified # ๐Ÿ‹โ€โ™‚ E4.0 man lifting weights
1F3CB 1F3FB 200D 2642 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿปโ€โ™‚๏ธ E4.0 man lifting weights: light skin tone
1F3CB 1F3FB 200D 2642 ; minimally-qualified # ๐Ÿ‹๐Ÿปโ€โ™‚ E4.0 man lifting weights: light skin tone
@@ -2476,7 +2493,7 @@
1F3CB 1F3FF 200D 2642 ; minimally-qualified # ๐Ÿ‹๐Ÿฟโ€โ™‚ E4.0 man lifting weights: dark skin tone
1F3CB FE0F 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๏ธโ€โ™€๏ธ E4.0 woman lifting weights
1F3CB 200D 2640 FE0F ; unqualified # ๐Ÿ‹โ€โ™€๏ธ E4.0 woman lifting weights
-1F3CB FE0F 200D 2640 ; unqualified # ๐Ÿ‹๏ธโ€โ™€ E4.0 woman lifting weights
+1F3CB FE0F 200D 2640 ; minimally-qualified # ๐Ÿ‹๏ธโ€โ™€ E4.0 woman lifting weights
1F3CB 200D 2640 ; unqualified # ๐Ÿ‹โ€โ™€ E4.0 woman lifting weights
1F3CB 1F3FB 200D 2640 FE0F ; fully-qualified # ๐Ÿ‹๐Ÿปโ€โ™€๏ธ E4.0 woman lifting weights: light skin tone
1F3CB 1F3FB 200D 2640 ; minimally-qualified # ๐Ÿ‹๐Ÿปโ€โ™€ E4.0 woman lifting weights: light skin tone
@@ -3262,8 +3279,8 @@
1FAC2 ; fully-qualified # ๐Ÿซ‚ E13.0 people hugging
1F463 ; fully-qualified # ๐Ÿ‘ฃ E0.6 footprints
-# People & Body subtotal: 2986
-# People & Body subtotal: 506 w/o modifiers
+# People & Body subtotal: 2998
+# People & Body subtotal: 508 w/o modifiers
# group: Component
@@ -3306,6 +3323,8 @@
1F405 ; fully-qualified # ๐Ÿ… E1.0 tiger
1F406 ; fully-qualified # ๐Ÿ† E1.0 leopard
1F434 ; fully-qualified # ๐Ÿด E0.6 horse face
+1FACE ; fully-qualified # ๐ŸซŽ E15.0 moose
+1FACF ; fully-qualified # ๐Ÿซ E15.0 donkey
1F40E ; fully-qualified # ๐ŸŽ E0.6 horse
1F984 ; fully-qualified # ๐Ÿฆ„ E1.0 unicorn
1F993 ; fully-qualified # ๐Ÿฆ“ E5.0 zebra
@@ -3373,6 +3392,9 @@
1F9A9 ; fully-qualified # ๐Ÿฆฉ E12.0 flamingo
1F99A ; fully-qualified # ๐Ÿฆš E11.0 peacock
1F99C ; fully-qualified # ๐Ÿฆœ E11.0 parrot
+1FABD ; fully-qualified # ๐Ÿชฝ E15.0 wing
+1F426 200D 2B1B ; fully-qualified # ๐Ÿฆโ€โฌ› E15.0 black bird
+1FABF ; fully-qualified # ๐Ÿชฟ E15.0 goose
# subgroup: animal-amphibian
1F438 ; fully-qualified # ๐Ÿธ E0.6 frog
@@ -3399,6 +3421,7 @@
1F419 ; fully-qualified # ๐Ÿ™ E0.6 octopus
1F41A ; fully-qualified # ๐Ÿš E0.6 spiral shell
1FAB8 ; fully-qualified # ๐Ÿชธ E14.0 coral
+1FABC ; fully-qualified # ๐Ÿชผ E15.0 jellyfish
# subgroup: animal-bug
1F40C ; fully-qualified # ๐ŸŒ E0.6 snail
@@ -3433,6 +3456,7 @@
1F33B ; fully-qualified # ๐ŸŒป E0.6 sunflower
1F33C ; fully-qualified # ๐ŸŒผ E0.6 blossom
1F337 ; fully-qualified # ๐ŸŒท E0.6 tulip
+1FABB ; fully-qualified # ๐Ÿชป E15.0 hyacinth
# subgroup: plant-other
1F331 ; fully-qualified # ๐ŸŒฑ E0.6 seedling
@@ -3451,9 +3475,10 @@
1F343 ; fully-qualified # ๐Ÿƒ E0.6 leaf fluttering in wind
1FAB9 ; fully-qualified # ๐Ÿชน E14.0 empty nest
1FABA ; fully-qualified # ๐Ÿชบ E14.0 nest with eggs
+1F344 ; fully-qualified # ๐Ÿ„ E0.6 mushroom
-# Animals & Nature subtotal: 151
-# Animals & Nature subtotal: 151 w/o modifiers
+# Animals & Nature subtotal: 159
+# Animals & Nature subtotal: 159 w/o modifiers
# group: Food & Drink
@@ -3492,10 +3517,11 @@
1F966 ; fully-qualified # ๐Ÿฅฆ E5.0 broccoli
1F9C4 ; fully-qualified # ๐Ÿง„ E12.0 garlic
1F9C5 ; fully-qualified # ๐Ÿง… E12.0 onion
-1F344 ; fully-qualified # ๐Ÿ„ E0.6 mushroom
1F95C ; fully-qualified # ๐Ÿฅœ E3.0 peanuts
1FAD8 ; fully-qualified # ๐Ÿซ˜ E14.0 beans
1F330 ; fully-qualified # ๐ŸŒฐ E0.6 chestnut
+1FADA ; fully-qualified # ๐Ÿซš E15.0 ginger root
+1FADB ; fully-qualified # ๐Ÿซ› E15.0 pea pod
# subgroup: food-prepared
1F35E ; fully-qualified # ๐Ÿž E0.6 bread
@@ -3607,8 +3633,8 @@
1FAD9 ; fully-qualified # ๐Ÿซ™ E14.0 jar
1F3FA ; fully-qualified # ๐Ÿบ E1.0 amphora
-# Food & Drink subtotal: 134
-# Food & Drink subtotal: 134 w/o modifiers
+# Food & Drink subtotal: 135
+# Food & Drink subtotal: 135 w/o modifiers
# group: Travel & Places
@@ -3974,11 +4000,10 @@
1F3AF ; fully-qualified # ๐ŸŽฏ E0.6 bullseye
1FA80 ; fully-qualified # ๐Ÿช€ E12.0 yo-yo
1FA81 ; fully-qualified # ๐Ÿช E12.0 kite
+1F52B ; fully-qualified # ๐Ÿ”ซ E0.6 water pistol
1F3B1 ; fully-qualified # ๐ŸŽฑ E0.6 pool 8 ball
1F52E ; fully-qualified # ๐Ÿ”ฎ E0.6 crystal ball
1FA84 ; fully-qualified # ๐Ÿช„ E13.0 magic wand
-1F9FF ; fully-qualified # ๐Ÿงฟ E11.0 nazar amulet
-1FAAC ; fully-qualified # ๐Ÿชฌ E14.0 hamsa
1F3AE ; fully-qualified # ๐ŸŽฎ E0.6 video game
1F579 FE0F ; fully-qualified # ๐Ÿ•น๏ธ E0.7 joystick
1F579 ; unqualified # ๐Ÿ•น E0.7 joystick
@@ -4013,8 +4038,8 @@
1F9F6 ; fully-qualified # ๐Ÿงถ E11.0 yarn
1FAA2 ; fully-qualified # ๐Ÿชข E13.0 knot
-# Activities subtotal: 97
-# Activities subtotal: 97 w/o modifiers
+# Activities subtotal: 96
+# Activities subtotal: 96 w/o modifiers
# group: Objects
@@ -4040,6 +4065,7 @@
1FA73 ; fully-qualified # ๐Ÿฉณ E12.0 shorts
1F459 ; fully-qualified # ๐Ÿ‘™ E0.6 bikini
1F45A ; fully-qualified # ๐Ÿ‘š E0.6 womanโ€™s clothes
+1FAAD ; fully-qualified # ๐Ÿชญ E15.0 folding hand fan
1F45B ; fully-qualified # ๐Ÿ‘› E0.6 purse
1F45C ; fully-qualified # ๐Ÿ‘œ E0.6 handbag
1F45D ; fully-qualified # ๐Ÿ‘ E0.6 clutch bag
@@ -4055,6 +4081,7 @@
1F461 ; fully-qualified # ๐Ÿ‘ก E0.6 womanโ€™s sandal
1FA70 ; fully-qualified # ๐Ÿฉฐ E12.0 ballet shoes
1F462 ; fully-qualified # ๐Ÿ‘ข E0.6 womanโ€™s boot
+1FAAE ; fully-qualified # ๐Ÿชฎ E15.0 hair pick
1F451 ; fully-qualified # ๐Ÿ‘‘ E0.6 crown
1F452 ; fully-qualified # ๐Ÿ‘’ E0.6 womanโ€™s hat
1F3A9 ; fully-qualified # ๐ŸŽฉ E0.6 top hat
@@ -4103,6 +4130,8 @@
1FA95 ; fully-qualified # ๐Ÿช• E12.0 banjo
1F941 ; fully-qualified # ๐Ÿฅ E3.0 drum
1FA98 ; fully-qualified # ๐Ÿช˜ E13.0 long drum
+1FA87 ; fully-qualified # ๐Ÿช‡ E15.0 maracas
+1FA88 ; fully-qualified # ๐Ÿชˆ E15.0 flute
# subgroup: phone
1F4F1 ; fully-qualified # ๐Ÿ“ฑ E0.6 mobile phone
@@ -4275,7 +4304,7 @@
1F5E1 ; unqualified # ๐Ÿ—ก E0.7 dagger
2694 FE0F ; fully-qualified # โš”๏ธ E1.0 crossed swords
2694 ; unqualified # โš” E1.0 crossed swords
-1F52B ; fully-qualified # ๐Ÿ”ซ E0.6 water pistol
+1F4A3 ; fully-qualified # ๐Ÿ’ฃ E0.6 bomb
1FA83 ; fully-qualified # ๐Ÿชƒ E13.0 boomerang
1F3F9 ; fully-qualified # ๐Ÿน E1.0 bow and arrow
1F6E1 FE0F ; fully-qualified # ๐Ÿ›ก๏ธ E0.7 shield
@@ -4354,12 +4383,14 @@
1FAA6 ; fully-qualified # ๐Ÿชฆ E13.0 headstone
26B1 FE0F ; fully-qualified # โšฑ๏ธ E1.0 funeral urn
26B1 ; unqualified # โšฑ E1.0 funeral urn
+1F9FF ; fully-qualified # ๐Ÿงฟ E11.0 nazar amulet
+1FAAC ; fully-qualified # ๐Ÿชฌ E14.0 hamsa
1F5FF ; fully-qualified # ๐Ÿ—ฟ E0.6 moai
1FAA7 ; fully-qualified # ๐Ÿชง E13.0 placard
1FAAA ; fully-qualified # ๐Ÿชช E14.0 identification card
-# Objects subtotal: 304
-# Objects subtotal: 304 w/o modifiers
+# Objects subtotal: 310
+# Objects subtotal: 310 w/o modifiers
# group: Symbols
@@ -4455,6 +4486,7 @@
262E ; unqualified # โ˜ฎ E1.0 peace symbol
1F54E ; fully-qualified # ๐Ÿ•Ž E1.0 menorah
1F52F ; fully-qualified # ๐Ÿ”ฏ E0.6 dotted six-pointed star
+1FAAF ; fully-qualified # ๐Ÿชฏ E15.0 khanda
# subgroup: zodiac
2648 ; fully-qualified # โ™ˆ E0.6 Aries
@@ -4503,6 +4535,7 @@
1F505 ; fully-qualified # ๐Ÿ”… E1.0 dim button
1F506 ; fully-qualified # ๐Ÿ”† E1.0 bright button
1F4F6 ; fully-qualified # ๐Ÿ“ถ E0.6 antenna bars
+1F6DC ; fully-qualified # ๐Ÿ›œ E15.0 wireless
1F4F3 ; fully-qualified # ๐Ÿ“ณ E0.6 vibration mode
1F4F4 ; fully-qualified # ๐Ÿ“ด E0.6 mobile phone off
@@ -4693,8 +4726,8 @@
1F533 ; fully-qualified # ๐Ÿ”ณ E0.6 white square button
1F532 ; fully-qualified # ๐Ÿ”ฒ E0.6 black square button
-# Symbols subtotal: 302
-# Symbols subtotal: 302 w/o modifiers
+# Symbols subtotal: 304
+# Symbols subtotal: 304 w/o modifiers
# group: Flags
@@ -4709,7 +4742,7 @@
1F3F3 200D 1F308 ; unqualified # ๐Ÿณโ€๐ŸŒˆ E4.0 rainbow flag
1F3F3 FE0F 200D 26A7 FE0F ; fully-qualified # ๐Ÿณ๏ธโ€โšง๏ธ E13.0 transgender flag
1F3F3 200D 26A7 FE0F ; unqualified # ๐Ÿณโ€โšง๏ธ E13.0 transgender flag
-1F3F3 FE0F 200D 26A7 ; unqualified # ๐Ÿณ๏ธโ€โšง E13.0 transgender flag
+1F3F3 FE0F 200D 26A7 ; minimally-qualified # ๐Ÿณ๏ธโ€โšง E13.0 transgender flag
1F3F3 200D 26A7 ; unqualified # ๐Ÿณโ€โšง E13.0 transgender flag
1F3F4 200D 2620 FE0F ; fully-qualified # ๐Ÿดโ€โ˜ ๏ธ E11.0 pirate flag
1F3F4 200D 2620 ; minimally-qualified # ๐Ÿดโ€โ˜  E11.0 pirate flag
@@ -4983,9 +5016,9 @@
# Flags subtotal: 275 w/o modifiers
# Status Counts
-# fully-qualified : 3624
-# minimally-qualified : 817
-# unqualified : 252
+# fully-qualified : 3655
+# minimally-qualified : 827
+# unqualified : 242
# component : 9
#EOF
diff --git a/lib/pleroma/user_relationship.ex b/lib/pleroma/user_relationship.ex
index 5b3e593d3..fbecf3129 100644
--- a/lib/pleroma/user_relationship.ex
+++ b/lib/pleroma/user_relationship.ex
@@ -91,8 +91,9 @@ defmodule Pleroma.UserRelationship do
expires_at: expires_at
})
|> Repo.insert(
- on_conflict: {:replace_all_except, [:id]},
- conflict_target: [:source_id, :relationship_type, :target_id]
+ on_conflict: {:replace_all_except, [:id, :inserted_at]},
+ conflict_target: [:source_id, :relationship_type, :target_id],
+ returning: true
)
end
diff --git a/lib/pleroma/web/plugs/o_auth_plug.ex b/lib/pleroma/web/plugs/o_auth_plug.ex
index 0f74d626b..ba04ddb72 100644
--- a/lib/pleroma/web/plugs/o_auth_plug.ex
+++ b/lib/pleroma/web/plugs/o_auth_plug.ex
@@ -47,15 +47,17 @@ defmodule Pleroma.Web.Plugs.OAuthPlug do
#
@spec fetch_user_and_token(String.t()) :: {:ok, User.t(), Token.t()} | nil
defp fetch_user_and_token(token) do
- query =
+ token_query =
from(t in Token,
- where: t.token == ^token,
- join: user in assoc(t, :user),
- preload: [user: user]
+ where: t.token == ^token
)
- with %Token{user: user} = token_record <- Repo.one(query) do
+ with %Token{user_id: user_id} = token_record <- Repo.one(token_query),
+ false <- is_nil(user_id),
+ %User{} = user <- User.get_cached_by_id(user_id) do
{:ok, user, token_record}
+ else
+ _ -> nil
end
end
diff --git a/priv/gettext/nl/LC_MESSAGES/errors.po b/priv/gettext/nl/LC_MESSAGES/errors.po
index cfcb05fe6..ce1d794cf 100644
--- a/priv/gettext/nl/LC_MESSAGES/errors.po
+++ b/priv/gettext/nl/LC_MESSAGES/errors.po
@@ -3,16 +3,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-15 09:37+0000\n"
-"PO-Revision-Date: 2020-06-02 07:36+0000\n"
+"PO-Revision-Date: 2022-08-14 11:04+0000\n"
"Last-Translator: Fristi <fristi@subcon.town>\n"
-"Language-Team: Dutch <https://translate.pleroma.social/projects/pleroma/"
-"pleroma/nl/>\n"
+"Language-Team: Dutch <http://weblate.pleroma-dev.ebin.club/projects/pleroma/"
+"pleroma-backend-domain-errors/nl/>\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.0.4\n"
+"X-Generator: Weblate 4.13.1\n"
## This file is a PO Template file.
##
@@ -118,7 +118,7 @@ msgstr "Al gestemd"
#: lib/pleroma/web/oauth/oauth_controller.ex:360
#, elixir-format
msgid "Bad request"
-msgstr "Bad request"
+msgstr "Ongeldig request"
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:425
#, elixir-format
@@ -155,7 +155,7 @@ msgstr "Object kan niet geliked worden"
#: lib/pleroma/web/common_api/utils.ex:556
#, elixir-format
msgid "Cannot post an empty status without attachments"
-msgstr "Status kan niet geplaatst worden zonder tekst of bijlagen"
+msgstr "Bericht kan niet geplaatst worden zonder tekst of bijlagen"
#: lib/pleroma/web/common_api/utils.ex:504
#, elixir-format
@@ -165,122 +165,122 @@ msgstr "Opmerking dient maximaal %{max_size} karakters te bevatten"
#: lib/pleroma/config/config_db.ex:222
#, elixir-format
msgid "Config with params %{params} not found"
-msgstr ""
+msgstr "Instelling met parameters %{params} kon niet gevonden worden"
#: lib/pleroma/web/common_api/common_api.ex:95
#, elixir-format
msgid "Could not delete"
-msgstr ""
+msgstr "Verwijderen mislukt"
#: lib/pleroma/web/common_api/common_api.ex:141
#, elixir-format
msgid "Could not favorite"
-msgstr ""
+msgstr "Favoriet maken mislukt"
#: lib/pleroma/web/common_api/common_api.ex:370
#, elixir-format
msgid "Could not pin"
-msgstr ""
+msgstr "Vastmaken mislukt"
#: lib/pleroma/web/common_api/common_api.ex:112
#, elixir-format
msgid "Could not repeat"
-msgstr ""
+msgstr "Herhalen mislukt"
#: lib/pleroma/web/common_api/common_api.ex:188
#, elixir-format
msgid "Could not unfavorite"
-msgstr ""
+msgstr "Favoriet ongedaan maken mislukt"
#: lib/pleroma/web/common_api/common_api.ex:380
#, elixir-format
msgid "Could not unpin"
-msgstr ""
+msgstr "Vastmaken ongedaan maken mislukt"
#: lib/pleroma/web/common_api/common_api.ex:126
#, elixir-format
msgid "Could not unrepeat"
-msgstr ""
+msgstr "Herhalen ongedaan maken mislukt"
#: lib/pleroma/web/common_api/common_api.ex:428
#: lib/pleroma/web/common_api/common_api.ex:437
#, elixir-format
msgid "Could not update state"
-msgstr ""
+msgstr "Status bijwerken mislukt"
#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:202
#, elixir-format
msgid "Error."
-msgstr ""
+msgstr "Fout."
#: lib/pleroma/web/twitter_api/twitter_api.ex:106
#, elixir-format
msgid "Invalid CAPTCHA"
-msgstr ""
+msgstr "Ongeldige CAPTCHA"
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:117
#: lib/pleroma/web/oauth/oauth_controller.ex:569
#, elixir-format
msgid "Invalid credentials"
-msgstr ""
+msgstr "Ongeldige inloggegevens"
#: lib/pleroma/plugs/ensure_authenticated_plug.ex:38
#, elixir-format
msgid "Invalid credentials."
-msgstr ""
+msgstr "Ongeldige inloggegevens."
#: lib/pleroma/web/common_api/common_api.ex:265
#, elixir-format
msgid "Invalid indices"
-msgstr ""
+msgstr "Ongeldige indexen"
#: lib/pleroma/web/admin_api/admin_api_controller.ex:1147
#, elixir-format
msgid "Invalid parameters"
-msgstr ""
+msgstr "Ongeldige parameters"
#: lib/pleroma/web/common_api/utils.ex:411
#, elixir-format
msgid "Invalid password."
-msgstr ""
+msgstr "Ongeldig wachtwoord."
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:187
#, elixir-format
msgid "Invalid request"
-msgstr ""
+msgstr "Ongeldig request"
#: lib/pleroma/web/twitter_api/twitter_api.ex:109
#, elixir-format
msgid "Kocaptcha service unavailable"
-msgstr ""
+msgstr "Kocaptcha service niet beschikbaar"
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:113
#, elixir-format
msgid "Missing parameters"
-msgstr ""
+msgstr "Ontbrekende parameters"
#: lib/pleroma/web/common_api/utils.ex:540
#, elixir-format
msgid "No such conversation"
-msgstr ""
+msgstr "Gesprek niet gevonden"
#: lib/pleroma/web/admin_api/admin_api_controller.ex:439
#: lib/pleroma/web/admin_api/admin_api_controller.ex:465 lib/pleroma/web/admin_api/admin_api_controller.ex:507
#, elixir-format
msgid "No such permission_group"
-msgstr ""
+msgstr "Permission_group niet gevonden"
#: lib/pleroma/plugs/uploaded_media.ex:74
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:485 lib/pleroma/web/admin_api/admin_api_controller.ex:1135
#: lib/pleroma/web/feed/user_controller.ex:73 lib/pleroma/web/ostatus/ostatus_controller.ex:143
#, elixir-format
msgid "Not found"
-msgstr ""
+msgstr "Niet gevonden"
#: lib/pleroma/web/common_api/common_api.ex:241
#, elixir-format
msgid "Poll's author can't vote"
-msgstr ""
+msgstr "De peiling-auteur kan niet stemmen"
#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20
#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49
@@ -288,215 +288,215 @@ msgstr ""
#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71
#, elixir-format
msgid "Record not found"
-msgstr ""
+msgstr "Record niet gevonden"
#: lib/pleroma/web/admin_api/admin_api_controller.ex:1153
#: lib/pleroma/web/feed/user_controller.ex:79 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:32
#: lib/pleroma/web/ostatus/ostatus_controller.ex:149
#, elixir-format
msgid "Something went wrong"
-msgstr ""
+msgstr "Er is iets misgegaan"
#: lib/pleroma/web/common_api/activity_draft.ex:107
#, elixir-format
msgid "The message visibility must be direct"
-msgstr ""
+msgstr "De zichtbaarheid van het bericht dient privรฉ te zijn"
#: lib/pleroma/web/common_api/utils.ex:566
#, elixir-format
msgid "The status is over the character limit"
-msgstr ""
+msgstr "Het bericht is langer dan het karakter-limiet"
#: lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex:31
#, elixir-format
msgid "This resource requires authentication."
-msgstr ""
+msgstr "Deze gegevens vereisen authenticatie."
#: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206
#, elixir-format
msgid "Throttled"
-msgstr ""
+msgstr "Geremd"
#: lib/pleroma/web/common_api/common_api.ex:266
#, elixir-format
msgid "Too many choices"
-msgstr ""
+msgstr "Teveel keuzes"
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:442
#, elixir-format
msgid "Unhandled activity type"
-msgstr ""
+msgstr "Niet-ondersteund activiteits-type"
#: lib/pleroma/web/admin_api/admin_api_controller.ex:536
#, elixir-format
msgid "You can't revoke your own admin status."
-msgstr ""
+msgstr "Je kan je eigen beheerdersrechten niet intrekken."
#: lib/pleroma/web/oauth/oauth_controller.ex:218
#: lib/pleroma/web/oauth/oauth_controller.ex:309
#, elixir-format
msgid "Your account is currently disabled"
-msgstr ""
+msgstr "Je account is momenteel uitgeschakeld"
#: lib/pleroma/web/oauth/oauth_controller.ex:180
#: lib/pleroma/web/oauth/oauth_controller.ex:332
#, elixir-format
msgid "Your login is missing a confirmed e-mail address"
-msgstr ""
+msgstr "Je login bevat geen bevestigd e-mailadres"
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:389
#, elixir-format
msgid "can't read inbox of %{nickname} as %{as_nickname}"
-msgstr ""
+msgstr "kan de inbox van %{nickname} niet lezen als %{as_nickname}"
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:472
#, elixir-format
msgid "can't update outbox of %{nickname} as %{as_nickname}"
-msgstr ""
+msgstr "kan de outbox van %{nickname} niet bijwerken als %{as_nickname}"
#: lib/pleroma/web/common_api/common_api.ex:388
#, elixir-format
msgid "conversation is already muted"
-msgstr ""
+msgstr "gesprek is al genegeerd"
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:316
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491
#, elixir-format
msgid "error"
-msgstr ""
+msgstr "fout"
#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:29
#, elixir-format
msgid "mascots can only be images"
-msgstr ""
+msgstr "mascottes kunnen alleen afbeeldingen zijn"
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:60
#, elixir-format
msgid "not found"
-msgstr ""
+msgstr "niet gevonden"
#: lib/pleroma/web/oauth/oauth_controller.ex:395
#, elixir-format
msgid "Bad OAuth request."
-msgstr ""
+msgstr "Ongeldig OAuth request."
#: lib/pleroma/web/twitter_api/twitter_api.ex:115
#, elixir-format
msgid "CAPTCHA already used"
-msgstr ""
+msgstr "CAPTCHA is al gebruikt"
#: lib/pleroma/web/twitter_api/twitter_api.ex:112
#, elixir-format
msgid "CAPTCHA expired"
-msgstr ""
+msgstr "CAPTCHA is verlopen"
#: lib/pleroma/plugs/uploaded_media.ex:55
#, elixir-format
msgid "Failed"
-msgstr ""
+msgstr "Mislukt"
#: lib/pleroma/web/oauth/oauth_controller.ex:411
#, elixir-format
msgid "Failed to authenticate: %{message}."
-msgstr ""
+msgstr "Authenticatie mislukt: %{message}."
#: lib/pleroma/web/oauth/oauth_controller.ex:442
#, elixir-format
msgid "Failed to set up user account."
-msgstr ""
+msgstr "Aanmaken van gebruikersaccount is mislukt."
#: lib/pleroma/plugs/oauth_scopes_plug.ex:38
#, elixir-format
msgid "Insufficient permissions: %{permissions}."
-msgstr ""
+msgstr "Niet voldoende rechten: %{permissions}."
#: lib/pleroma/plugs/uploaded_media.ex:94
#, elixir-format
msgid "Internal Error"
-msgstr ""
+msgstr "Interne Fout"
#: lib/pleroma/web/oauth/fallback_controller.ex:22
#: lib/pleroma/web/oauth/fallback_controller.ex:29
#, elixir-format
msgid "Invalid Username/Password"
-msgstr ""
+msgstr "Ongeldige Gebruikersnaam/Wachtwoord"
#: lib/pleroma/web/twitter_api/twitter_api.ex:118
#, elixir-format
msgid "Invalid answer data"
-msgstr ""
+msgstr "Ongeldig antwoord"
#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:128
#, elixir-format
msgid "Nodeinfo schema version not handled"
-msgstr ""
+msgstr "Nodeinfo schema wordt niet ondersteund"
#: lib/pleroma/web/oauth/oauth_controller.ex:169
#, elixir-format
msgid "This action is outside the authorized scopes"
-msgstr ""
+msgstr "Deze actie bevindt zich buiten de gemachtigde scopes"
#: lib/pleroma/web/oauth/fallback_controller.ex:14
#, elixir-format
msgid "Unknown error, please check the details and try again."
-msgstr ""
+msgstr "Onbekende fout, controleer a.u.b. de details en probeer het opnieuw."
#: lib/pleroma/web/oauth/oauth_controller.ex:116
#: lib/pleroma/web/oauth/oauth_controller.ex:155
#, elixir-format
msgid "Unlisted redirect_uri."
-msgstr ""
+msgstr "Niet-vermelde redirect_uri."
#: lib/pleroma/web/oauth/oauth_controller.ex:391
#, elixir-format
msgid "Unsupported OAuth provider: %{provider}."
-msgstr ""
+msgstr "Niet ondersteunde OAuth provider: %{provider}."
#: lib/pleroma/uploaders/uploader.ex:72
#, elixir-format
msgid "Uploader callback timeout"
-msgstr ""
+msgstr "Uploader terugkoppeling timeout"
#: lib/pleroma/web/uploader_controller.ex:23
#, elixir-format
msgid "bad request"
-msgstr ""
+msgstr "ongeldig request"
#: lib/pleroma/web/twitter_api/twitter_api.ex:103
#, elixir-format
msgid "CAPTCHA Error"
-msgstr ""
+msgstr "CAPTCHA Fout"
#: lib/pleroma/web/common_api/common_api.ex:200
#, elixir-format
msgid "Could not add reaction emoji"
-msgstr ""
+msgstr "Reactie-emoji toevoegen mislukt"
#: lib/pleroma/web/common_api/common_api.ex:211
#, elixir-format
msgid "Could not remove reaction emoji"
-msgstr ""
+msgstr "Reactie-emoji verwijderen mislukt"
#: lib/pleroma/web/twitter_api/twitter_api.ex:129
#, elixir-format
msgid "Invalid CAPTCHA (Missing parameter: %{name})"
-msgstr ""
+msgstr "Ongeldige CAPTCHA (Ontbrekende parameter: %{name})"
#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:92
#, elixir-format
msgid "List not found"
-msgstr ""
+msgstr "Lijst niet gevonden"
#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:124
#, elixir-format
msgid "Missing parameter: %{name}"
-msgstr ""
+msgstr "Ontbrekende parameter: %{name}"
#: lib/pleroma/web/oauth/oauth_controller.ex:207
#: lib/pleroma/web/oauth/oauth_controller.ex:322
#, elixir-format
msgid "Password reset is required"
-msgstr ""
+msgstr "Wachtwoordherstel is vereist"
#: lib/pleroma/tests/auth_test_controller.ex:9
#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/admin_api_controller.ex:6
@@ -528,53 +528,63 @@ msgstr ""
#, elixir-format
msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped."
msgstr ""
+"Schending van beveiliging: OAuth scope-controle is niet uitgevoerd en niet "
+"expliciet overgeslagen."
#: lib/pleroma/plugs/ensure_authenticated_plug.ex:28
#, elixir-format
msgid "Two-factor authentication enabled, you must use a access token."
msgstr ""
+"Tweefactor authenticatie is ingeschakeld, een toegangssleutel is verplicht."
#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:210
#, elixir-format
msgid "Unexpected error occurred while adding file to pack."
msgstr ""
+"Er is een onverwachte fout opgetreden tijdens het toevoegen van het bestand."
#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:138
#, elixir-format
msgid "Unexpected error occurred while creating pack."
msgstr ""
+"Er is een onverwachte fout opgetreden tijdens het aanmaken van het pakket."
#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:278
#, elixir-format
msgid "Unexpected error occurred while removing file from pack."
msgstr ""
+"Er is een onverwachte fout opgetreden tijdens het verwijderen van het "
+"bestand."
#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:250
#, elixir-format
msgid "Unexpected error occurred while updating file in pack."
msgstr ""
+"Er is een onverwachte fout opgetreden tijdens het bijwerken van het bestand."
#: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:179
#, elixir-format
msgid "Unexpected error occurred while updating pack metadata."
msgstr ""
+"Er is een onverwachte fout opgetreden tijdens het bijwerken van de pakket-"
+"metadata."
#: lib/pleroma/plugs/user_is_admin_plug.ex:21
#, elixir-format
msgid "User is not an admin."
-msgstr ""
+msgstr "Gebruiker is niet een beheerder."
#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61
#, elixir-format
msgid "Web push subscription is disabled on this Pleroma instance"
-msgstr ""
+msgstr "Web push abbonement is uitgeschakeld op deze Pleroma instantie"
#: lib/pleroma/web/admin_api/admin_api_controller.ex:502
#, elixir-format
msgid "You can't revoke your own admin/moderator status."
-msgstr ""
+msgstr "Je kan je eigen beheerders- of moderatorrechten niet intrekken."
#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:105
#, elixir-format
msgid "authorization required for timeline view"
-msgstr ""
+msgstr "machtiging is vereist voor de tijdlijn weergave"
diff --git a/priv/gettext/nl/LC_MESSAGES/posix_errors.po b/priv/gettext/nl/LC_MESSAGES/posix_errors.po
new file mode 100644
index 000000000..cdb1f532f
--- /dev/null
+++ b/priv/gettext/nl/LC_MESSAGES/posix_errors.po
@@ -0,0 +1,165 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-08-13 13:32+0300\n"
+"PO-Revision-Date: 2022-08-14 11:04+0000\n"
+"Last-Translator: Fristi <fristi@subcon.town>\n"
+"Language-Team: Dutch <http://weblate.pleroma-dev.ebin.club/projects/pleroma/"
+"pleroma-backend-domain-posix_errors/nl/>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.13.1\n"
+
+## This file is a PO Template file.
+##
+## `msgid`s here are often extracted from source code.
+## Add new translations manually only if they're dynamic
+## translations that can't be statically extracted.
+##
+## Run `mix gettext.extract` to bring this file up to
+## date. Leave `msgstr`s empty as changing them here as no
+## effect: edit them in PO (`.po`) files instead.
+msgid "eperm"
+msgstr "Uitvoering niet toegestaan"
+
+msgid "eacces"
+msgstr "Toegang geweigerd"
+
+msgid "eagain"
+msgstr "Resource tijdelijk niet beschikbaar"
+
+msgid "ebadf"
+msgstr "Ongeldige file descriptor"
+
+msgid "ebadmsg"
+msgstr "Ongeldig bericht"
+
+msgid "ebusy"
+msgstr "Apparaat of resource bezet"
+
+msgid "edeadlk"
+msgstr "Resource deadlock vermeden"
+
+msgid "edeadlock"
+msgstr "Resource deadlock vermeden"
+
+msgid "edquot"
+msgstr "Schijf-quota overschreden"
+
+msgid "eexist"
+msgstr "Bestand bestaat"
+
+msgid "efault"
+msgstr "Ongeldig adres"
+
+msgid "efbig"
+msgstr "Bestand is te groot"
+
+msgid "eftype"
+msgstr "Ongepast bestands-type of formaat"
+
+msgid "eintr"
+msgstr "Onderbroken systeem aanroep"
+
+msgid "einval"
+msgstr "Ongeldig argument"
+
+msgid "eio"
+msgstr "Input/output fout"
+
+msgid "eisdir"
+msgstr "Illegale bewerking op een directory"
+
+msgid "eloop"
+msgstr "Te veel niveau's van symbolische koppelingen"
+
+msgid "emfile"
+msgstr "Te veel geopende bestanden"
+
+msgid "emlink"
+msgstr "Te veel koppelingen"
+
+msgid "emultihop"
+msgstr "Multihop geprobeerd"
+
+msgid "enametoolong"
+msgstr "Bestandsnaam is te lang"
+
+msgid "enfile"
+msgstr "Te veel geopende bestanden in systeem"
+
+msgid "enobufs"
+msgstr "Geen buffer-ruimte beschikbaar"
+
+msgid "enodev"
+msgstr "Apparaat bestaat niet"
+
+msgid "enolck"
+msgstr "Geen sloten beschikbaar"
+
+msgid "enolink"
+msgstr "Koppeling is ongedaan gemaakt"
+
+msgid "enoent"
+msgstr "Bestand of directory bestaat niet"
+
+msgid "enomem"
+msgstr "Geheugen kon niet toegewezen worden"
+
+msgid "enospc"
+msgstr "Geen ruimte over op apparaat"
+
+msgid "enosr"
+msgstr ""
+
+msgid "enostr"
+msgstr ""
+
+msgid "enosys"
+msgstr ""
+
+msgid "enotblk"
+msgstr ""
+
+msgid "enotdir"
+msgstr ""
+
+msgid "enotsup"
+msgstr ""
+
+msgid "enxio"
+msgstr ""
+
+msgid "eopnotsupp"
+msgstr ""
+
+msgid "eoverflow"
+msgstr ""
+
+msgid "epipe"
+msgstr ""
+
+msgid "erange"
+msgstr ""
+
+msgid "erofs"
+msgstr ""
+
+msgid "espipe"
+msgstr ""
+
+msgid "esrch"
+msgstr ""
+
+msgid "estale"
+msgstr ""
+
+msgid "etxtbsy"
+msgstr ""
+
+msgid "exdev"
+msgstr ""
diff --git a/priv/gettext/nl/LC_MESSAGES/static_pages.po b/priv/gettext/nl/LC_MESSAGES/static_pages.po
new file mode 100644
index 000000000..2972384fc
--- /dev/null
+++ b/priv/gettext/nl/LC_MESSAGES/static_pages.po
@@ -0,0 +1,567 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-08-13 13:24+0300\n"
+"PO-Revision-Date: 2022-08-14 11:04+0000\n"
+"Last-Translator: Fristi <fristi@subcon.town>\n"
+"Language-Team: Dutch <http://weblate.pleroma-dev.ebin.club/projects/pleroma/"
+"pleroma-backend-domain-static_pages/nl/>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.13.1\n"
+
+## This file is a PO Template file.
+##
+## "msgid"s here are often extracted from source code.
+## Add new translations manually only if they're dynamic
+## translations that can't be statically extracted.
+##
+## Run "mix gettext.extract" to bring this file up to
+## date. Leave "msgstr"s empty as changing them here as no
+## effect: edit them in PO (.po) files instead.
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9
+#, elixir-autogen, elixir-format
+msgctxt "remote follow authorization button"
+msgid "Authorize"
+msgstr "Machtigen"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2
+#, elixir-autogen, elixir-format
+msgctxt "remote follow error"
+msgid "Error fetching user"
+msgstr "Fout bij ophalen gebruiker"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "remote follow header"
+msgid "Remote follow"
+msgstr "Extern volgen"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "placeholder text for auth code entry"
+msgid "Authentication code"
+msgstr "Authenticatiecode"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10
+#, elixir-autogen, elixir-format
+msgctxt "placeholder text for password entry"
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "placeholder text for username entry"
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13
+#, elixir-autogen, elixir-format
+msgctxt "remote follow authorization button for login"
+msgid "Authorize"
+msgstr "Machtigen"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12
+#, elixir-autogen, elixir-format
+msgctxt "remote follow authorization button for mfa"
+msgid "Authorize"
+msgstr "Machtigen"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2
+#, elixir-autogen, elixir-format
+msgctxt "remote follow error"
+msgid "Error following account"
+msgstr "Fout bij volgen van account"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "remote follow header, need login"
+msgid "Log in to follow"
+msgstr "Log in om te volgen"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "remote follow mfa header"
+msgid "Two-factor authentication"
+msgstr "Tweefactor authenticatie"
+
+#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "remote follow success"
+msgid "Account followed!"
+msgstr "Account gevolgd!"
+
+#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7
+#, elixir-autogen, elixir-format
+msgctxt "placeholder text for account id"
+msgid "Your account ID, e.g. lain@quitter.se"
+msgstr "Je account ID, b.v. gebruiker@instantie.net"
+
+#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "remote follow authorization button for following with a remote account"
+msgid "Follow"
+msgstr "Volgen"
+
+#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2
+#, elixir-autogen, elixir-format
+msgctxt "remote follow error"
+msgid "Error: %{error}"
+msgstr "Fout: %{error}"
+
+#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "remote follow header"
+msgid "Remotely follow %{nickname}"
+msgstr "%{nickname} extern volgen"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12
+#, elixir-autogen, elixir-format
+msgctxt "password reset button"
+msgid "Reset"
+msgstr "Herstellen"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "password reset failed homepage link"
+msgid "Homepage"
+msgstr "Homepagina"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "password reset failed message"
+msgid "Password reset failed"
+msgstr "Wachtwoordherstel mislukt"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "password reset form confirm password prompt"
+msgid "Confirmation"
+msgstr "Bevestiging"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4
+#, elixir-autogen, elixir-format
+msgctxt "password reset form password prompt"
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "password reset invalid token message"
+msgid "Invalid Token"
+msgstr "Ongeldige Token"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2
+#, elixir-autogen, elixir-format
+msgctxt "password reset successful homepage link"
+msgid "Homepage"
+msgstr "Homepagina"
+
+#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "password reset successful message"
+msgid "Password changed!"
+msgstr "Wachtwoord gewijzigd!"
+
+#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15
+#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7
+#, elixir-autogen, elixir-format
+msgctxt "tag feed description"
+msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse."
+msgstr ""
+"Dit zijn openbare berichten die getagd zijn met #%{tag}. Je kunt op deze "
+"reageren indien je een account hebt in de fediverse."
+
+#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "oauth authorization exists page title"
+msgid "Authorization exists"
+msgstr "Machtiging bestaat"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32
+#, elixir-autogen, elixir-format
+msgctxt "oauth authorize approve button"
+msgid "Approve"
+msgstr "Goedkeuren"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30
+#, elixir-autogen, elixir-format
+msgctxt "oauth authorize cancel button"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23
+#, elixir-autogen, elixir-format
+msgctxt "oauth authorize message"
+msgid "Application <strong>%{client_name}</strong> is requesting access to your account."
+msgstr ""
+"Applicatie <strong>%{client_name}</strong> vraagt om toegang tot je account."
+
+#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "oauth authorized page title"
+msgid "Successfully authorized"
+msgstr "Machtiging is geslaagd"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "oauth external provider page title"
+msgid "Sign in with external provider"
+msgstr "Inloggen bij externe provider"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13
+#, elixir-autogen, elixir-format
+msgctxt "oauth external provider sign in button"
+msgid "Sign in with %{strategy}"
+msgstr "Inloggen met %{strategy}"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54
+#, elixir-autogen, elixir-format
+msgctxt "oauth login button"
+msgid "Log In"
+msgstr "Inloggen"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51
+#, elixir-autogen, elixir-format
+msgctxt "oauth login password prompt"
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47
+#, elixir-autogen, elixir-format
+msgctxt "oauth login username prompt"
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39
+#, elixir-autogen, elixir-format
+msgctxt "oauth register nickname prompt"
+msgid "Pleroma Handle"
+msgstr "Pleroma Gebruiker"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37
+#, elixir-autogen, elixir-format
+msgctxt "oauth register nickname unchangeable warning"
+msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though."
+msgstr ""
+"Let op! Je kunt je accountnaam hierna niet meer wijzigen. Je kunt echter wel "
+"nog je weergavenaam wijzigen."
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page email prompt"
+msgid "Email"
+msgstr "E-mail"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page fill form prompt"
+msgid "If you'd like to register a new account, please provide the details below."
+msgstr ""
+"Indien je graag een nieuw account wilt registreren, vul dan a.u.b de "
+"onderstaande details in."
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page login button"
+msgid "Proceed as existing user"
+msgstr "Doorgaan als bestaande gebruiker"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page login password prompt"
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page login prompt"
+msgid "Alternatively, sign in to connect to existing account."
+msgstr "Alternatief, log in om te verbinden met een bestaand account."
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page login username prompt"
+msgid "Name or email"
+msgstr "Naam of e-mail"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page nickname prompt"
+msgid "Nickname"
+msgstr "Weergavenaam"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page register button"
+msgid "Proceed as new user"
+msgstr "Doorgaan als nieuwe gebruiker"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page title"
+msgid "Registration Details"
+msgstr "Registratiegegevens"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36
+#, elixir-autogen, elixir-format
+msgctxt "oauth register page title"
+msgid "This is the first time you visit! Please enter your Pleroma handle."
+msgstr "Dit is je eerste bezoek! Vul a.u.b. je Pleroma gebruikersnaam in."
+
+#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2
+#, elixir-autogen, elixir-format
+msgctxt "oauth scopes message"
+msgid "The following permissions will be granted"
+msgstr "De volgende rechten zullen worden toegekend"
+
+#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2
+#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2
+#, elixir-autogen, elixir-format
+msgctxt "oauth token code message"
+msgid "Token code is <br>%{token}"
+msgstr "Token code is <br>%{token}"
+
+#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12
+#, elixir-autogen, elixir-format
+msgctxt "mfa auth code prompt"
+msgid "Authentication code"
+msgstr "Authenticatiecode"
+
+#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "mfa auth page title"
+msgid "Two-factor authentication"
+msgstr "Tweefactor authenticatie"
+
+#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23
+#, elixir-autogen, elixir-format
+msgctxt "mfa auth page use recovery code link"
+msgid "Enter a two-factor recovery code"
+msgstr "Voer een tweefactor herstelcode in"
+
+#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20
+#, elixir-autogen, elixir-format
+msgctxt "mfa auth verify code button"
+msgid "Verify"
+msgstr "Controleren"
+
+#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "mfa recover page title"
+msgid "Two-factor recovery"
+msgstr "Tweefactor herstel"
+
+#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12
+#, elixir-autogen, elixir-format
+msgctxt "mfa recover recovery code prompt"
+msgid "Recovery code"
+msgstr "Herstelcode"
+
+#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23
+#, elixir-autogen, elixir-format
+msgctxt "mfa recover use 2fa code link"
+msgid "Enter a two-factor code"
+msgstr "Voer een tweefactor code in"
+
+#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20
+#, elixir-autogen, elixir-format
+msgctxt "mfa recover verify recovery code button"
+msgid "Verify"
+msgstr "Controleren"
+
+#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8
+#, elixir-autogen, elixir-format
+msgctxt "static fe profile page remote follow button"
+msgid "Remote follow"
+msgstr "Extern volgen"
+
+#: lib/pleroma/web/templates/email/digest.html.eex:163
+#, elixir-autogen, elixir-format
+msgctxt "digest email header line"
+msgid "Hey %{nickname}, here is what you've missed!"
+msgstr "Hoi %{nickname}, dit is wat je hebt gemist!"
+
+#: lib/pleroma/web/templates/email/digest.html.eex:544
+#, elixir-autogen, elixir-format
+msgctxt "digest email receiver address"
+msgid "The email address you are subscribed as is <a href='mailto:%{@user.email}' style='color: %{color};text-decoration: none;'>%{email}</a>. "
+msgstr ""
+"Het e-mailadres waarmee je bent ingeschreven is <a href='mailto:%{@user."
+"email}' style='color: %{color};text-decoration: none;'>%{email}</a>. "
+
+#: lib/pleroma/web/templates/email/digest.html.eex:538
+#, elixir-autogen, elixir-format
+msgctxt "digest email sending reason"
+msgid "You have received this email because you have signed up to receive digest emails from <b>%{instance}</b> Pleroma instance."
+msgstr ""
+"Je ontvangt deze e-mail omdat je bent ingeschreven voor overzichts-mails te "
+"ontvangen van <b>%{instance}</b> Pleroma instantie."
+
+#: lib/pleroma/web/templates/email/digest.html.eex:547
+#, elixir-autogen, elixir-format
+msgctxt "digest email unsubscribe action"
+msgid "To unsubscribe, please go %{here}."
+msgstr "Je kunt je %{here} uitschrijven voor deze e-mails."
+
+#: lib/pleroma/web/templates/email/digest.html.eex:547
+#, elixir-autogen, elixir-format
+msgctxt "digest email unsubscribe action link text"
+msgid "here"
+msgstr "hier"
+
+#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "mailer unsubscribe failed message"
+msgid "UNSUBSCRIBE FAILURE"
+msgstr "UITSCHRIJVEN MISLUKT"
+
+#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1
+#, elixir-autogen, elixir-format
+msgctxt "mailer unsubscribe successful message"
+msgid "UNSUBSCRIBE SUCCESSFUL"
+msgstr "UITSCHRIJVEN GESLAAGD"
+
+#: lib/pleroma/web/templates/email/digest.html.eex:385
+#, elixir-format
+msgctxt "new followers count header"
+msgid "%{count} New Follower"
+msgid_plural "%{count} New Followers"
+msgstr[0] "%{count} Nieuwe Volger"
+msgstr[1] "%{count} Nieuwe Volgers"
+
+#: lib/pleroma/emails/user_email.ex:356
+#, elixir-autogen, elixir-format
+msgctxt "account archive email body - self-requested"
+msgid "<p>You requested a full backup of your Pleroma account. It's ready for download:</p>\n<p><a href=\"%{download_url}\">%{download_url}</a></p>\n"
+msgstr ""
+"<p>Je hebt een verzoek ingediend voor een volledige back-up van je Pleroma "
+"account. Deze is gereed om te downloaden:</p>\n"
+"<p><a href=\"%{download_url}\">%{download_url}</a></p>\n"
+
+#: lib/pleroma/emails/user_email.ex:384
+#, elixir-autogen, elixir-format
+msgctxt "account archive email subject"
+msgid "Your account archive is ready"
+msgstr "Je account archief is gereed"
+
+#: lib/pleroma/emails/user_email.ex:188
+#, elixir-autogen, elixir-format
+msgctxt "approval pending email body"
+msgid "<h3>Awaiting Approval</h3>\n<p>Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.</p>\n"
+msgstr ""
+"<h3>Goedkeuring in afwachting</h3>\n"
+"<p>Je account bij %{instance_name} zal worden beoordeeld door de beheerders. "
+"Je zult een opvolgende e-mail ontvangen wanneer je account goed gekeurd "
+"is.</p>\n"
+
+#: lib/pleroma/emails/user_email.ex:202
+#, elixir-autogen, elixir-format
+msgctxt "approval pending email subject"
+msgid "Your account is awaiting approval"
+msgstr "Je account is in afwachting van goedkeuring"
+
+#: lib/pleroma/emails/user_email.ex:158
+#, elixir-autogen, elixir-format
+msgctxt "confirmation email body"
+msgid "<h3>Thank you for registering on %{instance_name}</h3>\n<p>Email confirmation is required to activate the account.</p>\n<p>Please click the following link to <a href=\"%{confirmation_url}\">activate your account</a>.</p>\n"
+msgstr ""
+"<h3>Bedankt voor het registreren bij %{instance_name}</h3>\n"
+"<p>Bevestiging via e-mail is vereist om je account te activeren.</p>\n"
+"<p>Je kunt je account activeren door op <a href=\"%{confirmation_url}\">deze "
+"link te klikken</a>.</p>\n"
+
+#: lib/pleroma/emails/user_email.ex:174
+#, elixir-autogen, elixir-format
+msgctxt "confirmation email subject"
+msgid "%{instance_name} account confirmation"
+msgstr "%{instance_name} account bevestiging"
+
+#: lib/pleroma/emails/user_email.ex:310
+#, elixir-autogen, elixir-format
+msgctxt "digest email subject"
+msgid "Your digest from %{instance_name}"
+msgstr "Je overzicht van %{instance_name}"
+
+#: lib/pleroma/emails/user_email.ex:81
+#, elixir-autogen, elixir-format
+msgctxt "password reset email body"
+msgid "<h3>Reset your password at %{instance_name}</h3>\n<p>Someone has requested password change for your account at %{instance_name}.</p>\n<p>If it was you, visit the following link to proceed: <a href=\"%{password_reset_url}\">reset password</a>.</p>\n<p>If it was someone else, nothing to worry about: your data is secure and your password has not been changed.</p>\n"
+msgstr ""
+"<h3>Herstel je wachtwoord bij %{instance_name}</h3>\n"
+"<p>Iemand heeft een verzoek ingediend om het wachtwoord van je account bij "
+"%{instance_name} te herstellen.</p>\n"
+"<p>Als je dit zelf geweest bent, volg dan de volgende link om door te gaan: "
+"<a href=\"%{password_reset_url}\">wachtwoord herstellen</a>.</p>\n"
+"<p>Indien je dit niet geweest bent, hoef je geen verdere acties te "
+"ondernemen: je gegevens zijn veilig en je wachtwoord is niet gewijzigd.</p>\n"
+
+#: lib/pleroma/emails/user_email.ex:98
+#, elixir-autogen, elixir-format
+msgctxt "password reset email subject"
+msgid "Password reset"
+msgstr "Wachtwoord herstellen"
+
+#: lib/pleroma/emails/user_email.ex:215
+#, elixir-autogen, elixir-format
+msgctxt "successful registration email body"
+msgid "<h3>Hello @%{nickname},</h3>\n<p>Your account at %{instance_name} has been registered successfully.</p>\n<p>No further action is required to activate your account.</p>\n"
+msgstr ""
+"<h3>Hoi @%{nickname},</h3>\n"
+"<p>Het registreren van je account bij %{instance_name} is gelukt.</p>\n"
+"<p>Er zijn geen verdere stappen vereist om je account te activeren.</p>\n"
+
+#: lib/pleroma/emails/user_email.ex:231
+#, elixir-autogen, elixir-format
+msgctxt "successful registration email subject"
+msgid "Account registered on %{instance_name}"
+msgstr "Account registratie bij %{instance_name}"
+
+#: lib/pleroma/emails/user_email.ex:119
+#, elixir-autogen, elixir-format
+msgctxt "user invitation email body"
+msgid "<h3>You are invited to %{instance_name}</h3>\n<p>%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.</p>\n<p>Click the following link to register: <a href=\"%{registration_url}\">accept invitation</a>.</p>\n"
+msgstr ""
+"<h3>Je bent uitgenodigd bij %{instance_name}</h3>\n"
+"<p>%{inviter_name} nodigt je uit om je te registreren bij %{instance_name}, "
+"een instantie van het Pleroma gefedereerde sociale netwerk.</p>\n"
+"<p>Om je te registreren, klink op de volgende link: <a href=\""
+"%{registration_url}\">uitnodiging accepteren</a>.</p>\n"
+
+#: lib/pleroma/emails/user_email.ex:136
+#, elixir-autogen, elixir-format
+msgctxt "user invitation email subject"
+msgid "Invitation to %{instance_name}"
+msgstr "Uitnodiging van %{instance_name}"
+
+#: lib/pleroma/emails/user_email.ex:53
+#, elixir-autogen, elixir-format
+msgctxt "welcome email html body"
+msgid "Welcome to %{instance_name}!"
+msgstr "Welkom bij %{instance_name}!"
+
+#: lib/pleroma/emails/user_email.ex:41
+#, elixir-autogen, elixir-format
+msgctxt "welcome email subject"
+msgid "Welcome to %{instance_name}!"
+msgstr "Welkom bij %{instance_name}!"
+
+#: lib/pleroma/emails/user_email.ex:65
+#, elixir-autogen, elixir-format
+msgctxt "welcome email text body"
+msgid "Welcome to %{instance_name}!"
+msgstr "Welkom bij %{instance_name}!"
+
+#: lib/pleroma/emails/user_email.ex:368
+#, elixir-autogen, elixir-format
+msgctxt "account archive email body - admin requested"
+msgid "<p>Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:</p>\n<p><a href=\"%{download_url}\">%{download_url}</a></p>\n"
+msgstr ""
+"<p>Beheerder @%{admin_nickname} heeft een verzoek ingediend voor een "
+"volledige back-up van je Pleroma account. Deze is gereed om te "
+"downloaden:</p>\n"
+"<p><a href=\"%{download_url}\">%{download_url}</a></p>\n"
diff --git a/priv/static/instance/static.css b/priv/static/instance/static.css
index 487e1ec27..48c74c125 100644
--- a/priv/static/instance/static.css
+++ b/priv/static/instance/static.css
@@ -51,6 +51,7 @@ body {
overflow: hidden;
margin: 35px auto;
box-shadow: 0 1px 4px 0px rgba(0, 0, 0, 0.5);
+ padding: 0em 1em 0em 1em;
}
.container__content {
@@ -86,7 +87,6 @@ form {
}
input {
- box-sizing: content-box;
padding: 10px;
margin-top: 5px;
margin-bottom: 10px;
@@ -97,6 +97,8 @@ input {
transition-duration: 0.35s;
border-bottom: 2px solid #2a384a;
font-size: 14px;
+ width: inherit;
+ box-sizing: border-box;
}
.scopes-input {
diff --git a/restarter/lib/pleroma.ex b/restarter/lib/pleroma.ex
index 149a569ce..a7186cec4 100644
--- a/restarter/lib/pleroma.ex
+++ b/restarter/lib/pleroma.ex
@@ -61,6 +61,12 @@ defmodule Restarter.Pleroma do
{:noreply, @init_state}
end
+ # Don't actually restart during tests.
+ # We just check if the correct call has been done.
+ # If we actually restart, we get errors during the tests like
+ # (RuntimeError) could not lookup Ecto repo Pleroma.Repo because it was not started or
+ # it does not exist
+ # See tests in Pleroma.Config.TransferTaskTest
def handle_cast({:restart, :test, _}, state) do
Logger.debug("pleroma manually restarted")
{:noreply, Map.put(state, :need_reboot, false)}
@@ -74,6 +80,12 @@ defmodule Restarter.Pleroma do
def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state}
+ # Don't actually restart during tests.
+ # We just check if the correct call has been done.
+ # If we actually restart, we get errors during the tests like
+ # (RuntimeError) could not lookup Ecto repo Pleroma.Repo because it was not started or
+ # it does not exist
+ # See tests in Pleroma.Config.TransferTaskTest
def handle_cast({:after_boot, :test}, state) do
Logger.debug("pleroma restarted after boot")
state = %{state | after_boot: true, rebooted: true}
diff --git a/restarter/mix.exs b/restarter/mix.exs
index b0908aece..9f26f5f64 100644
--- a/restarter/mix.exs
+++ b/restarter/mix.exs
@@ -13,7 +13,8 @@ defmodule Restarter.MixProject do
def application do
[
- mod: {Restarter, []}
+ mod: {Restarter, []},
+ extra_applications: [:logger]
]
end
diff --git a/test/pleroma/config/transfer_task_test.exs b/test/pleroma/config/transfer_task_test.exs
index 927744add..3dc917362 100644
--- a/test/pleroma/config/transfer_task_test.exs
+++ b/test/pleroma/config/transfer_task_test.exs
@@ -79,35 +79,70 @@ defmodule Pleroma.Config.TransferTaskTest do
describe "pleroma restart" do
setup do
- on_exit(fn -> Restarter.Pleroma.refresh() end)
+ on_exit(fn ->
+ Restarter.Pleroma.refresh()
+
+ # Restarter.Pleroma.refresh/0 is an asynchronous call.
+ # A GenServer will first finish the previous call before starting a new one.
+ # Here we do a synchronous call.
+ # That way we are sure that the previous call has finished before we continue.
+ # See https://stackoverflow.com/questions/51361856/how-to-use-task-await-with-genserver
+ Restarter.Pleroma.rebooted?()
+ end)
end
- @tag :erratic
test "don't restart if no reboot time settings were changed" do
clear_config(:emoji)
insert(:config, key: :emoji, value: [groups: [a: 1, b: 2]])
refute String.contains?(
- capture_log(fn -> TransferTask.start_link([]) end),
+ capture_log(fn ->
+ TransferTask.start_link([])
+
+ # TransferTask.start_link/1 is an asynchronous call.
+ # A GenServer will first finish the previous call before starting a new one.
+ # Here we do a synchronous call.
+ # That way we are sure that the previous call has finished before we continue.
+ Restarter.Pleroma.rebooted?()
+ end),
"pleroma restarted"
)
end
- @tag :erratic
test "on reboot time key" do
clear_config(:shout)
insert(:config, key: :shout, value: [enabled: false])
- assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
+
+ # Note that we don't actually restart Pleroma.
+ # See module Restarter.Pleroma
+ assert capture_log(fn ->
+ TransferTask.start_link([])
+
+ # TransferTask.start_link/1 is an asynchronous call.
+ # A GenServer will first finish the previous call before starting a new one.
+ # Here we do a synchronous call.
+ # That way we are sure that the previous call has finished before we continue.
+ Restarter.Pleroma.rebooted?()
+ end) =~ "pleroma restarted"
end
- @tag :erratic
test "on reboot time subkey" do
clear_config(Pleroma.Captcha)
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
- assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted"
+
+ # Note that we don't actually restart Pleroma.
+ # See module Restarter.Pleroma
+ assert capture_log(fn ->
+ TransferTask.start_link([])
+
+ # TransferTask.start_link/1 is an asynchronous call.
+ # A GenServer will first finish the previous call before starting a new one.
+ # Here we do a synchronous call.
+ # That way we are sure that the previous call has finished before we continue.
+ Restarter.Pleroma.rebooted?()
+ end) =~ "pleroma restarted"
end
- @tag :erratic
test "don't restart pleroma on reboot time key and subkey if there is false flag" do
clear_config(:shout)
clear_config(Pleroma.Captcha)
@@ -116,7 +151,15 @@ defmodule Pleroma.Config.TransferTaskTest do
insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60])
refute String.contains?(
- capture_log(fn -> TransferTask.load_and_update_env([], false) end),
+ capture_log(fn ->
+ TransferTask.load_and_update_env([], false)
+
+ # TransferTask.start_link/1 is an asynchronous call.
+ # A GenServer will first finish the previous call before starting a new one.
+ # Here we do a synchronous call.
+ # That way we are sure that the previous call has finished before we continue.
+ Restarter.Pleroma.rebooted?()
+ end),
"pleroma restarted"
)
end
diff --git a/test/pleroma/conversation/participation_test.exs b/test/pleroma/conversation/participation_test.exs
index 6f71cc040..a84437677 100644
--- a/test/pleroma/conversation/participation_test.exs
+++ b/test/pleroma/conversation/participation_test.exs
@@ -122,11 +122,11 @@ defmodule Pleroma.Conversation.ParticipationTest do
end
test "it marks a participation as read" do
- participation = insert(:participation, %{read: false})
+ participation = insert(:participation, %{updated_at: ~N[2017-07-17 17:09:58], read: false})
{:ok, updated_participation} = Participation.mark_as_read(participation)
assert updated_participation.read
- assert updated_participation.updated_at == participation.updated_at
+ assert :gt = NaiveDateTime.compare(updated_participation.updated_at, participation.updated_at)
end
test "it marks a participation as unread" do
diff --git a/test/pleroma/user_relationship_test.exs b/test/pleroma/user_relationship_test.exs
index 2811aff4c..7d205a746 100644
--- a/test/pleroma/user_relationship_test.exs
+++ b/test/pleroma/user_relationship_test.exs
@@ -5,8 +5,9 @@
defmodule Pleroma.UserRelationshipTest do
alias Pleroma.UserRelationship
- use Pleroma.DataCase, async: true
+ use Pleroma.DataCase, async: false
+ import Mock
import Pleroma.Factory
describe "*_exists?/2" do
@@ -79,7 +80,12 @@ defmodule Pleroma.UserRelationshipTest do
end
test "if record already exists, returns it", %{users: [user1, user2]} do
- user_block = UserRelationship.create_block(user1, user2)
+ user_block =
+ with_mock NaiveDateTime, [:passthrough], utc_now: fn -> ~N[2017-03-17 17:09:58] end do
+ {:ok, %{inserted_at: ~N[2017-03-17 17:09:58]}} =
+ UserRelationship.create_block(user1, user2)
+ end
+
assert user_block == UserRelationship.create_block(user1, user2)
end
end
diff --git a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs
index ba4628fc5..faa35f199 100644
--- a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs
+++ b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs
@@ -3,9 +3,10 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do
- use Pleroma.Web.ConnCase, async: true
+ use Pleroma.Web.ConnCase, async: false
use Oban.Testing, repo: Pleroma.Repo
+ import Mock
import Pleroma.Factory
alias Pleroma.Filter
@@ -53,24 +54,19 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do
in_seconds = 600
response =
- conn
- |> put_req_header("content-type", "application/json")
- |> post("/api/v1/filters", %{
- "phrase" => "knights",
- context: ["home"],
- expires_in: in_seconds
- })
- |> json_response_and_validate_schema(200)
+ with_mock NaiveDateTime, [:passthrough], utc_now: fn -> ~N[2017-03-17 17:09:58] end do
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> post("/api/v1/filters", %{
+ "phrase" => "knights",
+ context: ["home"],
+ expires_in: in_seconds
+ })
+ |> json_response_and_validate_schema(200)
+ end
assert response["irreversible"] == false
-
- expected_expiration =
- NaiveDateTime.utc_now()
- |> NaiveDateTime.add(in_seconds)
-
- {:ok, actual_expiration} = NaiveDateTime.from_iso8601(response["expires_at"])
-
- assert abs(NaiveDateTime.diff(expected_expiration, actual_expiration)) <= 5
+ assert response["expires_at"] == "2017-03-17T17:19:58.000Z"
filter = Filter.get(response["id"], user)
@@ -177,28 +173,25 @@ defmodule Pleroma.Web.MastodonAPI.FilterControllerTest do
assert response["whole_word"] == true
end
- @tag :erratic
test "with adding expires_at", %{conn: conn, user: user} do
filter = insert(:filter, user: user)
in_seconds = 600
response =
- conn
- |> put_req_header("content-type", "application/json")
- |> put("/api/v1/filters/#{filter.filter_id}", %{
- phrase: "nii",
- context: ["public"],
- expires_in: in_seconds,
- irreversible: true
- })
- |> json_response_and_validate_schema(200)
+ with_mock NaiveDateTime, [:passthrough], utc_now: fn -> ~N[2017-03-17 17:09:58] end do
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> put("/api/v1/filters/#{filter.filter_id}", %{
+ phrase: "nii",
+ context: ["public"],
+ expires_in: in_seconds,
+ irreversible: true
+ })
+ |> json_response_and_validate_schema(200)
+ end
assert response["irreversible"] == true
-
- assert response["expires_at"] ==
- NaiveDateTime.utc_now()
- |> NaiveDateTime.add(in_seconds)
- |> Pleroma.Web.CommonAPI.Utils.to_masto_date()
+ assert response["expires_at"] == "2017-03-17T17:19:58.000Z"
filter = Filter.get(response["id"], user)
diff --git a/test/pleroma/web/plugs/rate_limiter_test.exs b/test/pleroma/web/plugs/rate_limiter_test.exs
index b1ac76120..19cee8aee 100644
--- a/test/pleroma/web/plugs/rate_limiter_test.exs
+++ b/test/pleroma/web/plugs/rate_limiter_test.exs
@@ -48,38 +48,42 @@ defmodule Pleroma.Web.Plugs.RateLimiterTest do
refute RateLimiter.disabled?(build_conn())
end
- @tag :erratic
test "it restricts based on config values" do
limiter_name = :test_plug_opts
scale = 80
limit = 5
- clear_config([Pleroma.Web.Endpoint, :http, :ip], {8, 8, 8, 8})
+ clear_config([Pleroma.Web.Endpoint, :http, :ip], {127, 0, 0, 1})
clear_config([:rate_limit, limiter_name], {scale, limit})
plug_opts = RateLimiter.init(name: limiter_name)
conn = build_conn(:get, "/")
- for i <- 1..5 do
- conn = RateLimiter.call(conn, plug_opts)
- assert {^i, _} = RateLimiter.inspect_bucket(conn, limiter_name, plug_opts)
- Process.sleep(10)
+ for _ <- 1..5 do
+ conn_limited = RateLimiter.call(conn, plug_opts)
+
+ refute conn_limited.status == Conn.Status.code(:too_many_requests)
+ refute conn_limited.resp_body
+ refute conn_limited.halted
end
- conn = RateLimiter.call(conn, plug_opts)
- assert %{"error" => "Throttled"} = ConnTest.json_response(conn, :too_many_requests)
- assert conn.halted
+ conn_limited = RateLimiter.call(conn, plug_opts)
+ assert %{"error" => "Throttled"} = ConnTest.json_response(conn_limited, :too_many_requests)
+ assert conn_limited.halted
- Process.sleep(50)
+ expire_ttl(conn, limiter_name)
- conn = build_conn(:get, "/")
+ for _ <- 1..5 do
+ conn_limited = RateLimiter.call(conn, plug_opts)
- conn = RateLimiter.call(conn, plug_opts)
- assert {1, 4} = RateLimiter.inspect_bucket(conn, limiter_name, plug_opts)
+ refute conn_limited.status == Conn.Status.code(:too_many_requests)
+ refute conn_limited.resp_body
+ refute conn_limited.halted
+ end
- refute conn.status == Conn.Status.code(:too_many_requests)
- refute conn.resp_body
- refute conn.halted
+ conn_limited = RateLimiter.call(conn, plug_opts)
+ assert %{"error" => "Throttled"} = ConnTest.json_response(conn_limited, :too_many_requests)
+ assert conn_limited.halted
end
describe "options" do
@@ -263,4 +267,12 @@ defmodule Pleroma.Web.Plugs.RateLimiterTest do
refute {:err, :not_found} == RateLimiter.inspect_bucket(conn, limiter_name, opts)
end
+
+ def expire_ttl(%{remote_ip: remote_ip} = _conn, bucket_name_root) do
+ bucket_name = "anon:#{bucket_name_root}" |> String.to_atom()
+ key_name = "ip::#{remote_ip |> Tuple.to_list() |> Enum.join(".")}"
+
+ {:ok, bucket_value} = Cachex.get(bucket_name, key_name)
+ Cachex.put(bucket_name, key_name, bucket_value, ttl: -1)
+ end
end