diff --git a/conf/config.yaml b/conf/config.yaml
index 5d90575..b09aeac 100644
--- a/conf/config.yaml
+++ b/conf/config.yaml
@@ -5,22 +5,24 @@
# Most of the relevant settings are available in the config panel, if you're
# missing one, open an issue: https://github.com/YunoHost-Apps/gotosocial_ynh/issues
+---
-# GoToSocial
-# Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
+# GoToSocial
+# Copyright (C) GoToSocial Authors admin@gotosocial.org
+# SPDX-License-Identifier: AGPL-3.0-or-later
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
###########################
##### GENERAL CONFIG ######
@@ -50,7 +52,7 @@ log-client-ip: true
# The format must be compatible with Go's time.Layout, as
# documented on https://pkg.go.dev/time#pkg-constants.
#
-# Examples: [true, false]
+# Examples: ["2006-01-02T15:04:05.000Z07:00", ""]
# Default: "02/01/2006 15:04:05.000"
log-timestamp-format: "02/01/2006 15:04:05.000"
@@ -304,7 +306,7 @@ instance-languages: []
# String. Federation mode to use for this instance.
#
-# "blocklist" -- open federation by default. Only instances that are explicitly
+# "blocklist" -- open federation by default. Only instances that are explicitly
# blocked will be denied (unless they are also explicitly allowed).
#
# "allowlist" -- closed federation by default. Only instances that are explicitly
@@ -317,6 +319,43 @@ instance-languages: []
# Default: "blocklist"
instance-federation-mode: "__INSTANCE_FEDERATION_MODE__"
+# Bool. Enable spam filtering heuristics for messages entering your instance
+# via the federation API. Regardless of what you set here, basic checks
+# for message relevancy will still be performed, but you can try enabling
+# this setting if you are being spammed with unwanted messages from other
+# instances, and want to more strictly filter out spam messages.
+#
+# THIS IS CURRENTLY AN EXPERIMENTAL SETTING, AND MAY FILTER OUT LEGITIMATE
+# MESSAGES, OR FAIL TO FILTER OUT SPAMMY MESSAGES. It is recommended to
+# only enable this setting when the fediverse is in the midst of a spam
+# wave, and you need to batten down the hatches to keep your instance usable.
+#
+# The decision of whether a message counts as spam or not is made based on
+# the following heuristics, in order, where receiver = the account on your
+# instance that received a message in their inbox, and requester = the
+# account on a remote instance that sent the message.
+#
+# First, basic relevancy checks
+#
+# 1. Receiver follows requester. Return OK.
+# 2. Statusable doesn't mention receiver. Return NotRelevant.
+#
+# If instance-federation-spam-filter = false, then return OK now.
+# Otherwise check:
+#
+# 3. Receiver is locked and is followed by requester. Return OK.
+# 4. Five or more people are mentioned. Return Spam.
+# 5. Receiver follow (requests) a mentioned account. Return OK.
+# 6. Statusable has a media attachment. Return Spam.
+# 7. Statusable contains non-mention, non-hashtag links. Return Spam.
+#
+# Messages identified as spam will be dropped from your instance, and not
+# inserted into the database, or into home timelines or notifications.
+#
+# Options: [true, false]
+# Default: false
+instance-federation-spam-filter: false
+
# Bool. Allow unauthenticated users to make queries to /api/v1/instance/peers?filter=open in order
# to see a list of instances that this instance 'peers' with. Even if set to 'false', then authenticated
# users (members of the instance) will still be able to query the endpoint.
@@ -370,6 +409,7 @@ instance-deliver-to-shared-inboxes: __INSTANCE_DELIVER_TO_SHARED_INBOXES__
# Default: false
instance-inject-mastodon-version: __INSTANCE_INJECT_MASTODON_VERSION__
+
###########################
##### ACCOUNTS CONFIG #####
###########################
@@ -420,14 +460,22 @@ accounts-custom-css-length: __ACCOUNTS_CUSTOM_CSS_LENGTH__
# Config pertaining to media uploads (videos, image, image descriptions, emoji).
-# Int. Maximum allowed image upload size in bytes.
-# Examples: [2097152, 10485760]
-# Default: 10485760 -- aka 10MB
+# Size. Maximum allowed image upload size in bytes.
+#
+# Raising this limit may cause other servers to not fetch media
+# attached to a post.
+#
+# Examples: [2097152, 10485760, 10MB, 10MiB]
+# Default: 10MiB (10485760 bytes)
media-image-max-size: __MEDIA_IMAGE_MAX_SIZE__
-# Int. Maximum allowed video upload size in bytes.
-# Examples: [2097152, 10485760]
-# Default: 41943040 -- aka 40MB
+# Size. Maximum allowed video upload size in bytes.
+#
+# Raising this limit may cause other servers to not fetch media
+# attached to a post.
+#
+# Examples: [2097152, 10485760, 40MB, 40MiB]
+# Default: 40MiB (41943040 bytes)
media-video-max-size: __MEDIA_VIDEO_MAX_SIZE__
# Int. Minimum amount of characters required as an image or video description.
@@ -437,23 +485,28 @@ media-description-min-chars: __MEDIA_DESCRIPTION_MIN_CHARS__
# Int. Maximum amount of characters permitted in an image or video description.
# Examples: [500, 1000, 1500]
-# Default: 500
+# Examples: [1000, 1500, 3000]
+# Default: 1500
media-description-max-chars: __MEDIA_DESCRIPTION_MAX_CHARS__
-# Int. Max size in bytes of emojis uploaded to this instance via the admin API.
+# Size. Max size in bytes of emojis uploaded to this instance via the admin API.
+#
# The default is the same as the Mastodon size limit for emojis (50kb), which allows
# for good interoperability. Raising this limit may cause issues with federation
# of your emojis to other instances, so beware.
-# Examples: [51200, 102400]
-# Default: 51200
+#
+# Examples: [51200, 102400, 50KB, 50KiB]
+# Default: 50KiB (51200 bytes)
media-emoji-local-max-size: __MEDIA_EMOJI_LOCAL_MAX_SIZE__
-# Int. Max size in bytes of emojis to download from other instances.
+# Size. Max size in bytes of emojis to download from other instances.
+#
# By default this is 100kb, or twice the size of the default for media-emoji-local-max-size.
# This strikes a good balance between decent interoperability with instances that have
# higher emoji size limits, and not taking up too much space in storage.
-# Examples: [51200, 102400]
-# Default: 102400
+#
+# Examples: [51200, 102400, 100KB, 100KiB]
+# Default: 100KiB (102400 bytes)
media-emoji-remote-max-size: __MEDIA_EMOJI_REMOTE_MAX_SIZE__
# The below media cleanup settings allow admins to customize when and
@@ -475,7 +528,7 @@ media-remote-cache-days: __MEDIA_REMOTE_CACHE_DAYS__
# String. 24hr time of day formatted as hh:mm.
# Examples: ["14:30", "00:00", "04:00"]
-# Default: "00:00" (midnight).
+# Default: "00:00" (midnight).
media-cleanup-from: "00:00"
# Duration. Period between media cleanup runs.
@@ -558,8 +611,11 @@ storage-s3-bucket: "__STORAGE_S3_BUCKET__"
# Config pertaining to the creation of statuses/posts, and permitted limits.
-# Int. Maximum amount of characters permitted for a new status.
+# Int. Maximum amount of characters permitted for a new status,
+# including the content warning (if set).
+#
# Note that going way higher than the default might break federation.
+#
# Examples: [140, 500, 5000]
# Default: 5000
statuses-max-chars: __STATUSES_MAX_CHARS__
@@ -696,6 +752,12 @@ oidc-scopes:
# Default: false
oidc-link-existing: __OIDC_LINK_EXISTING__
+# Array of string. If the returned ID token contains a 'groups' claim that matches one of the
+# groups in oidc-allowed-groups, then this user will be granted access on the GtS instance. If the array is empty,
+# then all groups will be granted permission.
+# Default: []
+oidc-allowed-groups: []
+
# Array of string. If the returned ID token contains a 'groups' claim that matches one of the
# groups in oidc-admin-groups, then this user will be granted admin rights on the GtS instance
# Default: []
@@ -875,7 +937,7 @@ http-client:
#
# THIS SETTING SHOULD BE USED FOR TESTING ONLY! IF YOU TURN THIS
# ON WHILE RUNNING IN PRODUCTION YOU ARE LEAVING YOUR SERVER WIDE
- # OPEN TO MAN IN THE MIDDLE ATTACKS! DO NOT CHANGE THIS SETTING
+ # OPEN TO MAN IN THE MIDDLE ATTACKS! DO NOT CHANGE THIS SETTING
# UNLESS YOU KNOW EXACTLY WHAT YOU'RE DOING AND WHY YOU'RE DOING IT.
#
# Default: false
@@ -1030,9 +1092,26 @@ advanced-sender-multiplier: 2
# generate a correct Content-Security-Policy, you probably won't need
# to ever touch this setting, but it's included in the 'spirit of more
# configurable (usually) means more good'.
-#
+#
# See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
#
# Example: ["s3.example.org", "some-bucket-name.s3.example.org"]
# Default: []
advanced-csp-extra-uris: []
+
+# String. HTTP request header filtering mode to use for this instance.
+#
+# "block" -- only requests that are explicitly blocked by header filters
+# will be denied (unless they are also explicitly allowed).
+#
+# "allow" -- only requests that are explicitly allowed by header filters
+# will be accepted (unless they are also explicitly blocked).
+#
+# "" -- request header filtering disabled.
+#
+# For more details on block and allow modes, check the documentation at:
+# https://docs.gotosocial.org/en/latest/admin/request_filtering_modes
+#
+# Options: ["block", "allow", ""]
+# Default: ""
+advanced-header-filter-mode: ""
diff --git a/scripts/install b/scripts/install
index 81d3ab1..bb93f43 100755
--- a/scripts/install
+++ b/scripts/install
@@ -38,13 +38,13 @@ instance_expose_public_timeline="false"
instance_deliver_to_shared_inboxes="true"
instance_inject_mastodon_version="false"
-media_image_max_size="10485760"
-media_video_max_size="41943040"
+media_image_max_size="10MiB"
+media_video_max_size="40MiB"
media_description_min_chars="0"
-media_description_max_chars="500"
+media_description_max_chars="1500"
media_remote_cache_days="7"
-media_emoji_local_max_size="51200"
-media_emoji_remote_max_size="102400"
+media_emoji_local_max_size="50KiB"
+media_emoji_remote_max_size="100KiB"
storage_backend="local"
storage_s3_endpoint=""