summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/emoji-test.txt125
-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/web/plugs/rate_limiter_test.exs44
7 files changed, 178 insertions, 75 deletions
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/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/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