mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 08:28:19 +01:00
285 lines
7.1 KiB
TOML
285 lines
7.1 KiB
TOML
[database]
|
|
host = "localhost"
|
|
port = 5432
|
|
username = "lysand"
|
|
password = "lysand"
|
|
database = "lysand"
|
|
|
|
[redis.queue]
|
|
host = "localhost"
|
|
port = 6379
|
|
password = ""
|
|
database = 0
|
|
enabled = false
|
|
|
|
[redis.cache]
|
|
host = "localhost"
|
|
port = 6379
|
|
password = ""
|
|
database = 1
|
|
enabled = false
|
|
|
|
[sonic]
|
|
host = "localhost"
|
|
port = 40007
|
|
password = ""
|
|
enabled = false
|
|
|
|
[signups]
|
|
# URL of your Terms of Service
|
|
tos_url = "https://example.com/tos"
|
|
# Whether to enable registrations or not
|
|
registration = true
|
|
rules = [
|
|
"Do not harass others",
|
|
"Be nice to people",
|
|
"Don't spam",
|
|
"Don't post illegal content",
|
|
]
|
|
|
|
[oidc]
|
|
# Run Lysand with this value missing to generate a new key
|
|
jwt_key = "MC4CAQAwBQYDK2VwBCIEID+H5n9PY3zVKZQcq4jrnE1IiRd2EWWr8ApuHUXmuOzl;MCowBQYDK2VwAyEAzenliNkgpXYsh3gXTnAoUWzlCPjIOppmAVx2DBlLsC8="
|
|
|
|
[http]
|
|
base_url = "http://0.0.0.0:8080"
|
|
bind = "0.0.0.0"
|
|
bind_port = 8080
|
|
|
|
# Bans IPv4 or IPv6 IPs (wildcards, networks and ranges are supported)
|
|
banned_ips = []
|
|
|
|
[smtp]
|
|
# SMTP server to use for sending emails
|
|
server = "smtp.example.com"
|
|
port = 465
|
|
username = "test@example.com"
|
|
password = "password123"
|
|
tls = true
|
|
|
|
[media]
|
|
# Can be "s3" or "local", where "local" uploads the file to the local filesystem
|
|
# If you need to change this value after setting up your instance, you must move all the files
|
|
# from one backend to the other manually
|
|
backend = "local"
|
|
# Whether to check the hash of media when uploading to avoid duplication
|
|
deduplicate_media = true
|
|
# If media backend is "local", this is the folder where the files will be stored
|
|
local_uploads_folder = "uploads"
|
|
|
|
[media.conversion]
|
|
convert_images = false
|
|
# Can be: "jxl", "webp", "avif", "png", "jpg", "heif"
|
|
# JXL support will likely not work
|
|
convert_to = "webp"
|
|
|
|
# [s3]
|
|
# Can be left blank if you don't use the S3 media backend
|
|
# endpoint = "https://s3-us-west-2.amazonaws.com"
|
|
# access_key = ""
|
|
# secret_access_key = ""
|
|
# region = "us-west-2"
|
|
# bucket_name = "lysand"
|
|
# public_url = "https://cdn.example.com"
|
|
|
|
[validation]
|
|
# Self explanatory
|
|
max_displayname_size = 50
|
|
max_bio_size = 160
|
|
max_note_size = 5000
|
|
max_avatar_size = 5_000_000
|
|
max_header_size = 5_000_000
|
|
max_media_size = 40_000_000
|
|
max_media_attachments = 10
|
|
max_media_description_size = 1000
|
|
max_poll_options = 20
|
|
max_poll_option_size = 500
|
|
min_poll_duration = 60
|
|
max_poll_duration = 1893456000
|
|
max_username_size = 30
|
|
# An array of strings, defaults are from Akkoma
|
|
username_blacklist = [
|
|
".well-known",
|
|
"~",
|
|
"about",
|
|
"activities",
|
|
"api",
|
|
"auth",
|
|
"dev",
|
|
"inbox",
|
|
"internal",
|
|
"main",
|
|
"media",
|
|
"nodeinfo",
|
|
"notice",
|
|
"oauth",
|
|
"objects",
|
|
"proxy",
|
|
"push",
|
|
"registration",
|
|
"relay",
|
|
"settings",
|
|
"status",
|
|
"tag",
|
|
"users",
|
|
"web",
|
|
"search",
|
|
"mfa",
|
|
]
|
|
# Whether to blacklist known temporary email providers
|
|
blacklist_tempmail = false
|
|
# Additional email providers to blacklist
|
|
email_blacklist = []
|
|
# Valid URL schemes, otherwise the URL is parsed as text
|
|
url_scheme_whitelist = [
|
|
"http",
|
|
"https",
|
|
"ftp",
|
|
"dat",
|
|
"dweb",
|
|
"gopher",
|
|
"hyper",
|
|
"ipfs",
|
|
"ipns",
|
|
"irc",
|
|
"xmpp",
|
|
"ircs",
|
|
"magnet",
|
|
"mailto",
|
|
"mumble",
|
|
"ssb",
|
|
"gemini",
|
|
] # NOT IMPLEMENTED
|
|
|
|
enforce_mime_types = false
|
|
allowed_mime_types = [
|
|
"image/jpeg",
|
|
"image/png",
|
|
"image/gif",
|
|
"image/heic",
|
|
"image/heif",
|
|
"image/webp",
|
|
"image/avif",
|
|
"video/webm",
|
|
"video/mp4",
|
|
"video/quicktime",
|
|
"video/ogg",
|
|
"audio/wave",
|
|
"audio/wav",
|
|
"audio/x-wav",
|
|
"audio/x-pn-wave",
|
|
"audio/vnd.wave",
|
|
"audio/ogg",
|
|
"audio/vorbis",
|
|
"audio/mpeg",
|
|
"audio/mp3",
|
|
"audio/webm",
|
|
"audio/flac",
|
|
"audio/aac",
|
|
"audio/m4a",
|
|
"audio/x-m4a",
|
|
"audio/mp4",
|
|
"audio/3gpp",
|
|
"video/x-ms-asf",
|
|
]
|
|
|
|
[validation.challenges]
|
|
# "Challenges" (aka captchas) are a way to verify that a user is human
|
|
# Lysand's challenges use no external services, and are Proof of Work based
|
|
# This means that they do not require any user interaction, instead
|
|
# they require the user's computer to do a small amount of work
|
|
enabled = true
|
|
# The difficulty of the challenge, higher is harder
|
|
difficulty = 50000
|
|
# Challenge expiration time in seconds
|
|
expiration = 300 # 5 minutes
|
|
# Leave this empty to generate a new key
|
|
key = "YBpAV0KZOeM/MZ4kOb2E9moH9gCUr00Co9V7ncGRJ3wbd/a9tLDKKFdI0BtOcnlpfx0ZBh0+w3WSvsl0TsesTg=="
|
|
|
|
[defaults]
|
|
# Default visibility for new notes
|
|
visibility = "public"
|
|
# Default language for new notes
|
|
language = "en"
|
|
# Default avatar, must be a valid URL or ""
|
|
# avatar = ""
|
|
# Default header, must be a valid URL or ""
|
|
# header = ""
|
|
|
|
[activitypub]
|
|
# Use ActivityPub Tombstones instead of deleting objects
|
|
use_tombstones = true
|
|
# Fetch all members of collections (followers, following, etc) when receiving them
|
|
# WARNING: This can be a lot of data, and is not recommended
|
|
fetch_all_collection_members = false # NOT IMPLEMENTED
|
|
|
|
# The following values must be instance domain names without "https" or glob patterns
|
|
# Rejects all activities from these instances (fediblocking)
|
|
reject_activities = []
|
|
# Force posts from this instance to be followers only
|
|
force_followers_only = [] # NOT IMPLEMENTED
|
|
# Discard all reports from these instances
|
|
discard_reports = [] # NOT IMPLEMENTED
|
|
# Discard all deletes from these instances
|
|
discard_deletes = []
|
|
# Discard all updates (edits) from these instances
|
|
discard_updates = []
|
|
# Discard all banners from these instances
|
|
discard_banners = [] # NOT IMPLEMENTED
|
|
# Discard all avatars from these instances
|
|
discard_avatars = [] # NOT IMPLEMENTED
|
|
# Discard all follow requests from these instances
|
|
discard_follows = []
|
|
# Force set these instances' media as sensitive
|
|
force_sensitive = [] # NOT IMPLEMENTED
|
|
# Remove theses instances' media
|
|
remove_media = [] # NOT IMPLEMENTED
|
|
|
|
# Whether to verify HTTP signatures for every request (warning: can slow down your server
|
|
# significantly depending on processing power)
|
|
authorized_fetch = false
|
|
|
|
[instance]
|
|
name = "Lysand"
|
|
description = "A test instance of Lysand"
|
|
# URL to your instance logo (jpg files should be renamed to jpeg)
|
|
# logo = ""
|
|
# URL to your instance banner (jpg files should be renamed to jpeg)
|
|
# banner = ""
|
|
|
|
|
|
[filters]
|
|
# Drop notes with these regex filters (only applies to new activities)
|
|
note_filters = [
|
|
# "(https?://)?(www\\.)?youtube\\.com/watch\\?v=[a-zA-Z0-9_-]+",
|
|
# "(https?://)?(www\\.)?youtu\\.be/[a-zA-Z0-9_-]+",
|
|
]
|
|
# Drop users with these regex filters (only applies to new activities)
|
|
username_filters = []
|
|
# Drop users with these regex filters (only applies to new activities)
|
|
displayname_filters = []
|
|
# Drop users with these regex filters (only applies to new activities)
|
|
bio_filters = []
|
|
emoji_filters = [] # NOT IMPLEMENTED
|
|
|
|
[logging]
|
|
# Log all requests (warning: this is a lot of data)
|
|
log_requests = true
|
|
# Log request and their contents (warning: this is a lot of data)
|
|
log_requests_verbose = false
|
|
# For GDPR compliance, you can disable logging of IPs
|
|
log_ip = false
|
|
|
|
# Log all filtered objects
|
|
log_filters = true
|
|
|
|
[ratelimits]
|
|
# Amount to multiply every route's duration by
|
|
duration_coeff = 1.0
|
|
# Amount to multiply every route's max by
|
|
max_coeff = 1.0
|
|
|
|
[custom_ratelimits]
|
|
# Add in any API route in this style here
|
|
"/api/v1/timelines/public" = { duration = 60, max = 200 }
|