summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/config.exs82
-rw-r--r--config/description.exs795
-rw-r--r--config/emoji.txt1
-rw-r--r--config/test.exs33
4 files changed, 270 insertions, 641 deletions
diff --git a/config/config.exs b/config/config.exs
index 99c33010f..66aee3264 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -47,7 +47,6 @@ use Mix.Config
config :pleroma, ecto_repos: [Pleroma.Repo]
config :pleroma, Pleroma.Repo,
- types: Pleroma.PostgresTypes,
telemetry_event: [Pleroma.Repo.Instrumenter],
migration_lock: nil
@@ -64,23 +63,24 @@ config :pleroma, Pleroma.Upload,
filters: [Pleroma.Upload.Filter.Dedupe],
link_name: false,
proxy_remote: false,
- proxy_opts: [
- redirect_on_failure: false,
- max_body_length: 25 * 1_048_576,
- http: [
- follow_redirect: true,
- pool: :upload
- ]
- ],
filename_display_max_length: 30,
- default_description: nil
+ default_description: nil,
+ base_url: nil
config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
config :pleroma, Pleroma.Uploaders.S3,
bucket: nil,
- streaming_enabled: true,
- public_endpoint: "https://s3.amazonaws.com"
+ bucket_namespace: nil,
+ truncated_namespace: nil,
+ streaming_enabled: true
+
+config :ex_aws, :s3,
+ # host: "s3.wasabisys.com", # required if not Amazon AWS
+ access_key_id: nil,
+ secret_access_key: nil,
+ # region: "us-east-1", # may be required for Amazon AWS
+ scheme: "https://"
config :pleroma, :emoji,
shortcode_globs: ["/emoji/custom/**/*.png"],
@@ -129,9 +129,6 @@ config :pleroma, Pleroma.Web.Endpoint,
dispatch: [
{:_,
[
- # FedSockets are commented out of the dispatch table on stable because they can't even
- # fail properly when they are disabled. They will hang the connection instead of returning a 404.
- # {"/api/fedsocket/v1", Pleroma.Web.FedSockets.IncomingHandler, []},
{"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
{"/websocket", Phoenix.Endpoint.CowboyWebSocket,
{Phoenix.Transports.WebSocket,
@@ -150,16 +147,6 @@ config :pleroma, Pleroma.Web.Endpoint,
"SameSite=Lax"
]
-config :pleroma, :fed_sockets,
- enabled: false,
- connection_duration: :timer.hours(8),
- rejection_duration: :timer.minutes(15),
- fed_socket_fetches: [
- default: 12_000,
- interval: 3_000,
- lazy: false
- ]
-
# Configures Elixir's Logger
config :logger, :console,
level: :debug,
@@ -236,6 +223,7 @@ config :pleroma, :instance,
"text/bbcode"
],
autofollowed_nicknames: [],
+ autofollowing_nicknames: [],
max_pinned_statuses: 1,
attachment_links: false,
max_report_comment_size: 1000,
@@ -265,7 +253,8 @@ config :pleroma, :instance,
length: 16
]
],
- show_reactions: true
+ show_reactions: true,
+ password_reset_token_validity: 60 * 60 * 24
config :pleroma, :welcome,
direct_message: [
@@ -317,7 +306,7 @@ config :pleroma, :frontend_configurations,
hideSitename: false,
hideUserStats: false,
loginMethod: "password",
- logo: "/static/logo.png",
+ logo: "/static/logo.svg",
logoMargin: ".1em",
logoMask: true,
minimalScopesMode: false,
@@ -354,8 +343,8 @@ config :pleroma, :assets,
config :pleroma, :manifest,
icons: [
%{
- src: "/static/logo.png",
- type: "image/png"
+ src: "/static/logo.svg",
+ type: "image/svg+xml"
}
],
theme_color: "#282c37",
@@ -449,7 +438,9 @@ config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Http,
headers: [],
options: []
-config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Script, script_path: nil
+config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Script,
+ script_path: nil,
+ url_format: nil
# Note: media preview proxy depends on media proxy to be enabled
config :pleroma, :media_preview_proxy,
@@ -552,6 +543,8 @@ config :pleroma, Oban,
queues: [
activity_expiration: 10,
token_expiration: 5,
+ filter_expiration: 1,
+ backup: 1,
federator_incoming: 50,
federator_outgoing: 50,
ingestion_queue: 50,
@@ -561,8 +554,9 @@ config :pleroma, Oban,
scheduled_activities: 10,
background: 5,
remote_fetcher: 2,
- attachments_cleanup: 5,
- new_users_digest: 1
+ attachments_cleanup: 1,
+ new_users_digest: 1,
+ mute_expire: 5
],
plugins: [Oban.Plugins.Pruner],
crontab: [
@@ -617,10 +611,7 @@ config :ueberauth,
base_path: "/oauth",
providers: ueberauth_providers
-config :pleroma,
- :auth,
- enforce_oauth_admin_scope_usage: true,
- oauth_consumer_strategies: oauth_consumer_strategies
+config :pleroma, :auth, oauth_consumer_strategies: oauth_consumer_strategies
config :pleroma, Pleroma.Emails.Mailer, adapter: Swoosh.Adapters.Sendmail, enabled: false
@@ -657,7 +648,7 @@ config :pleroma, :email_notifications,
}
config :pleroma, :oauth2,
- token_expires_in: 600,
+ token_expires_in: 3600 * 24 * 365 * 100,
issue_new_refresh_token: true,
clean_expired_tokens: false
@@ -732,7 +723,10 @@ config :pleroma, :frontends,
"git" => "https://git.pleroma.social/pleroma/fedi-fe",
"build_url" =>
"https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
- "ref" => "master"
+ "ref" => "master",
+ "custom-http-headers" => [
+ {"service-worker-allowed", "/"}
+ ]
},
"admin-fe" => %{
"name" => "admin-fe",
@@ -820,7 +814,7 @@ config :pleroma, :restrict_unauthenticated,
config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false
config :pleroma, :mrf,
- policies: Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy,
+ policies: [Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, Pleroma.Web.ActivityPub.MRF.TagPolicy],
transparency: true,
transparency_exclusions: []
@@ -836,6 +830,16 @@ config :floki, :html_parser, Floki.HTMLParser.FastHtml
config :pleroma, Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.PleromaAuthenticator
+config :pleroma, Pleroma.User.Backup,
+ purge_after_days: 30,
+ limit_days: 7,
+ dir: nil
+
+config :pleroma, ConcurrentLimiter, [
+ {Pleroma.Web.RichMedia.Helpers, [max_running: 5, max_waiting: 5]},
+ {Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy, [max_running: 5, max_waiting: 5]}
+]
+
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs"
diff --git a/config/description.exs b/config/description.exs
index 71b12326f..d9b15e684 100644
--- a/config/description.exs
+++ b/config/description.exs
@@ -1,5 +1,4 @@
use Mix.Config
-alias Pleroma.Docs.Generator
websocket_config = [
path: "/websocket",
@@ -61,6 +60,12 @@ frontend_options = [
label: "Build directory",
type: :string,
description: "The directory inside the zip file "
+ },
+ %{
+ key: "custom-http-headers",
+ label: "Custom HTTP headers",
+ type: {:list, :string},
+ description: "The custom HTTP headers for the frontend"
}
]
@@ -94,7 +99,8 @@ config :pleroma, :config_description, [
key: :base_url,
label: "Base URL",
type: :string,
- description: "Base URL for the uploads, needed if you use CDN",
+ description:
+ "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain.",
suggestions: [
"https://cdn-host.com"
]
@@ -102,74 +108,10 @@ config :pleroma, :config_description, [
%{
key: :proxy_remote,
type: :boolean,
- description:
- "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected"
- },
- %{
- key: :proxy_opts,
- label: "Proxy Options",
- type: :keyword,
- description: "Options for Pleroma.ReverseProxy",
- suggestions: [
- redirect_on_failure: false,
- max_body_length: 25 * 1_048_576,
- http: [
- follow_redirect: true,
- pool: :media
- ]
- ],
- children: [
- %{
- key: :redirect_on_failure,
- type: :boolean,
- description:
- "Redirects the client to the real remote URL if there's any HTTP errors. " <>
- "Any error during body processing will not be redirected as the response is chunked."
- },
- %{
- key: :max_body_length,
- type: :integer,
- description:
- "Limits the content length to be approximately the " <>
- "specified length. It is validated with the `content-length` header and also verified when proxying."
- },
- %{
- key: :http,
- label: "HTTP",
- type: :keyword,
- description: "HTTP options",
- children: [
- %{
- key: :adapter,
- type: :keyword,
- description: "Adapter specific options",
- children: [
- %{
- key: :ssl_options,
- type: :keyword,
- label: "SSL Options",
- description: "SSL options for HTTP adapter",
- children: [
- %{
- key: :versions,
- type: {:list, :atom},
- description: "List of TLS versions to use",
- suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
- }
- ]
- }
- ]
- },
- %{
- key: :proxy_url,
- label: "Proxy URL",
- type: [:string, :tuple],
- description: "Proxy URL",
- suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
- }
- ]
- }
- ]
+ description: """
+ Proxy requests to the remote uploader.\n
+ Useful if media upload endpoint is not internet accessible.
+ """
},
%{
key: :filename_display_max_length,
@@ -215,17 +157,11 @@ config :pleroma, :config_description, [
suggestions: ["pleroma"]
},
%{
- key: :public_endpoint,
- type: :string,
- description: "S3 endpoint",
- suggestions: ["https://s3.amazonaws.com"]
- },
- %{
key: :truncated_namespace,
type: :string,
description:
"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
- " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint."
+ " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url."
},
%{
key: :streaming_enabled,
@@ -280,252 +216,215 @@ config :pleroma, :config_description, [
description: "Mailer-related settings",
children: [
%{
+ key: :enabled,
+ label: "Mailer Enabled",
+ type: :boolean
+ },
+ %{
key: :adapter,
type: :module,
description:
- "One of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters)," <>
- " or Swoosh.Adapters.Local for in-memory mailbox",
+ "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)",
suggestions: [
- Swoosh.Adapters.SMTP,
- Swoosh.Adapters.Sendgrid,
- Swoosh.Adapters.Sendmail,
- Swoosh.Adapters.Mandrill,
+ Swoosh.Adapters.AmazonSES,
+ Swoosh.Adapters.Dyn,
+ Swoosh.Adapters.Gmail,
Swoosh.Adapters.Mailgun,
Swoosh.Adapters.Mailjet,
+ Swoosh.Adapters.Mandrill,
Swoosh.Adapters.Postmark,
- Swoosh.Adapters.SparkPost,
- Swoosh.Adapters.AmazonSES,
- Swoosh.Adapters.Dyn,
+ Swoosh.Adapters.SMTP,
+ Swoosh.Adapters.Sendgrid,
+ Swoosh.Adapters.Sendmail,
Swoosh.Adapters.SocketLabs,
- Swoosh.Adapters.Gmail,
- Swoosh.Adapters.Local
+ Swoosh.Adapters.SparkPost
]
},
%{
- key: :enabled,
- type: :boolean,
- description: "Allow/disallow send emails"
- },
- %{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :relay,
type: :string,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
- suggestions: ["smtp.gmail.com"]
+ description: "Hostname or IP address",
+ suggestions: ["smtp.example.com"]
+ },
+ %{
+ group: {:subgroup, Swoosh.Adapters.SMTP},
+ key: :port,
+ type: :integer,
+ description: "SMTP port",
+ suggestions: ["1025"]
},
%{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :username,
type: :string,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
- suggestions: ["pleroma"]
+ description: "SMTP AUTH username",
+ suggestions: ["user@example.com"]
},
%{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :password,
type: :string,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
+ description: "SMTP AUTH password",
suggestions: ["password"]
},
%{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :ssl,
- label: "SSL",
+ label: "Use SSL",
type: :boolean,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting"
+ description: "Use Implicit SSL/TLS. e.g. port 465"
},
%{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :tls,
- label: "TLS",
- type: :atom,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
- suggestions: [:always, :never, :if_available]
+ label: "STARTTLS Mode",
+ type: {:dropdown, :atom},
+ description: "Explicit TLS (STARTTLS) enforcement mode",
+ suggestions: [:if_available, :always, :never]
},
%{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :auth,
- type: :atom,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
- suggestions: [:always, :never, :if_available]
- },
- %{
- group: {:subgroup, Swoosh.Adapters.SMTP},
- key: :port,
- type: :integer,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
- suggestions: [1025]
+ label: "AUTH Mode",
+ type: {:dropdown, :atom},
+ description: "SMTP AUTH enforcement mode",
+ suggestions: [:if_available, :always, :never]
},
%{
group: {:subgroup, Swoosh.Adapters.SMTP},
key: :retries,
type: :integer,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting",
- suggestions: [5]
- },
- %{
- group: {:subgroup, Swoosh.Adapters.SMTP},
- key: :no_mx_lookups,
- label: "No MX lookups",
- type: :boolean,
- description: "`Swoosh.Adapters.SMTP` adapter specific setting"
+ description: "SMTP temporary (4xx) error retries",
+ suggestions: [1]
},
%{
group: {:subgroup, Swoosh.Adapters.Sendgrid},
key: :api_key,
- label: "API key",
+ label: "SendGrid API Key",
type: :string,
- description: "`Swoosh.Adapters.Sendgrid` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["YOUR_API_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.Sendmail},
key: :cmd_path,
type: :string,
- description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
suggestions: ["/usr/bin/sendmail"]
},
%{
group: {:subgroup, Swoosh.Adapters.Sendmail},
key: :cmd_args,
type: :string,
- description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
suggestions: ["-N delay,failure,success"]
},
%{
group: {:subgroup, Swoosh.Adapters.Sendmail},
key: :qmail,
- type: :boolean,
- description: "`Swoosh.Adapters.Sendmail` adapter specific setting"
+ label: "Qmail compat mode",
+ type: :boolean
},
%{
group: {:subgroup, Swoosh.Adapters.Mandrill},
key: :api_key,
- label: "API key",
+ label: "Mandrill API Key",
type: :string,
- description: "`Swoosh.Adapters.Mandrill` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["YOUR_API_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.Mailgun},
key: :api_key,
- label: "API key",
+ label: "Mailgun API Key",
type: :string,
- description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["YOUR_API_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.Mailgun},
key: :domain,
type: :string,
- description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
- suggestions: ["pleroma.com"]
+ suggestions: ["YOUR_DOMAIN_NAME"]
},
%{
group: {:subgroup, Swoosh.Adapters.Mailjet},
key: :api_key,
- label: "API key",
+ label: "MailJet Public API Key",
type: :string,
- description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["MJ_APIKEY_PUBLIC"]
},
%{
group: {:subgroup, Swoosh.Adapters.Mailjet},
key: :secret,
+ label: "MailJet Private API Key",
type: :string,
- description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
- suggestions: ["my-secret-key"]
+ suggestions: ["MJ_APIKEY_PRIVATE"]
},
%{
group: {:subgroup, Swoosh.Adapters.Postmark},
key: :api_key,
- label: "API key",
+ label: "Postmark API Key",
type: :string,
- description: "`Swoosh.Adapters.Postmark` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["X-Postmark-Server-Token"]
},
%{
group: {:subgroup, Swoosh.Adapters.SparkPost},
key: :api_key,
- label: "API key",
+ label: "SparkPost API key",
type: :string,
- description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["YOUR_API_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.SparkPost},
key: :endpoint,
type: :string,
- description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
suggestions: ["https://api.sparkpost.com/api/v1"]
},
%{
group: {:subgroup, Swoosh.Adapters.AmazonSES},
- key: :region,
+ key: :access_key,
+ label: "AWS Access Key",
type: :string,
- description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
- suggestions: ["us-east-1", "us-east-2"]
+ suggestions: ["AWS_ACCESS_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.AmazonSES},
- key: :access_key,
+ key: :secret,
+ label: "AWS Secret Key",
type: :string,
- description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
- suggestions: ["aws-access-key"]
+ suggestions: ["AWS_SECRET_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.AmazonSES},
- key: :secret,
+ key: :region,
+ label: "AWS Region",
type: :string,
- description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
- suggestions: ["aws-secret-key"]
+ suggestions: ["us-east-1", "us-east-2"]
},
%{
group: {:subgroup, Swoosh.Adapters.Dyn},
key: :api_key,
- label: "API key",
+ label: "Dyn API Key",
type: :string,
- description: "`Swoosh.Adapters.Dyn` adapter specific setting",
- suggestions: ["my-api-key"]
+ suggestions: ["apikey"]
},
%{
group: {:subgroup, Swoosh.Adapters.SocketLabs},
- key: :server_id,
+ key: :api_key,
+ label: "SocketLabs API Key",
type: :string,
- description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
+ suggestions: ["INJECTION_API_KEY"]
},
%{
group: {:subgroup, Swoosh.Adapters.SocketLabs},
- key: :api_key,
- label: "API key",
+ key: :server_id,
+ label: "Server ID",
type: :string,
- description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
+ suggestions: ["SERVER_ID"]
},
%{
group: {:subgroup, Swoosh.Adapters.Gmail},
key: :access_token,
+ label: "GMail API Access Token",
type: :string,
- description: "`Swoosh.Adapters.Gmail` adapter specific setting"
- }
- ]
- },
- %{
- group: :swoosh,
- type: :group,
- description: "`Swoosh.Adapters.Local` adapter specific settings",
- children: [
- %{
- group: {:subgroup, Swoosh.Adapters.Local},
- key: :serve_mailbox,
- type: :boolean,
- description: "Run the preview server together as part of your app"
- },
- %{
- group: {:subgroup, Swoosh.Adapters.Local},
- key: :preview_port,
- type: :integer,
- description: "The preview server port",
- suggestions: [4001]
+ suggestions: ["GMAIL_API_ACCESS_TOKEN"]
}
]
},
@@ -816,13 +715,13 @@ config :pleroma, :config_description, [
key: :autofollowed_nicknames,
type: {:list, :string},
description:
- "Set to nicknames of (local) users that every new user should automatically follow",
- suggestions: [
- "lain",
- "kaniini",
- "lanodan",
- "rinpatch"
- ]
+ "Set to nicknames of (local) users that every new user should automatically follow"
+ },
+ %{
+ key: :autofollowing_nicknames,
+ type: {:list, :string},
+ description:
+ "Set to nicknames of (local) users that automatically follows every newly registered user"
},
%{
key: :attachment_links,
@@ -1255,7 +1154,7 @@ config :pleroma, :config_description, [
hideSitename: false,
hideUserStats: false,
loginMethod: "password",
- logo: "/static/logo.png",
+ logo: "/static/logo.svg",
logoMargin: ".1em",
logoMask: true,
minimalScopesMode: false,
@@ -1341,7 +1240,7 @@ config :pleroma, :config_description, [
key: :logo,
type: {:string, :image},
description: "URL of the logo, defaults to Pleroma's logo",
- suggestions: ["/static/logo.png"]
+ suggestions: ["/static/logo.svg"]
},
%{
key: :logoMargin,
@@ -1544,289 +1443,6 @@ config :pleroma, :config_description, [
},
%{
group: :pleroma,
- key: :mrf,
- tab: :mrf,
- label: "MRF",
- type: :group,
- description: "General MRF settings",
- children: [
- %{
- key: :policies,
- type: [:module, {:list, :module}],
- description:
- "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.",
- suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF}
- },
- %{
- key: :transparency,
- label: "MRF transparency",
- type: :boolean,
- description:
- "Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
- },
- %{
- key: :transparency_exclusions,
- label: "MRF transparency exclusions",
- type: {:list, :string},
- description:
- "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.",
- suggestions: [
- "exclusion.com"
- ]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_simple,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.SimplePolicy",
- label: "MRF Simple",
- type: :group,
- description: "Simple ingress policies",
- children: [
- %{
- key: :media_removal,
- type: {:list, :string},
- description: "List of instances to strip media attachments from",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :media_nsfw,
- label: "Media NSFW",
- type: {:list, :string},
- description: "List of instances to tag all media as NSFW (sensitive) from",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :federated_timeline_removal,
- type: {:list, :string},
- description:
- "List of instances to remove from the Federated (aka The Whole Known Network) Timeline",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :reject,
- type: {:list, :string},
- description: "List of instances to reject activities from (except deletes)",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :accept,
- type: {:list, :string},
- description: "List of instances to only accept activities from (except deletes)",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :followers_only,
- type: {:list, :string},
- description: "Force posts from the given instances to be visible by followers only",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :report_removal,
- type: {:list, :string},
- description: "List of instances to reject reports from",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :avatar_removal,
- type: {:list, :string},
- description: "List of instances to strip avatars from",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :banner_removal,
- type: {:list, :string},
- description: "List of instances to strip banners from",
- suggestions: ["example.com", "*.example.com"]
- },
- %{
- key: :reject_deletes,
- type: {:list, :string},
- description: "List of instances to reject deletions from",
- suggestions: ["example.com", "*.example.com"]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_activity_expiration,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy",
- label: "MRF Activity Expiration Policy",
- type: :group,
- description: "Adds automatic expiration to all local activities",
- children: [
- %{
- key: :days,
- type: :integer,
- description: "Default global expiration time for all local activities (in days)",
- suggestions: [90, 365]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_subchain,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.SubchainPolicy",
- label: "MRF Subchain",
- type: :group,
- description:
- "This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
- " All criteria are configured as a map of regular expressions to lists of policy modules.",
- children: [
- %{
- key: :match_actor,
- type: {:map, {:list, :string}},
- description: "Matches a series of regular expressions against the actor field",
- suggestions: [
- %{
- ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy]
- }
- ]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_rejectnonpublic,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.RejectNonPublic",
- description: "RejectNonPublic drops posts with non-public visibility settings.",
- label: "MRF Reject Non Public",
- type: :group,
- children: [
- %{
- key: :allow_followersonly,
- label: "Allow followers-only",
- type: :boolean,
- description: "Whether to allow followers-only posts"
- },
- %{
- key: :allow_direct,
- type: :boolean,
- description: "Whether to allow direct messages"
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_hellthread,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.HellthreadPolicy",
- label: "MRF Hellthread",
- type: :group,
- description: "Block messages with excessive user mentions",
- children: [
- %{
- key: :delist_threshold,
- type: :integer,
- description:
- "Number of mentioned users after which the message gets removed from timelines and" <>
- "disables notifications. Set to 0 to disable.",
- suggestions: [10]
- },
- %{
- key: :reject_threshold,
- type: :integer,
- description:
- "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.",
- suggestions: [20]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_keyword,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.KeywordPolicy",
- label: "MRF Keyword",
- type: :group,
- description: "Reject or Word-Replace messages with a keyword or regex",
- children: [
- %{
- key: :reject,
- type: {:list, :string},
- description:
- "A list of patterns which result in message being rejected. Each pattern can be a string or a regular expression.",
- suggestions: ["foo", ~r/foo/iu]
- },
- %{
- key: :federated_timeline_removal,
- type: {:list, :string},
- description:
- "A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). Each pattern can be a string or a regular expression.",
- suggestions: ["foo", ~r/foo/iu]
- },
- %{
- key: :replace,
- type: {:list, :tuple},
- description:
- "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.",
- suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_mention,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.MentionPolicy",
- label: "MRF Mention",
- type: :group,
- description: "Block messages which mention a specific user",
- children: [
- %{
- key: :actors,
- type: {:list, :string},
- description: "A list of actors for which any post mentioning them will be dropped",
- suggestions: ["actor1", "actor2"]
- }
- ]
- },
- %{
- group: :pleroma,
- key: :mrf_vocabulary,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.VocabularyPolicy",
- label: "MRF Vocabulary",
- type: :group,
- description: "Filter messages which belong to certain activity vocabularies",
- children: [
- %{
- key: :accept,
- type: {:list, :string},
- description:
- "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted.",
- suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
- },
- %{
- key: :reject,
- type: {:list, :string},
- description:
- "A list of ActivityStreams terms to reject. If empty, no messages are rejected.",
- suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
- }
- ]
- },
- # %{
- # group: :pleroma,
- # key: :mrf_user_allowlist,
- # tab: :mrf,
- # related_policy: "Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy",
- # type: :map,
- # description:
- # "The keys in this section are the domain names that the policy should apply to." <>
- # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID",
- # suggestions: [
- # %{"example.org" => ["https://example.org/users/admin"]}
- # ]
- # ]
- # },
- %{
- group: :pleroma,
key: :media_proxy,
type: :group,
description: "Media proxy",
@@ -1834,7 +1450,7 @@ config :pleroma, :config_description, [
%{
key: :enabled,
type: :boolean,
- description: "Enables proxying of remote media to the instance's proxy"
+ description: "Enables proxying of remote media via the instance's proxy"
},
%{
key: :base_url,
@@ -1871,80 +1487,42 @@ config :pleroma, :config_description, [
},
%{
key: :proxy_opts,
- label: "Proxy Options",
+ label: "Advanced MediaProxy Options",
type: :keyword,
- description: "Options for Pleroma.ReverseProxy",
+ description: "Internal Pleroma.ReverseProxy settings",
suggestions: [
redirect_on_failure: false,
max_body_length: 25 * 1_048_576,
- max_read_duration: 30_000,
- http: [
- follow_redirect: true,
- pool: :media
- ]
+ max_read_duration: 30_000
],
children: [
%{
key: :redirect_on_failure,
type: :boolean,
- description:
- "Redirects the client to the real remote URL if there's any HTTP errors. " <>
- "Any error during body processing will not be redirected as the response is chunked."
+ description: """
+ Redirects the client to the origin server upon encountering HTTP errors.\n
+ Note that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n
+ **WARNING:** This setting will allow larger files to be accessed, but exposes the\n
+ IP addresses of your users to the other servers, bypassing the MediaProxy.
+ """
},
%{
key: :max_body_length,
type: :integer,
description:
- "Limits the content length to be approximately the " <>
- "specified length. It is validated with the `content-length` header and also verified when proxying."
+ "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache."
},
%{
key: :max_read_duration,
type: :integer,
- description: "Timeout (in milliseconds) of GET request to remote URI."
- },
- %{
- key: :http,
- label: "HTTP",
- type: :keyword,
- description: "HTTP options",
- children: [
- %{
- key: :adapter,
- type: :keyword,
- description: "Adapter specific options",
- children: [
- %{
- key: :ssl_options,
- type: :keyword,
- label: "SSL Options",
- description: "SSL options for HTTP adapter",
- children: [
- %{
- key: :versions,
- type: {:list, :atom},
- description: "List of TLS version to use",
- suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
- }
- ]
- }
- ]
- },
- %{
- key: :proxy_url,
- label: "Proxy URL",
- type: [:string, :tuple],
- description: "Proxy URL",
- suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
- }
- ]
+ description: "Timeout (in milliseconds) of GET request to the remote URI."
}
]
},
%{
key: :whitelist,
type: {:list, :string},
- description: "List of hosts with scheme to bypass the mediaproxy",
+ description: "List of hosts with scheme to bypass the MediaProxy",
suggestions: ["http://example.com"]
}
]
@@ -1982,7 +1560,7 @@ config :pleroma, :config_description, [
key: :min_content_length,
type: :integer,
description:
- "Min content length to perform preview, in bytes. If greater than 0, media smaller in size will be served as is, without thumbnailing."
+ "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing."
}
]
},
@@ -2020,13 +1598,21 @@ config :pleroma, :config_description, [
group: :pleroma,
key: Pleroma.Web.MediaProxy.Invalidation.Script,
type: :group,
- description: "Script invalidate settings",
+ description: "Invalidation script settings",
children: [
%{
key: :script_path,
type: :string,
- description: "Path to shell script. Which will run purge cache.",
+ description: "Path to executable script which will purge cached items.",
suggestions: ["./installation/nginx-cache-purge.sh.example"]
+ },
+ %{
+ key: :url_format,
+ label: "URL Format",
+ type: :string,
+ description:
+ "Optional URL format preprocessing. Only required for Apache's htcacheclean.",
+ suggestions: [":htcacheclean"]
}
]
},
@@ -2237,14 +1823,8 @@ config :pleroma, :config_description, [
group: :pleroma,
key: Oban,
type: :group,
- description: """
- [Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration.
-
- Note: if you are running PostgreSQL in [`silent_mode`](https://postgresqlco.nf/en/doc/param/silent_mode?version=9.1),
- it's advised to set [`log_destination`](https://postgresqlco.nf/en/doc/param/log_destination?version=9.1) to `syslog`,
- otherwise `postmaster.log` file may grow because of "you don't own a lock of type ShareLock" warnings
- (see https://github.com/sorentwo/oban/issues/52).
- """,
+ description:
+ "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration.",
children: [
%{
key: :log,
@@ -2276,6 +1856,12 @@ config :pleroma, :config_description, [
suggestions: [10]
},
%{
+ key: :backup,
+ type: :integer,
+ description: "Backup queue",
+ suggestions: [1]
+ },
+ %{
key: :attachments_cleanup,
type: :integer,
description: "Attachment deletion queue",
@@ -2818,7 +2404,7 @@ config :pleroma, :config_description, [
key: :token_expires_in,
type: :integer,
description: "The lifetime in seconds of the access token",
- suggestions: [600]
+ suggestions: [2_592_000]
},
%{
key: :issue_new_refresh_token,
@@ -3133,22 +2719,6 @@ config :pleroma, :config_description, [
},
%{
group: :pleroma,
- key: :mrf_normalize_markup,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.NormalizeMarkup",
- label: "MRF Normalize Markup",
- description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.",
- type: :group,
- children: [
- %{
- key: :scrub_policy,
- type: :module,
- suggestions: [Pleroma.HTML.Scrubber.Default]
- }
- ]
- },
- %{
- group: :pleroma,
key: Pleroma.User,
type: :group,
children: [
@@ -3284,7 +2854,7 @@ config :pleroma, :config_description, [
type: :integer,
description:
"Activity pub routes (except question activities). Default: `nil` (no expiration).",
- suggestions: [30_000, nil]
+ suggestions: [nil]
},
%{
key: :activity_pub_question,
@@ -3338,33 +2908,6 @@ config :pleroma, :config_description, [
},
%{
group: :pleroma,
- key: :mrf_object_age,
- tab: :mrf,
- related_policy: "Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy",
- label: "MRF Object Age",
- type: :group,
- description:
- "Rejects or delists posts based on their timestamp deviance from your server's clock.",
- children: [
- %{
- key: :threshold,
- type: :integer,
- description: "Required age (in seconds) of a post before actions are taken.",
- suggestions: [172_800]
- },
- %{
- key: :actions,
- type: {:list, :atom},
- description:
- "A list of actions to apply to the post. `:delist` removes the post from public timelines; " <>
- "`:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; " <>
- "`:reject` rejects the message entirely",
- suggestions: [:delist, :strip_followers, :reject]
- }
- ]
- },
- %{
- group: :pleroma,
key: :modules,
type: :group,
description: "Custom Runtime Modules",
@@ -3647,6 +3190,12 @@ config :pleroma, :config_description, [
type: :string,
description: "S3 host",
suggestions: ["s3.eu-central-1.amazonaws.com"]
+ },
+ %{
+ key: :region,
+ type: :string,
+ description: "S3 region (for AWS)",
+ suggestions: ["us-east-1"]
}
]
},
@@ -3711,6 +3260,26 @@ config :pleroma, :config_description, [
]
},
%{
+ group: :pleroma,
+ key: Pleroma.User.Backup,
+ type: :group,
+ description: "Account Backup",
+ children: [
+ %{
+ key: :purge_after_days,
+ type: :integer,
+ description: "Remove backup achives after N days",
+ suggestions: [30]
+ },
+ %{
+ key: :limit_days,
+ type: :integer,
+ description: "Limit user to export not more often than once per N days",
+ suggestions: [7]
+ }
+ ]
+ },
+ %{
group: :prometheus,
key: Pleroma.Web.Endpoint.MetricsExporter,
type: :group,
@@ -3723,9 +3292,9 @@ config :pleroma, :config_description, [
},
%{
key: :ip_whitelist,
+ label: "IP Whitelist",
type: [{:list, :string}, {:list, :charlist}, {:list, :tuple}],
- description:
- "[Pleroma extension] If non-empty, restricts access to app metrics endpoint to specified IP addresses."
+ description: "Restrict access of app metrics endpoint to the specified IP addresses."
},
%{
key: :auth,
@@ -3746,5 +3315,53 @@ config :pleroma, :config_description, [
suggestions: [:text, :protobuf]
}
]
+ },
+ %{
+ group: :pleroma,
+ key: ConcurrentLimiter,
+ type: :group,
+ description: "Limits configuration for background tasks.",
+ children: [
+ %{
+ key: Pleroma.Web.RichMedia.Helpers,
+ type: :keyword,
+ description: "Concurrent limits configuration for getting RichMedia for activities.",
+ suggestions: [max_running: 5, max_waiting: 5],
+ children: [
+ %{
+ key: :max_running,
+ type: :integer,
+ description: "Max running concurrently jobs.",
+ suggestion: [5]
+ },
+ %{
+ key: :max_waiting,
+ type: :integer,
+ description: "Max waiting jobs.",
+ suggestion: [5]
+ }
+ ]
+ },
+ %{
+ key: Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy,
+ type: :keyword,
+ description: "Concurrent limits configuration for MediaProxyWarmingPolicy.",
+ suggestions: [max_running: 5, max_waiting: 5],
+ children: [
+ %{
+ key: :max_running,
+ type: :integer,
+ description: "Max running concurrently jobs.",
+ suggestion: [5]
+ },
+ %{
+ key: :max_waiting,
+ type: :integer,
+ description: "Max waiting jobs.",
+ suggestion: [5]
+ }
+ ]
+ }
+ ]
}
]
diff --git a/config/emoji.txt b/config/emoji.txt
index 200768ad1..52b714ee5 100644
--- a/config/emoji.txt
+++ b/config/emoji.txt
@@ -1,2 +1,3 @@
firefox, /emoji/Firefox.gif, Gif,Fun
blank, /emoji/blank.png, Fun
+dinosaur, /emoji/dino walking.gif, Gif
diff --git a/config/test.exs b/config/test.exs
index 7cc660e3c..87396a88d 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -19,11 +19,6 @@ config :logger, :console,
level: :warn,
format: "\n[$level] $message\n"
-config :pleroma, :fed_sockets,
- enabled: false,
- connection_duration: 5,
- rejection_duration: 5
-
config :pleroma, :auth, oauth_consumer_strategies: []
config :pleroma, Pleroma.Upload,
@@ -43,7 +38,7 @@ config :pleroma, :instance,
external_user_synchronization: false,
static_dir: "test/instance_static/"
-config :pleroma, :activitypub, sign_object_fetches: false
+config :pleroma, :activitypub, sign_object_fetches: false, follow_handshake_timeout: 0
# Configure your database
config :pleroma, Pleroma.Repo,
@@ -52,10 +47,13 @@ config :pleroma, Pleroma.Repo,
password: "postgres",
database: "pleroma_test",
hostname: System.get_env("DB_HOST") || "localhost",
- pool: Ecto.Adapters.SQL.Sandbox
+ pool: Ecto.Adapters.SQL.Sandbox,
+ pool_size: 50
+
+config :pleroma, :dangerzone, override_repo_pool_size: true
# Reduce hash rounds for testing
-config :pbkdf2_elixir, rounds: 1
+config :pleroma, :password, iterations: 1
config :tesla, adapter: Tesla.Mock
@@ -117,15 +115,24 @@ config :pleroma, Pleroma.Web.Plugs.RemoteIp, enabled: false
config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: true
-config :pleroma, Pleroma.Uploaders.S3,
- bucket: nil,
- streaming_enabled: true,
- public_endpoint: nil
-
config :tzdata, :autoupdate, :disabled
config :pleroma, :mrf, policies: []
+config :pleroma, :pipeline,
+ object_validator: Pleroma.Web.ActivityPub.ObjectValidatorMock,
+ mrf: Pleroma.Web.ActivityPub.MRFMock,
+ activity_pub: Pleroma.Web.ActivityPub.ActivityPubMock,
+ side_effects: Pleroma.Web.ActivityPub.SideEffectsMock,
+ federator: Pleroma.Web.FederatorMock,
+ config: Pleroma.ConfigMock
+
+config :pleroma, :cachex, provider: Pleroma.CachexMock
+
+config :pleroma, :side_effects,
+ ap_streamer: Pleroma.Web.ActivityPub.ActivityPubMock,
+ logger: Pleroma.LoggerMock
+
if File.exists?("./config/test.secret.exs") do
import_config "test.secret.exs"
else