diff --git a/config/auth.exs b/config/auth.exs
new file mode 100644
index 0000000000..1a4e08a268
--- /dev/null
+++ b/config/auth.exs
@@ -0,0 +1,93 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.PleromaAuthenticator
+
+oauth_consumer_strategies =
+ System.get_env("OAUTH_CONSUMER_STRATEGIES")
+ |> to_string()
+ |> String.split()
+ |> Enum.map(&hd(String.split(&1, ":")))
+
+ueberauth_providers =
+ for strategy <- oauth_consumer_strategies do
+ strategy_module_name = "Elixir.Ueberauth.Strategy.#{String.capitalize(strategy)}"
+ strategy_module = String.to_atom(strategy_module_name)
+ {String.to_atom(strategy), {strategy_module, [callback_params: ["state"]]}}
+ end
+
+config :ueberauth,
+ Ueberauth,
+ base_path: "/oauth",
+ providers: ueberauth_providers
+
+config :pleroma, :auth, oauth_consumer_strategies: oauth_consumer_strategies
+
+config :pleroma, :oauth2,
+ token_expires_in: 3600 * 24 * 365 * 100,
+ issue_new_refresh_token: true,
+ clean_expired_tokens: false
+
+config :pleroma, :ldap,
+ enabled: System.get_env("LDAP_ENABLED") == "true",
+ host: System.get_env("LDAP_HOST", "localhost"),
+ port: String.to_integer(System.get_env("LDAP_PORT", "389")),
+ ssl: System.get_env("LDAP_SSL") == "true",
+ sslopts: [],
+ tls: System.get_env("LDAP_TLS") == "true",
+ tlsopts: [],
+ base: System.get_env("LDAP_BASE", "dc=example,dc=com"),
+ uid: System.get_env("LDAP_UID", "cn"),
+ # defaults to CAStore's Mozilla roots
+ cacertfile: System.get_env("LDAP_CACERTFILE", nil),
+ mail: System.get_env("LDAP_MAIL", "mail")
+
+config :pleroma, Pleroma.Captcha,
+ enabled: true,
+ seconds_valid: 300,
+ method: Pleroma.Captcha.Native
+
+config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.ch"
diff --git a/config/config.exs b/config/config.exs
index 683805fe34..92a8dac1ae 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -43,78 +43,6 @@
# is restricted to this project.
import Config
-# General application configuration
-config :pleroma, ecto_repos: [Pleroma.Repo]
-
-config :pleroma, Pleroma.Repo,
- telemetry_event: [Pleroma.Repo.Instrumenter],
- migration_lock: :pg_advisory_lock
-
-config :pleroma, Pleroma.Captcha,
- enabled: true,
- seconds_valid: 300,
- method: Pleroma.Captcha.Native
-
-config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.ch"
-
-# Upload configuration
-config :pleroma, Pleroma.Upload,
- uploader: Pleroma.Uploaders.Local,
- filters: [Pleroma.Upload.Filter.Dedupe],
- link_name: false,
- proxy_remote: false,
- filename_display_max_length: 30,
- default_description: nil,
- base_url: nil,
- allowed_mime_types: ["image", "audio", "video"]
-
-config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
-
-config :pleroma, Pleroma.Uploaders.S3,
- bucket: nil,
- 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, Pleroma.Uploaders.IPFS,
- post_gateway_url: "http://localhost:5001",
- get_gateway_url: "http://localhost:8080"
-
-config :pleroma, :emoji,
- shortcode_globs: ["/emoji/custom/**/*.png"],
- pack_extensions: [".png", ".gif"],
- groups: [
- Custom: ["/emoji/*.png", "/emoji/**/*.png"]
- ],
- default_manifest: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json",
- shared_pack_cache_seconds_per_file: 60
-
-config :pleroma, :uri_schemes,
- valid_schemes: [
- "https",
- "http",
- "dat",
- "dweb",
- "gopher",
- "hyper",
- "ipfs",
- "ipns",
- "irc",
- "ircs",
- "magnet",
- "mailto",
- "mumble",
- "ssb",
- "xmpp"
- ]
-
# Configures the endpoint
config :pleroma, Pleroma.Web.Endpoint,
url: [host: "localhost"],
@@ -132,40 +60,6 @@ config :pleroma, Pleroma.Web.Endpoint,
"SameSite=Lax"
]
-# Configures Elixir's Logger
-config :logger, backends: [:console]
-
-config :logger, :console,
- level: :debug,
- format: "\n$time $metadata[$level] $message\n",
- metadata: [:actor, :path, :type, :user]
-
-config :logger, :ex_syslogger,
- level: :debug,
- ident: "pleroma",
- format: "$metadata[$level] $message",
- metadata: [:actor, :path, :type, :user]
-
-config :mime, :types, %{
- "application/xml" => ["xml"],
- "application/xrd+xml" => ["xrd+xml"],
- "application/jrd+json" => ["jrd+json"],
- "application/activity+json" => ["activity+json"],
- "application/ld+json" => ["activity+json"],
- # Can be removed when bumping MIME past 2.0.5
- # see https://akkoma.dev/AkkomaGang/akkoma/issues/657
- "image/apng" => ["apng"]
-}
-
-config :tesla, adapter: Tesla.Adapter.Hackney
-
-# Configures http settings, upstream proxy etc.
-config :pleroma, :http,
- proxy_url: nil,
- send_user_agent: true,
- user_agent: :default,
- adapter: []
-
config :pleroma, :instance,
name: "Pleroma",
email: "example@example.com",
@@ -281,24 +175,6 @@ config :pleroma, :welcome,
text: "Welcome to <%= instance_name %>"
]
-config :pleroma, :feed,
- post_title: %{
- max_length: 100,
- omission: "..."
- }
-
-config :pleroma, :markup,
- # XXX - unfortunately, inline images must be enabled by default right now, because
- # of custom emoji. Issue #275 discusses defanging that somehow.
- allow_inline_images: true,
- allow_headings: false,
- allow_tables: false,
- allow_fonts: false,
- scrub_policy: [
- Pleroma.HTML.Scrubber.Default,
- Pleroma.HTML.Transform.MediaProxy
- ]
-
config :pleroma, :frontend_configurations,
pleroma_fe: %{
alwaysShowSubjectInput: true,
@@ -331,424 +207,6 @@ config :pleroma, :frontend_configurations,
webPushNotifications: false
}
-config :pleroma, :assets,
- mascots: [
- pleroma_fox_tan: %{
- url: "/images/pleroma-fox-tan-smol.png",
- mime_type: "image/png"
- },
- pleroma_fox_tan_shy: %{
- url: "/images/pleroma-fox-tan-shy.png",
- mime_type: "image/png"
- }
- ],
- default_mascot: :pleroma_fox_tan
-
-config :pleroma, :manifest,
- icons: [
- %{
- src: "/static/logo.svg",
- sizes: "512x512",
- purpose: "any",
- type: "image/svg+xml"
- }
- ],
- theme_color: "#282c37",
- background_color: "#191b22"
-
-config :pleroma, :activitypub,
- unfollow_blocked: true,
- outgoing_blocks: true,
- blockers_visible: true,
- follow_handshake_timeout: 500,
- note_replies_output_limit: 5,
- sign_object_fetches: true,
- authorized_fetch_mode: false,
- client_api_enabled: false,
- anonymize_reporter: false,
- anonymize_reporter_local_nickname: ""
-
-config :pleroma, :streamer,
- workers: 3,
- overflow_workers: 2
-
-config :pleroma, :user, deny_follow_blocked: true
-
-config :pleroma, :mrf_normalize_markup, scrub_policy: Pleroma.HTML.Scrubber.Default
-
-config :pleroma, :mrf_rejectnonpublic,
- allow_followersonly: false,
- allow_direct: false
-
-config :pleroma, :mrf_hellthread,
- delist_threshold: 10,
- reject_threshold: 20
-
-config :pleroma, :mrf_simple,
- media_removal: [],
- media_nsfw: [],
- federated_timeline_removal: [],
- report_removal: [],
- reject: [],
- followers_only: [],
- accept: [],
- avatar_removal: [],
- banner_removal: [],
- reject_deletes: []
-
-config :pleroma, :mrf_keyword,
- reject: [],
- federated_timeline_removal: [],
- replace: []
-
-config :pleroma, :mrf_emoji,
- remove_url: [],
- remove_shortcode: [],
- federated_timeline_removal_url: [],
- federated_timeline_removal_shortcode: []
-
-config :pleroma, :mrf_hashtag,
- sensitive: ["nsfw"],
- reject: [],
- federated_timeline_removal: []
-
-config :pleroma, :mrf_subchain, match_actor: %{}
-
-config :pleroma, :mrf_activity_expiration, days: 365
-
-config :pleroma, :mrf_vocabulary,
- accept: [],
- reject: []
-
-# threshold of 7 days
-config :pleroma, :mrf_object_age,
- threshold: 604_800,
- actions: [:delist, :strip_followers]
-
-config :pleroma, :mrf_nsfw_api,
- url: "http://127.0.0.1:5000/",
- threshold: 0.7,
- mark_sensitive: true,
- unlist: false,
- reject: false
-
-config :pleroma, :mrf_follow_bot, follower_nickname: nil
-
-config :pleroma, :mrf_inline_quote, template: "RT: {url}"
-
-config :pleroma, :mrf_remote_report,
- reject_all: false,
- reject_anonymous: true,
- reject_empty_message: true
-
-config :pleroma, :mrf_force_mention,
- mention_parent: true,
- mention_quoted: true
-
-config :pleroma, :mrf_antimentionspam, user_age_limit: 30_000
-
-config :pleroma, :rich_media,
- enabled: true,
- ignore_hosts: [],
- ignore_tld: ["local", "localdomain", "lan"],
- parsers: [
- Pleroma.Web.RichMedia.Parsers.TwitterCard,
- Pleroma.Web.RichMedia.Parsers.OEmbed
- ],
- timeout: 5_000,
- ttl_setters: [
- Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl,
- Pleroma.Web.RichMedia.Parser.TTL.Opengraph
- ],
- max_body: 5_000_000
-
-config :pleroma, :media_proxy,
- enabled: false,
- invalidation: [
- enabled: false,
- provider: Pleroma.Web.MediaProxy.Invalidation.Script
- ],
- proxy_opts: [
- redirect_on_failure: false,
- max_body_length: 25 * 1_048_576,
- # Note: max_read_duration defaults to Pleroma.ReverseProxy.max_read_duration_default/1
- max_read_duration: 30_000,
- http: [
- follow_redirect: true,
- pool: :media
- ]
- ],
- whitelist: []
-
-config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Http,
- method: :purge,
- headers: [],
- options: []
-
-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,
- enabled: false,
- thumbnail_max_width: 600,
- thumbnail_max_height: 600,
- image_quality: 85,
- min_content_length: 100 * 1024
-
-config :pleroma, :shout,
- enabled: true,
- limit: 5_000
-
-config :phoenix, :format_encoders, json: Jason, "activity+json": Jason
-
-config :phoenix, :json_library, Jason
-
-config :phoenix, :filter_parameters, ["password", "confirm"]
-
-config :pleroma, :gopher,
- enabled: false,
- ip: {0, 0, 0, 0},
- port: 9999
-
-config :pleroma, Pleroma.Web.Metadata,
- providers: [
- Pleroma.Web.Metadata.Providers.OpenGraph,
- Pleroma.Web.Metadata.Providers.TwitterCard
- ],
- unfurl_nsfw: false
-
-config :pleroma, Pleroma.Web.Preload,
- providers: [
- Pleroma.Web.Preload.Providers.Instance
- ]
-
-config :pleroma, :http_security,
- enabled: true,
- sts: false,
- sts_max_age: 31_536_000,
- ct_max_age: 2_592_000,
- referrer_policy: "same-origin",
- allow_unsafe_eval: false
-
-config :cors_plug,
- max_age: 86_400,
- methods: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"],
- expose: [
- "Link",
- "X-RateLimit-Reset",
- "X-RateLimit-Limit",
- "X-RateLimit-Remaining",
- "X-Request-Id",
- "Idempotency-Key"
- ],
- credentials: true,
- headers: ["Authorization", "Content-Type", "Idempotency-Key"]
-
-config :pleroma, Pleroma.User,
- restricted_nicknames: [
- ".well-known",
- "~",
- "about",
- "activities",
- "api",
- "auth",
- "check_password",
- "dev",
- "friend-requests",
- "inbox",
- "internal",
- "main",
- "media",
- "nodeinfo",
- "notice",
- "oauth",
- "objects",
- "ostatus_subscribe",
- "pleroma",
- "proxy",
- "push",
- "registration",
- "relay",
- "settings",
- "status",
- "tag",
- "user-search",
- "user_exists",
- "users",
- "web",
- "verify_credentials",
- "update_credentials",
- "relationships",
- "search",
- "confirmation_resend",
- "mfa"
- ],
- email_blacklist: []
-
-# The Pruner :max_age must be longer than Worker :unique
-# value or it cannot enforce uniqueness.
-config :pleroma, Oban,
- repo: Pleroma.Repo,
- notifier: Oban.Notifiers.PG,
- log: false,
- queues: [
- activity_expiration: 10,
- federator_incoming: 5,
- federator_outgoing: 25,
- web_push: 50,
- background: 20,
- search_indexing: [limit: 10, paused: true],
- slow: 5
- ],
- plugins: [Oban.Plugins.Lazarus, {Oban.Plugins.Pruner, max_age: 900}],
- crontab: [
- {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
- {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker},
- {"*/10 * * * *", Pleroma.Workers.Cron.AppCleanupWorker}
- ]
-
-config :pleroma, Pleroma.Formatter,
- class: false,
- rel: "ugc",
- new_window: false,
- truncate: false,
- strip_prefix: false,
- extra: true,
- validate_tld: :no_scheme
-
-config :pleroma, :ldap,
- enabled: System.get_env("LDAP_ENABLED") == "true",
- host: System.get_env("LDAP_HOST", "localhost"),
- port: String.to_integer(System.get_env("LDAP_PORT", "389")),
- ssl: System.get_env("LDAP_SSL") == "true",
- sslopts: [],
- tls: System.get_env("LDAP_TLS") == "true",
- tlsopts: [],
- base: System.get_env("LDAP_BASE", "dc=example,dc=com"),
- uid: System.get_env("LDAP_UID", "cn"),
- # defaults to CAStore's Mozilla roots
- cacertfile: System.get_env("LDAP_CACERTFILE", nil),
- mail: System.get_env("LDAP_MAIL", "mail")
-
-oauth_consumer_strategies =
- System.get_env("OAUTH_CONSUMER_STRATEGIES")
- |> to_string()
- |> String.split()
- |> Enum.map(&hd(String.split(&1, ":")))
-
-ueberauth_providers =
- for strategy <- oauth_consumer_strategies do
- strategy_module_name = "Elixir.Ueberauth.Strategy.#{String.capitalize(strategy)}"
- strategy_module = String.to_atom(strategy_module_name)
- {String.to_atom(strategy), {strategy_module, [callback_params: ["state"]]}}
- end
-
-config :ueberauth,
- Ueberauth,
- base_path: "/oauth",
- providers: ueberauth_providers
-
-config :pleroma, :auth, oauth_consumer_strategies: oauth_consumer_strategies
-
-config :pleroma, Pleroma.Emails.Mailer, adapter: Swoosh.Adapters.Sendmail, enabled: false
-
-config :pleroma, Pleroma.Emails.UserEmail,
- logo: nil,
- styling: %{
- link_color: "#d8a070",
- background_color: "#2C3645",
- content_background_color: "#1B2635",
- header_color: "#d8a070",
- text_color: "#b9b9ba",
- text_muted_color: "#b9b9ba"
- }
-
-config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false
-
-config :pleroma, Pleroma.PromEx,
- disabled: false,
- manual_metrics_start_delay: :no_delay,
- drop_metrics_groups: [],
- grafana: [
- host: System.get_env("GRAFANA_HOST", "http://localhost:3000"),
- auth_token: System.get_env("GRAFANA_TOKEN"),
- upload_dashboards_on_start: false,
- folder_name: "BEAM",
- annotate_app_lifecycle: true
- ],
- metrics_server: [
- port: 4021,
- path: "/metrics",
- protocol: :http,
- pool_size: 5,
- cowboy_opts: [],
- auth_strategy: :none
- ],
- datasource: "Prometheus"
-
-config :pleroma, Pleroma.ScheduledActivity,
- daily_user_limit: 25,
- total_user_limit: 300,
- enabled: true
-
-config :pleroma, :email_notifications,
- digest: %{
- active: false,
- interval: 7,
- inactivity_threshold: 7
- }
-
-config :pleroma, :oauth2,
- token_expires_in: 3600 * 24 * 365 * 100,
- issue_new_refresh_token: true,
- clean_expired_tokens: false
-
-config :pleroma, :database, rum_enabled: false
-
-config :pleroma, :features, improved_hashtag_timeline: :auto
-
-config :pleroma, :populate_hashtags_table, fault_rate_allowance: 0.01
-
-config :pleroma, :delete_context_objects, fault_rate_allowance: 0.01
-
-config :pleroma, :env, Mix.env()
-
-config :http_signatures,
- adapter: Pleroma.Signature
-
-config :pleroma, :rate_limit,
- authentication: {60_000, 15},
- timeline: {500, 3},
- search: [{1000, 10}, {1000, 30}],
- app_account_creation: {1_800_000, 25},
- oauth_app_creation: {900_000, 5},
- relations_actions: {10_000, 10},
- relation_id_action: {60_000, 2},
- statuses_actions: {10_000, 15},
- status_id_action: {60_000, 3},
- password_reset: {1_800_000, 5},
- account_confirmation_resend: {8_640_000, 5},
- ap_routes: {60_000, 15}
-
-config :pleroma, Pleroma.Workers.PurgeExpiredActivity, enabled: true, min_lifetime: 600
-
-config :pleroma, Pleroma.Web.Plugs.RemoteIp,
- enabled: true,
- headers: ["x-forwarded-for"],
- proxies: [],
- reserved: [
- "127.0.0.0/8",
- "::1/128",
- "fc00::/7",
- "10.0.0.0/8",
- "172.16.0.0/12",
- "192.168.0.0/16"
- ]
-
-config :pleroma, :static_fe, enabled: false
-
# Example of frontend configuration
# This example will make us serve the primary frontend from the
# frontends directory within your `:pleroma, :instance, static_dir`.
@@ -820,104 +278,65 @@ config :pleroma, :frontends,
}
}
-config :pleroma, :web_cache_ttl,
- activity_pub: nil,
- activity_pub_question: 30_000
-
-config :pleroma, :modules, runtime_dir: "instance/modules"
-
-config :pleroma, configurable_from_database: false
-
-config :pleroma, Pleroma.Repo,
- parameters: [gin_fuzzy_search_limit: "500", jit: "off"],
- prepare: :unnamed
-
-config :pleroma, :connections_pool,
- reclaim_multiplier: 0.1,
- connection_acquisition_wait: 250,
- connection_acquisition_retries: 5,
- max_connections: 250,
- max_idle_time: 30_000,
- retry: 0,
- connect_timeout: 5_000
-
-config :pleroma, :pools,
- federation: [
- size: 75,
- max_waiting: 20,
- recv_timeout: 10_000
+config :pleroma, :rich_media,
+ enabled: true,
+ ignore_hosts: [],
+ ignore_tld: ["local", "localdomain", "lan"],
+ parsers: [
+ Pleroma.Web.RichMedia.Parsers.TwitterCard,
+ Pleroma.Web.RichMedia.Parsers.OEmbed
],
- media: [
- size: 75,
- max_waiting: 20,
- recv_timeout: 15_000
+ timeout: 5_000,
+ ttl_setters: [
+ Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl,
+ Pleroma.Web.RichMedia.Parser.TTL.Opengraph
],
- rich_media: [
- size: 25,
- max_waiting: 20,
- recv_timeout: 15_000
+ max_body: 5_000_000
+
+config :pleroma, :media_proxy,
+ enabled: false,
+ invalidation: [
+ enabled: false,
+ provider: Pleroma.Web.MediaProxy.Invalidation.Script
],
- upload: [
- size: 25,
- max_waiting: 20,
- recv_timeout: 15_000
+ proxy_opts: [
+ redirect_on_failure: false,
+ max_body_length: 25 * 1_048_576,
+ # Note: max_read_duration defaults to Pleroma.ReverseProxy.max_read_duration_default/1
+ max_read_duration: 30_000,
+ http: [
+ follow_redirect: true,
+ pool: :media
+ ]
],
- default: [
- size: 50,
- max_waiting: 2,
- recv_timeout: 5_000
- ]
+ whitelist: []
-config :pleroma, :hackney_pools,
- federation: [
- max_connections: 50,
- timeout: 10_000
+config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Http,
+ method: :purge,
+ headers: [],
+ options: []
+
+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,
+ enabled: false,
+ thumbnail_max_width: 600,
+ thumbnail_max_height: 600,
+ image_quality: 85,
+ min_content_length: 100 * 1024
+
+config :pleroma, Pleroma.Web.Metadata,
+ providers: [
+ Pleroma.Web.Metadata.Providers.OpenGraph,
+ Pleroma.Web.Metadata.Providers.TwitterCard
],
- media: [
- max_connections: 50,
- timeout: 15_000
- ],
- rich_media: [
- max_connections: 50,
- timeout: 15_000
- ],
- upload: [
- max_connections: 25,
- timeout: 15_000
- ]
-
-config :pleroma, :majic_pool, size: 2
-
-private_instance? = :if_instance_is_private
-
-config :pleroma, :restrict_unauthenticated,
- timelines: %{local: private_instance?, federated: private_instance?},
- profiles: %{local: private_instance?, remote: private_instance?},
- activities: %{local: private_instance?, remote: private_instance?}
-
-config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false
-
-config :pleroma, :mrf,
- policies: [
- Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy,
- Pleroma.Web.ActivityPub.MRF.TagPolicy,
- Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy
- ],
- transparency: true,
- transparency_exclusions: []
-
-config :tzdata, :http_client, Pleroma.HTTP.Tzdata
-
-config :ex_aws, http_client: Pleroma.HTTP.ExAws
-
-config :web_push_encryption, http_client: Pleroma.HTTP.WebPush
+ unfurl_nsfw: false
config :pleroma, :instances_favicons, enabled: false
-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,
@@ -925,40 +344,38 @@ config :pleroma, Pleroma.User.Backup,
process_chunk_size: 100,
timeout: :timer.minutes(30)
-config :pleroma, ConcurrentLimiter, [
- {Pleroma.Search, [max_running: 30, max_waiting: 50]}
-]
+config :pleroma, Pleroma.User, email_blacklist: []
-config :pleroma, Pleroma.Web.WebFinger, domain: nil, update_nickname_on_user_fetch: true
+config :pleroma, Pleroma.PromEx,
+ disabled: false,
+ manual_metrics_start_delay: :no_delay,
+ drop_metrics_groups: [],
+ grafana: [
+ host: System.get_env("GRAFANA_HOST", "http://localhost:3000"),
+ auth_token: System.get_env("GRAFANA_TOKEN"),
+ upload_dashboards_on_start: false,
+ folder_name: "BEAM",
+ annotate_app_lifecycle: true
+ ],
+ metrics_server: [
+ port: 4021,
+ path: "/metrics",
+ protocol: :http,
+ pool_size: 5,
+ cowboy_opts: [],
+ auth_strategy: :none
+ ],
+ datasource: "Prometheus"
-config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch
-
-config :pleroma, Pleroma.Search.Meilisearch,
- url: "http://127.0.0.1:7700/",
- private_key: nil,
- initial_indexing_chunk_size: 100_000
-
-config :pleroma, Pleroma.Application,
- background_migrators: true,
- internal_fetch: true,
- load_custom_modules: true,
- max_restarts: 3,
- streamer_registry: true
-
-config :pleroma, Pleroma.Uploaders.Uploader, timeout: 30_000
-
-config :pleroma, Pleroma.Search.QdrantSearch,
- qdrant_url: "http://127.0.0.1:6333/",
- qdrant_api_key: "",
- openai_url: "http://127.0.0.1:11345",
- # The healthcheck url has to be set to nil when used with the real openai
- # API, as it doesn't have a healthcheck endpoint.
- openai_healthcheck_url: "http://127.0.0.1:11345/health",
- openai_model: "snowflake/snowflake-arctic-embed-xs",
- openai_api_key: "",
- qdrant_index_configuration: %{
- vectors: %{size: 384, distance: "Cosine"}
- }
+import_config "auth.exs"
+import_config "database.exs"
+import_config "email.exs"
+import_config "http_client.exs"
+import_config "internal.exs"
+import_config "mrf.exs"
+import_config "other.exs"
+import_config "search.exs"
+import_config "uploader.exs"
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
diff --git a/config/database.exs b/config/database.exs
new file mode 100644
index 0000000000..c87c9e7d05
--- /dev/null
+++ b/config/database.exs
@@ -0,0 +1,59 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, configurable_from_database: false
+
+config :pleroma, ecto_repos: [Pleroma.Repo]
+
+config :pleroma, Pleroma.Repo,
+ telemetry_event: [Pleroma.Repo.Instrumenter],
+ migration_lock: :pg_advisory_lock
+
+config :pleroma, :database, rum_enabled: false
+
+config :pleroma, Pleroma.Repo,
+ parameters: [gin_fuzzy_search_limit: "500", jit: "off"],
+ prepare: :unnamed
diff --git a/config/email.exs b/config/email.exs
new file mode 100644
index 0000000000..a68bfc3f4c
--- /dev/null
+++ b/config/email.exs
@@ -0,0 +1,67 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, Pleroma.Emails.Mailer, adapter: Swoosh.Adapters.Sendmail, enabled: false
+
+config :pleroma, Pleroma.Emails.UserEmail,
+ logo: nil,
+ styling: %{
+ link_color: "#d8a070",
+ background_color: "#2C3645",
+ content_background_color: "#1B2635",
+ header_color: "#d8a070",
+ text_color: "#b9b9ba",
+ text_muted_color: "#b9b9ba"
+ }
+
+config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false
+
+config :pleroma, :email_notifications,
+ digest: %{
+ active: false,
+ interval: 7,
+ inactivity_threshold: 7
+ }
diff --git a/config/http_client.exs b/config/http_client.exs
new file mode 100644
index 0000000000..36d72fd48a
--- /dev/null
+++ b/config/http_client.exs
@@ -0,0 +1,113 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :tesla, adapter: Tesla.Adapter.Hackney
+
+# Hackney connection pool settings
+config :pleroma, :hackney_pools,
+ federation: [
+ max_connections: 50,
+ timeout: 10_000
+ ],
+ media: [
+ max_connections: 50,
+ timeout: 15_000
+ ],
+ rich_media: [
+ max_connections: 50,
+ timeout: 15_000
+ ],
+ upload: [
+ max_connections: 25,
+ timeout: 15_000
+ ]
+
+# Custom connection pooler for Gun
+# as it has no pooler of its own
+# Internal pool settings
+config :pleroma, :connections_pool,
+ reclaim_multiplier: 0.1,
+ connection_acquisition_wait: 250,
+ connection_acquisition_retries: 5,
+ max_connections: 250,
+ max_idle_time: 30_000,
+ retry: 0,
+ connect_timeout: 5_000
+
+# Connection pools for Gun
+config :pleroma, :pools,
+ federation: [
+ size: 75,
+ max_waiting: 20,
+ recv_timeout: 10_000
+ ],
+ media: [
+ size: 75,
+ max_waiting: 20,
+ recv_timeout: 15_000
+ ],
+ rich_media: [
+ size: 25,
+ max_waiting: 20,
+ recv_timeout: 15_000
+ ],
+ upload: [
+ size: 25,
+ max_waiting: 20,
+ recv_timeout: 15_000
+ ],
+ default: [
+ size: 50,
+ max_waiting: 2,
+ recv_timeout: 5_000
+ ]
+
+# Configures http settings, upstream proxy etc.
+config :pleroma, :http,
+ proxy_url: nil,
+ send_user_agent: true,
+ user_agent: :default,
+ adapter: []
diff --git a/config/internal.exs b/config/internal.exs
new file mode 100644
index 0000000000..a6fbd0dd89
--- /dev/null
+++ b/config/internal.exs
@@ -0,0 +1,348 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+# Configures Elixir's Logger
+config :logger, backends: [:console]
+
+config :logger, :console,
+ level: :debug,
+ format: "\n$time $metadata[$level] $message\n",
+ metadata: [:actor, :path, :type, :user]
+
+config :logger, :ex_syslogger,
+ level: :debug,
+ ident: "pleroma",
+ format: "$metadata[$level] $message",
+ metadata: [:actor, :path, :type, :user]
+
+config :pleroma, :emoji,
+ shortcode_globs: ["/emoji/custom/**/*.png"],
+ pack_extensions: [".png", ".gif"],
+ groups: [
+ Custom: ["/emoji/*.png", "/emoji/**/*.png"]
+ ],
+ default_manifest: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json",
+ shared_pack_cache_seconds_per_file: 60
+
+config :pleroma, :uri_schemes,
+ valid_schemes: [
+ "https",
+ "http",
+ "dat",
+ "dweb",
+ "gopher",
+ "hyper",
+ "ipfs",
+ "ipns",
+ "irc",
+ "ircs",
+ "magnet",
+ "mailto",
+ "mumble",
+ "ssb",
+ "xmpp"
+ ]
+
+config :mime, :types, %{
+ "application/xml" => ["xml"],
+ "application/xrd+xml" => ["xrd+xml"],
+ "application/jrd+json" => ["jrd+json"],
+ "application/activity+json" => ["activity+json"],
+ "application/ld+json" => ["activity+json"],
+ # Can be removed when bumping MIME past 2.0.5
+ # see https://akkoma.dev/AkkomaGang/akkoma/issues/657
+ "image/apng" => ["apng"]
+}
+
+config :pleroma, :feed,
+ post_title: %{
+ max_length: 100,
+ omission: "..."
+ }
+
+config :pleroma, :markup,
+ # XXX - unfortunately, inline images must be enabled by default right now, because
+ # of custom emoji. Issue #275 discusses defanging that somehow.
+ allow_inline_images: true,
+ allow_headings: false,
+ allow_tables: false,
+ allow_fonts: false,
+ scrub_policy: [
+ Pleroma.HTML.Scrubber.Default,
+ Pleroma.HTML.Transform.MediaProxy
+ ]
+
+config :pleroma, :assets,
+ mascots: [
+ pleroma_fox_tan: %{
+ url: "/images/pleroma-fox-tan-smol.png",
+ mime_type: "image/png"
+ },
+ pleroma_fox_tan_shy: %{
+ url: "/images/pleroma-fox-tan-shy.png",
+ mime_type: "image/png"
+ }
+ ],
+ default_mascot: :pleroma_fox_tan
+
+config :pleroma, :manifest,
+ icons: [
+ %{
+ src: "/static/logo.svg",
+ sizes: "512x512",
+ purpose: "any",
+ type: "image/svg+xml"
+ }
+ ],
+ theme_color: "#282c37",
+ background_color: "#191b22"
+
+config :pleroma, :activitypub,
+ unfollow_blocked: true,
+ outgoing_blocks: true,
+ blockers_visible: true,
+ follow_handshake_timeout: 500,
+ note_replies_output_limit: 5,
+ sign_object_fetches: true,
+ authorized_fetch_mode: false,
+ client_api_enabled: false,
+ anonymize_reporter: false,
+ anonymize_reporter_local_nickname: ""
+
+config :pleroma, :streamer,
+ workers: 3,
+ overflow_workers: 2
+
+config :pleroma, :user, deny_follow_blocked: true
+
+config :phoenix, :format_encoders, json: Jason, "activity+json": Jason
+
+config :phoenix, :json_library, Jason
+
+config :phoenix, :filter_parameters, ["password", "confirm"]
+
+config :pleroma, Pleroma.Web.Preload,
+ providers: [
+ Pleroma.Web.Preload.Providers.Instance
+ ]
+
+config :pleroma, :http_security,
+ enabled: true,
+ sts: false,
+ sts_max_age: 31_536_000,
+ ct_max_age: 2_592_000,
+ referrer_policy: "same-origin",
+ allow_unsafe_eval: false
+
+config :cors_plug,
+ max_age: 86_400,
+ methods: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"],
+ expose: [
+ "Link",
+ "X-RateLimit-Reset",
+ "X-RateLimit-Limit",
+ "X-RateLimit-Remaining",
+ "X-Request-Id",
+ "Idempotency-Key"
+ ],
+ credentials: true,
+ headers: ["Authorization", "Content-Type", "Idempotency-Key"]
+
+config :pleroma, Pleroma.User,
+ restricted_nicknames: [
+ ".well-known",
+ "~",
+ "about",
+ "activities",
+ "api",
+ "auth",
+ "check_password",
+ "dev",
+ "friend-requests",
+ "inbox",
+ "internal",
+ "main",
+ "media",
+ "nodeinfo",
+ "notice",
+ "oauth",
+ "objects",
+ "ostatus_subscribe",
+ "pleroma",
+ "proxy",
+ "push",
+ "registration",
+ "relay",
+ "settings",
+ "status",
+ "tag",
+ "user-search",
+ "user_exists",
+ "users",
+ "web",
+ "verify_credentials",
+ "update_credentials",
+ "relationships",
+ "search",
+ "confirmation_resend",
+ "mfa"
+ ]
+
+# The Pruner :max_age must be longer than Worker :unique
+# value or it cannot enforce uniqueness.
+config :pleroma, Oban,
+ repo: Pleroma.Repo,
+ notifier: Oban.Notifiers.PG,
+ log: false,
+ queues: [
+ activity_expiration: 10,
+ federator_incoming: 5,
+ federator_outgoing: 25,
+ web_push: 50,
+ background: 20,
+ search_indexing: [limit: 10, paused: true],
+ slow: 5
+ ],
+ plugins: [Oban.Plugins.Lazarus, {Oban.Plugins.Pruner, max_age: 900}],
+ crontab: [
+ {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
+ {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker},
+ {"*/10 * * * *", Pleroma.Workers.Cron.AppCleanupWorker}
+ ]
+
+config :pleroma, Pleroma.Formatter,
+ class: false,
+ rel: "ugc",
+ new_window: false,
+ truncate: false,
+ strip_prefix: false,
+ extra: true,
+ validate_tld: :no_scheme
+
+config :pleroma, Pleroma.ScheduledActivity,
+ daily_user_limit: 25,
+ total_user_limit: 300,
+ enabled: true
+
+config :pleroma, :features, improved_hashtag_timeline: :auto
+
+config :pleroma, :populate_hashtags_table, fault_rate_allowance: 0.01
+
+config :pleroma, :delete_context_objects, fault_rate_allowance: 0.01
+
+config :pleroma, :env, Mix.env()
+
+config :http_signatures,
+ adapter: Pleroma.Signature
+
+config :pleroma, :rate_limit,
+ authentication: {60_000, 15},
+ timeline: {500, 3},
+ search: [{1000, 10}, {1000, 30}],
+ app_account_creation: {1_800_000, 25},
+ oauth_app_creation: {900_000, 5},
+ relations_actions: {10_000, 10},
+ relation_id_action: {60_000, 2},
+ statuses_actions: {10_000, 15},
+ status_id_action: {60_000, 3},
+ password_reset: {1_800_000, 5},
+ account_confirmation_resend: {8_640_000, 5},
+ ap_routes: {60_000, 15}
+
+config :pleroma, Pleroma.Workers.PurgeExpiredActivity, enabled: true, min_lifetime: 600
+
+config :pleroma, Pleroma.Web.Plugs.RemoteIp,
+ enabled: true,
+ headers: ["x-forwarded-for"],
+ proxies: [],
+ reserved: [
+ "127.0.0.0/8",
+ "::1/128",
+ "fc00::/7",
+ "10.0.0.0/8",
+ "172.16.0.0/12",
+ "192.168.0.0/16"
+ ]
+
+config :pleroma, :static_fe, enabled: false
+
+config :pleroma, :web_cache_ttl,
+ activity_pub: nil,
+ activity_pub_question: 30_000
+
+config :pleroma, :modules, runtime_dir: "instance/modules"
+
+config :pleroma, :majic_pool, size: 2
+
+config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false
+
+config :tzdata, :http_client, Pleroma.HTTP.Tzdata
+
+config :ex_aws, http_client: Pleroma.HTTP.ExAws
+
+config :web_push_encryption, http_client: Pleroma.HTTP.WebPush
+
+config :floki, :html_parser, Floki.HTMLParser.FastHtml
+
+config :pleroma, ConcurrentLimiter, [
+ {Pleroma.Search, [max_running: 30, max_waiting: 50]}
+]
+
+config :pleroma, Pleroma.Web.WebFinger, domain: nil, update_nickname_on_user_fetch: true
+
+config :pleroma, Pleroma.Application,
+ background_migrators: true,
+ internal_fetch: true,
+ load_custom_modules: true,
+ max_restarts: 3,
+ streamer_registry: true
+
+private_instance? = :if_instance_is_private
+
+config :pleroma, :restrict_unauthenticated,
+ timelines: %{local: private_instance?, federated: private_instance?},
+ profiles: %{local: private_instance?, remote: private_instance?},
+ activities: %{local: private_instance?, remote: private_instance?}
diff --git a/config/mrf.exs b/config/mrf.exs
new file mode 100644
index 0000000000..beefc856b0
--- /dev/null
+++ b/config/mrf.exs
@@ -0,0 +1,127 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, :mrf,
+ policies: [
+ Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy,
+ Pleroma.Web.ActivityPub.MRF.TagPolicy,
+ Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy
+ ],
+ transparency: true,
+ transparency_exclusions: []
+
+config :pleroma, :mrf_normalize_markup, scrub_policy: Pleroma.HTML.Scrubber.Default
+
+config :pleroma, :mrf_rejectnonpublic,
+ allow_followersonly: false,
+ allow_direct: false
+
+config :pleroma, :mrf_hellthread,
+ delist_threshold: 10,
+ reject_threshold: 20
+
+config :pleroma, :mrf_simple,
+ media_removal: [],
+ media_nsfw: [],
+ federated_timeline_removal: [],
+ report_removal: [],
+ reject: [],
+ followers_only: [],
+ accept: [],
+ avatar_removal: [],
+ banner_removal: [],
+ reject_deletes: []
+
+config :pleroma, :mrf_keyword,
+ reject: [],
+ federated_timeline_removal: [],
+ replace: []
+
+config :pleroma, :mrf_emoji,
+ remove_url: [],
+ remove_shortcode: [],
+ federated_timeline_removal_url: [],
+ federated_timeline_removal_shortcode: []
+
+config :pleroma, :mrf_hashtag,
+ sensitive: ["nsfw"],
+ reject: [],
+ federated_timeline_removal: []
+
+config :pleroma, :mrf_subchain, match_actor: %{}
+
+config :pleroma, :mrf_activity_expiration, days: 365
+
+config :pleroma, :mrf_vocabulary,
+ accept: [],
+ reject: []
+
+# threshold of 7 days
+config :pleroma, :mrf_object_age,
+ threshold: 604_800,
+ actions: [:delist, :strip_followers]
+
+config :pleroma, :mrf_nsfw_api,
+ url: "http://127.0.0.1:5000/",
+ threshold: 0.7,
+ mark_sensitive: true,
+ unlist: false,
+ reject: false
+
+config :pleroma, :mrf_follow_bot, follower_nickname: nil
+
+config :pleroma, :mrf_inline_quote, template: "RT: {url}"
+
+config :pleroma, :mrf_remote_report,
+ reject_all: false,
+ reject_anonymous: true,
+ reject_empty_message: true
+
+config :pleroma, :mrf_force_mention,
+ mention_parent: true,
+ mention_quoted: true
+
+config :pleroma, :mrf_antimentionspam, user_age_limit: 30_000
diff --git a/config/other.exs b/config/other.exs
new file mode 100644
index 0000000000..85ef04083b
--- /dev/null
+++ b/config/other.exs
@@ -0,0 +1,54 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, :gopher,
+ enabled: false,
+ ip: {0, 0, 0, 0},
+ port: 9999
+
+config :pleroma, :shout,
+ enabled: true,
+ limit: 5_000
diff --git a/config/search.exs b/config/search.exs
new file mode 100644
index 0000000000..e39150c214
--- /dev/null
+++ b/config/search.exs
@@ -0,0 +1,72 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch
+
+config :pleroma, Pleroma.Search.Meilisearch,
+ url: "http://127.0.0.1:7700/",
+ private_key: nil,
+ initial_indexing_chunk_size: 100_000
+
+config :pleroma, Pleroma.Application,
+ background_migrators: true,
+ internal_fetch: true,
+ load_custom_modules: true,
+ max_restarts: 3,
+ streamer_registry: true
+
+config :pleroma, Pleroma.Search.QdrantSearch,
+ qdrant_url: "http://127.0.0.1:6333/",
+ qdrant_api_key: "",
+ openai_url: "http://127.0.0.1:11345",
+ # The healthcheck url has to be set to nil when used with the real openai
+ # API, as it doesn't have a healthcheck endpoint.
+ openai_healthcheck_url: "http://127.0.0.1:11345/health",
+ openai_model: "snowflake/snowflake-arctic-embed-xs",
+ openai_api_key: "",
+ qdrant_index_configuration: %{
+ vectors: %{size: 384, distance: "Cosine"}
+ }
diff --git a/config/uploader.exs b/config/uploader.exs
new file mode 100644
index 0000000000..b056058051
--- /dev/null
+++ b/config/uploader.exs
@@ -0,0 +1,76 @@
+# .i;;;;i.
+# iYcviii;vXY:
+# .YXi .i1c.
+# .YC. . in7.
+# .vc. ...... ;1c.
+# i7, .. .;1;
+# i7, .. ... .Y1i
+# ,7v .6MMM@; .YX,
+# .7;. ..IMMMMMM1 :t7.
+# .;Y. ;$MMMMMM9. :tc.
+# vY. .. .nMMM@MMU. ;1v.
+# i7i ... .#MM@M@C. .....:71i
+# it: .... $MMM@9;.,i;;;i,;tti
+# :t7. ..... 0MMMWv.,iii:::,,;St.
+# .nC. ..... IMMMQ..,::::::,.,czX.
+# .ct: ....... .ZMMMI..,:::::::,,:76Y.
+# c2: ......,i..Y$M@t..:::::::,,..inZY
+# vov ......:ii..c$MBc..,,,,,,,,,,..iI9i
+# i9Y ......iii:..7@MA,..,,,,,,,,,....;AA:
+# iIS. ......:ii::..;@MI....,............;Ez.
+# .I9. ......:i::::...8M1..................C0z.
+# .z9; ......:i::::,.. .i:...................zWX.
+# vbv ......,i::::,,. ................. :AQY
+# c6Y. .,...,::::,,..:t0@@QY. ................ :8bi
+# :6S. ..,,...,:::,,,..EMMMMMMI. ............... .;bZ,
+# :6o, .,,,,..:::,,,..i#MMMMMM#v................. YW2.
+# .n8i ..,,,,,,,::,,,,.. tMMMMM@C:.................. .1Wn
+# 7Uc. .:::,,,,,::,,,,.. i1t;,..................... .UEi
+# 7C...::::::::::::,,,,.. .................... vSi.
+# ;1;...,,::::::,......... .................. Yz:
+# v97,......... .voC.
+# izAotX7777777777777777777777777777777777777777Y7n92:
+# .;CoIIIIIUAA666666699999ZZZZZZZZZZZZZZZZZZZZ6ov.
+#
+# !!! ATTENTION !!!
+# DO NOT EDIT THIS FILE! THIS FILE CONTAINS THE DEFAULT VALUES FOR THE CON-
+# FIGURATION! EDIT YOUR SECRET FILE (either prod.secret.exs, dev.secret.exs).
+#
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Config module.
+#
+# This configuration file is loaded before any dependency and
+# is restricted to this project.
+
+import Config
+
+config :pleroma, Pleroma.Uploaders.Uploader, timeout: 30_000
+
+config :pleroma, Pleroma.Upload,
+ uploader: Pleroma.Uploaders.Local,
+ filters: [Pleroma.Upload.Filter.Dedupe],
+ link_name: false,
+ proxy_remote: false,
+ filename_display_max_length: 30,
+ default_description: nil,
+ base_url: nil,
+ allowed_mime_types: ["image", "audio", "video"]
+
+config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
+
+config :pleroma, Pleroma.Uploaders.S3,
+ bucket: nil,
+ 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, Pleroma.Uploaders.IPFS,
+ post_gateway_url: "http://localhost:5001",
+ get_gateway_url: "http://localhost:8080"