1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/gotosocial_ynh.git synced 2024-09-03 19:16:06 +02:00
This commit is contained in:
Éric Gaspar 2023-08-15 17:14:40 +02:00
parent e9cd52755e
commit 8736b21351
10 changed files with 366 additions and 729 deletions

View file

@ -1,154 +0,0 @@
#!/bin/bash
#=================================================
# PACKAGE UPDATING HELPER
#=================================================
# This script is meant to be run by GitHub Actions
# The YunoHost-Apps organisation offers a template Action to run this script periodically
# Since each app is different, maintainers can adapt its contents so as to perform
# automatic actions when a new upstream release is detected.
# Remove this exit command when you are ready to run this Action
# exit 1
#=================================================
# FETCHING LATEST RELEASE AND ITS ASSETS
#=================================================
# Fetching information
current_version=$(jq -j '.version|split("~")[0]' manifest.json)
repo=$(jq -j '.upstream.code|split("https://github.com/")[1]' manifest.json)
# Some jq magic is needed, because the latest upstream release is not always the latest version (e.g. security patches for older versions)
version=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '.[] | select( .prerelease != true ) | .tag_name' | sort -V | tail -1)
assets=($(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '[ .[] | select(.tag_name=="'"$version"'").assets[].browser_download_url ] | join(" ") | @sh' | tr -d "'"))
# Later down the script, we assume the version has only digits and dots
# Sometimes the release name starts with a "v", so let's filter it out.
# You may need more tweaks here if the upstream repository has different naming conventions.
if [[ ${version:0:1} == "v" || ${version:0:1} == "V" ]]; then
version=${version:1}
fi
# Setting up the environment variables
echo "Current version: $current_version"
echo "Latest release from upstream: $version"
{ echo "VERSION=$version"; echo "REPO=$repo"; } >> "$GITHUB_ENV"
# For the time being, let's assume the script will fail
echo "PROCEED=false" >> "$GITHUB_ENV"
# Proceed only if the retrieved version is greater than the current one
if ! dpkg --compare-versions "$current_version" "lt" "$version" ; then
echo "::warning ::No new version available"
exit 0
# Proceed only if the retrieved version is not a release candidate
elif [[ "$version" == *"rc"* ]] ; then
echo "::warning ::No new version available"
exit 0
# Proceed only if a PR for this new version does not already exist
elif git ls-remote -q --exit-code --heads https://github.com/"$GITHUB_REPOSITORY".git ci-auto-update-v"$version" ; then
echo "::warning ::A branch already exists for this update"
exit 0
fi
# Each release can hold multiple assets (e.g. binaries for different architectures, source code, etc.)
echo "${#assets[@]} available asset(s)"
#=================================================
# UPDATE SOURCE FILES
#=================================================
# Here we use the $assets variable to get the resources published in the upstream release.
# Here is an example for Grav, it has to be adapted in accordance with how the upstream releases look like.
# Create the temporary directory
tempdir="$(mktemp -d)"
# Download checksums.txt
checksum_file=https://github.com/"$repo"/releases/download/v"$version"/checksums.txt
echo "Downloading checksums file at" "$checksum_file"
curl --silent -4 -L "$checksum_file" -o "$tempdir/checksums.txt"
# Let's loop over the array of assets URLs
for asset_url in "${assets[@]}"; do
echo "Handling asset at $asset_url"
# Assign the asset to a source file in conf/ directory
# Here we base the source file name upon a unique keyword in the assets url (admin vs. update)
# Leave $src empty to ignore the asset
case $asset_url in
*"linux_386"*)
src="i386"
;;
*"linux_amd64"*)
src="x86-64"
;;
*"linux_arm64"*)
src="arm64"
;;
*"linux_armv6"*)
src="armv6"
;;
*"linux_armv7"*)
src="armv7"
;;
*)
src=""
;;
esac
# If $src is not empty, let's process the asset
if [ -n "$src" ]; then
# Get checksum
filename=${asset_url##*/}
checksum=$(grep "$filename" "$tempdir/checksums.txt" | awk '{print $1;}')
# Get extension
if [[ $filename == *.tar.gz ]]; then
extension=tar.gz
else
extension=${filename##*.}
fi
# Rewrite source file
cat <<EOT > "conf/$src.src"
SOURCE_URL=$asset_url
SOURCE_SUM=$checksum
SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=$extension
SOURCE_EXTRACT=true
SOURCE_IN_SUBDIR=false
SOURCE_FILENAME=$filename
EOT
echo "... conf/$src.src updated"
else
echo "... asset ignored"
fi
done
# Delete temporary directory
rm -rf "$tempdir"
#=================================================
# SPECIFIC UPDATE STEPS
#=================================================
# Any action on the app's source code can be done.
# The GitHub Action workflow takes care of committing all changes after this script ends.
#=================================================
# GENERIC FINALIZATION
#=================================================
# Replace new version in manifest
echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json
# No need to update the README, yunohost-bot takes care of it
# The Action will proceed only if the PROCEED environment variable is set to true
echo "PROCEED=true" >> "$GITHUB_ENV"
exit 0

View file

@ -1,50 +0,0 @@
# This workflow allows GitHub Actions to automagically update your app whenever a new upstream release is detected.
# You need to enable Actions in your repository settings, and fetch this Action from the YunoHost-Apps organization.
# This file should be enough by itself, but feel free to tune it to your needs.
# It calls updater.sh, which is where you should put the app-specific update steps.
name: Check for new upstream releases
on:
# Allow to manually trigger the workflow
workflow_dispatch:
# Run it every day at 6:00 UTC
schedule:
- cron: '0 6 * * *'
jobs:
updater:
runs-on: ubuntu-latest
steps:
- name: Fetch the source code
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Run the updater script
id: run_updater
run: |
# Setting up Git user
git config --global user.name 'yunohost-bot'
git config --global user.email 'yunohost-bot@users.noreply.github.com'
# Run the updater script
/bin/bash .github/workflows/updater.sh
- name: Commit changes
id: commit
if: ${{ env.PROCEED == 'true' }}
run: |
git commit -am "Upgrade to v$VERSION"
- name: Create Pull Request
id: cpr
if: ${{ env.PROCEED == 'true' }}
uses: peter-evans/create-pull-request@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: Update to version ${{ env.VERSION }}
committer: 'yunohost-bot <yunohost-bot@users.noreply.github.com>'
author: 'yunohost-bot <yunohost-bot@users.noreply.github.com>'
signoff: false
base: testing
branch: ci-auto-update-v${{ env.VERSION }}
delete-branch: true
title: 'Upgrade to version ${{ env.VERSION }}'
body: |
Upgrade to v${{ env.VERSION }}
Changelog: https://github.com/${{ env.REPO }}/releases/tag/v${{ env.VERSION }}
draft: false

View file

@ -1,39 +0,0 @@
# See here for more information
# https://github.com/YunoHost/package_check#syntax-check_process-file
# Move this file from check_process.default to check_process when you have filled it.
;; Test complet
; Manifest
admin="xana"
email="user@example.com"
password="1Strong-Password"
port="8095"
; Checks
pkg_linter=1
setup_sub_dir=0
setup_root=1
setup_nourl=0
setup_private=0
setup_public=1
upgrade=1
upgrade=1 from_commit=29c7d0df5dd6e3d90070f242b74cce980676cd72
upgrade=1 from_commit=5c1c052995a10d899abcb0e4d4fa1c1dc35f84a5
upgrade=1 from_commit=1b6c1c62e022f04afa02bf128f419e77a72bf1e9
upgrade=1 from_commit=9a6d018337c7d83193282830ff9d9e9b0ae3a733
backup_restore=1
multi_instance=1
port_already_use=1
change_url=0
;;; Options
Email=
Notification=none
;;; Upgrade options
; commit=29c7d0df5dd6e3d90070f242b74cce980676cd72
name=0.3.6~ynh1
; commit=5c1c052995a10d899abcb0e4d4fa1c1dc35f84a5
name=v0.4.0~ynh1
; commit=1b6c1c62e022f04afa02bf128f419e77a72bf1e9
name=0.5.2~ynh2
; commit=9a6d018337c7d83193282830ff9d9e9b0ae3a733
name=0.6.0~ynh1

View file

@ -1,13 +1,13 @@
#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
location __PATH__/ { location __PATH__/ {
proxy_pass http://127.0.0.1:__PORT__;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_pass http://localhost:__PORT__;
client_max_body_size __CLIENT_MAX_BODY_SIZE__; client_max_body_size __CLIENT_MAX_BODY_SIZE__;
# Include SSOWAT user panel. # Include SSOWAT user panel.

View file

@ -15,197 +15,199 @@ help = "Here you can easily configure some things about your GoToSocial instance
[main.accounts] [main.accounts]
name = "Accounts config" name = "Accounts config"
help = "Config pertaining to creation and maintenance of accounts on the server, as well as defaults for new accounts." help = "Config pertaining to creation and maintenance of accounts on the server, as well as defaults for new accounts."
[main.accounts.accounts_registration_open] [main.accounts.accounts_registration_open]
ask.en = "Open registrations?" ask.en = "Open registrations?"
ask.fr = "Inscriptions ouvertes ?" ask.fr = "Inscriptions ouvertes ?"
bind = "accounts-registration-open:__FINALPATH__/config.yaml" bind = "accounts-registration-open:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = "Do we want people to be able to just submit sign up requests, or do we want invite only?" help.en = "Do we want people to be able to just submit sign up requests, or do we want invite only?"
help.fr = "Voulez-vous que les gens puissent simplement envoyer des demandes d'inscription, ou voulez-vous qu'iels doivent être invité-e-s ?" help.fr = "Voulez-vous que les gens puissent simplement envoyer des demandes d'inscription, ou voulez-vous qu'iels doivent être invité-e-s ?"
type = "select" type = "select"
[main.accounts.accounts_approval_required] [main.accounts.accounts_approval_required]
ask.en = "Approval required?" ask.en = "Approval required?"
ask.fr = "Validation requise ?" ask.fr = "Validation requise ?"
bind = "accounts-approval-required:__FINALPATH__/config.yaml" bind = "accounts-approval-required:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "true" default = "true"
help.en = "Do sign up requests require approval from an admin/moderator before an account can sign in/use the server?" help.en = "Do sign up requests require approval from an admin/moderator before an account can sign in/use the server?"
help.fr = "Les demandes d'inscription doivent-elles être approuvées par un-e administrateur-ice/modérateur-ice avant qu'un compte puisse se connecter/utiliser le serveur ?" help.fr = "Les demandes d'inscription doivent-elles être approuvées par un-e administrateur-ice/modérateur-ice avant qu'un compte puisse se connecter/utiliser le serveur ?"
type = "select" type = "select"
[main.accounts.accounts_reason_required] [main.accounts.accounts_reason_required]
ask.en = "Reason required?" ask.en = "Reason required?"
ask.fr = "Motif requis ?" ask.fr = "Motif requis ?"
bind = "accounts-reason-required:__FINALPATH__/config.yaml" bind = "accounts-reason-required:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "true" default = "true"
help.en = "Are sign up requests required to submit a reason for the request (eg., an explanation of why they want to join the instance)?" help.en = "Are sign up requests required to submit a reason for the request (eg., an explanation of why they want to join the instance)?"
help.fr = "Les demandes d'inscription doivent-elles être motivées (par exemple, par une explication de la raison pour laquelle la personne souhaite rejoindre l'instance) ?" help.fr = "Les demandes d'inscription doivent-elles être motivées (par exemple, par une explication de la raison pour laquelle la personne souhaite rejoindre l'instance) ?"
type = "select" type = "select"
[main.accounts.accounts_allow_custom_css] [main.accounts.accounts_allow_custom_css]
ask.en = "Allow custom CSS?" ask.en = "Allow custom CSS?"
ask.fr = "Autoriser le CSS personnalisé ?" ask.fr = "Autoriser le CSS personnalisé ?"
bind = "accounts-allow-custom-css:__FINALPATH__/config.yaml" bind = "accounts-allow-custom-css:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = """Allow accounts on this instance to set custom CSS for their profile pages and statuses.\ help.en = """Allow accounts on this instance to set custom CSS for their profile pages and statuses.\
Enabling this setting will allow accounts to upload custom CSS via the /user settings page, which will then be rendered on the web view of the account's profile and statuses.\ Enabling this setting will allow accounts to upload custom CSS via the /user settings page, which will then be rendered on the web view of the account's profile and statuses.\
For instances with public sign ups, it is **HIGHLY RECOMMENDED** to leave this setting on 'false', since setting it to true allows malicious accounts to make their profile pages misleading, unusable or even dangerous to visitors. In other words, you should only enable this setting if you trust the users on your instance not to produce harmful CSS.\ For instances with public sign ups, it is **HIGHLY RECOMMENDED** to leave this setting on 'false', since setting it to true allows malicious accounts to make their profile pages misleading, unusable or even dangerous to visitors. In other words, you should only enable this setting if you trust the users on your instance not to produce harmful CSS.\
Regardless of what this value is set to, any uploaded CSS will not be federated to other instances, it will only be shown on profiles and statuses on *this* instance.""" Regardless of what this value is set to, any uploaded CSS will not be federated to other instances, it will only be shown on profiles and statuses on *this* instance."""
help.fr = """Autoriser les comptes de cette instance à définir un CSS personnalisé pour leurs pages de profil et leurs statuts.\ help.fr = """Autoriser les comptes de cette instance à définir un CSS personnalisé pour leurs pages de profil et leurs statuts.\
En activant ce paramètre, les comptes pourront télécharger des feuilles de style CSS personnalisées via la page de configuration de l'utilisateur-ice /user, qui seront ensuite affichées sur la page Web du profil et des statuts du compte.\ En activant ce paramètre, les comptes pourront télécharger des feuilles de style CSS personnalisées via la page de configuration de l'utilisateur-ice /user, qui seront ensuite affichées sur la page Web du profil et des statuts du compte.\
Pour les instances avec des inscriptions publiques, il est **HAUTEMENT RECOMMANDÉ** de laisser ce paramètre sur "false", car le mettre sur "true" permet aux comptes malveillants de rendre leurs pages de profil trompeuses, inutilisables ou même dangereuses pour les visiteurs. En d'autres termes, vous ne devez activer ce paramètre que si vous avez confiance dans le fait que les utilisateurs de votre instance ne produisent pas de CSS dangereux.\ Pour les instances avec des inscriptions publiques, il est **HAUTEMENT RECOMMANDÉ** de laisser ce paramètre sur "false", car le mettre sur "true" permet aux comptes malveillants de rendre leurs pages de profil trompeuses, inutilisables ou même dangereuses pour les visiteurs. En d'autres termes, vous ne devez activer ce paramètre que si vous avez confiance dans le fait que les utilisateurs de votre instance ne produisent pas de CSS dangereux.\
Quelle que soit la valeur de ce paramètre, tout CSS téléchargé ne sera pas fédéré à d'autres instances, il ne sera affiché que sur les profils et les statuts de *cette* instance.""" Quelle que soit la valeur de ce paramètre, tout CSS téléchargé ne sera pas fédéré à d'autres instances, il ne sera affiché que sur les profils et les statuts de *cette* instance."""
type = "select" type = "select"
################# #################
#### MEDIA CONFIG #### MEDIA CONFIG
################# #################
[main.media] [main.media]
name = "Media config"
help = "Config pertaining to user media uploads (videos, image, image descriptions)." name = "Media config"
[main.media.media_image_max_size] help = "Config pertaining to user media uploads (videos, image, image descriptions)."
ask.en = "Maximum allowed image upload size in bytes."
ask.fr = "Taille maximale autorisée pour le téléchargement d'images, en octets."
bind = "media-image-max-size:__FINALPATH__/config.yaml"
default = "2097152"
help.en = "Default: 2097152 -- aka 2MB"
help.fr = "Valeur par défaut : 2097152 (soit 2 Mo)"
type = "number"
[main.media.media_video_max_size] [main.media.media_image_max_size]
ask.en = "Maximum allowed video upload size in bytes." ask.en = "Maximum allowed image upload size in bytes."
ask.fr = "Taille maximale autorisée pour le téléchargement de vidéos, en octets." ask.fr = "Taille maximale autorisée pour le téléchargement d'images, en octets."
bind = "media-video-max-size:__FINALPATH__/config.yaml" bind = "media-image-max-size:__FINALPATH__/config.yaml"
default = "10485760" default = "2097152"
help.en = "Default: 10485760 -- aka 10MB" help.en = "Default: 2097152 -- aka 2MB"
help.fr = "Valeur par défaut : 10485760 (soit 10 Mo)" help.fr = "Valeur par défaut : 2097152 (soit 2 Mo)"
type = "number" type = "number"
[main.media.media_description_min_chars] [main.media.media_video_max_size]
ask.en = "Minimum amount of characters required as an image or video description." ask.en = "Maximum allowed video upload size in bytes."
ask.fr = "Nombre minimum de caractères requis pour la description d'une image ou d'une vidéo." ask.fr = "Taille maximale autorisée pour le téléchargement de vidéos, en octets."
bind = "media-description-min-chars:__FINALPATH__/config.yaml" bind = "media-video-max-size:__FINALPATH__/config.yaml"
default = "0" default = "10485760"
help.en = "Default: 0 (not required)" help.en = "Default: 10485760 -- aka 10MB"
help.fr = "Valeur par défaut : 0 (non obligatoire)" help.fr = "Valeur par défaut : 10485760 (soit 10 Mo)"
type = "number" type = "number"
[main.media.media_description_max_chars] [main.media.media_description_min_chars]
ask.en = "Maximum amount of characters permitted in an image or video description." ask.en = "Minimum amount of characters required as an image or video description."
ask.fr = "Nombre maximum de caractères requis pour la description d'une image ou d'une vidéo." ask.fr = "Nombre minimum de caractères requis pour la description d'une image ou d'une vidéo."
bind = "media-description-max-chars:__FINALPATH__/config.yaml" bind = "media-description-min-chars:__FINALPATH__/config.yaml"
default = "500" default = "0"
help.en = "Default: 500" help.en = "Default: 0 (not required)"
help.fr = "Valeur par défaut : 500" help.fr = "Valeur par défaut : 0 (non obligatoire)"
type = "number" type = "number"
[main.media.media_remote_cache_days] [main.media.media_description_max_chars]
ask.en = "Number of days to cache media from remote instances before they are removed from the cache." ask.en = "Maximum amount of characters permitted in an image or video description."
ask.fr = "Nombre de jours de mise en cache des médias des instances distantes avant qu'ils ne soient retirés du cache." ask.fr = "Nombre maximum de caractères requis pour la description d'une image ou d'une vidéo."
bind = "media-remote-cache-days:__FINALPATH__/config.yaml" bind = "media-description-max-chars:__FINALPATH__/config.yaml"
default = "30" default = "500"
help.en = """Default: 30\ help.en = "Default: 500"
A job will run every day at midnight to clean up any remote media older than the given amount of days. \ help.fr = "Valeur par défaut : 500"
When remote media is removed from the cache, it is deleted from storage but the database entries for the media are kept so that it can be fetched again if requested by a user.\ type = "number"
If this is set to 0, then media from remote instances will be cached indefinitely.\
"""
help.fr = """Valeur par défaut : 30\
Une tâche est exécutée tous les soirs à minuit pour nettoyer les médias distants datant de plus d'un certain nombre de jours.\
Lorsque le média distant est supprimé du cache, il est supprimé du stockage mais les entrées de la base de données pour le média sont conservées afin qu'il puisse être récupéré si un utilisateur le demande.\
Si la valeur 0 est attribuée à ce paramètre, les médias des instances distantes sont mis en cache indéfiniment.\
"""
type = "number"
[main.media.media_emoji_local_max_size] [main.media.media_remote_cache_days]
ask.en = "Max size in bytes of emojis uploaded to this instance via the admin API." ask.en = "Number of days to cache media from remote instances before they are removed from the cache."
ask.fr = "Taille maximale en octets des emojis téléchargés vers cette instance via l'API d'administration." ask.fr = "Nombre de jours de mise en cache des médias des instances distantes avant qu'ils ne soient retirés du cache."
bind = "media-emoji-local-max-size:__FINALPATH__/config.yaml" bind = "media-remote-cache-days:__FINALPATH__/config.yaml"
default = "51200" default = "30"
help.en = """Default: 51200\ help.en = """Default: 30\
The default is the same as the Mastodon size limit for emojis (50kb), which allows for good interoperability.\ A job will run every day at midnight to clean up any remote media older than the given amount of days. \
Raising this limit may cause issues with federation of your emojis to other instances, so beware.""" When remote media is removed from the cache, it is deleted from storage but the database entries for the media are kept so that it can be fetched again if requested by a user.\
help.fr = """Valeur par défaut : 51200\ If this is set to 0, then media from remote instances will be cached indefinitely.\
La valeur par défaut est la même que la limite de taille des emojis de Mastodon (50 ko), ce qui permet une bonne interopérabilité.\ """
Si vous augmentez cette limite, vous risquez d'avoir des problèmes avec la fédération de vos emojis à d'autres instances, alors faites preuve de prudence.""" help.fr = """Valeur par défaut : 30\
type = "number" Une tâche est exécutée tous les soirs à minuit pour nettoyer les médias distants datant de plus d'un certain nombre de jours.\
Lorsque le média distant est supprimé du cache, il est supprimé du stockage mais les entrées de la base de données pour le média sont conservées afin qu'il puisse être récupéré si un utilisateur le demande.\
Si la valeur 0 est attribuée à ce paramètre, les médias des instances distantes sont mis en cache indéfiniment.\
"""
type = "number"
[main.media.media_emoji_remote_max_size] [main.media.media_emoji_local_max_size]
ask.en = "Max size in bytes of emojis to download from other instances." ask.en = "Max size in bytes of emojis uploaded to this instance via the admin API."
ask.fr = "Taille maximale en octets des emojis téléchargeables à partir d'autres instances." ask.fr = "Taille maximale en octets des emojis téléchargés vers cette instance via l'API d'administration."
bind = "media-emoji-remote-max-size:__FINALPATH__/config.yaml" bind = "media-emoji-local-max-size:__FINALPATH__/config.yaml"
default = "102400" default = "51200"
help.en = """Default: 102400\ help.en = """Default: 51200\
By default this is 100kb, or twice the size of the default for media-emoji-local-max-size.\ The default is the same as the Mastodon size limit for emojis (50kb), which allows for good interoperability.\
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.""" Raising this limit may cause issues with federation of your emojis to other instances, so beware."""
help.fr = """Valeur par défaut : 102400\ help.fr = """Valeur par défaut : 51200\
Par défaut, cette taille est de 100 Ko, soit le double de la taille par défaut de media-emoji-local-max-size (le paramètre précédent).\ La valeur par défaut est la même que la limite de taille des emojis de Mastodon (50 ko), ce qui permet une bonne interopérabilité.\
Cette valeur représente un bon équilibre entre une interopérabilité décente avec les instances qui ont des limites de taille d'emoji plus élevées et le fait de ne pas prendre trop d'espace de stockage.""" Si vous augmentez cette limite, vous risquez d'avoir des problèmes avec la fédération de vos emojis à d'autres instances, alors faites preuve de prudence."""
type = "number" type = "number"
[main.media.media_emoji_remote_max_size]
ask.en = "Max size in bytes of emojis to download from other instances."
ask.fr = "Taille maximale en octets des emojis téléchargeables à partir d'autres instances."
bind = "media-emoji-remote-max-size:__FINALPATH__/config.yaml"
default = "102400"
help.en = """Default: 102400\
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."""
help.fr = """Valeur par défaut : 102400\
Par défaut, cette taille est de 100 Ko, soit le double de la taille par défaut de media-emoji-local-max-size (le paramètre précédent).\
Cette valeur représente un bon équilibre entre une interopérabilité décente avec les instances qui ont des limites de taille d'emoji plus élevées et le fait de ne pas prendre trop d'espace de stockage."""
type = "number"
################### ###################
### STATUSES CONFIG ### STATUSES CONFIG
################### ###################
[main.statuses] [main.statuses]
name = "Status config"
help = "Config pertaining to the creation of statuses/posts, and permitted limits." name = "Status config"
[main.statuses.statuses_max_chars] help = "Config pertaining to the creation of statuses/posts, and permitted limits."
ask.en = "Maximum amount of characters permitted for a new status."
ask.fr = "Nombre maximal de caractères autorisés pour un nouveau statut."
bind = "statuses-max-chars:__FINALPATH__/config.yaml"
default = "5000"
help.en = "Default: 5000. Note that going way higher than the default might break federation."
help.fr = "Valeur par défaut : 5000. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération."
type = "number"
[main.statuses.statuses_cw_max_chars] [main.statuses.statuses_max_chars]
ask.en = "Maximum amount of characters allowed in the CW/subject header of a status." ask.en = "Maximum amount of characters permitted for a new status."
ask.fr = "Nombre maximum de caractères autorisés dans l'en-tête CW/sujet d'un statut." ask.fr = "Nombre maximal de caractères autorisés pour un nouveau statut."
bind = "statuses-cw-max-chars:__FINALPATH__/config.yaml" bind = "statuses-max-chars:__FINALPATH__/config.yaml"
default = "100" default = "5000"
help.en = "Default: 100. Note that going way higher than the default might break federation." help.en = "Default: 5000. Note that going way higher than the default might break federation."
help.fr = "Valeur par défaut : 100. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération." help.fr = "Valeur par défaut : 5000. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération."
type = "number" type = "number"
[main.statuses.statuses_poll_max_options] [main.statuses.statuses_cw_max_chars]
ask.en = "Maximum amount of options to permit when creating a new poll." ask.en = "Maximum amount of characters allowed in the CW/subject header of a status."
ask.fr = "Nombre maximum d'options autorisées lors de la création d'un nouveau sondage." ask.fr = "Nombre maximum de caractères autorisés dans l'en-tête CW/sujet d'un statut."
bind = "statuses-poll-max-options:__FINALPATH__/config.yaml" bind = "statuses-cw-max-chars:__FINALPATH__/config.yaml"
default = "6" default = "100"
help.en = "Default: 6. Note that going way higher than the default might break federation." help.en = "Default: 100. Note that going way higher than the default might break federation."
help.fr = "Valeur par défaut : 6. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération." help.fr = "Valeur par défaut : 100. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération."
type = "number" type = "number"
[main.statuses.statuses_poll_option_max_chars] [main.statuses.statuses_poll_max_options]
ask.en = "Maximum amount of characters to permit per poll option when creating a new poll." ask.en = "Maximum amount of options to permit when creating a new poll."
ask.fr = "Nombre maximal de caractères autorisés par option de sondage lors de la création d'un nouveau sondage." ask.fr = "Nombre maximum d'options autorisées lors de la création d'un nouveau sondage."
bind = "statuses-poll-option-max-chars:__FINALPATH__/config.yaml" bind = "statuses-poll-max-options:__FINALPATH__/config.yaml"
default = "50" default = "6"
help.en = "Default: 50. Note that going way higher than the default might break federation." help.en = "Default: 6. Note that going way higher than the default might break federation."
help.fr = "Valeur par défaut : 50. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération." help.fr = "Valeur par défaut : 6. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération."
type = "number" type = "number"
[main.statuses.statuses_media_max_files] [main.statuses.statuses_poll_option_max_chars]
ask.en = "Maximum amount of media files that can be attached to a new status." ask.en = "Maximum amount of characters to permit per poll option when creating a new poll."
ask.fr = "Quantité maximale de fichiers multimédias qui peuvent être joints à un nouveau statut." ask.fr = "Nombre maximal de caractères autorisés par option de sondage lors de la création d'un nouveau sondage."
bind = "statuses-media-max-files:__FINALPATH__/config.yaml" bind = "statuses-poll-option-max-chars:__FINALPATH__/config.yaml"
default = "6" default = "50"
help.en = "Default: 6. Note that going way higher than the default might break federation." help.en = "Default: 50. Note that going way higher than the default might break federation."
help.fr = "Valeur par défaut : 6. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération." help.fr = "Valeur par défaut : 50. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération."
type = "number" type = "number"
[main.statuses.statuses_media_max_files]
ask.en = "Maximum amount of media files that can be attached to a new status."
ask.fr = "Quantité maximale de fichiers multimédias qui peuvent être joints à un nouveau statut."
bind = "statuses-media-max-files:__FINALPATH__/config.yaml"
default = "6"
help.en = "Default: 6. Note that going way higher than the default might break federation."
help.fr = "Valeur par défaut : 6. Notez que si vous dépassez la valeur par défaut, vous risquez de compromettre la fédération."
type = "number"
#################### ####################
#### INSTANCE CONFIG #### INSTANCE CONFIG
@ -213,71 +215,71 @@ type = "number"
[main.instance] [main.instance]
name = "Instance config" name = "Instance config"
help = "Config pertaining to instance federation settings, pages to hide/expose, etc." help = "Config pertaining to instance federation settings, pages to hide/expose, etc."
[main.instance.landing_page_user] [main.instance.landing_page_user]
ask.en = "Landing page user" ask.en = "Landing page user"
ask.fr = "Utilisateurice en tant que page d'accueil" ask.fr = "Utilisateurice en tant que page d'accueil"
bind = "landing-page-user:__FINALPATH__/config.yaml" bind = "landing-page-user:__FINALPATH__/config.yaml"
help.en = "The user that will be shown instead of the landing page. if no user is set, the landing page will be shown." help.en = "The user that will be shown instead of the landing page. if no user is set, the landing page will be shown."
help.fr = "L'utilisateurice qui sera affiché-e à la place de la page d'accueil. Si le champ est laissé vide, la page d'accueil normale sera affichée." help.fr = "L'utilisateurice qui sera affiché-e à la place de la page d'accueil. Si le champ est laissé vide, la page d'accueil normale sera affichée."
type = "string" type = "string"
[main.instance.instance_expose_peers] [main.instance.instance_expose_peers]
ask.en = "API: Expose peers?" ask.en = "API: Expose peers?"
ask.fr = "API : Exposer les pairs ?" ask.fr = "API : Exposer les pairs ?"
bind = "instance-expose-peers:__FINALPATH__/config.yaml" bind = "instance-expose-peers:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = "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." help.en = "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."
help.fr = "Permet aux utilisateurs non authentifiés d'effectuer des requêtes API sur /api/v1/instance/peers?filter=open afin d'afficher la liste des instances avec lesquelles votre instance est en relation. Même s'il est défini à 'false', les utilisateurs authentifiés (membres de l'instance) seront toujours en mesure d'interroger l'API." help.fr = "Permet aux utilisateurs non authentifiés d'effectuer des requêtes API sur /api/v1/instance/peers?filter=open afin d'afficher la liste des instances avec lesquelles votre instance est en relation. Même s'il est défini à 'false', les utilisateurs authentifiés (membres de l'instance) seront toujours en mesure d'interroger l'API."
type = "select" type = "select"
[main.instance.instance_expose_suspended] [main.instance.instance_expose_suspended]
ask.en = "API: Expose suspended?" ask.en = "API: Expose suspended?"
ask.fr = "API : Exposer les instances bloquées ?" ask.fr = "API : Exposer les instances bloquées ?"
bind = "instance-expose-suspended:__FINALPATH__/config.yaml" bind = "instance-expose-suspended:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = "Allow unauthenticated users to make queries to /api/v1/instance/peers?filter=suspended in order to see a list of instances that this instance blocks/suspends. This will also allow unauthenticated users to see the list through the web UI. Even if set to 'false', then authenticated users (members of the instance) will still be able to query the endpoint." help.en = "Allow unauthenticated users to make queries to /api/v1/instance/peers?filter=suspended in order to see a list of instances that this instance blocks/suspends. This will also allow unauthenticated users to see the list through the web UI. Even if set to 'false', then authenticated users (members of the instance) will still be able to query the endpoint."
help.fr = "Permet aux utilisateurs non authentifiés d'effectuer des requêtes API sur /api/v1/instance/peers?filter=suspended afin de voir la liste des instances bloquées ou suspendues par votre instance. Cela permettra également aux utilisateurs non authentifiés de consulter la liste via l'interface Web. Même s'il est défini à 'false', les utilisateurs authentifiés (membres de l'instance) seront toujours en mesure d'interroger l'API." help.fr = "Permet aux utilisateurs non authentifiés d'effectuer des requêtes API sur /api/v1/instance/peers?filter=suspended afin de voir la liste des instances bloquées ou suspendues par votre instance. Cela permettra également aux utilisateurs non authentifiés de consulter la liste via l'interface Web. Même s'il est défini à 'false', les utilisateurs authentifiés (membres de l'instance) seront toujours en mesure d'interroger l'API."
type = "select" type = "select"
[main.instance.instance_expose_suspended_web] [main.instance.instance_expose_suspended_web]
ask.en = "API: Expose suspended on Web (/about/suspended)?" ask.en = "API: Expose suspended on Web (/about/suspended)?"
ask.fr = "API : Exposer les instances bloquées sur le Web (/about/suspended) ?" ask.fr = "API : Exposer les instances bloquées sur le Web (/about/suspended) ?"
bind = "instance-expose-suspended-web:__FINALPATH__/config.yaml" bind = "instance-expose-suspended-web:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = "Allow unauthenticated users to view /about/suspended, showing the HTML rendered list of instances that this instance blocks/suspends." help.en = "Allow unauthenticated users to view /about/suspended, showing the HTML rendered list of instances that this instance blocks/suspends."
help.fr = "Permet aux utilisateurs non authentifiés d'afficher /about/suspended, montrant la liste rendue en HTML des instances que cette instance bloque ou suspend." help.fr = "Permet aux utilisateurs non authentifiés d'afficher /about/suspended, montrant la liste rendue en HTML des instances que cette instance bloque ou suspend."
type = "select" type = "select"
[main.instance.instance_expose_public_timeline] [main.instance.instance_expose_public_timeline]
ask.en = "API: Expose public timeline?" ask.en = "API: Expose public timeline?"
ask.fr = "API : Exposer la timeline publique ?" ask.fr = "API : Exposer la timeline publique ?"
bind = "instance-expose-public-timeline:__FINALPATH__/config.yaml" bind = "instance-expose-public-timeline:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = "Allow unauthenticated users to make queries to /api/v1/timelines/public in order to see a list of public posts on this server. Even if set to 'false', then authenticated users (members of the instance) will still be able to query the endpoint." help.en = "Allow unauthenticated users to make queries to /api/v1/timelines/public in order to see a list of public posts on this server. Even if set to 'false', then authenticated users (members of the instance) will still be able to query the endpoint."
help.fr = "Permet aux utilisateurs non authentifiés d'effectuer des requêtes sur /api/v1/timelines/public afin de voir la liste des messages publics sur ce serveur. Même s'il est défini à 'false', les utilisateurs authentifiés (membres de l'instance) seront toujours en mesure d'interroger l'API." help.fr = "Permet aux utilisateurs non authentifiés d'effectuer des requêtes sur /api/v1/timelines/public afin de voir la liste des messages publics sur ce serveur. Même s'il est défini à 'false', les utilisateurs authentifiés (membres de l'instance) seront toujours en mesure d'interroger l'API."
type = "select" type = "select"
[main.instance.instance_deliver_to_shared_inboxes] [main.instance.instance_deliver_to_shared_inboxes]
ask.en = "Deliver to shared inboxes?" ask.en = "Deliver to shared inboxes?"
ask.fr = "Envoi en boites partagées ?" ask.fr = "Envoi en boites partagées ?"
bind = "instance-deliver-to-shared-inboxes:__FINALPATH__/config.yaml" bind = "instance-deliver-to-shared-inboxes:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "true" default = "true"
help.en = """This flag tweaks whether GoToSocial will deliver ActivityPub messages to the shared inbox of a recipient, if one is available, instead of delivering each message to each actor who should receive a message individually.\ help.en = """This flag tweaks whether GoToSocial will deliver ActivityPub messages to the shared inbox of a recipient, if one is available, instead of delivering each message to each actor who should receive a message individually.\
Shared inbox delivery can significantly reduce network load when delivering to multiple recipients share an inbox (eg., on large Mastodon instances).\ Shared inbox delivery can significantly reduce network load when delivering to multiple recipients share an inbox (eg., on large Mastodon instances).\
See: https://www.w3.org/TR/activitypub/#shared-inbox-delivery""" See: https://www.w3.org/TR/activitypub/#shared-inbox-delivery"""
help.fr = """Ce paramètre détermine si GoToSocial livrera les messages ActivityPub à la boîte de réception partagée d'un destinataire, si une boîte de réception est disponible, au lieu de livrer chaque message à chaque acteur qui devrait recevoir un message individuellement.\ help.fr = """Ce paramètre détermine si GoToSocial livrera les messages ActivityPub à la boîte de réception partagée d'un destinataire, si une boîte de réception est disponible, au lieu de livrer chaque message à chaque acteur qui devrait recevoir un message individuellement.\
La livraison dans la boîte de réception partagée peut réduire de manière significative la charge du réseau lorsque la livraison à plusieurs destinataires partagent une boîte de réception (par exemple, sur les grandes instances Mastodon).\ La livraison dans la boîte de réception partagée peut réduire de manière significative la charge du réseau lorsque la livraison à plusieurs destinataires partagent une boîte de réception (par exemple, sur les grandes instances Mastodon).\
Voir : https://www.w3.org/TR/activitypub/#shared-inbox-delivery""" Voir : https://www.w3.org/TR/activitypub/#shared-inbox-delivery"""
type = "select" type = "select"
################ ################
#### SMTP CONFIG #### SMTP CONFIG
@ -285,66 +287,66 @@ type = "select"
[main.smtp] [main.smtp]
name = "SMTP config" name = "SMTP config"
help = "Config for sending emails via an smtp server." help = "Config for sending emails via an smtp server."
[main.smtp.smtp_host] [main.smtp.smtp_host]
ask.en = "SMTP Server Hostname" ask.en = "SMTP Server Hostname"
ask.fr = "Nom d'hôte du serveur SMTP" ask.fr = "Nom d'hôte du serveur SMTP"
bind = "smtp-host:__FINALPATH__/config.yaml" bind = "smtp-host:__FINALPATH__/config.yaml"
default = "localhost" default = "localhost"
help.en = "The hostname of the SMTP server you want to use. Examples: mail.example.org, localhost" help.en = "The hostname of the SMTP server you want to use. Examples: mail.example.org, localhost"
help.fr = "Le nom d'hôte du serveur SMTP que vous souhaitez utiliser. Exemples: mail.example.org, localhost" help.fr = "Le nom d'hôte du serveur SMTP que vous souhaitez utiliser. Exemples: mail.example.org, localhost"
type = "string" type = "string"
[main.smtp.smtp_port] [main.smtp.smtp_port]
ask.en = "SMTP Port" ask.en = "SMTP Port"
ask.fr = "Port SMTP" ask.fr = "Port SMTP"
bind = "smtp-port:__FINALPATH__/config.yaml" bind = "smtp-port:__FINALPATH__/config.yaml"
default = "25" default = "25"
help.en = "Port to use to connect to the SMTP server" help.en = "Port to use to connect to the SMTP server"
help.fr = "Port à utiliser pour se connecter au serveur SMTP" help.fr = "Port à utiliser pour se connecter au serveur SMTP"
type = "number" type = "number"
[main.smtp.smtp_username] [main.smtp.smtp_username]
ask.en = "SMTP Username" ask.en = "SMTP Username"
ask.fr = "Nom d'utilisateur SMTP" ask.fr = "Nom d'utilisateur SMTP"
bind = "smtp-username:__FINALPATH__/config.yaml" bind = "smtp-username:__FINALPATH__/config.yaml"
default = "" default = ""
help.en = "Username to use when authenticating with the SMTP server" help.en = "Username to use when authenticating with the SMTP server"
help.fr = "Nom d'utilisateur à utiliser lors de l'authentification avec le serveur SMTP" help.fr = "Nom d'utilisateur à utiliser lors de l'authentification avec le serveur SMTP"
type = "string" type = "string"
[main.smtp.smtp_password] [main.smtp.smtp_password]
ask.en = "SMTP Password" ask.en = "SMTP Password"
ask.fr = "Mot de passe SMTP" ask.fr = "Mot de passe SMTP"
bind = "smtp-password:__FINALPATH__/config.yaml" bind = "smtp-password:__FINALPATH__/config.yaml"
default = "" default = ""
help.en = "Password to use when authenticating with the SMTP server" help.en = "Password to use when authenticating with the SMTP server"
help.fr = "Mot de passe à utiliser lors de l'authentification avec le serveur SMTP" help.fr = "Mot de passe à utiliser lors de l'authentification avec le serveur SMTP"
type = "password" type = "password"
[main.smtp.smtp_from] [main.smtp.smtp_from]
ask.en = "SMTP From Address" ask.en = "SMTP From Address"
ask.fr = "Adresse d'expédition SMTP" ask.fr = "Adresse d'expédition SMTP"
bind = "smtp-from:__FINALPATH__/config.yaml" bind = "smtp-from:__FINALPATH__/config.yaml"
default = "GoToSocial@__DOMAIN__" default = "GoToSocial@__DOMAIN__"
help.en = "From address for sent emails" help.en = "From address for sent emails"
help.fr = "L'adresse utilisée pour les e-mails envoyés" help.fr = "L'adresse utilisée pour les e-mails envoyés"
type = "email" type = "email"
[main.smtp.smtp_disclose_recipients] [main.smtp.smtp_disclose_recipients]
ask.en = "SMTP Disclose Recipients" ask.en = "SMTP Disclose Recipients"
ask.fr = "SMTP Divulguer les destinataires" ask.fr = "SMTP Divulguer les destinataires"
bind = "smtp-disclose-recipients:__FINALPATH__/config.yaml" bind = "smtp-disclose-recipients:__FINALPATH__/config.yaml"
choices = ["true", "false"] choices = ["true", "false"]
default = "false" default = "false"
help.en = """true: Disclose all recipients in the To field\ help.en = """true: Disclose all recipients in the To field\
false: Email will be sent to Undisclosed Recipients""" false: Email will be sent to Undisclosed Recipients"""
help.fr = """true : divulguer tous les destinataires dans le champ À\ help.fr = """true : divulguer tous les destinataires dans le champ À\
false : l'e-mail sera envoyé sans divulguer les destinataires""" false : l'e-mail sera envoyé sans divulguer les destinataires"""
type = "select" type = "select"
#################### ####################
#### ADVANCED SETTINGS #### ADVANCED SETTINGS
@ -352,34 +354,34 @@ type = "select"
[main.advanced] [main.advanced]
name = "Advanced settings" name = "Advanced settings"
help = "Settings pertaining to http timeouts, security, cookies, and more. ⚠️ ONLY ADJUST THESE SETTINGS IF YOU KNOW WHAT YOU ARE DOING! ⚠️" help = "Settings pertaining to http timeouts, security, cookies, and more. ⚠️ ONLY ADJUST THESE SETTINGS IF YOU KNOW WHAT YOU ARE DOING! ⚠️"
[main.advanced.advanced_cookies_samesite] [main.advanced.advanced_cookies_samesite]
ask.en = "Value of the SameSite attribute of cookies set by GoToSocial." ask.en = "Value of the SameSite attribute of cookies set by GoToSocial."
ask.fr = "Valeur de l'attribut SameSite des cookies définis par GoToSocial." ask.fr = "Valeur de l'attribut SameSite des cookies définis par GoToSocial."
bind = "advanced-cookies-samesite:__FINALPATH__/config.yaml" bind = "advanced-cookies-samesite:__FINALPATH__/config.yaml"
choices = ["lax", "strict"] choices = ["lax", "strict"]
default = "lax" default = "lax"
help.en = """Defaults to 'lax' to ensure that the OIDC flow does not break, which is fine in most cases.\ help.en = """Defaults to 'lax' to ensure that the OIDC flow does not break, which is fine in most cases.\
If you want to harden your instance against CSRF attacks and don't mind if some login-related things might break, you can set this to 'strict' instead.\ If you want to harden your instance against CSRF attacks and don't mind if some login-related things might break, you can set this to 'strict' instead.\
For an overview of what this does, see:\ For an overview of what this does, see:\
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite""" https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite"""
help.fr = "" help.fr = ""
type = "select" type = "select"
[main.advanced.advanced_rate_limit_requests] [main.advanced.advanced_rate_limit_requests]
ask.en = "Amount of requests to permit from a single IP address within a span of 5 minutes." ask.en = "Amount of requests to permit from a single IP address within a span of 5 minutes."
ask.fr = "Nombre de requêtes autorisées à partir d'une seule adresse IP dans un délai de 5 minutes." ask.fr = "Nombre de requêtes autorisées à partir d'une seule adresse IP dans un délai de 5 minutes."
bind = "advanced-rate-limit-requests:__FINALPATH__/config.yaml" bind = "advanced-rate-limit-requests:__FINALPATH__/config.yaml"
default = "300" default = "300"
help.en = """Default: 300\ help.en = """Default: 300\
If this amount is exceeded, a 429 HTTP error code will be returned.\ If this amount is exceeded, a 429 HTTP error code will be returned.\
See https://docs.gotosocial.org/en/latest/api/swagger/#rate-limit.\ See https://docs.gotosocial.org/en/latest/api/swagger/#rate-limit.\
If you find yourself adjusting this limit because it's regularly being exceeded, you should first verify that your settings for `trusted-proxies` are correct.\ If you find yourself adjusting this limit because it's regularly being exceeded, you should first verify that your settings for `trusted-proxies` are correct.\
In many cases, when the rate limit is exceeded it is because your instance sees all incoming requests as coming from the *same IP address* (you can verify this by looking at the client IPs in your instance logs).\ In many cases, when the rate limit is exceeded it is because your instance sees all incoming requests as coming from the *same IP address* (you can verify this by looking at the client IPs in your instance logs).\
If this is the case, try adding that IP address to your `trusted-proxies` *BEFORE* you go adjusting this rate limit setting!\ If this is the case, try adding that IP address to your `trusted-proxies` *BEFORE* you go adjusting this rate limit setting!\
If you set this to 0 or less, rate limiting will be disabled entirely.""" If you set this to 0 or less, rate limiting will be disabled entirely."""
help.fr = "Valeur par défaut : 1000" help.fr = "Valeur par défaut : 1000"
type = "number" type = "number"

View file

@ -2,6 +2,4 @@ GoToSocial is an [ActivityPub](https://activitypub.rocks/) social network server
With GoToSocial, you can keep in touch with your friends, post, read, and share images and articles. All without being tracked or advertised to! With GoToSocial, you can keep in touch with your friends, post, read, and share images and articles. All without being tracked or advertised to!
![GoToSocial's logo, a stylized sloth head](./doc/logo_sloth.png)
Documentation is at [docs.gotosocial.org](https://docs.gotosocial.org). Documentation is at [docs.gotosocial.org](https://docs.gotosocial.org).

View file

@ -1,7 +1,3 @@
Un serveur de réseau social basé sur [ActivityPub](https://activitypub.rocks/) écrit en Golang. Un serveur de réseau social basé sur [ActivityPub](https://activitypub.rocks/) écrit en Golang.
Avec GoToSocial, vous pouvez rester en contact avec vos amis, publier, lire et partager des images et des articles. Tout cela sans être pisté ni subir de publicité ! Avec GoToSocial, vous pouvez rester en contact avec vos amis, publier, lire et partager des images et des articles. Tout cela sans être pisté ni subir de publicité !
![Le logo de GoToSocial, une tête de paresseux stylisée](./doc/logo_sloth.png)
Vous pouvez consulter la documentation à l'adresse : [docs.gotosocial.org](https://docs.gotosocial.org).

View file

@ -1,117 +0,0 @@
{
"name": "GoToSocial",
"id": "gotosocial",
"packaging_format": 1,
"description": {
"en": "ActivityPub social network server",
"fr": "Serveur de réseau social basé sur ActivityPub"
},
"version": "0.8.1~ynh1",
"url": "https://github.com/superseriousbusiness/gotosocial",
"upstream": {
"license": "AGPL-3.0-only",
"website": "https://gotosocial.org/",
"demo": "",
"admindoc": "https://docs.gotosocial.org/en/latest/",
"userdoc": "https://docs.gotosocial.org/en/latest/",
"code": "https://github.com/superseriousbusiness/gotosocial"
},
"license": "AGPL-3.0-only",
"maintainer": {
"name": "OniriCorpe",
"email": ""
},
"requirements": {
"yunohost": ">= 11.0.6"
},
"multi_instance": true,
"services": [
"nginx",
"postgresql"
],
"arguments": {
"install": [
{
"name": "alpha_software",
"type": "alert",
"ask": {
"en": "⚠️ Please note that GoToSocial is in early development stage. It may contain changing or unstable features, bugs, and security vulnerability.",
"fr": "⚠️ Veuillez noter que GoToSocial est au début de son développment. Il pourrait contenir des fonctionnalités changeantes ou instables, des bugs, et des failles de sécurité."
}
},
{
"name": "domain",
"type": "domain"
},
{
"name": "admin",
"type": "string",
"ask": {
"en": "The username of your admin account.",
"fr": "Le nom d'utilisateur de votre compte admin."
},
"help": {
"en": "Must be in lower case and without special characters.",
"fr": "Doit être en minuscule et sans caractère special."
},
"example": "johndoe"
},
{
"name": "email",
"type": "string",
"ask": {
"en": "The email adress of your admin account.",
"fr": "L'adresse e-mail de votre compte admin."
},
"example": "johndoe@example.com"
},
{
"name": "password",
"type": "password",
"help": {
"en": "Must contain: upper case, lower case, number and special character.",
"fr": "Il doit contenir : majuscule, minuscule, chiffre et caractère spécial."
}
},
{
"name": "accounts_registration_open",
"type": "boolean",
"ask": {
"en": "Open registration?",
"fr": "Inscriptions ouvertes ?"
},
"help": {
"en": "Do you want people to be able to just submit sign up requests (true), or do you want invite only (false)?",
"fr": "Voulez-vous que les gens puissent envoyer des demandes d'inscription (true) ou voulez-vous que les inscriptions soient uniquement sur invitation (false) ?"
},
"default": false
},
{
"name": "accounts_approval_required",
"type": "boolean",
"ask": {
"en": "Registration approval?",
"fr": "Vérification manuelle des inscriptions ?"
},
"help": {
"en": "Do sign up requests require approval from an admin/moderator before an account can sign in/use the server?",
"fr": "Les demandes d'inscription doivent-elles être approuvées par un-e administrateur-ice/modérateur-ice avant qu'un compte puisse se connecter et utiliser le serveur ?"
},
"default": true
},
{
"name": "accounts_reason_required",
"type": "boolean",
"ask": {
"en": "Request registration reason?",
"fr": "Demande de motif pour les inscriptions ?"
},
"help": {
"en": "Are sign up requests required to submit a reason for the request (eg., an explanation of why they want to join the instance)?",
"fr": "Les demandes d'inscription doivent-elles être accompagnée d'un motif (par exemple, une explication de la raison pour laquelle la personne veut rejoindre l'instance) ?"
},
"default": true
}
]
}
}

View file

@ -1,7 +1,7 @@
packaging_format = 2 packaging_format = 2
description.en = "An ActivityPub social network server, written in Golang." description.en = "ActivityPub social network server"
description.fr = "Un serveur de réseau social basé sur ActivityPub écrit en Golang." description.fr = "Serveur de réseau social basé sur ActivityPub"
id = "gotosocial" id = "gotosocial"
name = "GoToSocial" name = "GoToSocial"
@ -12,13 +12,13 @@ maintainers = ["OniriCorpe"]
[upstream] [upstream]
admindoc = "https://docs.gotosocial.org/en/latest/" admindoc = "https://docs.gotosocial.org/en/latest/"
code = "https://github.com/superseriousbusiness/gotosocial" code = "https://github.com/superseriousbusiness/gotosocial"
cpe = "???" # FIXME: optional but recommended if relevant, this is meant to contain the Common Platform Enumeration, which is sort of a standard id for applications defined by the NIST. In particular, Yunohost may use this is in the future to easily track CVE (=security reports) related to apps. The CPE may be obtained by searching here: https://nvd.nist.gov/products/cpe/search. For example, for Nextcloud, the CPE is 'cpe:2.3:a:nextcloud:nextcloud' (no need to include the version number)
fund = "https://github.com/superseriousbusiness/gotosocial#sponsorship--funding" fund = "https://github.com/superseriousbusiness/gotosocial#sponsorship--funding"
license = "AGPL-3.0-only" license = "AGPL-3.0-only"
userdoc = "https://docs.gotosocial.org/en/latest/" userdoc = "https://docs.gotosocial.org/en/latest/"
website = "https://docs.gotosocial.org/" website = "https://docs.gotosocial.org/"
[integration] [integration]
yunohost = ">= 11.2"
architectures = [ architectures = [
"amd64", "amd64",
"i386", "i386",
@ -32,73 +32,74 @@ multi_instance = true
ram.build = "50M" ram.build = "50M"
ram.runtime = "200M" ram.runtime = "200M"
sso = false sso = false
yunohost = ">= 11.1.6"
[install] [install]
[install.alpha_software]
ask.en = "Please note that GoToSocial is in early development stage. It may contain changing or unstable features, bugs, and security vulnerability."
ask.fr = "Veuillez noter que GoToSocial est au tout début de son développment. Il pourrait contenir des fonctionnalités changeantes ou instables, des bugs, et des failles de sécurité."
type = "display_text"
[install.domain] [install.alpha_software]
full_domain = true ask.en = "Please note that GoToSocial is in early development stage. It may contain changing or unstable features, bugs, and security vulnerability."
type = "domain" ask.fr = "Veuillez noter que GoToSocial est au tout début de son développment. Il pourrait contenir des fonctionnalités changeantes ou instables, des bugs, et des failles de sécurité."
type = "display_text"
[install.admin] [install.domain]
example = "johndoe" full_domain = true
help.en = "Must be in lower case and without special characters." type = "domain"
help.fr = "Doit être en minuscule et sans caractère special."
type = "string"
[install.email] [install.admin]
ask.en = "The email adress of your admin account." example = "johndoe"
ask.fr = "L'adresse e-mail de votre compte admin." help.en = "Must be in lower case and without special characters."
example = "johndoe@example.com" help.fr = "Doit être en minuscule et sans caractère special."
type = "string" type = "string"
[install.password] [install.email]
help.en = "Must contain: upper case, lower case, number and special character." ask.en = "The email adress of your admin account."
help.fr = "Il doit contenir : majuscule, minuscule, chiffre et caractère spécial." ask.fr = "L'adresse e-mail de votre compte admin."
type = "password" example = "johndoe@example.com"
type = "string"
[install.accounts_registration_open] [install.password]
ask.en = "Open registration?" help.en = "Must contain: upper case, lower case, number and special character."
ask.fr = "Inscriptions ouvertes ?" help.fr = "Il doit contenir : majuscule, minuscule, chiffre et caractère spécial."
default = false type = "password"
help.en = "Do you want people to be able to just submit sign up requests (true), or do you want invite only (false)?"
help.fr = "Voulez-vous que les gens puissent envoyer des demandes d'inscription (true) ou voulez-vous que les inscriptions soient uniquement sur invitation (false) ?"
type = "boolean"
[install.accounts_approval_required] [install.accounts_registration_open]
ask.en = "Registration approval?" ask.en = "Open registration?"
ask.fr = "Vérification manuelle des inscriptions ?" ask.fr = "Inscriptions ouvertes ?"
default = true default = false
help.en = "Do sign up requests require approval from an admin/moderator before an account can sign in/use the server?" help.en = "Do you want people to be able to just submit sign up requests (true), or do you want invite only (false)?"
help.fr = "Les demandes d'inscription doivent-elles être approuvées par un-e administrateur-ice/modérateur-ice avant qu'un compte puisse se connecter et utiliser le serveur ?" help.fr = "Voulez-vous que les gens puissent envoyer des demandes d'inscription (true) ou voulez-vous que les inscriptions soient uniquement sur invitation (false) ?"
type = "boolean" type = "boolean"
[install.accounts_reason_required] [install.accounts_approval_required]
ask.en = "Request registration reason?" ask.en = "Registration approval?"
ask.fr = "Demande de motif pour les inscriptions ?" ask.fr = "Vérification manuelle des inscriptions ?"
default = true default = true
help.en = "Are sign up requests required to submit a reason for the request (eg., an explanation of why they want to join the instance)?" help.en = "Do sign up requests require approval from an admin/moderator before an account can sign in/use the server?"
help.fr = "Les demandes d'inscription doivent-elles être accompagnée d'un motif (par exemple, une explication de la raison pour laquelle la personne veut rejoindre l'instance) ?" help.fr = "Les demandes d'inscription doivent-elles être approuvées par un-e administrateur-ice/modérateur-ice avant qu'un compte puisse se connecter et utiliser le serveur ?"
type = "boolean" type = "boolean"
[install.accounts_reason_required]
ask.en = "Request registration reason?"
ask.fr = "Demande de motif pour les inscriptions ?"
default = true
help.en = "Are sign up requests required to submit a reason for the request (eg., an explanation of why they want to join the instance)?"
help.fr = "Les demandes d'inscription doivent-elles être accompagnée d'un motif (par exemple, une explication de la raison pour laquelle la personne veut rejoindre l'instance) ?"
type = "boolean"
[resources] [resources]
[resources.system_user]
[resources.install_dir] [resources.system_user]
[resources.data_dir] [resources.install_dir]
[resources.permissions] [resources.data_dir]
main.url = "/"
[resources.ports] [resources.permissions]
main.url = "/"
[resources.apt] [resources.ports]
packages = "postgresql, postgresql-contrib"
[resources.database] [resources.apt]
type = "postgresql" packages = "postgresql, postgresql-contrib"
[resources.database]
type = "postgresql"

0
tests.toml Normal file
View file