diff options
-rw-r--r-- | Dockerfile | 2 | ||||
-rw-r--r-- | config/config.exs | 10 | ||||
-rw-r--r-- | lib/pleroma/emoji-test.txt | 125 | ||||
-rw-r--r-- | lib/pleroma/user_relationship.ex | 5 | ||||
-rw-r--r-- | lib/pleroma/web/plugs/o_auth_plug.ex | 12 | ||||
-rw-r--r-- | priv/gettext/nl/LC_MESSAGES/errors.po | 158 | ||||
-rw-r--r-- | priv/gettext/nl/LC_MESSAGES/posix_errors.po | 165 | ||||
-rw-r--r-- | priv/gettext/nl/LC_MESSAGES/static_pages.po | 567 | ||||
-rw-r--r-- | priv/static/instance/static.css | 4 | ||||
-rw-r--r-- | restarter/lib/pleroma.ex | 12 | ||||
-rw-r--r-- | restarter/mix.exs | 3 | ||||
-rw-r--r-- | test/pleroma/config/transfer_task_test.exs | 61 | ||||
-rw-r--r-- | test/pleroma/conversation/participation_test.exs | 4 | ||||
-rw-r--r-- | test/pleroma/user_relationship_test.exs | 10 | ||||
-rw-r--r-- | test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs | 57 | ||||
-rw-r--r-- | test/pleroma/web/plugs/rate_limiter_test.exs | 44 |
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 |