fix sender for 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: :auto_linker,
2281 key: :opts,
2282 label: "Auto Linker",
2283 type: :group,
2284 description: "Configuration for the auto_linker library",
2285 children: [
2286 %{
2287 key: :class,
2288 type: [:string, false],
2289 description: "Specify the class to be added to the generated link. Disable to clear.",
2290 suggestions: ["auto-linker", false]
2291 },
2292 %{
2293 key: :rel,
2294 type: [:string, false],
2295 description: "Override the rel attribute. Disable to clear.",
2296 suggestions: ["ugc", "noopener noreferrer", false]
2297 },
2298 %{
2299 key: :new_window,
2300 type: :boolean,
2301 description: "Link URLs will open in new window/tab"
2302 },
2303 %{
2304 key: :truncate,
2305 type: [:integer, false],
2306 description:
2307 "Set to a number to truncate URLs longer then the number. Truncated URLs will end in `..`",
2308 suggestions: [15, false]
2309 },
2310 %{
2311 key: :strip_prefix,
2312 type: :boolean,
2313 description: "Strip the scheme prefix"
2314 },
2315 %{
2316 key: :extra,
2317 type: :boolean,
2318 description: "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)"
2319 }
2320 ]
2321 },
2322 %{
2323 group: :pleroma,
2324 key: Pleroma.ScheduledActivity,
2325 type: :group,
2326 description: "Scheduled activities settings",
2327 children: [
2328 %{
2329 key: :daily_user_limit,
2330 type: :integer,
2331 description:
2332 "The number of scheduled activities a user is allowed to create in a single day. Default: 25.",
2333 suggestions: [25]
2334 },
2335 %{
2336 key: :total_user_limit,
2337 type: :integer,
2338 description:
2339 "The number of scheduled activities a user is allowed to create in total. Default: 300.",
2340 suggestions: [300]
2341 },
2342 %{
2343 key: :enabled,
2344 type: :boolean,
2345 description: "Whether scheduled activities are sent to the job queue to be executed"
2346 }
2347 ]
2348 },
2349 %{
2350 group: :pleroma,
2351 key: Pleroma.ActivityExpiration,
2352 type: :group,
2353 description: "Expired activity settings",
2354 children: [
2355 %{
2356 key: :enabled,
2357 type: :boolean,
2358 description: "Whether expired activities will be sent to the job queue to be deleted"
2359 }
2360 ]
2361 },
2362 %{
2363 group: :pleroma,
2364 label: "Pleroma Authenticator",
2365 type: :group,
2366 description: "Authenticator",
2367 children: [
2368 %{
2369 key: Pleroma.Web.Auth.Authenticator,
2370 type: :module,
2371 suggestions: [Pleroma.Web.Auth.PleromaAuthenticator, Pleroma.Web.Auth.LDAPAuthenticator]
2372 }
2373 ]
2374 },
2375 %{
2376 group: :pleroma,
2377 key: :ldap,
2378 label: "LDAP",
2379 type: :group,
2380 description:
2381 "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
2382 " will be verified by trying to authenticate (bind) to a LDAP server." <>
2383 " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
2384 " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
2385 children: [
2386 %{
2387 key: :enabled,
2388 type: :boolean,
2389 description: "Enables LDAP authentication"
2390 },
2391 %{
2392 key: :host,
2393 type: :string,
2394 description: "LDAP server hostname",
2395 suggestions: ["localhosts"]
2396 },
2397 %{
2398 key: :port,
2399 type: :integer,
2400 description: "LDAP port, e.g. 389 or 636",
2401 suggestions: [389, 636]
2402 },
2403 %{
2404 key: :ssl,
2405 label: "SSL",
2406 type: :boolean,
2407 description: "Enable to use SSL, usually implies the port 636"
2408 },
2409 %{
2410 key: :sslopts,
2411 label: "SSL options",
2412 type: :keyword,
2413 description: "Additional SSL options",
2414 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2415 children: [
2416 %{
2417 key: :cacertfile,
2418 type: :string,
2419 description: "Path to file with PEM encoded cacerts",
2420 suggestions: ["path/to/file/with/PEM/cacerts"]
2421 },
2422 %{
2423 key: :verify,
2424 type: :atom,
2425 description: "Type of cert verification",
2426 suggestions: [:verify_peer]
2427 }
2428 ]
2429 },
2430 %{
2431 key: :tls,
2432 label: "TLS",
2433 type: :boolean,
2434 description: "Enable to use STARTTLS, usually implies the port 389"
2435 },
2436 %{
2437 key: :tlsopts,
2438 label: "TLS options",
2439 type: :keyword,
2440 description: "Additional TLS options",
2441 suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
2442 children: [
2443 %{
2444 key: :cacertfile,
2445 type: :string,
2446 description: "Path to file with PEM encoded cacerts",
2447 suggestions: ["path/to/file/with/PEM/cacerts"]
2448 },
2449 %{
2450 key: :verify,
2451 type: :atom,
2452 description: "Type of cert verification",
2453 suggestions: [:verify_peer]
2454 }
2455 ]
2456 },
2457 %{
2458 key: :base,
2459 type: :string,
2460 description: "LDAP base, e.g. \"dc=example,dc=com\"",
2461 suggestions: ["dc=example,dc=com"]
2462 },
2463 %{
2464 key: :uid,
2465 label: "UID",
2466 type: :string,
2467 description:
2468 "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
2469 suggestions: ["cn"]
2470 }
2471 ]
2472 },
2473 %{
2474 group: :pleroma,
2475 key: :auth,
2476 type: :group,
2477 description: "Authentication / authorization settings",
2478 children: [
2479 %{
2480 key: :enforce_oauth_admin_scope_usage,
2481 label: "Enforce OAuth admin scope usage",
2482 type: :boolean,
2483 description:
2484 "OAuth admin scope requirement toggle. " <>
2485 "If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
2486 "(client app must support admin scopes). If disabled and token doesn't have admin scope(s), " <>
2487 "`is_admin` user flag grants access to admin-specific actions."
2488 },
2489 %{
2490 key: :auth_template,
2491 type: :string,
2492 description:
2493 "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`.",
2494 suggestions: ["show.html"]
2495 },
2496 %{
2497 key: :oauth_consumer_template,
2498 label: "OAuth consumer template",
2499 type: :string,
2500 description:
2501 "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
2502 " `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`.",
2503 suggestions: ["consumer.html"]
2504 },
2505 %{
2506 key: :oauth_consumer_strategies,
2507 label: "OAuth consumer strategies",
2508 type: {:list, :string},
2509 description:
2510 "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
2511 " Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\"" <>
2512 " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
2513 suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
2514 }
2515 ]
2516 },
2517 %{
2518 group: :pleroma,
2519 key: :email_notifications,
2520 type: :group,
2521 description: "Email notifications settings",
2522 children: [
2523 %{
2524 key: :digest,
2525 type: :map,
2526 description:
2527 "emails of \"what you've missed\" for users who have been inactive for a while",
2528 suggestions: [
2529 %{
2530 active: false,
2531 schedule: "0 0 * * 0",
2532 interval: 7,
2533 inactivity_threshold: 7
2534 }
2535 ],
2536 children: [
2537 %{
2538 key: :active,
2539 label: "Enabled",
2540 type: :boolean,
2541 description: "Globally enable or disable digest emails"
2542 },
2543 %{
2544 key: :schedule,
2545 type: :string,
2546 description:
2547 "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\".",
2548 suggestions: ["0 0 * * 0"]
2549 },
2550 %{
2551 key: :interval,
2552 type: :integer,
2553 description: "Minimum interval between digest emails to one user",
2554 suggestions: [7]
2555 },
2556 %{
2557 key: :inactivity_threshold,
2558 type: :integer,
2559 description: "Minimum user inactivity threshold",
2560 suggestions: [7]
2561 }
2562 ]
2563 }
2564 ]
2565 },
2566 %{
2567 group: :pleroma,
2568 key: Pleroma.Emails.UserEmail,
2569 type: :group,
2570 description: "Email template settings",
2571 children: [
2572 %{
2573 key: :logo,
2574 type: :string,
2575 description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
2576 suggestions: ["some/path/logo.png"]
2577 },
2578 %{
2579 key: :styling,
2580 type: :map,
2581 description: "A map with color settings for email templates.",
2582 suggestions: [
2583 %{
2584 link_color: "#d8a070",
2585 background_color: "#2C3645",
2586 content_background_color: "#1B2635",
2587 header_color: "#d8a070",
2588 text_color: "#b9b9ba",
2589 text_muted_color: "#b9b9ba"
2590 }
2591 ],
2592 children: [
2593 %{
2594 key: :link_color,
2595 type: :string,
2596 suggestions: ["#d8a070"]
2597 },
2598 %{
2599 key: :background_color,
2600 type: :string,
2601 suggestions: ["#2C3645"]
2602 },
2603 %{
2604 key: :content_background_color,
2605 type: :string,
2606 suggestions: ["#1B2635"]
2607 },
2608 %{
2609 key: :header_color,
2610 type: :string,
2611 suggestions: ["#d8a070"]
2612 },
2613 %{
2614 key: :text_color,
2615 type: :string,
2616 suggestions: ["#b9b9ba"]
2617 },
2618 %{
2619 key: :text_muted_color,
2620 type: :string,
2621 suggestions: ["#b9b9ba"]
2622 }
2623 ]
2624 }
2625 ]
2626 },
2627 %{
2628 group: :pleroma,
2629 key: Pleroma.Emails.NewUsersDigestEmail,
2630 type: :group,
2631 description: "New users admin email digest",
2632 children: [
2633 %{
2634 key: :enabled,
2635 type: :boolean,
2636 description: "Enables new users admin digest email when `true`"
2637 }
2638 ]
2639 },
2640 %{
2641 group: :pleroma,
2642 key: :oauth2,
2643 label: "OAuth2",
2644 type: :group,
2645 description: "Configure OAuth 2 provider capabilities",
2646 children: [
2647 %{
2648 key: :token_expires_in,
2649 type: :integer,
2650 description: "The lifetime in seconds of the access token",
2651 suggestions: [600]
2652 },
2653 %{
2654 key: :issue_new_refresh_token,
2655 type: :boolean,
2656 description:
2657 "Keeps old refresh token or generate new refresh token when to obtain an access token"
2658 },
2659 %{
2660 key: :clean_expired_tokens,
2661 type: :boolean,
2662 description: "Enable a background job to clean expired OAuth tokens. Default: disabled."
2663 }
2664 ]
2665 },
2666 %{
2667 group: :pleroma,
2668 key: :emoji,
2669 type: :group,
2670 children: [
2671 %{
2672 key: :shortcode_globs,
2673 type: {:list, :string},
2674 description: "Location of custom emoji files. * can be used as a wildcard.",
2675 suggestions: ["/emoji/custom/**/*.png"]
2676 },
2677 %{
2678 key: :pack_extensions,
2679 type: {:list, :string},
2680 description:
2681 "A list of file extensions for emojis, when no emoji.txt for a pack is present",
2682 suggestions: [".png", ".gif"]
2683 },
2684 %{
2685 key: :groups,
2686 type: {:keyword, {:list, :string}},
2687 description:
2688 "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <>
2689 " and the value is the location or array of locations. * can be used as a wildcard.",
2690 suggestions: [
2691 Custom: ["/emoji/*.png", "/emoji/**/*.png"]
2692 ]
2693 },
2694 %{
2695 key: :default_manifest,
2696 type: :string,
2697 description:
2698 "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
2699 " Currently only one manifest can be added (no arrays).",
2700 suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
2701 },
2702 %{
2703 key: :shared_pack_cache_seconds_per_file,
2704 label: "Shared pack cache s/file",
2705 type: :integer,
2706 descpiption:
2707 "When an emoji pack is shared, the archive is created and cached in memory" <>
2708 " for this amount of seconds multiplied by the number of files.",
2709 suggestions: [60]
2710 }
2711 ]
2712 },
2713 %{
2714 group: :pleroma,
2715 key: :rate_limit,
2716 type: :group,
2717 description:
2718 "Rate limit settings. This is an advanced feature enabled only for :authentication by default.",
2719 children: [
2720 %{
2721 key: :search,
2722 type: [:tuple, {:list, :tuple}],
2723 description: "For the search requests (account & status search etc.)",
2724 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2725 },
2726 %{
2727 key: :timeline,
2728 type: [:tuple, {:list, :tuple}],
2729 description: "For requests to timelines (each timeline has it's own limiter)",
2730 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2731 },
2732 %{
2733 key: :app_account_creation,
2734 type: [:tuple, {:list, :tuple}],
2735 description: "For registering user accounts from the same IP address",
2736 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2737 },
2738 %{
2739 key: :relations_actions,
2740 type: [:tuple, {:list, :tuple}],
2741 description: "For actions on relationships with all users (follow, unfollow)",
2742 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2743 },
2744 %{
2745 key: :relation_id_action,
2746 label: "Relation ID action",
2747 type: [:tuple, {:list, :tuple}],
2748 description: "For actions on relation with a specific user (follow, unfollow)",
2749 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2750 },
2751 %{
2752 key: :statuses_actions,
2753 type: [:tuple, {:list, :tuple}],
2754 description:
2755 "For create / delete / fav / unfav / reblog / unreblog actions on any statuses",
2756 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2757 },
2758 %{
2759 key: :status_id_action,
2760 label: "Status ID action",
2761 type: [:tuple, {:list, :tuple}],
2762 description:
2763 "For fav / unfav or reblog / unreblog actions on the same status by the same user",
2764 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2765 },
2766 %{
2767 key: :authentication,
2768 type: [:tuple, {:list, :tuple}],
2769 description: "For authentication create / password check / user existence check requests",
2770 suggestions: [{60_000, 15}]
2771 }
2772 ]
2773 },
2774 %{
2775 group: :esshd,
2776 label: "ESSHD",
2777 type: :group,
2778 description:
2779 "Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
2780 "and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key",
2781 children: [
2782 %{
2783 key: :enabled,
2784 type: :boolean,
2785 description: "Enables SSH"
2786 },
2787 %{
2788 key: :priv_dir,
2789 type: :string,
2790 description: "Dir with SSH keys",
2791 suggestions: ["/some/path/ssh_keys"]
2792 },
2793 %{
2794 key: :handler,
2795 type: :string,
2796 description: "Handler module",
2797 suggestions: ["Pleroma.BBS.Handler"]
2798 },
2799 %{
2800 key: :port,
2801 type: :integer,
2802 description: "Port to connect",
2803 suggestions: [10_022]
2804 },
2805 %{
2806 key: :password_authenticator,
2807 type: :string,
2808 description: "Authenticator module",
2809 suggestions: ["Pleroma.BBS.Authenticator"]
2810 }
2811 ]
2812 },
2813 %{
2814 group: :mime,
2815 label: "Mime Types",
2816 type: :group,
2817 description: "Mime Types settings",
2818 children: [
2819 %{
2820 key: :types,
2821 type: :map,
2822 suggestions: [
2823 %{
2824 "application/xml" => ["xml"],
2825 "application/xrd+xml" => ["xrd+xml"],
2826 "application/jrd+json" => ["jrd+json"],
2827 "application/activity+json" => ["activity+json"],
2828 "application/ld+json" => ["activity+json"]
2829 }
2830 ],
2831 children: [
2832 %{
2833 key: "application/xml",
2834 type: {:list, :string},
2835 suggestions: ["xml"]
2836 },
2837 %{
2838 key: "application/xrd+xml",
2839 type: {:list, :string},
2840 suggestions: ["xrd+xml"]
2841 },
2842 %{
2843 key: "application/jrd+json",
2844 type: {:list, :string},
2845 suggestions: ["jrd+json"]
2846 },
2847 %{
2848 key: "application/activity+json",
2849 type: {:list, :string},
2850 suggestions: ["activity+json"]
2851 },
2852 %{
2853 key: "application/ld+json",
2854 type: {:list, :string},
2855 suggestions: ["activity+json"]
2856 }
2857 ]
2858 }
2859 ]
2860 },
2861 %{
2862 group: :pleroma,
2863 key: :chat,
2864 type: :group,
2865 description: "Pleroma chat settings",
2866 children: [
2867 %{
2868 key: :enabled,
2869 type: :boolean
2870 }
2871 ]
2872 },
2873 %{
2874 group: :pleroma,
2875 key: :http,
2876 label: "HTTP",
2877 type: :group,
2878 description: "HTTP settings",
2879 children: [
2880 %{
2881 key: :proxy_url,
2882 label: "Proxy URL",
2883 type: [:string, :tuple],
2884 description: "Proxy URL",
2885 suggestions: ["localhost:9020", {:socks5, :localhost, 3090}]
2886 },
2887 %{
2888 key: :send_user_agent,
2889 type: :boolean
2890 },
2891 %{
2892 key: :user_agent,
2893 type: [:string, :atom],
2894 description:
2895 "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
2896 suggestions: ["Pleroma", :default]
2897 },
2898 %{
2899 key: :adapter,
2900 type: :keyword,
2901 description: "Adapter specific options",
2902 suggestions: [],
2903 children: [
2904 %{
2905 key: :ssl_options,
2906 type: :keyword,
2907 label: "SSL Options",
2908 description: "SSL options for HTTP adapter",
2909 children: [
2910 %{
2911 key: :versions,
2912 type: {:list, :atom},
2913 description: "List of TLS version to use",
2914 suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
2915 }
2916 ]
2917 }
2918 ]
2919 }
2920 ]
2921 },
2922 %{
2923 group: :pleroma,
2924 key: :markup,
2925 label: "Markup Settings",
2926 type: :group,
2927 children: [
2928 %{
2929 key: :allow_inline_images,
2930 type: :boolean
2931 },
2932 %{
2933 key: :allow_headings,
2934 type: :boolean
2935 },
2936 %{
2937 key: :allow_tables,
2938 type: :boolean
2939 },
2940 %{
2941 key: :allow_fonts,
2942 type: :boolean
2943 },
2944 %{
2945 key: :scrub_policy,
2946 type: {:list, :module},
2947 description:
2948 "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name.",
2949 suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]
2950 }
2951 ]
2952 },
2953 %{
2954 group: :pleroma,
2955 key: :user,
2956 type: :group,
2957 children: [
2958 %{
2959 key: :deny_follow_blocked,
2960 type: :boolean
2961 }
2962 ]
2963 },
2964 %{
2965 group: :pleroma,
2966 tab: :mrf,
2967 key: :mrf_normalize_markup,
2968 label: "MRF Normalize Markup",
2969 description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.",
2970 type: :group,
2971 children: [
2972 %{
2973 key: :scrub_policy,
2974 type: :module,
2975 suggestions: [Pleroma.HTML.Scrubber.Default]
2976 }
2977 ]
2978 },
2979 %{
2980 group: :pleroma,
2981 key: Pleroma.User,
2982 type: :group,
2983 children: [
2984 %{
2985 key: :restricted_nicknames,
2986 type: {:list, :string},
2987 suggestions: [
2988 ".well-known",
2989 "~",
2990 "about",
2991 "activities",
2992 "api",
2993 "auth",
2994 "check_password",
2995 "dev",
2996 "friend-requests",
2997 "inbox",
2998 "internal",
2999 "main",
3000 "media",
3001 "nodeinfo",
3002 "notice",
3003 "oauth",
3004 "objects",
3005 "ostatus_subscribe",
3006 "pleroma",
3007 "proxy",
3008 "push",
3009 "registration",
3010 "relay",
3011 "settings",
3012 "status",
3013 "tag",
3014 "user-search",
3015 "user_exists",
3016 "users",
3017 "web"
3018 ]
3019 }
3020 ]
3021 },
3022 %{
3023 group: :cors_plug,
3024 label: "CORS plug config",
3025 type: :group,
3026 children: [
3027 %{
3028 key: :max_age,
3029 type: :integer,
3030 suggestions: [86_400]
3031 },
3032 %{
3033 key: :methods,
3034 type: {:list, :string},
3035 suggestions: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]
3036 },
3037 %{
3038 key: :expose,
3039 type: {:list, :string},
3040 suggestions: [
3041 "Link",
3042 "X-RateLimit-Reset",
3043 "X-RateLimit-Limit",
3044 "X-RateLimit-Remaining",
3045 "X-Request-Id",
3046 "Idempotency-Key"
3047 ]
3048 },
3049 %{
3050 key: :credentials,
3051 type: :boolean
3052 },
3053 %{
3054 key: :headers,
3055 type: {:list, :string},
3056 suggestions: ["Authorization", "Content-Type", "Idempotency-Key"]
3057 }
3058 ]
3059 },
3060 %{
3061 group: :pleroma,
3062 key: Pleroma.Plugs.RemoteIp,
3063 type: :group,
3064 description: """
3065 `Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
3066 **If your instance is not behind at least one reverse proxy, you should not enable this plug.**
3067 """,
3068 children: [
3069 %{
3070 key: :enabled,
3071 type: :boolean,
3072 description: "Enable/disable the plug. Default: disabled."
3073 },
3074 %{
3075 key: :headers,
3076 type: {:list, :string},
3077 description:
3078 "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]`."
3079 },
3080 %{
3081 key: :proxies,
3082 type: {:list, :string},
3083 description:
3084 "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Default: `[]`."
3085 },
3086 %{
3087 key: :reserved,
3088 type: {:list, :string},
3089 description:
3090 "Defaults to [localhost](https://en.wikipedia.org/wiki/Localhost) and [private network](https://en.wikipedia.org/wiki/Private_network)."
3091 }
3092 ]
3093 },
3094 %{
3095 group: :pleroma,
3096 key: :web_cache_ttl,
3097 label: "Web cache TTL",
3098 type: :group,
3099 description:
3100 "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
3101 children: [
3102 %{
3103 key: :activity_pub,
3104 type: :integer,
3105 description:
3106 "Activity pub routes (except question activities). Default: `nil` (no expiration).",
3107 suggestions: [30_000, nil]
3108 },
3109 %{
3110 key: :activity_pub_question,
3111 type: :integer,
3112 description: "Activity pub routes (question activities). Default: `30_000` (30 seconds).",
3113 suggestions: [30_000]
3114 }
3115 ]
3116 },
3117 %{
3118 group: :pleroma,
3119 key: :static_fe,
3120 label: "Static FE",
3121 type: :group,
3122 description:
3123 "Render profiles and posts using server-generated HTML that is viewable without using JavaScript",
3124 children: [
3125 %{
3126 key: :enabled,
3127 type: :boolean,
3128 description: "Enables the rendering of static HTML. Default: disabled."
3129 }
3130 ]
3131 },
3132 %{
3133 group: :pleroma,
3134 key: :feed,
3135 type: :group,
3136 description: "Configure feed rendering",
3137 children: [
3138 %{
3139 key: :post_title,
3140 type: :map,
3141 description: "Configure title rendering",
3142 children: [
3143 %{
3144 key: :max_length,
3145 type: :integer,
3146 description: "Maximum number of characters before truncating title",
3147 suggestions: [100]
3148 },
3149 %{
3150 key: :omission,
3151 type: :string,
3152 description: "Replacement which will be used after truncating string",
3153 suggestions: ["..."]
3154 }
3155 ]
3156 }
3157 ]
3158 },
3159 %{
3160 group: :pleroma,
3161 key: :mrf_object_age,
3162 label: "MRF Object Age",
3163 tab: :mrf,
3164 type: :group,
3165 description:
3166 "Rejects or delists posts based on their timestamp deviance from your server's clock.",
3167 children: [
3168 %{
3169 key: :threshold,
3170 type: :integer,
3171 description: "Required age (in seconds) of a post before actions are taken.",
3172 suggestions: [172_800]
3173 },
3174 %{
3175 key: :actions,
3176 type: {:list, :atom},
3177 description:
3178 "A list of actions to apply to the post. `:delist` removes the post from public timelines; " <>
3179 "`:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; " <>
3180 "`:reject` rejects the message entirely",
3181 suggestions: [:delist, :strip_followers, :reject]
3182 }
3183 ]
3184 },
3185 %{
3186 group: :pleroma,
3187 key: :modules,
3188 type: :group,
3189 description: "Custom Runtime Modules",
3190 children: [
3191 %{
3192 key: :runtime_dir,
3193 type: :string,
3194 description: "A path to custom Elixir modules (such as MRF policies)."
3195 }
3196 ]
3197 },
3198 %{
3199 group: :pleroma,
3200 key: :streamer,
3201 type: :group,
3202 description: "Settings for notifications streamer",
3203 children: [
3204 %{
3205 key: :workers,
3206 type: :integer,
3207 description: "Number of workers to send notifications",
3208 suggestions: [3]
3209 },
3210 %{
3211 key: :overflow_workers,
3212 type: :integer,
3213 description: "Maximum number of workers created if pool is empty",
3214 suggestions: [2]
3215 }
3216 ]
3217 },
3218 %{
3219 group: :pleroma,
3220 key: :connections_pool,
3221 type: :group,
3222 description: "Advanced settings for `gun` connections pool",
3223 children: [
3224 %{
3225 key: :connection_acquisition_wait,
3226 type: :integer,
3227 description:
3228 "Timeout to acquire a connection from pool.The total max time is this value multiplied by the number of retries. Default: 250ms.",
3229 suggestions: [250]
3230 },
3231 %{
3232 key: :connection_acquisition_retries,
3233 type: :integer,
3234 description:
3235 "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5",
3236 suggestions: [5]
3237 },
3238 %{
3239 key: :max_connections,
3240 type: :integer,
3241 description: "Maximum number of connections in the pool. Default: 250 connections.",
3242 suggestions: [250]
3243 },
3244 %{
3245 key: :await_up_timeout,
3246 type: :integer,
3247 description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.",
3248 suggestions: [5000]
3249 },
3250 %{
3251 key: :reclaim_multiplier,
3252 type: :integer,
3253 description:
3254 "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",
3255 suggestions: [0.1]
3256 }
3257 ]
3258 },
3259 %{
3260 group: :pleroma,
3261 key: :pools,
3262 type: :group,
3263 description: "Advanced settings for `gun` workers pools",
3264 children:
3265 Enum.map([:federation, :media, :upload, :default], fn pool_name ->
3266 %{
3267 key: pool_name,
3268 type: :keyword,
3269 description: "Settings for #{pool_name} pool.",
3270 children: [
3271 %{
3272 key: :size,
3273 type: :integer,
3274 description: "Maximum number of concurrent requests in the pool.",
3275 suggestions: [50]
3276 },
3277 %{
3278 key: :max_waiting,
3279 type: :integer,
3280 description:
3281 "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",
3282 suggestions: [10]
3283 }
3284 ]
3285 }
3286 end)
3287 },
3288 %{
3289 group: :pleroma,
3290 key: :hackney_pools,
3291 type: :group,
3292 description: "Advanced settings for `hackney` connections pools",
3293 children: [
3294 %{
3295 key: :federation,
3296 type: :keyword,
3297 description: "Settings for federation pool.",
3298 children: [
3299 %{
3300 key: :max_connections,
3301 type: :integer,
3302 description: "Number workers in the pool.",
3303 suggestions: [50]
3304 },
3305 %{
3306 key: :timeout,
3307 type: :integer,
3308 description: "Timeout while `hackney` will wait for response.",
3309 suggestions: [150_000]
3310 }
3311 ]
3312 },
3313 %{
3314 key: :media,
3315 type: :keyword,
3316 description: "Settings for media pool.",
3317 children: [
3318 %{
3319 key: :max_connections,
3320 type: :integer,
3321 description: "Number workers in the pool.",
3322 suggestions: [50]
3323 },
3324 %{
3325 key: :timeout,
3326 type: :integer,
3327 description: "Timeout while `hackney` will wait for response.",
3328 suggestions: [150_000]
3329 }
3330 ]
3331 },
3332 %{
3333 key: :upload,
3334 type: :keyword,
3335 description: "Settings for upload pool.",
3336 children: [
3337 %{
3338 key: :max_connections,
3339 type: :integer,
3340 description: "Number workers in the pool.",
3341 suggestions: [25]
3342 },
3343 %{
3344 key: :timeout,
3345 type: :integer,
3346 description: "Timeout while `hackney` will wait for response.",
3347 suggestions: [300_000]
3348 }
3349 ]
3350 }
3351 ]
3352 },
3353 %{
3354 group: :pleroma,
3355 key: :restrict_unauthenticated,
3356 type: :group,
3357 description:
3358 "Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
3359 children: [
3360 %{
3361 key: :timelines,
3362 type: :map,
3363 description: "Settings for public and federated timelines.",
3364 children: [
3365 %{
3366 key: :local,
3367 type: :boolean,
3368 description: "Disallow view public timeline."
3369 },
3370 %{
3371 key: :federated,
3372 type: :boolean,
3373 description: "Disallow view federated timeline."
3374 }
3375 ]
3376 },
3377 %{
3378 key: :profiles,
3379 type: :map,
3380 description: "Settings for user profiles.",
3381 children: [
3382 %{
3383 key: :local,
3384 type: :boolean,
3385 description: "Disallow view local user profiles."
3386 },
3387 %{
3388 key: :remote,
3389 type: :boolean,
3390 description: "Disallow view remote user profiles."
3391 }
3392 ]
3393 },
3394 %{
3395 key: :activities,
3396 type: :map,
3397 description: "Settings for statuses.",
3398 children: [
3399 %{
3400 key: :local,
3401 type: :boolean,
3402 description: "Disallow view local statuses."
3403 },
3404 %{
3405 key: :remote,
3406 type: :boolean,
3407 description: "Disallow view remote statuses."
3408 }
3409 ]
3410 }
3411 ]
3412 },
3413 %{
3414 group: :pleroma,
3415 key: Pleroma.Web.ApiSpec.CastAndValidate,
3416 type: :group,
3417 children: [
3418 %{
3419 key: :strict,
3420 type: :boolean,
3421 description:
3422 "Enables strict input validation (useful in development, not recommended in production)"
3423 }
3424 ]
3425 },
3426 %{
3427 group: :pleroma,
3428 key: :instances_favicons,
3429 type: :group,
3430 description: "Control favicons for instances",
3431 children: [
3432 %{
3433 key: :enabled,
3434 type: :boolean,
3435 description: "Allow/disallow displaying and getting instances favicons"
3436 }
3437 ]
3438 },
3439 %{
3440 group: :ex_aws,
3441 key: :s3,
3442 type: :group,
3443 descriptions: "S3 service related settings",
3444 children: [
3445 %{
3446 key: :access_key_id,
3447 type: :string,
3448 description: "S3 access key ID",
3449 suggestions: ["AKIAQ8UKHTGIYN7DMWWJ"]
3450 },
3451 %{
3452 key: :secret_access_key,
3453 type: :string,
3454 description: "Secret access key",
3455 suggestions: ["JFGt+fgH1UQ7vLUQjpW+WvjTdV/UNzVxcwn7DkaeFKtBS5LvoXvIiME4NQBsT6ZZ"]
3456 },
3457 %{
3458 key: :host,
3459 type: :string,
3460 description: "S3 host",
3461 suggestions: ["s3.eu-central-1.amazonaws.com"]
3462 }
3463 ]
3464 }
3465 ]