Merge branch 'develop' into issue/1934-welcome-email
[akkoma] / config / description.exs
1 use Mix.Config
2 alias Pleroma.Docs.Generator
3
4 websocket_config = [
5 path: "/websocket",
6 serializer: [
7 {Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"},
8 {Phoenix.Socket.V2.JSONSerializer, "~> 2.0.0"}
9 ],
10 timeout: 60_000,
11 transport_log: false,
12 compress: false
13 ]
14
15 config :pleroma, :config_description, [
16 %{
17 group: :pleroma,
18 key: Pleroma.Upload,
19 type: :group,
20 description: "Upload general settings",
21 children: [
22 %{
23 key: :uploader,
24 type: :module,
25 description: "Module which will be used for uploads",
26 suggestions: {:list_behaviour_implementations, Pleroma.Uploaders.Uploader}
27 },
28 %{
29 key: :filters,
30 type: {:list, :module},
31 description:
32 "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name.",
33 suggestions: {:list_behaviour_implementations, Pleroma.Upload.Filter}
34 },
35 %{
36 key: :link_name,
37 type: :boolean,
38 description:
39 "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`."
40 },
41 %{
42 key: :base_url,
43 label: "Base URL",
44 type: :string,
45 description: "Base URL for the uploads, needed if you use CDN",
46 suggestions: [
47 "https://cdn-host.com"
48 ]
49 },
50 %{
51 key: :proxy_remote,
52 type: :boolean,
53 description:
54 "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected"
55 },
56 %{
57 key: :proxy_opts,
58 label: "Proxy Options",
59 type: :keyword,
60 description: "Options for Pleroma.ReverseProxy",
61 suggestions: [
62 redirect_on_failure: false,
63 max_body_length: 25 * 1_048_576,
64 http: [
65 follow_redirect: true,
66 pool: :media
67 ]
68 ],
69 children: [
70 %{
71 key: :redirect_on_failure,
72 type: :boolean,
73 description:
74 "Redirects the client to the real remote URL if there's any HTTP errors. " <>
75 "Any error during body processing will not be redirected as the response is chunked."
76 },
77 %{
78 key: :max_body_length,
79 type: :integer,
80 description:
81 "Limits the content length to be approximately the " <>
82 "specified length. It is validated with the `content-length` header and also verified when proxying."
83 },
84 %{
85 key: :http,
86 label: "HTTP",
87 type: :keyword,
88 description: "HTTP options",
89 children: [
90 %{
91 key: :adapter,
92 type: :keyword,
93 description: "Adapter specific options",
94 children: [
95 %{
96 key: :ssl_options,
97 type: :keyword,
98 label: "SSL Options",
99 description: "SSL options for HTTP adapter",
100 children: [
101 %{
102 key: :versions,
103 type: {:list, :atom},
104 description: "List of TLS versions to use",
105 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
106 }
107 ]
108 }
109 ]
110 },
111 %{
112 key: :proxy_url,
113 label: "Proxy URL",
114 type: [:string, :tuple],
115 description: "Proxy URL",
116 suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
117 }
118 ]
119 }
120 ]
121 },
122 %{
123 key: :filename_display_max_length,
124 type: :integer,
125 description: "Set max length of a filename to display. 0 = no limit. Default: 30"
126 }
127 ]
128 },
129 %{
130 group: :pleroma,
131 key: Pleroma.Uploaders.Local,
132 type: :group,
133 description: "Local uploader-related settings",
134 children: [
135 %{
136 key: :uploads,
137 type: :string,
138 description: "Path where user's uploads will be saved",
139 suggestions: [
140 "uploads"
141 ]
142 }
143 ]
144 },
145 %{
146 group: :pleroma,
147 key: Pleroma.Uploaders.S3,
148 type: :group,
149 description: "S3 uploader-related settings",
150 children: [
151 %{
152 key: :bucket,
153 type: :string,
154 description: "S3 bucket",
155 suggestions: [
156 "bucket"
157 ]
158 },
159 %{
160 key: :bucket_namespace,
161 type: :string,
162 description: "S3 bucket namespace",
163 suggestions: ["pleroma"]
164 },
165 %{
166 key: :public_endpoint,
167 type: :string,
168 description: "S3 endpoint",
169 suggestions: ["https://s3.amazonaws.com"]
170 },
171 %{
172 key: :truncated_namespace,
173 type: :string,
174 description:
175 "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
176 " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint."
177 },
178 %{
179 key: :streaming_enabled,
180 type: :boolean,
181 description:
182 "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems."
183 }
184 ]
185 },
186 %{
187 group: :pleroma,
188 key: Pleroma.Upload.Filter.Mogrify,
189 type: :group,
190 description: "Uploads mogrify filter settings",
191 children: [
192 %{
193 key: :args,
194 type: [:string, {:list, :string}, {:list, :tuple}],
195 description:
196 "List of actions for the mogrify command. It's possible to add self-written settings as string. " <>
197 "For example `[\"auto-orient\", \"strip\", {\"resize\", \"3840x1080>\"}]` string will be parsed into list of the settings.",
198 suggestions: [
199 "strip",
200 "auto-orient",
201 {"implode", "1"}
202 ]
203 }
204 ]
205 },
206 %{
207 group: :pleroma,
208 key: Pleroma.Upload.Filter.AnonymizeFilename,
209 type: :group,
210 description: "Filter replaces the filename of the upload",
211 children: [
212 %{
213 key: :text,
214 type: :string,
215 description:
216 "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original" <>
217 " filename extension by using {extension}, for example custom-file-name.{extension}.",
218 suggestions: [
219 "custom-file-name.{extension}"
220 ]
221 }
222 ]
223 },
224 %{
225 group: :pleroma,
226 key: Pleroma.Emails.Mailer,
227 type: :group,
228 description: "Mailer-related settings",
229 children: [
230 %{
231 key: :adapter,
232 type: :module,
233 description:
234 "One of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters)," <>
235 " or Swoosh.Adapters.Local for in-memory mailbox",
236 suggestions: [
237 Swoosh.Adapters.SMTP,
238 Swoosh.Adapters.Sendgrid,
239 Swoosh.Adapters.Sendmail,
240 Swoosh.Adapters.Mandrill,
241 Swoosh.Adapters.Mailgun,
242 Swoosh.Adapters.Mailjet,
243 Swoosh.Adapters.Postmark,
244 Swoosh.Adapters.SparkPost,
245 Swoosh.Adapters.AmazonSES,
246 Swoosh.Adapters.Dyn,
247 Swoosh.Adapters.SocketLabs,
248 Swoosh.Adapters.Gmail,
249 Swoosh.Adapters.Local
250 ]
251 },
252 %{
253 key: :enabled,
254 type: :boolean,
255 description: "Allow/disallow send emails"
256 },
257 %{
258 group: {:subgroup, Swoosh.Adapters.SMTP},
259 key: :relay,
260 type: :string,
261 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
262 suggestions: ["smtp.gmail.com"]
263 },
264 %{
265 group: {:subgroup, Swoosh.Adapters.SMTP},
266 key: :username,
267 type: :string,
268 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
269 suggestions: ["pleroma"]
270 },
271 %{
272 group: {:subgroup, Swoosh.Adapters.SMTP},
273 key: :password,
274 type: :string,
275 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
276 suggestions: ["password"]
277 },
278 %{
279 group: {:subgroup, Swoosh.Adapters.SMTP},
280 key: :ssl,
281 label: "SSL",
282 type: :boolean,
283 description: "`Swoosh.Adapters.SMTP` adapter specific setting"
284 },
285 %{
286 group: {:subgroup, Swoosh.Adapters.SMTP},
287 key: :tls,
288 label: "TLS",
289 type: :atom,
290 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
291 suggestions: [:always, :never, :if_available]
292 },
293 %{
294 group: {:subgroup, Swoosh.Adapters.SMTP},
295 key: :auth,
296 type: :atom,
297 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
298 suggestions: [:always, :never, :if_available]
299 },
300 %{
301 group: {:subgroup, Swoosh.Adapters.SMTP},
302 key: :port,
303 type: :integer,
304 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
305 suggestions: [1025]
306 },
307 %{
308 group: {:subgroup, Swoosh.Adapters.SMTP},
309 key: :retries,
310 type: :integer,
311 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
312 suggestions: [5]
313 },
314 %{
315 group: {:subgroup, Swoosh.Adapters.SMTP},
316 key: :no_mx_lookups,
317 label: "No MX lookups",
318 type: :boolean,
319 description: "`Swoosh.Adapters.SMTP` adapter specific setting"
320 },
321 %{
322 group: {:subgroup, Swoosh.Adapters.Sendgrid},
323 key: :api_key,
324 label: "API key",
325 type: :string,
326 description: "`Swoosh.Adapters.Sendgrid` adapter specific setting",
327 suggestions: ["my-api-key"]
328 },
329 %{
330 group: {:subgroup, Swoosh.Adapters.Sendmail},
331 key: :cmd_path,
332 type: :string,
333 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
334 suggestions: ["/usr/bin/sendmail"]
335 },
336 %{
337 group: {:subgroup, Swoosh.Adapters.Sendmail},
338 key: :cmd_args,
339 type: :string,
340 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
341 suggestions: ["-N delay,failure,success"]
342 },
343 %{
344 group: {:subgroup, Swoosh.Adapters.Sendmail},
345 key: :qmail,
346 type: :boolean,
347 description: "`Swoosh.Adapters.Sendmail` adapter specific setting"
348 },
349 %{
350 group: {:subgroup, Swoosh.Adapters.Mandrill},
351 key: :api_key,
352 label: "API key",
353 type: :string,
354 description: "`Swoosh.Adapters.Mandrill` adapter specific setting",
355 suggestions: ["my-api-key"]
356 },
357 %{
358 group: {:subgroup, Swoosh.Adapters.Mailgun},
359 key: :api_key,
360 label: "API key",
361 type: :string,
362 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
363 suggestions: ["my-api-key"]
364 },
365 %{
366 group: {:subgroup, Swoosh.Adapters.Mailgun},
367 key: :domain,
368 type: :string,
369 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
370 suggestions: ["pleroma.com"]
371 },
372 %{
373 group: {:subgroup, Swoosh.Adapters.Mailjet},
374 key: :api_key,
375 label: "API key",
376 type: :string,
377 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
378 suggestions: ["my-api-key"]
379 },
380 %{
381 group: {:subgroup, Swoosh.Adapters.Mailjet},
382 key: :secret,
383 type: :string,
384 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
385 suggestions: ["my-secret-key"]
386 },
387 %{
388 group: {:subgroup, Swoosh.Adapters.Postmark},
389 key: :api_key,
390 label: "API key",
391 type: :string,
392 description: "`Swoosh.Adapters.Postmark` adapter specific setting",
393 suggestions: ["my-api-key"]
394 },
395 %{
396 group: {:subgroup, Swoosh.Adapters.SparkPost},
397 key: :api_key,
398 label: "API key",
399 type: :string,
400 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
401 suggestions: ["my-api-key"]
402 },
403 %{
404 group: {:subgroup, Swoosh.Adapters.SparkPost},
405 key: :endpoint,
406 type: :string,
407 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
408 suggestions: ["https://api.sparkpost.com/api/v1"]
409 },
410 %{
411 group: {:subgroup, Swoosh.Adapters.AmazonSES},
412 key: :region,
413 type: :string,
414 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
415 suggestions: ["us-east-1", "us-east-2"]
416 },
417 %{
418 group: {:subgroup, Swoosh.Adapters.AmazonSES},
419 key: :access_key,
420 type: :string,
421 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
422 suggestions: ["aws-access-key"]
423 },
424 %{
425 group: {:subgroup, Swoosh.Adapters.AmazonSES},
426 key: :secret,
427 type: :string,
428 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
429 suggestions: ["aws-secret-key"]
430 },
431 %{
432 group: {:subgroup, Swoosh.Adapters.Dyn},
433 key: :api_key,
434 label: "API key",
435 type: :string,
436 description: "`Swoosh.Adapters.Dyn` adapter specific setting",
437 suggestions: ["my-api-key"]
438 },
439 %{
440 group: {:subgroup, Swoosh.Adapters.SocketLabs},
441 key: :server_id,
442 type: :string,
443 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
444 },
445 %{
446 group: {:subgroup, Swoosh.Adapters.SocketLabs},
447 key: :api_key,
448 label: "API key",
449 type: :string,
450 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
451 },
452 %{
453 group: {:subgroup, Swoosh.Adapters.Gmail},
454 key: :access_token,
455 type: :string,
456 description: "`Swoosh.Adapters.Gmail` adapter specific setting"
457 }
458 ]
459 },
460 %{
461 group: :swoosh,
462 type: :group,
463 description: "`Swoosh.Adapters.Local` adapter specific settings",
464 children: [
465 %{
466 group: {:subgroup, Swoosh.Adapters.Local},
467 key: :serve_mailbox,
468 type: :boolean,
469 description: "Run the preview server together as part of your app"
470 },
471 %{
472 group: {:subgroup, Swoosh.Adapters.Local},
473 key: :preview_port,
474 type: :integer,
475 description: "The preview server port",
476 suggestions: [4001]
477 }
478 ]
479 },
480 %{
481 group: :pleroma,
482 key: :uri_schemes,
483 label: "URI Schemes",
484 type: :group,
485 description: "URI schemes related settings",
486 children: [
487 %{
488 key: :valid_schemes,
489 type: {:list, :string},
490 description: "List of the scheme part that is considered valid to be an URL",
491 suggestions: [
492 "https",
493 "http",
494 "dat",
495 "dweb",
496 "gopher",
497 "hyper",
498 "ipfs",
499 "ipns",
500 "irc",
501 "ircs",
502 "magnet",
503 "mailto",
504 "mumble",
505 "ssb",
506 "xmpp"
507 ]
508 }
509 ]
510 },
511 %{
512 group: :pleroma,
513 key: :instance,
514 type: :group,
515 description: "Instance-related settings",
516 children: [
517 %{
518 key: :name,
519 type: :string,
520 description: "Name of the instance",
521 suggestions: [
522 "Pleroma"
523 ]
524 },
525 %{
526 key: :email,
527 label: "Admin Email Address",
528 type: :string,
529 description: "Email used to reach an Administrator/Moderator of the instance",
530 suggestions: [
531 "email@example.com"
532 ]
533 },
534 %{
535 key: :notify_email,
536 label: "Sender Email Address",
537 type: :string,
538 description: "Envelope FROM address for mail sent via Pleroma",
539 suggestions: [
540 "notify@example.com"
541 ]
542 },
543 %{
544 key: :description,
545 type: :string,
546 description:
547 "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`",
548 suggestions: [
549 "Very cool instance"
550 ]
551 },
552 %{
553 key: :limit,
554 type: :integer,
555 description: "Posts character limit (CW/Subject included in the counter)",
556 suggestions: [
557 5_000
558 ]
559 },
560 %{
561 key: :chat_limit,
562 type: :integer,
563 description: "Character limit of the instance chat messages",
564 suggestions: [
565 5_000
566 ]
567 },
568 %{
569 key: :remote_limit,
570 type: :integer,
571 description: "Hard character limit beyond which remote posts will be dropped",
572 suggestions: [
573 100_000
574 ]
575 },
576 %{
577 key: :upload_limit,
578 type: :integer,
579 description: "File size limit of uploads (except for avatar, background, banner)",
580 suggestions: [
581 16_000_000
582 ]
583 },
584 %{
585 key: :avatar_upload_limit,
586 type: :integer,
587 description: "File size limit of user's profile avatars",
588 suggestions: [
589 2_000_000
590 ]
591 },
592 %{
593 key: :background_upload_limit,
594 type: :integer,
595 description: "File size limit of user's profile backgrounds",
596 suggestions: [
597 4_000_000
598 ]
599 },
600 %{
601 key: :banner_upload_limit,
602 type: :integer,
603 description: "File size limit of user's profile banners",
604 suggestions: [
605 4_000_000
606 ]
607 },
608 %{
609 key: :poll_limits,
610 type: :map,
611 description: "A map with poll limits for local polls",
612 suggestions: [
613 %{
614 max_options: 20,
615 max_option_chars: 200,
616 min_expiration: 0,
617 max_expiration: 31_536_000
618 }
619 ],
620 children: [
621 %{
622 key: :max_options,
623 type: :integer,
624 description: "Maximum number of options",
625 suggestions: [20]
626 },
627 %{
628 key: :max_option_chars,
629 type: :integer,
630 description: "Maximum number of characters per option",
631 suggestions: [200]
632 },
633 %{
634 key: :min_expiration,
635 type: :integer,
636 description: "Minimum expiration time (in seconds)",
637 suggestions: [0]
638 },
639 %{
640 key: :max_expiration,
641 type: :integer,
642 description: "Maximum expiration time (in seconds)",
643 suggestions: [3600]
644 }
645 ]
646 },
647 %{
648 key: :registrations_open,
649 type: :boolean,
650 description:
651 "Enable registrations for anyone. Invitations require this setting to be disabled."
652 },
653 %{
654 key: :invites_enabled,
655 type: :boolean,
656 description:
657 "Enable user invitations for admins (depends on `registrations_open` being disabled)"
658 },
659 %{
660 key: :account_activation_required,
661 type: :boolean,
662 description: "Require users to confirm their emails before signing in"
663 },
664 %{
665 key: :federating,
666 type: :boolean,
667 description: "Enable federation with other instances"
668 },
669 %{
670 key: :federation_incoming_replies_max_depth,
671 label: "Fed. incoming replies max depth",
672 type: :integer,
673 description:
674 "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while" <>
675 " fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes.",
676 suggestions: [
677 100
678 ]
679 },
680 %{
681 key: :federation_reachability_timeout_days,
682 label: "Fed. reachability timeout days",
683 type: :integer,
684 description:
685 "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it",
686 suggestions: [
687 7
688 ]
689 },
690 %{
691 key: :allow_relay,
692 type: :boolean,
693 description: "Enable Pleroma's Relay, which makes it possible to follow a whole instance"
694 },
695 %{
696 key: :public,
697 type: :boolean,
698 description:
699 "Makes the client API in authenticated mode-only except for user-profiles." <>
700 " Useful for disabling the Local Timeline and The Whole Known Network. " <>
701 " Note: when setting to `false`, please also check `:restrict_unauthenticated` setting."
702 },
703 %{
704 key: :quarantined_instances,
705 type: {:list, :string},
706 description:
707 "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent",
708 suggestions: [
709 "quarantined.com",
710 "*.quarantined.com"
711 ]
712 },
713 %{
714 key: :managed_config,
715 type: :boolean,
716 description:
717 "Whenether the config for pleroma-fe is configured in this config or in static/config.json"
718 },
719 %{
720 key: :static_dir,
721 type: :string,
722 description: "Instance static directory",
723 suggestions: [
724 "instance/static/"
725 ]
726 },
727 %{
728 key: :allowed_post_formats,
729 type: {:list, :string},
730 description: "MIME-type list of formats allowed to be posted (transformed into HTML)",
731 suggestions: [
732 "text/plain",
733 "text/html",
734 "text/markdown",
735 "text/bbcode"
736 ]
737 },
738 %{
739 key: :extended_nickname_format,
740 type: :boolean,
741 description:
742 "Enable to use extended local nicknames format (allows underscores/dashes)." <>
743 " This will break federation with older software for theses nicknames."
744 },
745 %{
746 key: :cleanup_attachments,
747 type: :boolean,
748 description: """
749 Enable to remove associated attachments when status is removed.
750 This will not affect duplicates and attachments without status.
751 Enabling this will increase load to database when deleting statuses on larger instances.
752 """
753 },
754 %{
755 key: :max_pinned_statuses,
756 type: :integer,
757 description: "The maximum number of pinned statuses. 0 will disable the feature.",
758 suggestions: [
759 0,
760 1,
761 3
762 ]
763 },
764 %{
765 key: :autofollowed_nicknames,
766 type: {:list, :string},
767 description:
768 "Set to nicknames of (local) users that every new user should automatically follow",
769 suggestions: [
770 "lain",
771 "kaniini",
772 "lanodan",
773 "rinpatch"
774 ]
775 },
776 %{
777 key: :attachment_links,
778 type: :boolean,
779 description: "Enable to automatically add attachment link text to statuses"
780 },
781 %{
782 key: :max_report_comment_size,
783 type: :integer,
784 description: "The maximum size of the report comment. Default: 1000.",
785 suggestions: [
786 1_000
787 ]
788 },
789 %{
790 key: :safe_dm_mentions,
791 label: "Safe DM mentions",
792 type: :boolean,
793 description:
794 "If enabled, only mentions at the beginning of a post will be used to address people in direct messages." <>
795 " This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\")." <>
796 " Default: disabled"
797 },
798 %{
799 key: :healthcheck,
800 type: :boolean,
801 description: "If enabled, system data will be shown on `/api/pleroma/healthcheck`"
802 },
803 %{
804 key: :remote_post_retention_days,
805 type: :integer,
806 description:
807 "The default amount of days to retain remote posts when pruning the database",
808 suggestions: [
809 90
810 ]
811 },
812 %{
813 key: :user_bio_length,
814 type: :integer,
815 description: "A user bio maximum length. Default: 5000.",
816 suggestions: [
817 5_000
818 ]
819 },
820 %{
821 key: :user_name_length,
822 type: :integer,
823 description: "A user name maximum length. Default: 100.",
824 suggestions: [
825 100
826 ]
827 },
828 %{
829 key: :skip_thread_containment,
830 type: :boolean,
831 description: "Skip filtering out broken threads. Default: enabled."
832 },
833 %{
834 key: :limit_to_local_content,
835 type: {:dropdown, :atom},
836 description:
837 "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
838 suggestions: [
839 :unauthenticated,
840 :all,
841 false
842 ]
843 },
844 %{
845 key: :max_account_fields,
846 type: :integer,
847 description: "The maximum number of custom fields in the user profile. Default: 10.",
848 suggestions: [
849 10
850 ]
851 },
852 %{
853 key: :max_remote_account_fields,
854 type: :integer,
855 description:
856 "The maximum number of custom fields in the remote user profile. Default: 20.",
857 suggestions: [
858 20
859 ]
860 },
861 %{
862 key: :account_field_name_length,
863 type: :integer,
864 description: "An account field name maximum length. Default: 512.",
865 suggestions: [
866 512
867 ]
868 },
869 %{
870 key: :account_field_value_length,
871 type: :integer,
872 description: "An account field value maximum length. Default: 2048.",
873 suggestions: [
874 2048
875 ]
876 },
877 %{
878 key: :external_user_synchronization,
879 type: :boolean,
880 description: "Enabling following/followers counters synchronization for external users"
881 },
882 %{
883 key: :multi_factor_authentication,
884 type: :keyword,
885 description: "Multi-factor authentication settings",
886 suggestions: [
887 [
888 totp: [digits: 6, period: 30],
889 backup_codes: [number: 5, length: 16]
890 ]
891 ],
892 children: [
893 %{
894 key: :totp,
895 label: "TOTP settings",
896 type: :keyword,
897 description: "TOTP settings",
898 suggestions: [digits: 6, period: 30],
899 children: [
900 %{
901 key: :digits,
902 type: :integer,
903 suggestions: [6],
904 description:
905 "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters."
906 },
907 %{
908 key: :period,
909 type: :integer,
910 suggestions: [30],
911 description:
912 "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
913 }
914 ]
915 },
916 %{
917 key: :backup_codes,
918 type: :keyword,
919 description: "MFA backup codes settings",
920 suggestions: [number: 5, length: 16],
921 children: [
922 %{
923 key: :number,
924 type: :integer,
925 suggestions: [5],
926 description: "Number of backup codes to generate."
927 },
928 %{
929 key: :length,
930 type: :integer,
931 suggestions: [16],
932 description:
933 "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters."
934 }
935 ]
936 }
937 ]
938 },
939 %{
940 key: :instance_thumbnail,
941 type: :string,
942 description:
943 "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
944 suggestions: ["/instance/thumbnail.jpeg"]
945 }
946 ]
947 },
948 %{
949 group: :welcome,
950 type: :group,
951 description: "Welcome messages settings",
952 children: [
953 %{
954 group: :direct_message,
955 type: :group,
956 descpiption: "Direct message settings",
957 children: [
958 %{
959 key: :enabled,
960 type: :boolean,
961 description: "Enables sends direct message for new user after registration"
962 },
963 %{
964 key: :message,
965 type: :string,
966 description:
967 "A message that will be sent to a newly registered users as a direct message",
968 suggestions: [
969 "Hi, @username! Welcome on board!"
970 ]
971 },
972 %{
973 key: :sender_nickname,
974 type: :string,
975 description: "The nickname of the local user that sends the welcome message",
976 suggestions: [
977 "lain"
978 ]
979 }
980 ]
981 },
982 %{
983 group: :email,
984 type: :group,
985 descpiption: "Email message settings",
986 children: [
987 %{
988 key: :enabled,
989 type: :boolean,
990 description: "Enables sends direct message for new user after registration"
991 },
992 %{
993 key: :sender,
994 type: [:string, :tuple],
995 description:
996 "The email address or tuple with `{nickname, email}` that will use as sender to the welcome email.",
997 suggestions: [
998 {"Pleroma App", "welcome@pleroma.app"}
999 ]
1000 },
1001 %{
1002 key: :subject,
1003 type: :string,
1004 description:
1005 "The subject of welcome email. Can be use EEX template with `user` and `instance_name` variables.",
1006 suggestions: ["Welcome to <%= instance_name%>"]
1007 },
1008 %{
1009 key: :html,
1010 type: :string,
1011 description:
1012 "The html content of welcome email. Can be use EEX template with `user` and `instance_name` variables.",
1013 suggestions: ["<h1>Hello <%= user.name%>. Welcome to <%= instance_name%></h1>"]
1014 },
1015 %{
1016 key: :text,
1017 type: :string,
1018 description:
1019 "The text content of welcome email. Can be use EEX template with `user` and `instance_name` variables.",
1020 suggestions: ["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"]
1021 }
1022 ]
1023 }
1024 ]
1025 },
1026 %{
1027 group: :logger,
1028 type: :group,
1029 description: "Logger-related settings",
1030 children: [
1031 %{
1032 key: :backends,
1033 type: [:atom, :tuple, :module],
1034 description:
1035 "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
1036 suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]
1037 }
1038 ]
1039 },
1040 %{
1041 group: :logger,
1042 type: :group,
1043 key: :ex_syslogger,
1044 label: "ExSyslogger",
1045 description: "ExSyslogger-related settings",
1046 children: [
1047 %{
1048 key: :level,
1049 type: {:dropdown, :atom},
1050 description: "Log level",
1051 suggestions: [:debug, :info, :warn, :error]
1052 },
1053 %{
1054 key: :ident,
1055 type: :string,
1056 description:
1057 "A string that's prepended to every message, and is typically set to the app name",
1058 suggestions: ["pleroma"]
1059 },
1060 %{
1061 key: :format,
1062 type: :string,
1063 description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
1064 suggestions: ["$metadata[$level] $message"]
1065 },
1066 %{
1067 key: :metadata,
1068 type: {:list, :atom},
1069 suggestions: [:request_id]
1070 }
1071 ]
1072 },
1073 %{
1074 group: :logger,
1075 type: :group,
1076 key: :console,
1077 label: "Console Logger",
1078 description: "Console logger settings",
1079 children: [
1080 %{
1081 key: :level,
1082 type: {:dropdown, :atom},
1083 description: "Log level",
1084 suggestions: [:debug, :info, :warn, :error]
1085 },
1086 %{
1087 key: :format,
1088 type: :string,
1089 description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
1090 suggestions: ["$metadata[$level] $message"]
1091 },
1092 %{
1093 key: :metadata,
1094 type: {:list, :atom},
1095 suggestions: [:request_id]
1096 }
1097 ]
1098 },
1099 %{
1100 group: :quack,
1101 type: :group,
1102 label: "Quack Logger",
1103 description: "Quack-related settings",
1104 children: [
1105 %{
1106 key: :level,
1107 type: {:dropdown, :atom},
1108 description: "Log level",
1109 suggestions: [:debug, :info, :warn, :error]
1110 },
1111 %{
1112 key: :meta,
1113 type: {:list, :atom},
1114 description: "Configure which metadata you want to report on",
1115 suggestions: [
1116 :application,
1117 :module,
1118 :file,
1119 :function,
1120 :line,
1121 :pid,
1122 :crash_reason,
1123 :initial_call,
1124 :registered_name,
1125 :all,
1126 :none
1127 ]
1128 },
1129 %{
1130 key: :webhook_url,
1131 label: "Webhook URL",
1132 type: :string,
1133 description: "Configure the Slack incoming webhook",
1134 suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
1135 }
1136 ]
1137 },
1138 %{
1139 group: :pleroma,
1140 key: :frontend_configurations,
1141 type: :group,
1142 description:
1143 "This form can be used to configure a keyword list that keeps the configuration data for any " <>
1144 "kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to " <>
1145 "add your own configuration your settings all fields must be complete.",
1146 children: [
1147 %{
1148 key: :pleroma_fe,
1149 label: "Pleroma FE",
1150 type: :map,
1151 description: "Settings for Pleroma FE",
1152 suggestions: [
1153 %{
1154 alwaysShowSubjectInput: true,
1155 background: "/static/aurora_borealis.jpg",
1156 collapseMessageWithSubject: false,
1157 disableChat: false,
1158 greentext: false,
1159 hideFilteredStatuses: false,
1160 hideMutedPosts: false,
1161 hidePostStats: false,
1162 hideSitename: false,
1163 hideUserStats: false,
1164 loginMethod: "password",
1165 logo: "/static/logo.png",
1166 logoMargin: ".1em",
1167 logoMask: true,
1168 minimalScopesMode: false,
1169 noAttachmentLinks: false,
1170 nsfwCensorImage: "/static/img/nsfw.74818f9.png",
1171 postContentType: "text/plain",
1172 redirectRootLogin: "/main/friends",
1173 redirectRootNoLogin: "/main/all",
1174 scopeCopy: true,
1175 sidebarRight: false,
1176 showFeaturesPanel: true,
1177 showInstanceSpecificPanel: false,
1178 subjectLineBehavior: "email",
1179 theme: "pleroma-dark",
1180 webPushNotifications: false
1181 }
1182 ],
1183 children: [
1184 %{
1185 key: :alwaysShowSubjectInput,
1186 label: "Always show subject input",
1187 type: :boolean,
1188 description: "When disabled, auto-hide the subject field if it's empty"
1189 },
1190 %{
1191 key: :background,
1192 type: :string,
1193 description:
1194 "URL of the background, unless viewing a user profile with a background that is set",
1195 suggestions: ["/images/city.jpg"]
1196 },
1197 %{
1198 key: :collapseMessageWithSubject,
1199 label: "Collapse message with subject",
1200 type: :boolean,
1201 description:
1202 "When a message has a subject (aka Content Warning), collapse it by default"
1203 },
1204 %{
1205 key: :disableChat,
1206 label: "PleromaFE Chat",
1207 type: :boolean,
1208 description: "Disables PleromaFE Chat component"
1209 },
1210 %{
1211 key: :greentext,
1212 label: "Greentext",
1213 type: :boolean,
1214 description: "Enables green text on lines prefixed with the > character"
1215 },
1216 %{
1217 key: :hideFilteredStatuses,
1218 label: "Hide Filtered Statuses",
1219 type: :boolean,
1220 description: "Hides filtered statuses from timelines"
1221 },
1222 %{
1223 key: :hideMutedPosts,
1224 label: "Hide Muted Posts",
1225 type: :boolean,
1226 description: "Hides muted statuses from timelines"
1227 },
1228 %{
1229 key: :hidePostStats,
1230 label: "Hide post stats",
1231 type: :boolean,
1232 description: "Hide notices statistics (repeats, favorites, ...)"
1233 },
1234 %{
1235 key: :hideSitename,
1236 label: "Hide Sitename",
1237 type: :boolean,
1238 description: "Hides instance name from PleromaFE banner"
1239 },
1240 %{
1241 key: :hideUserStats,
1242 label: "Hide user stats",
1243 type: :boolean,
1244 description:
1245 "Hide profile statistics (posts, posts per day, followers, followings, ...)"
1246 },
1247 %{
1248 key: :logo,
1249 type: :string,
1250 description: "URL of the logo, defaults to Pleroma's logo",
1251 suggestions: ["/static/logo.png"]
1252 },
1253 %{
1254 key: :logoMargin,
1255 label: "Logo margin",
1256 type: :string,
1257 description:
1258 "Allows you to adjust vertical margins between logo boundary and navbar borders. " <>
1259 "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.",
1260 suggestions: [".1em"]
1261 },
1262 %{
1263 key: :logoMask,
1264 label: "Logo mask",
1265 type: :boolean,
1266 description:
1267 "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. " <>
1268 "If you want a colorful logo you must disable logoMask."
1269 },
1270 %{
1271 key: :minimalScopesMode,
1272 label: "Minimal scopes mode",
1273 type: :boolean,
1274 description:
1275 "Limit scope selection to Direct, User default, and Scope of post replying to. " <>
1276 "Also prevents replying to a DM with a public post from PleromaFE."
1277 },
1278 %{
1279 key: :nsfwCensorImage,
1280 label: "NSFW Censor Image",
1281 type: :string,
1282 description:
1283 "URL of the image to use for hiding NSFW media attachments in the timeline",
1284 suggestions: ["/static/img/nsfw.74818f9.png"]
1285 },
1286 %{
1287 key: :postContentType,
1288 label: "Post Content Type",
1289 type: {:dropdown, :atom},
1290 description: "Default post formatting option",
1291 suggestions: ["text/plain", "text/html", "text/markdown", "text/bbcode"]
1292 },
1293 %{
1294 key: :redirectRootNoLogin,
1295 label: "Redirect root no login",
1296 type: :string,
1297 description:
1298 "Relative URL which indicates where to redirect when a user isn't logged in",
1299 suggestions: ["/main/all"]
1300 },
1301 %{
1302 key: :redirectRootLogin,
1303 label: "Redirect root login",
1304 type: :string,
1305 description:
1306 "Relative URL which indicates where to redirect when a user is logged in",
1307 suggestions: ["/main/friends"]
1308 },
1309 %{
1310 key: :scopeCopy,
1311 label: "Scope copy",
1312 type: :boolean,
1313 description: "Copy the scope (private/unlisted/public) in replies to posts by default"
1314 },
1315 %{
1316 key: :sidebarRight,
1317 label: "Sidebar on Right",
1318 type: :boolean,
1319 description: "Change alignment of sidebar and panels to the right"
1320 },
1321 %{
1322 key: :showFeaturesPanel,
1323 label: "Show instance features panel",
1324 type: :boolean,
1325 description:
1326 "Enables panel displaying functionality of the instance on the About page"
1327 },
1328 %{
1329 key: :showInstanceSpecificPanel,
1330 label: "Show instance specific panel",
1331 type: :boolean,
1332 description: "Whether to show the instance's custom panel"
1333 },
1334 %{
1335 key: :subjectLineBehavior,
1336 label: "Subject line behavior",
1337 type: :string,
1338 description: "Allows changing the default behaviour of subject lines in replies.
1339 `email`: copy and preprend re:, as in email,
1340 `masto`: copy verbatim, as in Mastodon,
1341 `noop`: don't copy the subject.",
1342 suggestions: ["email", "masto", "noop"]
1343 },
1344 %{
1345 key: :theme,
1346 type: :string,
1347 description: "Which theme to use. Available themes are defined in styles.json",
1348 suggestions: ["pleroma-dark"]
1349 }
1350 ]
1351 },
1352 %{
1353 key: :masto_fe,
1354 label: "Masto FE",
1355 type: :map,
1356 description: "Settings for Masto FE",
1357 suggestions: [
1358 %{
1359 showInstanceSpecificPanel: true
1360 }
1361 ],
1362 children: [
1363 %{
1364 key: :showInstanceSpecificPanel,
1365 label: "Show instance specific panel",
1366 type: :boolean,
1367 description: "Whenether to show the instance's specific panel"
1368 }
1369 ]
1370 }
1371 ]
1372 },
1373 %{
1374 group: :pleroma,
1375 key: :assets,
1376 type: :group,
1377 description:
1378 "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend",
1379 children: [
1380 %{
1381 key: :mascots,
1382 type: {:keyword, :map},
1383 description:
1384 "Keyword of mascots, each element must contain both an URL and a mime_type key",
1385 suggestions: [
1386 pleroma_fox_tan: %{
1387 url: "/images/pleroma-fox-tan-smol.png",
1388 mime_type: "image/png"
1389 },
1390 pleroma_fox_tan_shy: %{
1391 url: "/images/pleroma-fox-tan-shy.png",
1392 mime_type: "image/png"
1393 }
1394 ]
1395 },
1396 %{
1397 key: :default_mascot,
1398 type: :atom,
1399 description:
1400 "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
1401 suggestions: [
1402 :pleroma_fox_tan
1403 ]
1404 },
1405 %{
1406 key: :default_user_avatar,
1407 type: :string,
1408 description: "URL of the default user avatar",
1409 suggestions: ["/images/avi.png"]
1410 }
1411 ]
1412 },
1413 %{
1414 group: :pleroma,
1415 key: :manifest,
1416 type: :group,
1417 description:
1418 "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE.",
1419 children: [
1420 %{
1421 key: :icons,
1422 type: {:list, :map},
1423 description: "Describe the icons of the app",
1424 suggestion: [
1425 %{
1426 src: "/static/logo.png"
1427 },
1428 %{
1429 src: "/static/icon.png",
1430 type: "image/png"
1431 },
1432 %{
1433 src: "/static/icon.ico",
1434 sizes: "72x72 96x96 128x128 256x256"
1435 }
1436 ]
1437 },
1438 %{
1439 key: :theme_color,
1440 type: :string,
1441 description: "Describe the theme color of the app",
1442 suggestions: ["#282c37", "mediumpurple"]
1443 },
1444 %{
1445 key: :background_color,
1446 type: :string,
1447 description: "Describe the background color of the app",
1448 suggestions: ["#191b22", "aliceblue"]
1449 }
1450 ]
1451 },
1452 %{
1453 group: :pleroma,
1454 key: :mrf,
1455 tab: :mrf,
1456 label: "MRF",
1457 type: :group,
1458 description: "General MRF settings",
1459 children: [
1460 %{
1461 key: :policies,
1462 type: [:module, {:list, :module}],
1463 description:
1464 "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.",
1465 suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF}
1466 },
1467 %{
1468 key: :transparency,
1469 label: "MRF transparency",
1470 type: :boolean,
1471 description:
1472 "Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
1473 },
1474 %{
1475 key: :transparency_exclusions,
1476 label: "MRF transparency exclusions",
1477 type: {:list, :string},
1478 description:
1479 "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.",
1480 suggestions: [
1481 "exclusion.com"
1482 ]
1483 }
1484 ]
1485 },
1486 %{
1487 group: :pleroma,
1488 key: :mrf_simple,
1489 tab: :mrf,
1490 label: "MRF Simple",
1491 type: :group,
1492 description: "Simple ingress policies",
1493 children: [
1494 %{
1495 key: :media_removal,
1496 type: {:list, :string},
1497 description: "List of instances to strip media attachments from",
1498 suggestions: ["example.com", "*.example.com"]
1499 },
1500 %{
1501 key: :media_nsfw,
1502 label: "Media NSFW",
1503 type: {:list, :string},
1504 description: "List of instances to tag all media as NSFW (sensitive) from",
1505 suggestions: ["example.com", "*.example.com"]
1506 },
1507 %{
1508 key: :federated_timeline_removal,
1509 type: {:list, :string},
1510 description:
1511 "List of instances to remove from the Federated (aka The Whole Known Network) Timeline",
1512 suggestions: ["example.com", "*.example.com"]
1513 },
1514 %{
1515 key: :reject,
1516 type: {:list, :string},
1517 description: "List of instances to reject activities from (except deletes)",
1518 suggestions: ["example.com", "*.example.com"]
1519 },
1520 %{
1521 key: :accept,
1522 type: {:list, :string},
1523 description: "List of instances to only accept activities from (except deletes)",
1524 suggestions: ["example.com", "*.example.com"]
1525 },
1526 %{
1527 key: :report_removal,
1528 type: {:list, :string},
1529 description: "List of instances to reject reports from",
1530 suggestions: ["example.com", "*.example.com"]
1531 },
1532 %{
1533 key: :avatar_removal,
1534 type: {:list, :string},
1535 description: "List of instances to strip avatars from",
1536 suggestions: ["example.com", "*.example.com"]
1537 },
1538 %{
1539 key: :banner_removal,
1540 type: {:list, :string},
1541 description: "List of instances to strip banners from",
1542 suggestions: ["example.com", "*.example.com"]
1543 },
1544 %{
1545 key: :reject_deletes,
1546 type: {:list, :string},
1547 description: "List of instances to reject deletions from",
1548 suggestions: ["example.com", "*.example.com"]
1549 }
1550 ]
1551 },
1552 %{
1553 group: :pleroma,
1554 key: :mrf_activity_expiration,
1555 tab: :mrf,
1556 label: "MRF Activity Expiration Policy",
1557 type: :group,
1558 description: "Adds automatic expiration to all local activities",
1559 children: [
1560 %{
1561 key: :days,
1562 type: :integer,
1563 description: "Default global expiration time for all local activities (in days)",
1564 suggestions: [90, 365]
1565 }
1566 ]
1567 },
1568 %{
1569 group: :pleroma,
1570 key: :mrf_subchain,
1571 tab: :mrf,
1572 label: "MRF Subchain",
1573 type: :group,
1574 description:
1575 "This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
1576 " All criteria are configured as a map of regular expressions to lists of policy modules.",
1577 children: [
1578 %{
1579 key: :match_actor,
1580 type: {:map, {:list, :string}},
1581 description: "Matches a series of regular expressions against the actor field",
1582 suggestions: [
1583 %{
1584 ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy]
1585 }
1586 ]
1587 }
1588 ]
1589 },
1590 %{
1591 group: :pleroma,
1592 key: :mrf_rejectnonpublic,
1593 tab: :mrf,
1594 description: "RejectNonPublic drops posts with non-public visibility settings.",
1595 label: "MRF Reject Non Public",
1596 type: :group,
1597 children: [
1598 %{
1599 key: :allow_followersonly,
1600 label: "Allow followers-only",
1601 type: :boolean,
1602 description: "Whether to allow followers-only posts"
1603 },
1604 %{
1605 key: :allow_direct,
1606 type: :boolean,
1607 description: "Whether to allow direct messages"
1608 }
1609 ]
1610 },
1611 %{
1612 group: :pleroma,
1613 key: :mrf_hellthread,
1614 tab: :mrf,
1615 label: "MRF Hellthread",
1616 type: :group,
1617 description: "Block messages with excessive user mentions",
1618 children: [
1619 %{
1620 key: :delist_threshold,
1621 type: :integer,
1622 description:
1623 "Number of mentioned users after which the message gets removed from timelines and" <>
1624 "disables notifications. Set to 0 to disable.",
1625 suggestions: [10]
1626 },
1627 %{
1628 key: :reject_threshold,
1629 type: :integer,
1630 description:
1631 "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.",
1632 suggestions: [20]
1633 }
1634 ]
1635 },
1636 %{
1637 group: :pleroma,
1638 key: :mrf_keyword,
1639 tab: :mrf,
1640 label: "MRF Keyword",
1641 type: :group,
1642 description: "Reject or Word-Replace messages with a keyword or regex",
1643 children: [
1644 %{
1645 key: :reject,
1646 type: {:list, :string},
1647 description:
1648 "A list of patterns which result in message being rejected. Each pattern can be a string or a regular expression.",
1649 suggestions: ["foo", ~r/foo/iu]
1650 },
1651 %{
1652 key: :federated_timeline_removal,
1653 type: {:list, :string},
1654 description:
1655 "A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). Each pattern can be a string or a regular expression.",
1656 suggestions: ["foo", ~r/foo/iu]
1657 },
1658 %{
1659 key: :replace,
1660 type: {:list, :tuple},
1661 description:
1662 "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.",
1663 suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
1664 }
1665 ]
1666 },
1667 %{
1668 group: :pleroma,
1669 key: :mrf_mention,
1670 tab: :mrf,
1671 label: "MRF Mention",
1672 type: :group,
1673 description: "Block messages which mention a specific user",
1674 children: [
1675 %{
1676 key: :actors,
1677 type: {:list, :string},
1678 description: "A list of actors for which any post mentioning them will be dropped",
1679 suggestions: ["actor1", "actor2"]
1680 }
1681 ]
1682 },
1683 %{
1684 group: :pleroma,
1685 key: :mrf_vocabulary,
1686 tab: :mrf,
1687 label: "MRF Vocabulary",
1688 type: :group,
1689 description: "Filter messages which belong to certain activity vocabularies",
1690 children: [
1691 %{
1692 key: :accept,
1693 type: {:list, :string},
1694 description:
1695 "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted.",
1696 suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
1697 },
1698 %{
1699 key: :reject,
1700 type: {:list, :string},
1701 description:
1702 "A list of ActivityStreams terms to reject. If empty, no messages are rejected.",
1703 suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
1704 }
1705 ]
1706 },
1707 # %{
1708 # group: :pleroma,
1709 # key: :mrf_user_allowlist,
1710 # type: :map,
1711 # description:
1712 # "The keys in this section are the domain names that the policy should apply to." <>
1713 # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID",
1714 # suggestions: [
1715 # %{"example.org" => ["https://example.org/users/admin"]}
1716 # ]
1717 # ]
1718 # },
1719 %{
1720 group: :pleroma,
1721 key: :media_proxy,
1722 type: :group,
1723 description: "Media proxy",
1724 children: [
1725 %{
1726 key: :enabled,
1727 type: :boolean,
1728 description: "Enables proxying of remote media to the instance's proxy"
1729 },
1730 %{
1731 key: :base_url,
1732 label: "Base URL",
1733 type: :string,
1734 description:
1735 "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts.",
1736 suggestions: ["https://example.com"]
1737 },
1738 %{
1739 key: :invalidation,
1740 type: :keyword,
1741 descpiption: "",
1742 suggestions: [
1743 enabled: true,
1744 provider: Pleroma.Web.MediaProxy.Invalidation.Script
1745 ],
1746 children: [
1747 %{
1748 key: :enabled,
1749 type: :boolean,
1750 description: "Enables invalidate media cache"
1751 },
1752 %{
1753 key: :provider,
1754 type: :module,
1755 description: "Module which will be used to cache purge.",
1756 suggestions: [
1757 Pleroma.Web.MediaProxy.Invalidation.Script,
1758 Pleroma.Web.MediaProxy.Invalidation.Http
1759 ]
1760 }
1761 ]
1762 },
1763 %{
1764 key: :proxy_opts,
1765 label: "Proxy Options",
1766 type: :keyword,
1767 description: "Options for Pleroma.ReverseProxy",
1768 suggestions: [
1769 redirect_on_failure: false,
1770 max_body_length: 25 * 1_048_576,
1771 http: [
1772 follow_redirect: true,
1773 pool: :media
1774 ]
1775 ],
1776 children: [
1777 %{
1778 key: :redirect_on_failure,
1779 type: :boolean,
1780 description:
1781 "Redirects the client to the real remote URL if there's any HTTP errors. " <>
1782 "Any error during body processing will not be redirected as the response is chunked."
1783 },
1784 %{
1785 key: :max_body_length,
1786 type: :integer,
1787 description:
1788 "Limits the content length to be approximately the " <>
1789 "specified length. It is validated with the `content-length` header and also verified when proxying."
1790 },
1791 %{
1792 key: :http,
1793 label: "HTTP",
1794 type: :keyword,
1795 description: "HTTP options",
1796 children: [
1797 %{
1798 key: :adapter,
1799 type: :keyword,
1800 description: "Adapter specific options",
1801 children: [
1802 %{
1803 key: :ssl_options,
1804 type: :keyword,
1805 label: "SSL Options",
1806 description: "SSL options for HTTP adapter",
1807 children: [
1808 %{
1809 key: :versions,
1810 type: {:list, :atom},
1811 description: "List of TLS version to use",
1812 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
1813 }
1814 ]
1815 }
1816 ]
1817 },
1818 %{
1819 key: :proxy_url,
1820 label: "Proxy URL",
1821 type: [:string, :tuple],
1822 description: "Proxy URL",
1823 suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
1824 }
1825 ]
1826 }
1827 ]
1828 },
1829 %{
1830 key: :whitelist,
1831 type: {:list, :string},
1832 description: "List of hosts with scheme to bypass the mediaproxy",
1833 suggestions: ["http://example.com"]
1834 }
1835 ]
1836 },
1837 %{
1838 group: :pleroma,
1839 key: Pleroma.Web.MediaProxy.Invalidation.Http,
1840 type: :group,
1841 description: "HTTP invalidate settings",
1842 children: [
1843 %{
1844 key: :method,
1845 type: :atom,
1846 description: "HTTP method of request. Default: :purge"
1847 },
1848 %{
1849 key: :headers,
1850 type: {:keyword, :string},
1851 description: "HTTP headers of request",
1852 suggestions: [{"x-refresh", 1}]
1853 },
1854 %{
1855 key: :options,
1856 type: :keyword,
1857 description: "Request options",
1858 children: [
1859 %{
1860 key: :params,
1861 type: {:map, :string}
1862 }
1863 ]
1864 }
1865 ]
1866 },
1867 %{
1868 group: :pleroma,
1869 key: Pleroma.Web.MediaProxy.Invalidation.Script,
1870 type: :group,
1871 description: "Script invalidate settings",
1872 children: [
1873 %{
1874 key: :script_path,
1875 type: :string,
1876 description: "Path to shell script. Which will run purge cache.",
1877 suggestions: ["./installation/nginx-cache-purge.sh.example"]
1878 }
1879 ]
1880 },
1881 %{
1882 group: :pleroma,
1883 key: :gopher,
1884 type: :group,
1885 description: "Gopher settings",
1886 children: [
1887 %{
1888 key: :enabled,
1889 type: :boolean,
1890 description: "Enables the gopher interface"
1891 },
1892 %{
1893 key: :ip,
1894 label: "IP",
1895 type: :tuple,
1896 description: "IP address to bind to",
1897 suggestions: [{0, 0, 0, 0}]
1898 },
1899 %{
1900 key: :port,
1901 type: :integer,
1902 description: "Port to bind to",
1903 suggestions: [9999]
1904 },
1905 %{
1906 key: :dstport,
1907 type: :integer,
1908 description: "Port advertised in URLs (optional, defaults to port)",
1909 suggestions: [9999]
1910 }
1911 ]
1912 },
1913 %{
1914 group: :pleroma,
1915 key: :activitypub,
1916 label: "ActivityPub",
1917 type: :group,
1918 description: "ActivityPub-related settings",
1919 children: [
1920 %{
1921 key: :unfollow_blocked,
1922 type: :boolean,
1923 description: "Whether blocks result in people getting unfollowed"
1924 },
1925 %{
1926 key: :outgoing_blocks,
1927 type: :boolean,
1928 description: "Whether to federate blocks to other instances"
1929 },
1930 %{
1931 key: :sign_object_fetches,
1932 type: :boolean,
1933 description: "Sign object fetches with HTTP signatures"
1934 },
1935 %{
1936 key: :note_replies_output_limit,
1937 type: :integer,
1938 description:
1939 "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)"
1940 },
1941 %{
1942 key: :follow_handshake_timeout,
1943 type: :integer,
1944 description: "Following handshake timeout",
1945 suggestions: [500]
1946 }
1947 ]
1948 },
1949 %{
1950 group: :pleroma,
1951 key: :http_security,
1952 label: "HTTP security",
1953 type: :group,
1954 description: "HTTP security settings",
1955 children: [
1956 %{
1957 key: :enabled,
1958 type: :boolean,
1959 description: "Whether the managed content security policy is enabled"
1960 },
1961 %{
1962 key: :sts,
1963 label: "STS",
1964 type: :boolean,
1965 description: "Whether to additionally send a Strict-Transport-Security header"
1966 },
1967 %{
1968 key: :sts_max_age,
1969 label: "STS max age",
1970 type: :integer,
1971 description: "The maximum age for the Strict-Transport-Security header if sent",
1972 suggestions: [31_536_000]
1973 },
1974 %{
1975 key: :ct_max_age,
1976 label: "CT max age",
1977 type: :integer,
1978 description: "The maximum age for the Expect-CT header if sent",
1979 suggestions: [2_592_000]
1980 },
1981 %{
1982 key: :referrer_policy,
1983 type: :string,
1984 description: "The referrer policy to use, either \"same-origin\" or \"no-referrer\"",
1985 suggestions: ["same-origin", "no-referrer"]
1986 },
1987 %{
1988 key: :report_uri,
1989 label: "Report URI",
1990 type: :string,
1991 description: "Adds the specified URL to report-uri and report-to group in CSP header",
1992 suggestions: ["https://example.com/report-uri"]
1993 }
1994 ]
1995 },
1996 %{
1997 group: :web_push_encryption,
1998 key: :vapid_details,
1999 label: "Vapid Details",
2000 type: :group,
2001 description:
2002 "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it.",
2003 children: [
2004 %{
2005 key: :subject,
2006 type: :string,
2007 description:
2008 "A mailto link for the administrative contact." <>
2009 " It's best if this email is not a personal email address, but rather a group email to the instance moderation team.",
2010 suggestions: ["mailto:moderators@pleroma.com"]
2011 },
2012 %{
2013 key: :public_key,
2014 type: :string,
2015 description: "VAPID public key",
2016 suggestions: ["Public key"]
2017 },
2018 %{
2019 key: :private_key,
2020 type: :string,
2021 description: "VAPID private key",
2022 suggestions: ["Private key"]
2023 }
2024 ]
2025 },
2026 %{
2027 group: :pleroma,
2028 key: Pleroma.Captcha,
2029 type: :group,
2030 description: "Captcha-related settings",
2031 children: [
2032 %{
2033 key: :enabled,
2034 type: :boolean,
2035 description: "Whether the captcha should be shown on registration"
2036 },
2037 %{
2038 key: :method,
2039 type: :module,
2040 description: "The method/service to use for captcha",
2041 suggestions: [Pleroma.Captcha.Kocaptcha, Pleroma.Captcha.Native]
2042 },
2043 %{
2044 key: :seconds_valid,
2045 type: :integer,
2046 description: "The time in seconds for which the captcha is valid",
2047 suggestions: [60]
2048 }
2049 ]
2050 },
2051 %{
2052 group: :pleroma,
2053 key: Pleroma.Captcha.Kocaptcha,
2054 type: :group,
2055 description:
2056 "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is" <>
2057 " here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer.",
2058 children: [
2059 %{
2060 key: :endpoint,
2061 type: :string,
2062 description: "The kocaptcha endpoint to use",
2063 suggestions: ["https://captcha.kotobank.ch"]
2064 }
2065 ]
2066 },
2067 %{
2068 group: :pleroma,
2069 label: "Pleroma Admin Token",
2070 type: :group,
2071 description:
2072 "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)",
2073 children: [
2074 %{
2075 key: :admin_token,
2076 type: :string,
2077 description: "Admin token",
2078 suggestions: [
2079 "Please use a high entropy string or UUID"
2080 ]
2081 }
2082 ]
2083 },
2084 %{
2085 group: :pleroma,
2086 key: Oban,
2087 type: :group,
2088 description: """
2089 [Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration.
2090
2091 Note: if you are running PostgreSQL in [`silent_mode`](https://postgresqlco.nf/en/doc/param/silent_mode?version=9.1),
2092 it's advised to set [`log_destination`](https://postgresqlco.nf/en/doc/param/log_destination?version=9.1) to `syslog`,
2093 otherwise `postmaster.log` file may grow because of "you don't own a lock of type ShareLock" warnings
2094 (see https://github.com/sorentwo/oban/issues/52).
2095 """,
2096 children: [
2097 %{
2098 key: :log,
2099 type: {:dropdown, :atom},
2100 description: "Logs verbose mode",
2101 suggestions: [false, :error, :warn, :info, :debug]
2102 },
2103 %{
2104 key: :queues,
2105 type: {:keyword, :integer},
2106 description:
2107 "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)",
2108 suggestions: [
2109 activity_expiration: 10,
2110 attachments_cleanup: 5,
2111 background: 5,
2112 federator_incoming: 50,
2113 federator_outgoing: 50,
2114 mailer: 10,
2115 scheduled_activities: 10,
2116 transmogrifier: 20,
2117 web_push: 50
2118 ],
2119 children: [
2120 %{
2121 key: :activity_expiration,
2122 type: :integer,
2123 description: "Activity expiration queue",
2124 suggestions: [10]
2125 },
2126 %{
2127 key: :attachments_cleanup,
2128 type: :integer,
2129 description: "Attachment deletion queue",
2130 suggestions: [5]
2131 },
2132 %{
2133 key: :background,
2134 type: :integer,
2135 description: "Background queue",
2136 suggestions: [5]
2137 },
2138 %{
2139 key: :federator_incoming,
2140 type: :integer,
2141 description: "Incoming federation queue",
2142 suggestions: [50]
2143 },
2144 %{
2145 key: :federator_outgoing,
2146 type: :integer,
2147 description: "Outgoing federation queue",
2148 suggestions: [50]
2149 },
2150 %{
2151 key: :mailer,
2152 type: :integer,
2153 description: "Email sender queue, see Pleroma.Emails.Mailer",
2154 suggestions: [10]
2155 },
2156 %{
2157 key: :scheduled_activities,
2158 type: :integer,
2159 description: "Scheduled activities queue, see Pleroma.ScheduledActivities",
2160 suggestions: [10]
2161 },
2162 %{
2163 key: :transmogrifier,
2164 type: :integer,
2165 description: "Transmogrifier queue",
2166 suggestions: [20]
2167 },
2168 %{
2169 key: :web_push,
2170 type: :integer,
2171 description: "Web push notifications queue",
2172 suggestions: [50]
2173 }
2174 ]
2175 },
2176 %{
2177 key: :crontab,
2178 type: {:list, :tuple},
2179 description: "Settings for cron background jobs",
2180 suggestions: [
2181 {"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker},
2182 {"0 * * * *", Pleroma.Workers.Cron.StatsWorker},
2183 {"* * * * *", Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker},
2184 {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
2185 {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker}
2186 ]
2187 }
2188 ]
2189 },
2190 %{
2191 group: :pleroma,
2192 key: :workers,
2193 type: :group,
2194 description: "Includes custom worker options not interpretable directly by `Oban`",
2195 children: [
2196 %{
2197 key: :retries,
2198 type: {:keyword, :integer},
2199 description: "Max retry attempts for failed jobs, per `Oban` queue",
2200 suggestions: [
2201 federator_incoming: 5,
2202 federator_outgoing: 5
2203 ]
2204 }
2205 ]
2206 },
2207 %{
2208 group: :pleroma,
2209 key: Pleroma.Web.Metadata,
2210 type: :group,
2211 description: "Metadata-related settings",
2212 children: [
2213 %{
2214 key: :providers,
2215 type: {:list, :module},
2216 description: "List of metadata providers to enable",
2217 suggestions: [
2218 Pleroma.Web.Metadata.Providers.OpenGraph,
2219 Pleroma.Web.Metadata.Providers.TwitterCard,
2220 Pleroma.Web.Metadata.Providers.RelMe,
2221 Pleroma.Web.Metadata.Providers.Feed
2222 ]
2223 },
2224 %{
2225 key: :unfurl_nsfw,
2226 label: "Unfurl NSFW",
2227 type: :boolean,
2228 description: "When enabled NSFW attachments will be shown in previews"
2229 }
2230 ]
2231 },
2232 %{
2233 group: :pleroma,
2234 key: :rich_media,
2235 type: :group,
2236 description:
2237 "If enabled the instance will parse metadata from attached links to generate link previews",
2238 children: [
2239 %{
2240 key: :enabled,
2241 type: :boolean,
2242 description: "Enables RichMedia parsing of URLs"
2243 },
2244 %{
2245 key: :ignore_hosts,
2246 type: {:list, :string},
2247 description: "List of hosts which will be ignored by the metadata parser",
2248 suggestions: ["accounts.google.com", "xss.website"]
2249 },
2250 %{
2251 key: :ignore_tld,
2252 label: "Ignore TLD",
2253 type: {:list, :string},
2254 description: "List TLDs (top-level domains) which will ignore for parse metadata",
2255 suggestions: ["local", "localdomain", "lan"]
2256 },
2257 %{
2258 key: :parsers,
2259 type: {:list, :module},
2260 description:
2261 "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name.",
2262 suggestions: [
2263 Pleroma.Web.RichMedia.Parsers.OEmbed,
2264 Pleroma.Web.RichMedia.Parsers.TwitterCard
2265 ]
2266 },
2267 %{
2268 key: :ttl_setters,
2269 label: "TTL setters",
2270 type: {:list, :module},
2271 description:
2272 "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name.",
2273 suggestions: [
2274 Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
2275 ]
2276 }
2277 ]
2278 },
2279 %{
2280 group: :pleroma,
2281 key: Pleroma.Formatter,
2282 label: "Auto Linker",
2283 type: :group,
2284 description:
2285 "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.",
2286 children: [
2287 %{
2288 key: :class,
2289 type: [:string, false],
2290 description: "Specify the class to be added to the generated link. Disable to clear.",
2291 suggestions: ["auto-linker", false]
2292 },
2293 %{
2294 key: :rel,
2295 type: [:string, false],
2296 description: "Override the rel attribute. Disable to clear.",
2297 suggestions: ["ugc", "noopener noreferrer", false]
2298 },
2299 %{
2300 key: :new_window,
2301 type: :boolean,
2302 description: "Link URLs will open in a new window/tab."
2303 },
2304 %{
2305 key: :truncate,
2306 type: [:integer, false],
2307 description:
2308 "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`",
2309 suggestions: [15, false]
2310 },
2311 %{
2312 key: :strip_prefix,
2313 type: :boolean,
2314 description: "Strip the scheme prefix."
2315 },
2316 %{
2317 key: :extra,
2318 type: :boolean,
2319 description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)"
2320 },
2321 %{
2322 key: :validate_tld,
2323 type: [:atom, :boolean],
2324 description:
2325 "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)",
2326 suggestions: [:no_scheme, true]
2327 }
2328 ]
2329 },
2330 %{
2331 group: :pleroma,
2332 key: Pleroma.ScheduledActivity,
2333 type: :group,
2334 description: "Scheduled activities settings",
2335 children: [
2336 %{
2337 key: :daily_user_limit,
2338 type: :integer,
2339 description:
2340 "The number of scheduled activities a user is allowed to create in a single day. Default: 25.",
2341 suggestions: [25]
2342 },
2343 %{
2344 key: :total_user_limit,
2345 type: :integer,
2346 description:
2347 "The number of scheduled activities a user is allowed to create in total. Default: 300.",
2348 suggestions: [300]
2349 },
2350 %{
2351 key: :enabled,
2352 type: :boolean,
2353 description: "Whether scheduled activities are sent to the job queue to be executed"
2354 }
2355 ]
2356 },
2357 %{
2358 group: :pleroma,
2359 key: Pleroma.ActivityExpiration,
2360 type: :group,
2361 description: "Expired activity settings",
2362 children: [
2363 %{
2364 key: :enabled,
2365 type: :boolean,
2366 description: "Whether expired activities will be sent to the job queue to be deleted"
2367 }
2368 ]
2369 },
2370 %{
2371 group: :pleroma,
2372 label: "Pleroma Authenticator",
2373 type: :group,
2374 description: "Authenticator",
2375 children: [
2376 %{
2377 key: Pleroma.Web.Auth.Authenticator,
2378 type: :module,
2379 suggestions: [Pleroma.Web.Auth.PleromaAuthenticator, Pleroma.Web.Auth.LDAPAuthenticator]
2380 }
2381 ]
2382 },
2383 %{
2384 group: :pleroma,
2385 key: :ldap,
2386 label: "LDAP",
2387 type: :group,
2388 description:
2389 "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
2390 " will be verified by trying to authenticate (bind) to a LDAP server." <>
2391 " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
2392 " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
2393 children: [
2394 %{
2395 key: :enabled,
2396 type: :boolean,
2397 description: "Enables LDAP authentication"
2398 },
2399 %{
2400 key: :host,
2401 type: :string,
2402 description: "LDAP server hostname",
2403 suggestions: ["localhosts"]
2404 },
2405 %{
2406 key: :port,
2407 type: :integer,
2408 description: "LDAP port, e.g. 389 or 636",
2409 suggestions: [389, 636]
2410 },
2411 %{
2412 key: :ssl,
2413 label: "SSL",
2414 type: :boolean,
2415 description: "Enable to use SSL, usually implies the port 636"
2416 },
2417 %{
2418 key: :sslopts,
2419 label: "SSL options",
2420 type: :keyword,
2421 description: "Additional SSL options",
2422 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2423 children: [
2424 %{
2425 key: :cacertfile,
2426 type: :string,
2427 description: "Path to file with PEM encoded cacerts",
2428 suggestions: ["path/to/file/with/PEM/cacerts"]
2429 },
2430 %{
2431 key: :verify,
2432 type: :atom,
2433 description: "Type of cert verification",
2434 suggestions: [:verify_peer]
2435 }
2436 ]
2437 },
2438 %{
2439 key: :tls,
2440 label: "TLS",
2441 type: :boolean,
2442 description: "Enable to use STARTTLS, usually implies the port 389"
2443 },
2444 %{
2445 key: :tlsopts,
2446 label: "TLS options",
2447 type: :keyword,
2448 description: "Additional TLS options",
2449 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2450 children: [
2451 %{
2452 key: :cacertfile,
2453 type: :string,
2454 description: "Path to file with PEM encoded cacerts",
2455 suggestions: ["path/to/file/with/PEM/cacerts"]
2456 },
2457 %{
2458 key: :verify,
2459 type: :atom,
2460 description: "Type of cert verification",
2461 suggestions: [:verify_peer]
2462 }
2463 ]
2464 },
2465 %{
2466 key: :base,
2467 type: :string,
2468 description: "LDAP base, e.g. \"dc=example,dc=com\"",
2469 suggestions: ["dc=example,dc=com"]
2470 },
2471 %{
2472 key: :uid,
2473 label: "UID",
2474 type: :string,
2475 description:
2476 "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
2477 suggestions: ["cn"]
2478 }
2479 ]
2480 },
2481 %{
2482 group: :pleroma,
2483 key: :auth,
2484 type: :group,
2485 description: "Authentication / authorization settings",
2486 children: [
2487 %{
2488 key: :enforce_oauth_admin_scope_usage,
2489 label: "Enforce OAuth admin scope usage",
2490 type: :boolean,
2491 description:
2492 "OAuth admin scope requirement toggle. " <>
2493 "If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
2494 "(client app must support admin scopes). If disabled and token doesn't have admin scope(s), " <>
2495 "`is_admin` user flag grants access to admin-specific actions."
2496 },
2497 %{
2498 key: :auth_template,
2499 type: :string,
2500 description:
2501 "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`.",
2502 suggestions: ["show.html"]
2503 },
2504 %{
2505 key: :oauth_consumer_template,
2506 label: "OAuth consumer template",
2507 type: :string,
2508 description:
2509 "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
2510 " `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`.",
2511 suggestions: ["consumer.html"]
2512 },
2513 %{
2514 key: :oauth_consumer_strategies,
2515 label: "OAuth consumer strategies",
2516 type: {:list, :string},
2517 description:
2518 "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
2519 " Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\"" <>
2520 " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
2521 suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
2522 }
2523 ]
2524 },
2525 %{
2526 group: :pleroma,
2527 key: :email_notifications,
2528 type: :group,
2529 description: "Email notifications settings",
2530 children: [
2531 %{
2532 key: :digest,
2533 type: :map,
2534 description:
2535 "emails of \"what you've missed\" for users who have been inactive for a while",
2536 suggestions: [
2537 %{
2538 active: false,
2539 schedule: "0 0 * * 0",
2540 interval: 7,
2541 inactivity_threshold: 7
2542 }
2543 ],
2544 children: [
2545 %{
2546 key: :active,
2547 label: "Enabled",
2548 type: :boolean,
2549 description: "Globally enable or disable digest emails"
2550 },
2551 %{
2552 key: :schedule,
2553 type: :string,
2554 description:
2555 "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\".",
2556 suggestions: ["0 0 * * 0"]
2557 },
2558 %{
2559 key: :interval,
2560 type: :integer,
2561 description: "Minimum interval between digest emails to one user",
2562 suggestions: [7]
2563 },
2564 %{
2565 key: :inactivity_threshold,
2566 type: :integer,
2567 description: "Minimum user inactivity threshold",
2568 suggestions: [7]
2569 }
2570 ]
2571 }
2572 ]
2573 },
2574 %{
2575 group: :pleroma,
2576 key: Pleroma.Emails.UserEmail,
2577 type: :group,
2578 description: "Email template settings",
2579 children: [
2580 %{
2581 key: :logo,
2582 type: :string,
2583 description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
2584 suggestions: ["some/path/logo.png"]
2585 },
2586 %{
2587 key: :styling,
2588 type: :map,
2589 description: "A map with color settings for email templates.",
2590 suggestions: [
2591 %{
2592 link_color: "#d8a070",
2593 background_color: "#2C3645",
2594 content_background_color: "#1B2635",
2595 header_color: "#d8a070",
2596 text_color: "#b9b9ba",
2597 text_muted_color: "#b9b9ba"
2598 }
2599 ],
2600 children: [
2601 %{
2602 key: :link_color,
2603 type: :string,
2604 suggestions: ["#d8a070"]
2605 },
2606 %{
2607 key: :background_color,
2608 type: :string,
2609 suggestions: ["#2C3645"]
2610 },
2611 %{
2612 key: :content_background_color,
2613 type: :string,
2614 suggestions: ["#1B2635"]
2615 },
2616 %{
2617 key: :header_color,
2618 type: :string,
2619 suggestions: ["#d8a070"]
2620 },
2621 %{
2622 key: :text_color,
2623 type: :string,
2624 suggestions: ["#b9b9ba"]
2625 },
2626 %{
2627 key: :text_muted_color,
2628 type: :string,
2629 suggestions: ["#b9b9ba"]
2630 }
2631 ]
2632 }
2633 ]
2634 },
2635 %{
2636 group: :pleroma,
2637 key: Pleroma.Emails.NewUsersDigestEmail,
2638 type: :group,
2639 description: "New users admin email digest",
2640 children: [
2641 %{
2642 key: :enabled,
2643 type: :boolean,
2644 description: "Enables new users admin digest email when `true`"
2645 }
2646 ]
2647 },
2648 %{
2649 group: :pleroma,
2650 key: :oauth2,
2651 label: "OAuth2",
2652 type: :group,
2653 description: "Configure OAuth 2 provider capabilities",
2654 children: [
2655 %{
2656 key: :token_expires_in,
2657 type: :integer,
2658 description: "The lifetime in seconds of the access token",
2659 suggestions: [600]
2660 },
2661 %{
2662 key: :issue_new_refresh_token,
2663 type: :boolean,
2664 description:
2665 "Keeps old refresh token or generate new refresh token when to obtain an access token"
2666 },
2667 %{
2668 key: :clean_expired_tokens,
2669 type: :boolean,
2670 description: "Enable a background job to clean expired OAuth tokens. Default: disabled."
2671 }
2672 ]
2673 },
2674 %{
2675 group: :pleroma,
2676 key: :emoji,
2677 type: :group,
2678 children: [
2679 %{
2680 key: :shortcode_globs,
2681 type: {:list, :string},
2682 description: "Location of custom emoji files. * can be used as a wildcard.",
2683 suggestions: ["/emoji/custom/**/*.png"]
2684 },
2685 %{
2686 key: :pack_extensions,
2687 type: {:list, :string},
2688 description:
2689 "A list of file extensions for emojis, when no emoji.txt for a pack is present",
2690 suggestions: [".png", ".gif"]
2691 },
2692 %{
2693 key: :groups,
2694 type: {:keyword, {:list, :string}},
2695 description:
2696 "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <>
2697 " and the value is the location or array of locations. * can be used as a wildcard.",
2698 suggestions: [
2699 Custom: ["/emoji/*.png", "/emoji/**/*.png"]
2700 ]
2701 },
2702 %{
2703 key: :default_manifest,
2704 type: :string,
2705 description:
2706 "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
2707 " Currently only one manifest can be added (no arrays).",
2708 suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
2709 },
2710 %{
2711 key: :shared_pack_cache_seconds_per_file,
2712 label: "Shared pack cache s/file",
2713 type: :integer,
2714 descpiption:
2715 "When an emoji pack is shared, the archive is created and cached in memory" <>
2716 " for this amount of seconds multiplied by the number of files.",
2717 suggestions: [60]
2718 }
2719 ]
2720 },
2721 %{
2722 group: :pleroma,
2723 key: :rate_limit,
2724 type: :group,
2725 description:
2726 "Rate limit settings. This is an advanced feature enabled only for :authentication by default.",
2727 children: [
2728 %{
2729 key: :search,
2730 type: [:tuple, {:list, :tuple}],
2731 description: "For the search requests (account & status search etc.)",
2732 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2733 },
2734 %{
2735 key: :timeline,
2736 type: [:tuple, {:list, :tuple}],
2737 description: "For requests to timelines (each timeline has it's own limiter)",
2738 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2739 },
2740 %{
2741 key: :app_account_creation,
2742 type: [:tuple, {:list, :tuple}],
2743 description: "For registering user accounts from the same IP address",
2744 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2745 },
2746 %{
2747 key: :relations_actions,
2748 type: [:tuple, {:list, :tuple}],
2749 description: "For actions on relationships with all users (follow, unfollow)",
2750 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2751 },
2752 %{
2753 key: :relation_id_action,
2754 label: "Relation ID action",
2755 type: [:tuple, {:list, :tuple}],
2756 description: "For actions on relation with a specific user (follow, unfollow)",
2757 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2758 },
2759 %{
2760 key: :statuses_actions,
2761 type: [:tuple, {:list, :tuple}],
2762 description:
2763 "For create / delete / fav / unfav / reblog / unreblog actions on any statuses",
2764 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2765 },
2766 %{
2767 key: :status_id_action,
2768 label: "Status ID action",
2769 type: [:tuple, {:list, :tuple}],
2770 description:
2771 "For fav / unfav or reblog / unreblog actions on the same status by the same user",
2772 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2773 },
2774 %{
2775 key: :authentication,
2776 type: [:tuple, {:list, :tuple}],
2777 description: "For authentication create / password check / user existence check requests",
2778 suggestions: [{60_000, 15}]
2779 }
2780 ]
2781 },
2782 %{
2783 group: :esshd,
2784 label: "ESSHD",
2785 type: :group,
2786 description:
2787 "Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
2788 "and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key",
2789 children: [
2790 %{
2791 key: :enabled,
2792 type: :boolean,
2793 description: "Enables SSH"
2794 },
2795 %{
2796 key: :priv_dir,
2797 type: :string,
2798 description: "Dir with SSH keys",
2799 suggestions: ["/some/path/ssh_keys"]
2800 },
2801 %{
2802 key: :handler,
2803 type: :string,
2804 description: "Handler module",
2805 suggestions: ["Pleroma.BBS.Handler"]
2806 },
2807 %{
2808 key: :port,
2809 type: :integer,
2810 description: "Port to connect",
2811 suggestions: [10_022]
2812 },
2813 %{
2814 key: :password_authenticator,
2815 type: :string,
2816 description: "Authenticator module",
2817 suggestions: ["Pleroma.BBS.Authenticator"]
2818 }
2819 ]
2820 },
2821 %{
2822 group: :mime,
2823 label: "Mime Types",
2824 type: :group,
2825 description: "Mime Types settings",
2826 children: [
2827 %{
2828 key: :types,
2829 type: :map,
2830 suggestions: [
2831 %{
2832 "application/xml" => ["xml"],
2833 "application/xrd+xml" => ["xrd+xml"],
2834 "application/jrd+json" => ["jrd+json"],
2835 "application/activity+json" => ["activity+json"],
2836 "application/ld+json" => ["activity+json"]
2837 }
2838 ],
2839 children: [
2840 %{
2841 key: "application/xml",
2842 type: {:list, :string},
2843 suggestions: ["xml"]
2844 },
2845 %{
2846 key: "application/xrd+xml",
2847 type: {:list, :string},
2848 suggestions: ["xrd+xml"]
2849 },
2850 %{
2851 key: "application/jrd+json",
2852 type: {:list, :string},
2853 suggestions: ["jrd+json"]
2854 },
2855 %{
2856 key: "application/activity+json",
2857 type: {:list, :string},
2858 suggestions: ["activity+json"]
2859 },
2860 %{
2861 key: "application/ld+json",
2862 type: {:list, :string},
2863 suggestions: ["activity+json"]
2864 }
2865 ]
2866 }
2867 ]
2868 },
2869 %{
2870 group: :pleroma,
2871 key: :chat,
2872 type: :group,
2873 description: "Pleroma chat settings",
2874 children: [
2875 %{
2876 key: :enabled,
2877 type: :boolean
2878 }
2879 ]
2880 },
2881 %{
2882 group: :pleroma,
2883 key: :http,
2884 label: "HTTP",
2885 type: :group,
2886 description: "HTTP settings",
2887 children: [
2888 %{
2889 key: :proxy_url,
2890 label: "Proxy URL",
2891 type: [:string, :tuple],
2892 description: "Proxy URL",
2893 suggestions: ["localhost:9020", {:socks5, :localhost, 3090}]
2894 },
2895 %{
2896 key: :send_user_agent,
2897 type: :boolean
2898 },
2899 %{
2900 key: :user_agent,
2901 type: [:string, :atom],
2902 description:
2903 "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
2904 suggestions: ["Pleroma", :default]
2905 },
2906 %{
2907 key: :adapter,
2908 type: :keyword,
2909 description: "Adapter specific options",
2910 suggestions: [],
2911 children: [
2912 %{
2913 key: :ssl_options,
2914 type: :keyword,
2915 label: "SSL Options",
2916 description: "SSL options for HTTP adapter",
2917 children: [
2918 %{
2919 key: :versions,
2920 type: {:list, :atom},
2921 description: "List of TLS version to use",
2922 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
2923 }
2924 ]
2925 }
2926 ]
2927 }
2928 ]
2929 },
2930 %{
2931 group: :pleroma,
2932 key: :markup,
2933 label: "Markup Settings",
2934 type: :group,
2935 children: [
2936 %{
2937 key: :allow_inline_images,
2938 type: :boolean
2939 },
2940 %{
2941 key: :allow_headings,
2942 type: :boolean
2943 },
2944 %{
2945 key: :allow_tables,
2946 type: :boolean
2947 },
2948 %{
2949 key: :allow_fonts,
2950 type: :boolean
2951 },
2952 %{
2953 key: :scrub_policy,
2954 type: {:list, :module},
2955 description:
2956 "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name.",
2957 suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]
2958 }
2959 ]
2960 },
2961 %{
2962 group: :pleroma,
2963 key: :user,
2964 type: :group,
2965 children: [
2966 %{
2967 key: :deny_follow_blocked,
2968 type: :boolean
2969 }
2970 ]
2971 },
2972 %{
2973 group: :pleroma,
2974 tab: :mrf,
2975 key: :mrf_normalize_markup,
2976 label: "MRF Normalize Markup",
2977 description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.",
2978 type: :group,
2979 children: [
2980 %{
2981 key: :scrub_policy,
2982 type: :module,
2983 suggestions: [Pleroma.HTML.Scrubber.Default]
2984 }
2985 ]
2986 },
2987 %{
2988 group: :pleroma,
2989 key: Pleroma.User,
2990 type: :group,
2991 children: [
2992 %{
2993 key: :restricted_nicknames,
2994 type: {:list, :string},
2995 suggestions: [
2996 ".well-known",
2997 "~",
2998 "about",
2999 "activities",
3000 "api",
3001 "auth",
3002 "check_password",
3003 "dev",
3004 "friend-requests",
3005 "inbox",
3006 "internal",
3007 "main",
3008 "media",
3009 "nodeinfo",
3010 "notice",
3011 "oauth",
3012 "objects",
3013 "ostatus_subscribe",
3014 "pleroma",
3015 "proxy",
3016 "push",
3017 "registration",
3018 "relay",
3019 "settings",
3020 "status",
3021 "tag",
3022 "user-search",
3023 "user_exists",
3024 "users",
3025 "web"
3026 ]
3027 }
3028 ]
3029 },
3030 %{
3031 group: :cors_plug,
3032 label: "CORS plug config",
3033 type: :group,
3034 children: [
3035 %{
3036 key: :max_age,
3037 type: :integer,
3038 suggestions: [86_400]
3039 },
3040 %{
3041 key: :methods,
3042 type: {:list, :string},
3043 suggestions: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]
3044 },
3045 %{
3046 key: :expose,
3047 type: {:list, :string},
3048 suggestions: [
3049 "Link",
3050 "X-RateLimit-Reset",
3051 "X-RateLimit-Limit",
3052 "X-RateLimit-Remaining",
3053 "X-Request-Id",
3054 "Idempotency-Key"
3055 ]
3056 },
3057 %{
3058 key: :credentials,
3059 type: :boolean
3060 },
3061 %{
3062 key: :headers,
3063 type: {:list, :string},
3064 suggestions: ["Authorization", "Content-Type", "Idempotency-Key"]
3065 }
3066 ]
3067 },
3068 %{
3069 group: :pleroma,
3070 key: Pleroma.Plugs.RemoteIp,
3071 type: :group,
3072 description: """
3073 `Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
3074 **If your instance is not behind at least one reverse proxy, you should not enable this plug.**
3075 """,
3076 children: [
3077 %{
3078 key: :enabled,
3079 type: :boolean,
3080 description: "Enable/disable the plug. Default: disabled."
3081 },
3082 %{
3083 key: :headers,
3084 type: {:list, :string},
3085 description:
3086 "A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Default: `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
3087 },
3088 %{
3089 key: :proxies,
3090 type: {:list, :string},
3091 description:
3092 "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Default: `[]`."
3093 },
3094 %{
3095 key: :reserved,
3096 type: {:list, :string},
3097 description:
3098 "Defaults to [localhost](https://en.wikipedia.org/wiki/Localhost) and [private network](https://en.wikipedia.org/wiki/Private_network)."
3099 }
3100 ]
3101 },
3102 %{
3103 group: :pleroma,
3104 key: :web_cache_ttl,
3105 label: "Web cache TTL",
3106 type: :group,
3107 description:
3108 "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
3109 children: [
3110 %{
3111 key: :activity_pub,
3112 type: :integer,
3113 description:
3114 "Activity pub routes (except question activities). Default: `nil` (no expiration).",
3115 suggestions: [30_000, nil]
3116 },
3117 %{
3118 key: :activity_pub_question,
3119 type: :integer,
3120 description: "Activity pub routes (question activities). Default: `30_000` (30 seconds).",
3121 suggestions: [30_000]
3122 }
3123 ]
3124 },
3125 %{
3126 group: :pleroma,
3127 key: :static_fe,
3128 label: "Static FE",
3129 type: :group,
3130 description:
3131 "Render profiles and posts using server-generated HTML that is viewable without using JavaScript",
3132 children: [
3133 %{
3134 key: :enabled,
3135 type: :boolean,
3136 description: "Enables the rendering of static HTML. Default: disabled."
3137 }
3138 ]
3139 },
3140 %{
3141 group: :pleroma,
3142 key: :feed,
3143 type: :group,
3144 description: "Configure feed rendering",
3145 children: [
3146 %{
3147 key: :post_title,
3148 type: :map,
3149 description: "Configure title rendering",
3150 children: [
3151 %{
3152 key: :max_length,
3153 type: :integer,
3154 description: "Maximum number of characters before truncating title",
3155 suggestions: [100]
3156 },
3157 %{
3158 key: :omission,
3159 type: :string,
3160 description: "Replacement which will be used after truncating string",
3161 suggestions: ["..."]
3162 }
3163 ]
3164 }
3165 ]
3166 },
3167 %{
3168 group: :pleroma,
3169 key: :mrf_object_age,
3170 label: "MRF Object Age",
3171 tab: :mrf,
3172 type: :group,
3173 description:
3174 "Rejects or delists posts based on their timestamp deviance from your server's clock.",
3175 children: [
3176 %{
3177 key: :threshold,
3178 type: :integer,
3179 description: "Required age (in seconds) of a post before actions are taken.",
3180 suggestions: [172_800]
3181 },
3182 %{
3183 key: :actions,
3184 type: {:list, :atom},
3185 description:
3186 "A list of actions to apply to the post. `:delist` removes the post from public timelines; " <>
3187 "`:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; " <>
3188 "`:reject` rejects the message entirely",
3189 suggestions: [:delist, :strip_followers, :reject]
3190 }
3191 ]
3192 },
3193 %{
3194 group: :pleroma,
3195 key: :modules,
3196 type: :group,
3197 description: "Custom Runtime Modules",
3198 children: [
3199 %{
3200 key: :runtime_dir,
3201 type: :string,
3202 description: "A path to custom Elixir modules (such as MRF policies)."
3203 }
3204 ]
3205 },
3206 %{
3207 group: :pleroma,
3208 key: :streamer,
3209 type: :group,
3210 description: "Settings for notifications streamer",
3211 children: [
3212 %{
3213 key: :workers,
3214 type: :integer,
3215 description: "Number of workers to send notifications",
3216 suggestions: [3]
3217 },
3218 %{
3219 key: :overflow_workers,
3220 type: :integer,
3221 description: "Maximum number of workers created if pool is empty",
3222 suggestions: [2]
3223 }
3224 ]
3225 },
3226 %{
3227 group: :pleroma,
3228 key: :connections_pool,
3229 type: :group,
3230 description: "Advanced settings for `gun` connections pool",
3231 children: [
3232 %{
3233 key: :connection_acquisition_wait,
3234 type: :integer,
3235 description:
3236 "Timeout to acquire a connection from pool.The total max time is this value multiplied by the number of retries. Default: 250ms.",
3237 suggestions: [250]
3238 },
3239 %{
3240 key: :connection_acquisition_retries,
3241 type: :integer,
3242 description:
3243 "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5",
3244 suggestions: [5]
3245 },
3246 %{
3247 key: :max_connections,
3248 type: :integer,
3249 description: "Maximum number of connections in the pool. Default: 250 connections.",
3250 suggestions: [250]
3251 },
3252 %{
3253 key: :await_up_timeout,
3254 type: :integer,
3255 description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.",
3256 suggestions: [5000]
3257 },
3258 %{
3259 key: :reclaim_multiplier,
3260 type: :integer,
3261 description:
3262 "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1",
3263 suggestions: [0.1]
3264 }
3265 ]
3266 },
3267 %{
3268 group: :pleroma,
3269 key: :pools,
3270 type: :group,
3271 description: "Advanced settings for `gun` workers pools",
3272 children:
3273 Enum.map([:federation, :media, :upload, :default], fn pool_name ->
3274 %{
3275 key: pool_name,
3276 type: :keyword,
3277 description: "Settings for #{pool_name} pool.",
3278 children: [
3279 %{
3280 key: :size,
3281 type: :integer,
3282 description: "Maximum number of concurrent requests in the pool.",
3283 suggestions: [50]
3284 },
3285 %{
3286 key: :max_waiting,
3287 type: :integer,
3288 description:
3289 "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made",
3290 suggestions: [10]
3291 }
3292 ]
3293 }
3294 end)
3295 },
3296 %{
3297 group: :pleroma,
3298 key: :hackney_pools,
3299 type: :group,
3300 description: "Advanced settings for `hackney` connections pools",
3301 children: [
3302 %{
3303 key: :federation,
3304 type: :keyword,
3305 description: "Settings for federation pool.",
3306 children: [
3307 %{
3308 key: :max_connections,
3309 type: :integer,
3310 description: "Number workers in the pool.",
3311 suggestions: [50]
3312 },
3313 %{
3314 key: :timeout,
3315 type: :integer,
3316 description: "Timeout while `hackney` will wait for response.",
3317 suggestions: [150_000]
3318 }
3319 ]
3320 },
3321 %{
3322 key: :media,
3323 type: :keyword,
3324 description: "Settings for media pool.",
3325 children: [
3326 %{
3327 key: :max_connections,
3328 type: :integer,
3329 description: "Number workers in the pool.",
3330 suggestions: [50]
3331 },
3332 %{
3333 key: :timeout,
3334 type: :integer,
3335 description: "Timeout while `hackney` will wait for response.",
3336 suggestions: [150_000]
3337 }
3338 ]
3339 },
3340 %{
3341 key: :upload,
3342 type: :keyword,
3343 description: "Settings for upload pool.",
3344 children: [
3345 %{
3346 key: :max_connections,
3347 type: :integer,
3348 description: "Number workers in the pool.",
3349 suggestions: [25]
3350 },
3351 %{
3352 key: :timeout,
3353 type: :integer,
3354 description: "Timeout while `hackney` will wait for response.",
3355 suggestions: [300_000]
3356 }
3357 ]
3358 }
3359 ]
3360 },
3361 %{
3362 group: :pleroma,
3363 key: :restrict_unauthenticated,
3364 type: :group,
3365 description:
3366 "Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
3367 children: [
3368 %{
3369 key: :timelines,
3370 type: :map,
3371 description: "Settings for public and federated timelines.",
3372 children: [
3373 %{
3374 key: :local,
3375 type: :boolean,
3376 description: "Disallow view public timeline."
3377 },
3378 %{
3379 key: :federated,
3380 type: :boolean,
3381 description: "Disallow view federated timeline."
3382 }
3383 ]
3384 },
3385 %{
3386 key: :profiles,
3387 type: :map,
3388 description: "Settings for user profiles.",
3389 children: [
3390 %{
3391 key: :local,
3392 type: :boolean,
3393 description: "Disallow view local user profiles."
3394 },
3395 %{
3396 key: :remote,
3397 type: :boolean,
3398 description: "Disallow view remote user profiles."
3399 }
3400 ]
3401 },
3402 %{
3403 key: :activities,
3404 type: :map,
3405 description: "Settings for statuses.",
3406 children: [
3407 %{
3408 key: :local,
3409 type: :boolean,
3410 description: "Disallow view local statuses."
3411 },
3412 %{
3413 key: :remote,
3414 type: :boolean,
3415 description: "Disallow view remote statuses."
3416 }
3417 ]
3418 }
3419 ]
3420 },
3421 %{
3422 group: :pleroma,
3423 key: Pleroma.Web.ApiSpec.CastAndValidate,
3424 type: :group,
3425 children: [
3426 %{
3427 key: :strict,
3428 type: :boolean,
3429 description:
3430 "Enables strict input validation (useful in development, not recommended in production)"
3431 }
3432 ]
3433 },
3434 %{
3435 group: :pleroma,
3436 key: :instances_favicons,
3437 type: :group,
3438 description: "Control favicons for instances",
3439 children: [
3440 %{
3441 key: :enabled,
3442 type: :boolean,
3443 description: "Allow/disallow displaying and getting instances favicons"
3444 }
3445 ]
3446 },
3447 %{
3448 group: :ex_aws,
3449 key: :s3,
3450 type: :group,
3451 descriptions: "S3 service related settings",
3452 children: [
3453 %{
3454 key: :access_key_id,
3455 type: :string,
3456 description: "S3 access key ID",
3457 suggestions: ["AKIAQ8UKHTGIYN7DMWWJ"]
3458 },
3459 %{
3460 key: :secret_access_key,
3461 type: :string,
3462 description: "Secret access key",
3463 suggestions: ["JFGt+fgH1UQ7vLUQjpW+WvjTdV/UNzVxcwn7DkaeFKtBS5LvoXvIiME4NQBsT6ZZ"]
3464 },
3465 %{
3466 key: :host,
3467 type: :string,
3468 description: "S3 host",
3469 suggestions: ["s3.eu-central-1.amazonaws.com"]
3470 }
3471 ]
3472 }
3473 ]