Commit graph

5899 commits

Author SHA1 Message Date
Marcin Mikołajczak 9342705e6b
Add app shortcuts (#15234)
* Add app shortcuts

Signed-off-by: mkljczk <me@mkljczk.pl>

* Fix codeclimate issues

Signed-off-by: mkljczk <me@mkljczk.pl>

* Change shortcuts

Signed-off-by: mkljczk <me@mkljczk.pl>

* More consistent new-status icon

Signed-off-by: mkljczk <me@mkljczk.pl>
2020-12-15 02:04:56 +01:00
ThibG 47e507fa61
Add ability to require invite request text (#15326)
Fixes #15273

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-14 10:03:09 +01:00
ThibG a7e819b8a8
Fix dynamic updating of “Bootstrap timeline accounts” admin setting (#15325)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-14 09:37:58 +01:00
Eugen Rochko 4fd3062003
Change "Profile unavailable" string to "Account suspended" in web UI (#15345) 2020-12-14 09:08:09 +01:00
Eugen Rochko 216b85b053
Fix performance on instances list in admin UI (#15282)
- Reduce duplicate queries
- Remove n+1 queries
- Add accounts count to detailed view
- Add separate action log entry for updating existing domain blocks
2020-12-14 09:06:34 +01:00
Eugen Rochko a3b5675aa8
Change number format on about page from full to shortened (#15327) 2020-12-14 05:09:14 +01:00
ThibG 49eb4d4ddf
Add honeypot fields and minimum fill-out time for sign-up form (#15276)
* Add honeypot fields to limit non-specialized spam

Add two honeypot fields: a fake website input and a fake password confirmation
one. The label/placeholder/aria-label tells not to fill them, and they are
hidden in CSS, so legitimate users should not fall into these.

This should cut down on some non-Mastodon-specific spambots.

* Require a 3 seconds delay before submitting the registration form

* Fix tests

* Move registration form time check to model validation

* Give people a chance to clear the honeypot fields

* Refactor honeypot translation strings

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-10 06:27:26 +01:00
ThibG 9669167aae
Fix notifications being unnecessarily redrawn on state change (#15312)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-09 19:16:30 +01:00
trwnh 127c543a6e
rename replies_policy enumerables (#15304) 2020-12-09 04:34:17 +01:00
Takeshi Umeda f379a52d74
Fix missing pictureInPicture prop in detailed status container (#15309) 2020-12-09 04:33:33 +01:00
Jeong Arm 7aee364795
Fix open media hotkey (#15308)
* Fix open media hotkey

* Update status.js

Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
2020-12-09 00:24:13 +01:00
Takeshi Umeda 765626a3a7
Fix the Open handler for PreviewCard (#15305) 2020-12-08 12:07:54 +01:00
ThibG 0b437325dc
Fix column swiping animation logic (#15301)
From the start, swiping columns was highly unreliable because the logic
could change `ReactSwipeableViews`'s `animateTransitions` property
mid-swipe.

PR #11200 partially fixed this, but at the unintended cost of disabling the
swipe animation altogether.

This PR changes the logic behind `shouldAnimate` to only disable the swiping
animation at the end of a column change not initiated by `ReactSwipeableViews`.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2020-12-07 20:07:24 +01:00
Eugen Rochko 9620ee90be
Fix unnecessary re-rendering of various components when typing in web UI (#15286) 2020-12-07 19:36:36 +01:00
Eugen Rochko 48bef17cc9
Fix slow distinct queries where grouped queries are faster (#15287)
About 2x speed-up on inboxes query
2020-12-07 12:08:30 +01:00
Eugen Rochko a8c471fcc0
Fix not being able to open audio modal in web UI (#15283)
Fix #15280

Also adds the new action bar and blurhash-based background
color to audio and video modals
2020-12-07 04:29:37 +01:00
Eugen Rochko 59d943e152
Fix alert when failing to save timeline markers in web UI (#15285)
Fix #15267
2020-12-07 03:23:43 +01:00
Eugen Rochko 014733d1e4
Fix too low contrast on new media modal background in web UI (#15284)
Fix #15258
2020-12-07 02:32:27 +01:00
Takeshi Umeda 17a2e27641
Fix remove number sign from account_featured_tags (#15277) 2020-12-06 05:55:35 +01:00
Takeshi Umeda 44d5c6bc8f
Fix incorrect conditions for suspended accounts in Get API for account featured tags (#15270) 2020-12-04 04:22:35 +01:00
ThibG fbe7519243
Fix account merging in maintenance script (#15264)
Also include AccountNote and AccountDeletionRequest to the list of classes
needing to be reassigned the merged account.
2020-12-04 02:23:51 +01:00
ThibG d849aad852
Change public thread view to hide "Show thread" link (#15266)
Fixes #15262
2020-12-02 21:21:44 +01:00
ThibG 9136be480f
Fix followers hash cache not being invalidated on account merge (#15256)
Also clear relationships cache.
2020-12-02 21:20:00 +01:00
Eugen Rochko a55e6e99c0
Fix ku locale not being right-to-left (#15252) 2020-11-30 23:02:32 +01:00
Mélanie Chauvel 68775b6039
Fix character count not ignoring hidden CW field (#15236) 2020-11-30 12:09:34 +01:00
Eugen Rochko 13b07b88f1
Fix omniauth (SAML/CAS) sign-in routes not having CSRF protection (#15228) 2020-11-28 05:17:53 +01:00
Eugen Rochko 13206fcfb8
Fix media modal crashing when media has no blurhash (#15229) 2020-11-28 03:37:01 +01:00
Eugen Rochko e7e099d1a0
Fix deletes not reaching every server that interacted with status (#15200)
Extract logic for determining ActivityPub inboxes to send deletes
to to its own class and explicitly include the person the status
replied to (even if not mentioned), people who favourited it, and
people who replied to it (though that one is still not recursive)
2020-11-27 15:48:31 +01:00
Eugen Rochko e1a6526c8d
Fix media modal regression on public pages (#15221) 2020-11-27 15:41:58 +01:00
Eugen Rochko 1e89e2ed98
Change media modals look in web UI (#15217)
- Change overlay background to match color of viewed image
- Add interactive reply/boost/favourite buttons to footer of modal
- Change ugly "View context" link to button among the action bar
2020-11-27 03:24:11 +01:00
Eugen Rochko cb7bd8ee03
New Crowdin updates (#15137)
* New translations en.yml (Kabyle)
[ci skip]

* New translations en.json (Kabyle)
[ci skip]

* New translations en.yml (Sanskrit)
[ci skip]

* New translations en.json (Sanskrit)
[ci skip]

* New translations en.yml (Sardinian)
[ci skip]

* New translations en.json (Sardinian)
[ci skip]

* New translations simple_form.en.yml (Corsican)
[ci skip]

* New translations simple_form.en.yml (Sorani (Kurdish))
[ci skip]

* New translations en.yml (Welsh)
[ci skip]

* New translations simple_form.en.yml (Swedish)
[ci skip]

* New translations en.json (Tamil)
[ci skip]

* New translations simple_form.en.yml (Persian)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* New translations en.json (Persian)
[ci skip]

* New translations simple_form.en.yml (Indonesian)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations simple_form.en.yml (Portuguese, Brazilian)
[ci skip]

* New translations en.yml (Portuguese, Brazilian)
[ci skip]

* New translations simple_form.en.yml (Galician)
[ci skip]

* New translations simple_form.en.yml (Tamil)
[ci skip]

* New translations en.yml (Urdu (Pakistan))
[ci skip]

* New translations en.json (Urdu (Pakistan))
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations simple_form.en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations simple_form.en.yml (Ukrainian)
[ci skip]

* New translations en.yml (Ukrainian)
[ci skip]

* New translations en.json (Ukrainian)
[ci skip]

* New translations en.yml (Tamil)
[ci skip]

* New translations en.yml (Telugu)
[ci skip]

* New translations en.yml (Estonian)
[ci skip]

* New translations en.json (Telugu)
[ci skip]

* New translations en.yml (Malay)
[ci skip]

* New translations en.json (Malay)
[ci skip]

* New translations en.yml (Hindi)
[ci skip]

* New translations en.json (Hindi)
[ci skip]

* New translations en.yml (Latvian)
[ci skip]

* New translations en.json (Latvian)
[ci skip]

* New translations simple_form.en.yml (Estonian)
[ci skip]

* New translations en.json (Estonian)
[ci skip]

* New translations en.json (Bengali)
[ci skip]

* New translations simple_form.en.yml (Kazakh)
[ci skip]

* New translations en.yml (Kazakh)
[ci skip]

* New translations en.json (Kazakh)
[ci skip]

* New translations simple_form.en.yml (Norwegian Nynorsk)
[ci skip]

* New translations en.yml (Norwegian Nynorsk)
[ci skip]

* New translations en.json (Norwegian Nynorsk)
[ci skip]

* New translations en.json (Thai)
[ci skip]

* New translations en.yml (Marathi)
[ci skip]

* New translations en.json (Marathi)
[ci skip]

* New translations simple_form.en.yml (Bengali)
[ci skip]

* New translations en.yml (Bengali)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.json (French)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations devise.en.yml (Japanese)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations simple_form.en.yml (Occitan)
[ci skip]

* New translations en.yml (Occitan)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations doorkeeper.en.yml (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.json (Kannada)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations simple_form.en.yml (Esperanto)
[ci skip]

* New translations doorkeeper.en.yml (Esperanto)
[ci skip]

* New translations doorkeeper.en.yml (Esperanto)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.json (Esperanto)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Turkish)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations en.yml (Icelandic)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Corsican)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Russian)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Danish)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Chinese Traditional)
[ci skip]

* New translations en.json (Japanese)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations simple_form.en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations devise.en.yml (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations doorkeeper.en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations simple_form.en.yml (Vietnamese)
[ci skip]

* New translations doorkeeper.en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Persian)
[ci skip]

* New translations en.yml (Esperanto)
[ci skip]

* New translations en.json (Standard Moroccan Tamazight)
[ci skip]

* New translations en.yml (Turkish)
[ci skip]

* New translations en.yml (Turkish)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations devise.en.yml (Czech)
[ci skip]

* New translations devise.en.yml (Czech)
[ci skip]

* New translations en.json (Czech)
[ci skip]

* New translations en.json (Polish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations simple_form.en.yml (Polish)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations en.json (Czech)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Galician)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations doorkeeper.en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish, Mexico)
[ci skip]

* New translations doorkeeper.en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish, Mexico)
[ci skip]

* New translations en.yml (Spanish, Mexico)
[ci skip]

* New translations simple_form.en.yml (Spanish)
[ci skip]

* New translations en.json (Spanish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Portuguese)
[ci skip]

* New translations en.yml (Russian)
[ci skip]

* New translations en.json (Russian)
[ci skip]

* New translations en.yml (Swedish)
[ci skip]

* New translations en.yml (Spanish)
[ci skip]

* New translations en.yml (Spanish, Argentina)
[ci skip]

* New translations en.yml (Albanian)
[ci skip]

* New translations en.yml (Hungarian)
[ci skip]

* New translations en.yml (Italian)
[ci skip]

* New translations en.yml (Persian)
[ci skip]

* New translations en.yml (Portuguese, Brazilian)
[ci skip]

* New translations simple_form.en.yml (Portuguese, Brazilian)
[ci skip]

* New translations en.yml (French)
[ci skip]

* New translations en.yml (Catalan)
[ci skip]

* New translations en.yml (Turkish)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations simple_form.en.yml (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.yml (Korean)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.yml (Danish)
[ci skip]

* New translations en.yml (Polish)
[ci skip]

* New translations en.yml (Thai)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.yml (Indonesian)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Japanese)
[ci skip]

* New translations en.json (Japanese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Vietnamese)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations simple_form.en.yml (French)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.json (Chinese Traditional, Hong Kong)
[ci skip]

* New translations devise.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations devise.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations devise.en.yml (Chinese Traditional, Hong Kong)
[ci skip]

* New translations en.yml (Chinese Simplified)
[ci skip]

* New translations en.json (Turkish)
[ci skip]

* New translations en.yml (German)
[ci skip]

* New translations en.yml (Galician)
[ci skip]

* New translations en.json (Galician)
[ci skip]

* New translations devise.en.yml (Galician)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Armenian)
[ci skip]

* New translations en.yml (Armenian)
[ci skip]

* New translations en.json (Sardinian)
[ci skip]

* New translations en.json (Sardinian)
[ci skip]

* New translations en.json (Sardinian)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.json (Vietnamese)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Chinese Traditional)
[ci skip]

* New translations simple_form.en.yml (Chinese Traditional)
[ci skip]

* New translations en.yml (Sorani (Kurdish))
[ci skip]

* New translations doorkeeper.en.yml (Sorani (Kurdish))
[ci skip]

* Ran `i18n-tasks normalize`

* Ran `yarn manage:translations`

Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
2020-11-26 22:42:12 +09:00
Eugen Rochko f844386809
Add tootctl accounts merge (#15201)
* Add `tootctl accounts merge`

* Update lib/mastodon/accounts_cli.rb

Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>

Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
2020-11-23 17:50:16 +01:00
abcang a2da02626e
Fixed ESLint error (#15214)
* eslint --fix

* fix consistent-return

* fix promise/catch-or-return

* ignore import rule
2020-11-23 17:35:14 +01:00
Eugen Rochko 272566043a
Remove fade-in animation from modals in web UI (#15199) 2020-11-21 23:54:36 +01:00
Eugen Rochko f970e1fab6
Fix hardcoded frame rate for frame by frame video navigation in web UI (#15198) 2020-11-21 23:19:04 +01:00
ThibG 66832cbf33
Undo outgoing follows when suspending a remote account (#15188) 2020-11-21 21:27:00 +01:00
ThibG c43f4cd3bb
Fix not being able to unfavorite toots one has lost access to (#15192)
Fixes #15191
2020-11-21 06:18:09 +01:00
ThibG 8b8004a962
Fix webfinger redirect handling in ResolveAccountService (#15187)
* Fix webfinger redirect handling in ResolveAccountService

ResolveAccountService#process_webfinger! handled a one-step webfinger
redirection, but only accepting the result if it matched the exact URI passed
as input, defeating the point of a redirection check.

Instead, use the same logic as in `ActivityPub::FetchRemoteAccountService`,
updating the resulting `acct:` URI with the result of the first webfinger
query.

* Add tests
2020-11-19 19:52:06 +01:00
ThibG 96c1e71329
Add import/export feature for bookmarks (#14956)
* Add ability to export bookmarks

* Add support for importing bookmarks

* Add bookmark import tests

* Add bookmarks export test
2020-11-19 17:48:13 +01:00
Darius Kazemi 8e2530ea16
Mark correctly as read reverse-order announcements (#15070)
This fixes a bug in #15065 where the "read" indicator was not getting correctly set. The ID of a dismissed announcement is now correct.
2020-11-19 17:40:18 +01:00
ThibG 2f6831f318
Fix sending spurious Rejects when processing remote account deletion (#15104)
* Fix sending spurious Rejects when processing remote account deletion

* Make skip_side_effects imply skip_activitypub
2020-11-19 17:39:47 +01:00
Eugen Rochko df1653174b
Add cache buster feature for media files (#15155)
Nginx can be configured to bypass proxy cache when a special header
is in the request. If the response is cacheable, it will replace
the cache for that request. Proxy caching of media files is
desirable when using object storage as a way of minimizing bandwidth
costs, but has the drawback of leaving deleted media files for
a configured amount of cache time. A cache buster can make those
media files immediately unavailable. This especially makes sense
when suspending and unsuspending an account.
2020-11-19 17:38:06 +01:00
ThibG 966593393e
Fix DMs not appearing into timelines (#15182)
Fixes #15179
2020-11-19 00:23:46 +01:00
ThibG d8d43a427a
Fix image uploads being random data when canvas read access is blocked (#15180)
Fixes #15178

PR #11499 introduced a way to deal with all-white canvas, but newer
Firefox versions set random data instead.

This PR detects whether canvas operations are reliable by comparing
the results on a hardcoded 2×2 pixels image, and memoizing the result.

This should be both more reliable and faster than the previous check.
2020-11-18 18:01:58 +01:00
Eugen Rochko 18ca4e0e9a
Fix pop-out player appearing on mobile screens in web UI (#15157)
Fix #15092
2020-11-16 05:16:39 +01:00
Eugen Rochko 04a079e723
Add hotkeys for audio/video control (#15158)
Fix #14515
2020-11-15 14:24:54 +01:00
ThibG 0a4d0e8320
Fix AccountDeletionWorker not accepting keyword arguments (#15152) 2020-11-13 22:17:04 +01:00
Eugen Rochko aa10200e58
Fix streaming API allowing connections to persist after access token invalidation (#15111)
Fix #14816
2020-11-12 23:05:24 +01:00
Eugen Rochko 8532429af7
Fix 2FA/sign-in token sessions being valid after password change (#14802)
If someone tries logging in to an account and is prompted for a 2FA
code or sign-in token, even if the account's password or e-mail is
updated in the meantime, the session will show the prompt and allow
the login process to complete with a valid 2FA code or sign-in token
2020-11-12 23:05:01 +01:00
ThibG 9870b175b4
Fix possible inconsistencies in tag search (#14906)
Do not downcase the queried tag before passing it to postgres when searching:
- tags are not downcased on creation
- `arel_table[:name].lower.matches(pattern)` generates an ILIKE anyway
- if Postgres and Rails happen to use different case-folding rules,
  downcasing before query but not before insertion may mean that some
  tags with some casings are not searchable
2020-11-12 18:35:23 +01:00