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"