This adds support for Azure blob storage using Paperclip, similar to
what's supported for S3 and other backends. It makes use of the
`paperclip-azure` plugin gem. As with S3, this is not loaded by default;
it's only used if the proper environment variables are set.
I'm using my fork of paperclip-azure because it incorporates a few new
features to make it feature-equivalent to S3 for Mastodon's purposes.
* Add --include-subdomains option to tootctl domains purge
* Add support for '*.' subdomain wildcard patterns in `tootctl domains purge`
* Fix custom emojis deletion not following subdomain and URI options
* Change `tootctl domains purge` to not purge domain blocks unless --purge-domain-blocks is passed
* Refactor `tootctl domains purge`
* Add feedback on deleted domain blocks
* Return specific error on failure to parse Date header
* Add error message when preferredUsername is not set
* Change error report to be JSON and include more details
* Change error report to differentiate unknown account and failed refresh
* Add tests
* Add followed_tags route.
This at least gets us to the point where the page can actually be
rendered, although it doesn't display any hashtags (yet?).
Attempting to implement #20763.
* Fix minor issues.
* I've got the followed tags data partially working
But the Hashtag component errors for some reason. Something about the
value of the history attribute being invalid.
* Fix a mistake in the code
* Minor change.
* Get the followed hashtags list fully working.
Still need to add the Follow/Unfollow buttons, though.
* Resolve JS linter issues.
* Add pagination logic to followed tags list view.
However, it currently loads further pages immediately on page load, so
that's not ideal. Need to figure that one out.
* Appease the linter.
* Apply suggestions from code review
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
* Fixes and resolve some other feedback.
* Use set/update instead of setIn/updateIn.
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
* Validate internal actor
* Use “internal.actor” by default for the server actor username
* Fix instance actor username on the fly if it includes ':'
* Change actor name from internal.actor to mastodon.internal
* Fix /api/v1/admin/trends/tags using wrong serializer
Fix regression from #18641
* Only use `REST::Admin::TagSerializer` when the user can `manage_taxonomies`
* Fix admin trending hashtag component to not link if `id` is unknown
Some 7.x ElasticSearch versions support some 6.x nodes, thus the version check
is inadequate. I am not sure there is a good way to check if a server
implements all the 7.x APIs, so check server version and minimum wire version
instead.
While Docker isn't officially supported by Hometown, leaving the
Mastodon 3.5.5 Docker configuration in place with the new 4.0.2 code is
a bad idea. At minimum, you'll have a stale Node install that's months
behind on security updates. There are some minor tweaks to the default
configuration, but they're flagged by comments so they're easy to revert
or modify as necessary.
# Running Hometown on Docker
I'll by typing up my own longer blog post in due time, but there's no
harm dropping a cheat sheet here. By following this outline, I was able
to upgrade a Hometown 1.0.8 install to 1.1.0 with nothing worse than a
minute or two of downtime.
My configuration uses the GitHub repository as its source, rather than
images drawn from DockerHub. I like to tweak and fiddle with my setup,
especially the themes, and I'm happy to sacrifice some disk space for
the privilege.
## Installing from Scratch
This is by far the easiest approach, you just follow [one
of](https://gist.github.com/TrillCyborg/84939cd4013ace9960031b803a0590c4)
the [existing
guides](https://sleeplessbeastie.eu/2022/05/02/how-to-take-advantage-of-docker-to-install-mastodon/)
for running Mastodon via Docker, pause after you've set up
`.env.production`, add any Hometown-specific features to it [as per the
Wiki](https://github.com/hometown-fork/hometown/wiki), then resume what
the guide says to do.
If you're enabling ElastiSearch, the second of the two guides has some
additional actions you'll need to do, plus be aware of [this
bug](https://github.com/mastodon/mastodon/issues/18625) in Mastodon
which can quietly block ES from working at all.
## Upgrading from Hometown 1.0.8
Here's how I accomplished this. I committed any leftover changes, then
ran these commands from the non-Docker instructions in the root of my
local Hometown repository:
```
git remote update
git checkout v4.0.2+hometown-1.1.0
```
This "wiped out" my customizations, but as I committed them all to a
branch I can reconstruct them later via diffs. I then ran:
```
sudo docker-compose build
```
to build the new image. The old image will continue running in the
background, as per usual. I like adding `2>&1 | less` to the end and
mashing `PgDn`, as if a compilation error happens it almost invariably
requires scrolling back a few screens to find the issue.
If the build succeeded, we're almost clear to start the dangerous
portion. If you're running on the cloud, now would be a great time to
take a snapshot. Whatever the case, you should back up the existing
database. If you haven't changed the defaults from the Dockerfile, then
```
sudo docker exec -it hometown_db_1 pg_dump -U postgres -Fc postgres > hometown.db.dump
```
should do the trick. If you have changed the defaults, you may need to
use `sudo docker ps` to figure out the name of the PostgreSQL image to
swap in place of "hometown_db_1", then browse through `.env.production`
to extract the username to place after `-U` and the database name to
place after `-Fc`. The Hometown docs don't say how to restore the
database should the process go South, but after reading a manpage or two
I think the magic words are roughly
```
sudo docker exec -it hometown_db_1 pg_restore -U postgres --clean --if-exists -d postgres < hometown.db.dump
```
Now we're ready for the scary "you could destroy everything" part. All
the earlier commands are trivial to roll back, but after this point any
delay could cause data corruption. As per the Hometown docs, run the
pre-deployment database migrations.
```
sudo docker-compose run -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true -e RAILS_ENV=production --rm web bundle exec rails db:migrate
```
where `web` is the name of the webserver image in `docker-compose.yml`.
The docs state you should precompile all assets next, but I'm 95% sure
they were already built when you ran `sudo docker-compose build`. If
you're paranoid and want to be absolutely sure precompilation is done,
then at this stage run:
```
sudo docker-compose run -e RAILS_ENV=production --rm web bundle exec rails assets:precompile
```
Here, the Hometown docs say you should run the post-deployment
migrations. In Docker-ese:
```
sudo docker-compose run -e RAILS_ENV=production --rm web bundle exec rails db:migrate
```
Finally, we need to stop the old images and spin up the new ones. Run:
```
sudo docker-compose up -d
```
and give Docker some time to finish rotating. A quick `sudo docker ps`
should confirm the new images are booting up, and in a short while
(10-15 seconds for the teeny-tiny instance I manage) you should be back
to fully functional.
NixOS uses the hashes in yarn.lock to fetch dependencies at build time;
this dependency doesn't have a hash, so building Hometown on NixOS would
fail. Adding a hash (calculated manually with curl + shasum) fixes the
build on NixOS and doesn't change the behaviour otherwise.
This broke in #17902 upstream previously; this is a similar fix here.
* Add peers endpoint toggle to Server Settings
This places the toggle under "Discovery" and expands the hint text to explain further what the endpoint is used for. Added a "Recommended" tag since it was recommended in v3 before it was removed.
Fixes https://github.com/mastodon/mastodon/issues/22222
* i18n normalize step
* Allow changing hide_collections setting with the api
This is currently only possible with app/controllers/settings/profiles_controller.rb
and is the only difference in the allowed parameter between the two controllers
* Fix the lint issue
* Use normal indent
* Change admin report handling UI to display appropriate text for remote reports
Change from “Decide which action to take to resolve this report. If you take a
punitive action against the reported account, an e-mail notification will be
sent to them, except when the Spam category is selected.” to “Decide which
action to take to resolve this report. This will only affect how your server
communicates with this remote account and handle its content.”
* Reword admin actions descriptions to make clear which admin actions close reports