Commit Graph

5814 Commits (cab4a712482cd8ffb3e5013627ce1c323cc28cfb)

Author SHA1 Message Date
ThibG ca56527140
Add follower synchronization mechanism (#14510)
* Add support for followers synchronization on the receiving end

Check the `collectionSynchronization` attribute on `Create` and `Announce`
activities and synchronize followers from provided collection if possible.

* Add tests for followers synchronization on the receiving end

* Add support for follower synchronization on the sender's end

* Add tests for the sending end

* Switch from AS attributes to HTTP header

Replace the custom `collectionSynchronization` ActivityStreams attribute by
an HTTP header (`X-AS-Collection-Synchronization`) with the same syntax as
the `Signature` header and the following fields:
- `collectionId` to specify which collection to synchronize
- `digest` for the SHA256 hex-digest of the list of followers known on the
   receiving instance (where “receiving instance” is determined by accounts
   sharing the same host name for their ActivityPub actor `id`)
- `url` of a collection that should be fetched by the instance actor

Internally, move away from the webfinger-based `domain` attribute and use
account `uri` prefix to group accounts.

* Add environment variable to disable followers synchronization

Since the whole mechanism relies on some new preconditions that, in some
extremely rare cases, might not be met, add an environment variable
(DISABLE_FOLLOWERS_SYNCHRONIZATION) to disable the mechanism altogether and
avoid followers being incorrectly removed.

The current conditions are:
1. all managed accounts' actor `id` and inbox URL have the same URI scheme and
   netloc.
2. all accounts whose actor `id` or inbox URL share the same URI scheme and
   netloc as a managed account must be managed by the same Mastodon instance
   as well.

As far as Mastodon is concerned, breaking those preconditions require extensive
configuration changes in the reverse proxy and might also cause other issues.

Therefore, this environment variable provides a way out for people with highly
unusual configurations, and can be safely ignored for the overwhelming majority
of Mastodon administrators.

* Only set follower synchronization header on non-public statuses

This is to avoid unnecessary computations and allow Follow-related
activities to be handled by the usual codepath instead of going through
the synchronization mechanism (otherwise, any Follow/Undo/Accept activity
would trigger the synchronization mechanism even if processing the activity
itself would be enough to re-introduce synchronization)

* Change how ActivityPub::SynchronizeFollowersService handles follow requests

If the remote lists a local follower which we only know has sent a follow
request, consider the follow request as accepted instead of sending an Undo.

* Integrate review feeback

- rename X-AS-Collection-Synchronization to Collection-Synchronization
- various minor refactoring and code style changes

* Only select required fields when computing followers_hash

* Use actor URI rather than webfinger domain in synchronization endpoint

* Change hash computation to be a XOR of individual hashes

Makes it much easier to be memory-efficient, and avoid sorting discrepancy issues.

* Marginally improve followers_hash computation speed

* Further improve hash computation performances by using pluck_each
4 years ago
abcang 9649ca0fbe
Removed disabling comments for Style/MethodMissingSuper (#15014)
* Removed disabling comments for Style/MethodMissingSuper

* Update rubocop for codeclimate
4 years ago
Josh Leeb-du Toit 0c24f4dce2
Add support for Gemini urls (#15013)
This PR updates the `valid_url` regex and sanitizer allowlist to provide
support for Gemini urls.

Closes #14991
4 years ago
mayaeh 4130aef29c
Fix translation string (#14986) 4 years ago
mayaeh fb5f3be18f
Fix strings that could not be translated (#14980) 4 years ago
Eugen Rochko a69ca29473
Change how missing desktop notifications permission is displayed (#14985)
Add missing controls for new notification type
4 years ago
Takeshi Umeda b4c4af18dc
Fix a bear check when the activity object is nil (#14981) 4 years ago
ThibG 4c45b43cb8
Change how CDN_HOST is passed down to make assets build reproducible (#14381)
* Change how CDN_HOST is passed down to make assets build reproducible

* Change webpacker/webpack configuration to dynamically load publicPath based on meta header

* Fix embedded layout missing the cdn-host meta header
4 years ago
OSAMU SATO 96761752ec
Add duration parameter to muting. (#13831)
* Adding duration to muting.

* Remove useless checks
4 years ago
ThibG f54ca3d08e
Fix browser notification permission request logic (#13543)
* Add notification permission handling code

* Request notification permission when enabling any notification setting

* Add badge to notification settings when permissions insufficient

* Disable alerts by default, requesting permission and enable them on onboarding
4 years ago
Eugen Rochko 5e1364c448
Add IP-based rules (#14963) 4 years ago
ThibG dc52a778e1
Fix issue checking for last unread notification when there are gaps (#14960) 4 years ago
ThibG dac3e362fd
Fix unread notification marker not updating when mounting column (#14954) 4 years ago
Eugen Rochko 7d985f2aac
Remove dependency on goldfinger gem (#14919)
There are edge cases where requests to certain hosts timeout when
using the vanilla HTTP.rb gem, which the goldfinger gem uses. Now
that we no longer need to support OStatus servers, webfinger logic
is so simple that there is no point encapsulating it in a gem, so
we can just use our own Request class. With that, we benefit from
more robust timeout code and IPv4/IPv6 resolution.

Fix #14091
4 years ago
ThibG 63770d3aac
Ignore alt-key hotkeys in text fields (#14942)
Fixes #14862

This used to be the case until #13987, which introduced a hotkey to toggle
the Content Warning field.

Unfortunately, MacOS relies on the “alt” key for many things, including
composing text (see #14862), therefore, even if that makes the CW toggle
hotkey significantly less useful, it makes sense to not interfere with
composing toots.
4 years ago
mayaeh 5a9ad221bf
Update translation files (#14920) 4 years ago
Eugen Rochko a549415868
Fix regressions in icon buttons in web UI (#14915) 4 years ago
Takeshi Umeda bec8b12bb5
Fix mark as read in notifications to be saved immediately (#14907)
* Fix mark as read in notifications to be saved immediately

* fix code style
4 years ago
ThibG 65136600e3
Fix logging out on mobile (#14901)
Fixes #14900
4 years ago
ThibG 78e45a5285
Add option to disable swiping motions across the WebUI (#13885)
Fixes #13882
4 years ago
Takeshi Umeda f5d08f2417
Fix unread notification markers (#14897) 4 years ago
ThibG 82951920f7
Fix bell button causing a brief “Cancel follow request” on locked accounts (#14896) 4 years ago
Eugen Rochko d88a79b456
Add pop-out player for audio/video in web UI (#14870)
Fix #11160
4 years ago
ThibG d60290044e
Add environment variable to allow requests to some private addresses (#14722) 4 years ago
ThibG ff89025979
Add unread notification markers (#14818)
* Add unread notification markers

Fixes #14804

* Allow IntersectionObserverArticle's children to be updated
4 years ago
Jeremy Rose 03b6b034b9
add og:published_time to opengraph meta tags (#14865) 4 years ago
Takeshi Umeda b655a7f88f
Fix a slow query for TagFeed (#14861)
* Fix a slow query for TagFeed

* rename tags to tag_ids
4 years ago
Takeshi Umeda 070026e634
Fix method of the DELETE DATA button (#14855) 4 years ago
Eugen Rochko 8c8bf0289f
Fix not being able to enable status notifications in Web Push API (#14822) 4 years ago
Eugen Rochko 974b1b79ce
Add option to be notified when a followed user posts (#13546)
* Add bell button

Fix #4890

* Remove duplicate type from post-deployment migration

* Fix legacy class type mappings

* Improve query performance with better index

* Fix validation

* Remove redundant index from notifications
4 years ago
ThibG eaea2311aa
Fix home TL marker code mishandling gaps (#14809) 4 years ago
ThibG aab867b0e8
Fix notification filter bar incorrectly filtering gaps (#14808) 4 years ago
kawaguchi 5d3c8baa9a
Fix validates :sign_count of WebauthnCredential (#14806) 4 years ago
Eugen Rochko ed099d8bdc
Change account suspensions to be reversible by default (#14726) 4 years ago
Eugen Rochko bbcbf12215
Fix unreadable placeholder text color in high contrast theme in web UI (#14803)
Fix #14717
4 years ago
ThibG b67caf9be4
Add paragraph about browser add-ons when encountering some errors (#14801)
* Add paragraph about browser add-ons when encountering some errors

When a crash is caused by a NotFoundError exception, add a paragraph
to the error page mentioning browser add-ons.

Indeed, crashes with NotFoundError are often caused by browser extensions
messing with the DOM in ways React.JS can't recover from (e.g. issues #13325
and #14731).

* Reword error messages
4 years ago
ThibG cd4ec7cd74
Do not serve account actors at all in limited federation mode (#14800)
* Do not serve account actors at all in limited federation mode

When an account is fetched without a signature from an allowed instance,
return an error.

This isn't really an improvement in security, as the only information that was
previously returned was required protocol-level info, and the only personal bit
was the existence of the account. The existence of the account can still be
checked by issuing a webfinger query, as those are accepted without signatures.

However, this change makes it so that unallowed instances won't create account
records on their end when they find a reference to an unknown account.

The previous behavior of rendering a limited list of fields, instead of not
rendering the actor at all, was in order to prevent situations in which two
instances in Authorized Fetch mode or Limited Federation mode would fail to
reach each other because resolving an account would require a signed query…
from an account which can only be fetched with a signed query itself. However,
this should now be fine as fetching accounts is done by signing on behalf of
the special instance actor, which does not require any kind of valid signature
to be fetched.

* Fix tests
4 years ago
Eugen Rochko 42c4322ce7
Fix reported statuses not being included in warning e-mail (#14778) 4 years ago
tateisu fa0c71f0d9
allow pagination by min_id and max_id (#14776)
* allow pagination by min_id and max_id

* also AccountConversation allows min_id,max_id pair

* also home,list TL allows min_id,max_id pair
4 years ago
Eugen Rochko 4e4b3a0c8e
Refactor settings controllers (#14767)
- Disallow suspended accounts from revoking sessions and apps
- Allow suspended accounts to access exports
4 years ago
Eugen Rochko e6b272e5c9
Change REST API to return empty data for suspended accounts (#14765) 4 years ago
ThibG 91eecd1b3c
Add border around 🕺 emoji (#14769)
Fixes #14768
4 years ago
Eugen Rochko fcb9350ff8
Change web UI to show empty profile for suspended accounts (#14766) 4 years ago
Eugen Rochko 65760f59df
Refactor feed manager (#14761) 4 years ago
ThibG 517af45e32
Fix multiple boosts of a same toot erroneously appearing in TL (#14759)
* Check for and record reblog info atomically

Instead of using ZREVRANK to determine whether a reblog is a new reblog or not,
use ZADD's NX option to perform the check/addition option atomically.

* Replace ZREVRANK call with ZSCORE key which is more efficient

* Make tests a bit stricter

* Fix off-by-one
4 years ago
abcang e79d719e92
Changed tag most_used to recently_used (#14760) 4 years ago
Eugen Rochko e8bc187845
Refactor how public and tag timelines are queried (#14728) 4 years ago
Eugen Rochko a6121a159c
Remove obsolete IndexedDB operations from web UI (#14730)
Storing objects in IndexedDB was disabled in #7932, but we were
still trying to read objects from it before making an API call
4 years ago
Takeshi Umeda 272aa4a109
Fix direct visibility style for light theme (#14727) 4 years ago
ThibG abee40b232
Add outbox attribute to instance actor (#14721)
It's not useful for now, but it's required by ActivityPub
4 years ago