Squashed commit of the following:
commit 7b2ba61c4841e23081552fb79270e4e430dd1fe0
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 16:03:52 2020 +0900
Add the ability to change to a new circle by replying to a circle
commit 7013a228c65c7bd147885de458b50095f3c24334
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 16:10:57 2020 +0900
fixup! add-limited-visibility-icon-to-status
commit 679aa8a7f9bef42ee5d0b326d9ae4925a1999939
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 15:12:53 2020 +0900
Fix 14666
commit b3addd8220d8bb3512ff345b32ca83c714dadd2a
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 11:44:12 2020 +0900
Add Japanese translation for circle
commit b7f4b773a0cd554084d5ad6a5923adb06b3acfc4
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 11:40:12 2020 +0900
Squashed commit of the following:
commit b85a4685b27c49462288aba5f38723b91e936c4a
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 10:50:03 2020 +0900
Changed to remove restrictions on privacy options and allow users to switch circles when replying
commit 0a8c0140c73d7c5333e4f8017964adb5061a7cf1
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 09:33:07 2020 +0900
Change limited visibility icon
commit b64adf19788d828249408454ec6afa9beb3d4872
Author: noellabo <noel.yoshiba@gmail.com>
Date: Mon Aug 31 06:50:56 2020 +0900
Fix a change to limited-visibility-bearcaps replies
commit ed361405b5e38857a2f42b0515a599ddcdd412cf
Author: noellabo <noel.yoshiba@gmail.com>
Date: Thu Aug 27 15:53:18 2020 +0900
Fix composer text when change visibility
commit 4da3adddb6ffde43070d743e34c5b56e06579b30
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Aug 22 22:34:23 2020 +0900
Fix wrong circle_id when changing visibility
commit 752d7fc2a3c9e34fab9993d767f83c6eae7ba55a
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sun Aug 9 13:12:51 2020 +0900
Add circle reply and redraft
commit 5978bc04a24695edce6717bda89dcf6f861ef2c4
Author: noellabo <noel.yoshiba@gmail.com>
Date: Mon Jul 27 01:07:52 2020 +0900
Fix remove unused props
commit 7970f69676c24b4aa9385fee8b1635c46ba52fcd
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sun Jul 26 21:17:07 2020 +0900
Separate circle choice from privacy
commit 36f6a684c0b0c895d4d0f1b9d09b05c91b104666
Author: noellabo <noel.yoshiba@gmail.com>
Date: Thu Jul 23 10:54:25 2020 +0900
Add UI for posting to circles
commit 7ef48003c1407275663dd603b124d292db2aa93a
Author: noellabo <noel.yoshiba@gmail.com>
Date: Fri Jul 24 12:55:10 2020 +0900
Fix silent mention by circle
commit 7a1caed49333c3d3241301afb77639cdf1cabdc0
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 11:38:10 2020 +0900
Squashed commit of the following:
commit dca71fab86c830932ca760b7d8b3f89cc25c453e
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 09:31:26 2020 +0900
Revert "Add focus setting when opening the circle column"
This reverts commit 3a93ac99312a13b68b7edc2b81313fb0ffb7bcdc.
commit 0a1bc8307bb699c7eb3024072ce14a440df1fc87
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 09:31:11 2020 +0900
Change limited visibility icon
commit 9784f8b562f6592e9d9190ca29d2b2e870006d10
Author: noellabo <noel.yoshiba@gmail.com>
Date: Thu Aug 13 21:52:07 2020 +0900
Add focus setting when opening the circle column
commit a84f680c167fab9276550850c60f9108d251144e
Author: noellabo <noel.yoshiba@gmail.com>
Date: Thu Aug 13 15:55:27 2020 +0900
Fix message
commit e3f11c4adac57b6e6a15c981ed6f4721a1634212
Author: noellabo <noel.yoshiba@gmail.com>
Date: Mon Jul 27 01:01:23 2020 +0900
Fix light-theme
commit d7d96eda5b86d3e3f654ce79888e7cf5aa535db5
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sun Jul 26 21:50:56 2020 +0900
Fix circles loading in share page and followers search
commit 10b821f7b8c0a87cea3df51f09deeadc2cb40b32
Author: noellabo <noel.yoshiba@gmail.com>
Date: Fri Jul 24 14:08:00 2020 +0900
Refactor list items
commit e020072915572ce409039ccf799d08f8d8b5b393
Author: noellabo <noel.yoshiba@gmail.com>
Date: Thu Jul 23 20:15:38 2020 +0900
Fixed a bug that circle name change is not reflected in the list
commit 735bc41161b4c09a8dafe2c0064096b3ca79f2a0
Author: noellabo <noel.yoshiba@gmail.com>
Date: Wed Jul 22 08:49:47 2020 +0900
Add UI for managing circle members
commit d7c3145b8fa84be0631bf7f41bb229f3e6d03ff1
Author: noellabo <noel.yoshiba@gmail.com>
Date: Wed Jul 22 07:34:52 2020 +0900
Add the followers option to AccountSearchSercive
commit 65e2b0c4299b72ede440b50089c1bd6afa6c9c05
Author: noellabo <noel.yoshiba@gmail.com>
Date: Wed Jul 22 07:05:56 2020 +0900
Add CircleSerializer
commit a639e1803abf5590068846dbe98bc5edfaa2ad82
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 11:37:30 2020 +0900
Squashed commit of the following:
commit 9cb3fb9d980e3ee066083076f508c5ab1447176a
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 07:15:19 2020 +0900
Move the link to the mention list to the menu
commit b32dd87b43f4e09b8e2c437f1fb5d3ebd6221215
Author: noellabo <noel.yoshiba@gmail.com>
Date: Sat Sep 5 00:56:12 2020 +0900
Change limited visibility icon
commit 8db0d024119d1c2cef8de849f2501496a166a2dd
Author: noellabo <noel.yoshiba@gmail.com>
Date: Tue Sep 1 01:42:13 2020 +0900
Fix to disallow getting the list of mentions in limited replies
commit 490a9d65a59a3dd0d86e81f6780e879dc4313dff
Author: noellabo <noel.yoshiba@gmail.com>
Date: Fri Jul 24 11:36:24 2020 +0900
Add column to list mentioned accounts of limited status
commit 62a423ac2729c16f26fafe111f257bc373218df2
Author: noellabo <noel.yoshiba@gmail.com>
Date: Thu Jul 23 13:30:17 2020 +0900
Fix visibility compatibility more
commit a5cfa54b259054f41e89037f299fa928a2361818
Author: noellabo <noel.yoshiba@gmail.com>
Date: Mon Jul 20 05:39:49 2020 +0900
Fix visibility compatibility
commit 7900ca5650c77565b86ddc594a221dfa3b5321b4
Author: noellabo <noel.yoshiba@gmail.com>
Date: Mon Jul 20 02:01:27 2020 +0900
Add limited visibility icon to status
commit 66b83965ef068e9ee8c940249c68bcbde15731fe
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed Aug 26 03:16:47 2020 +0200
Add conversation-based forwarding for limited visibility statuses through bearcaps
commit 561abc65e0ace89318b3952047025b8d98515fbb
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sun Jul 19 02:05:16 2020 +0200
Add REST API for managing and posting to circles
Circles are the conceptual opposite of lists. A list is a subdivision
of your follows, a circle is a subdivision of your followers. Posting
to a circle means making content available to only some of your
followers. Circles have been internally supported in Mastodon for
the purposes of federation since #8950, this adds the REST API
necessary for making use of them in Mastodon itsef.
* Fix followers synchronization mechanism not working when URI has empty path
To my knowledge, there is no current implementation on the fediverse
that can use bare domains (e.g., actor is at https://example.org instead of
something like https://example.org/actor) that also plans to support the
followers synchronization mechanism. However, Mastodon's current implementation
would exclude such accounts from followers list.
Also adds tests and rename them to reflect the proper method names.
* Move url prefix regexp to its own constant
* 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
* Change move handler to carry blocks and mutes over
When user A blocks user B and B moves to a new account C, make A block C
accordingly.
Note that it only works if A's instance is aware of the Move, that is,
if B is on A's instance or has followers there.
* Also notify instances with known people blocking you when moving
* Add automatic account notes when blocking/muting an account that had no note
Also:
- Fix locks not being removed when jobs go to the dead job queue
- Add UI for managing locks to the Sidekiq dashboard
- Remove unused Sidekiq workers
Fix#13349
* Add request pool to improve delivery performance
Fix#7909
* Ensure connection is closed when exception interrupts execution
* Remove Timeout#timeout from socket connection
* Fix infinite retrial loop on HTTP::ConnectionError
* Close sockets on failure, reduce idle time to 90 seconds
* Add MAX_REQUEST_POOL_SIZE option to limit concurrent connections to the same server
* Use a shared pool size, 512 by default, to stay below open file limit
* Add some tests
* Add more tests
* Reduce MAX_IDLE_TIME from 90 to 30 seconds, reap every 30 seconds
* Use a shared pool that returns preferred connection but re-purposes other ones when needed
* Fix wrong connection being returned on subsequent calls within the same thread
* Reduce mutex calls on flushes from 2 to 1 and add test for reaping
HTTP 401 responses returned by Mastodon's inbox controller may
be temporary if, for instance, the requesting user's actor/key json
could not be retrieved in a timely fashion. This changes allow retries
instead of dropping the message entirely.
Also added HTTP 408 as that error is by nature temporary.
* Do not retry processing ActivityPub jobs raising validation errors
Jobs yielding validation errors most probably won't ever be accepted,
so it makes sense not to clutter the queues with retries.
* Lower RecordInvalid error reporting to debug log level
* Remove trailing whitespace
* Fix poll update handler calling method was that was not available
Fix regression from #10209
* Refactor VoteService
* Refactor ActivityPub::DistributePollUpdateWorker and optimize it
* Fix typo
* Fix typo
* Process incoming poll tallies update
* Send Update on poll vote
* Do not send Updates for a poll more often than once every 3 minutes
* Include voters in people to notify of results update
* Schedule closing poll worker on poll creation
* Add new notification type for ending polls
* Add front-end support for ended poll notifications
* Fix UpdatePollSerializer
* Fix Updates not being triggered by local votes
* Fix tests failure
* Fix web push notifications for closing polls
* Minor cleanup
* Notify voters of both remote and local polls when those close
* Fix delivery of poll updates to mentioned accounts and voters
* Fetch up to 5 replies when discovering a new remote status
This is used for resolving threads downwards. The originating
server must add a “replies” attributes with such replies for it to
be useful.
* Add some tests for ActivityPub::FetchRepliesWorker
* Add specs for ActivityPub::FetchRepliesService
* Serialize up to 5 public self-replies for ActivityPub notes
* Add specs for ActivityPub::NoteSerializer
* Move exponential backoff logic to a worker concern
* Fetch first page of paginated collections when fetching thread replies
* Add specs for paginated collections in replies
* Move Note replies serialization to a first CollectionPage
The collection isn't actually paginable yet as it has no id nor
a `next` field. This may come in another PR.
* Use pluck(:uri) instead of map(&:uri) to improve performances
* Fix fetching replies when they are in a CollectionPage
Reject those from accounts with no local followers, from relays
that are not enabled, which do not address local accounts and are
not replies to accounts that do have local followers
* Do not LDS-sign Follow, Accept, Reject, Undo, Block
* Do not use LDS for Create activities of private toots
* Minor cleanup
* Ignore unsigned activities instead of misattributing them
* Use status.distributable? instead of querying visibility directly
* Add silent column to mentions
* Save silent mentions in ActivityPub Create handler and optimize it
Move networking calls out of the database transaction
* Add "limited" visibility level masked as "private" in the API
Unlike DMs, limited statuses are pushed into home feeds. The access
control rules between direct and limited statuses is almost the same,
except for counter and conversation logic
* Ensure silent column is non-null, add spec
* Ensure filters don't check silent mentions for blocks/mutes
As those are "this person is also allowed to see" rather than "this
person is involved", therefore does not warrant filtering
* Clean up code
* Use Status#active_mentions to limit returned mentions
* Fix code style issues
* Use Status#active_mentions in Notification
And remove stream_entry eager-loading from Notification
* If an Update is signed with known key, skip re-following procedure
Because it means the remote actor did *not* lose their database
* Add CLI method for rotating keys
bin/tootctl accounts rotate [USERNAME]
Generates a new RSA key per account and sends out an Update activity
signed with the old key.
* Key rotation: Space out Update fan-outs every 5 minutes per 1000 accounts
* Skip suspended accounts in key rotation
* Do not raise delivery failure on 4xx errors, increase stoplight threshold
Stoplight failure threshold from 3 to 10
Status code 429 will raise a failure/get retried
* Oops
* Revert "Fixes/do not override timestamps (#7331)"
This reverts commit 581a5c9d29.
* Document Snowflake ID corner-case a bit more
Snowflake IDs are used for two purposes: making object identifiers harder to
guess and ensuring they are in chronological order. For this reason, they
are based on the `created_at` attribute of the object.
Unfortunately, inserting items with older snowflakes IDs will break the
assumption of consumers of the paging APIs that new items will always have
a greater identifier than the last seen one.
* Add `override_timestamps` virtual attribute to not correlate snowflake ID with created_at
* Do not override timestamps for incoming toots
* Remove every reference to override_timestamps
Statuses are now created with the announced publishing date
and are only pushed to timelines if that date is at most
6 hours earlier than the time at which it is processed.
* Revert "Weblate translations 20180503 (#7325)"
This reverts commit dfa6bccb64.
* Revert "Prevent timeline from moving when cursor is hovering over it (fixes#7278) (#7327)"
This reverts commit 58852695c8.
* Revert "Add pry-byebug (#7307)"
This reverts commit ab773e4d5f.
* Revert "Do not override timestamps for incoming toots (#7326)"
This reverts commit bd36791832.
HTTP connections must be explicitly closed in many cases, and letting
perform method close connections makes its callers less redundant and
prevent them from forgetting to close connections.
Currently, Mastodon will retry delivering toots for a bit over 1 hour.
This is a very short timespan when considering private and direct toots, which
cannot be seen by the recipient at all after the delivery attempts have failed.
Ideally, private and direct toots should have a different number of retries,
but I do not know how to do that.
* Avoid sending explicit Undo->Announce when original deleted
* Do not forward a reply back to the server that sent it
* Deduplicate inboxes of rebloggers' followers for delete forwarding
* Adjust test
* Fix wrong class, bad SQL, wrong variable, outdated comment