Merge branch 'fix-admin-api-scope' into 'develop'
[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: [
27 Generator.uploaders_list()
28 ]
29 },
30 %{
31 key: :filters,
32 type: {:list, :module},
33 description: "List of filter modules for uploads",
34 suggestions: [
35 Generator.filters_list()
36 ]
37 },
38 %{
39 key: :link_name,
40 type: :boolean,
41 description:
42 "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`"
43 },
44 %{
45 key: :base_url,
46 type: :string,
47 description: "Base url for the uploads, needed if you use CDN",
48 suggestions: [
49 "https://cdn-host.com"
50 ]
51 },
52 %{
53 key: :proxy_remote,
54 type: :boolean,
55 description:
56 "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected."
57 },
58 %{
59 key: :proxy_opts,
60 type: :keyword,
61 description: "Proxy options, see `Pleroma.ReverseProxy` documentation"
62 }
63 ]
64 },
65 %{
66 group: :pleroma,
67 key: Pleroma.Uploaders.Local,
68 type: :group,
69 description: "Local uploader-related settings",
70 children: [
71 %{
72 key: :uploads,
73 type: :string,
74 description: "Path where user uploads will be saved",
75 suggestions: [
76 "uploads"
77 ]
78 }
79 ]
80 },
81 %{
82 group: :pleroma,
83 key: Pleroma.Uploaders.S3,
84 type: :group,
85 description: "S3 uploader-related settings",
86 children: [
87 %{
88 key: :bucket,
89 type: :string,
90 description: "S3 bucket",
91 suggestions: [
92 "bucket"
93 ]
94 },
95 %{
96 key: :bucket_namespace,
97 type: :string,
98 description: "S3 bucket namespace",
99 suggestions: ["pleroma"]
100 },
101 %{
102 key: :public_endpoint,
103 type: :string,
104 description: "S3 endpoint",
105 suggestions: ["https://s3.amazonaws.com"]
106 },
107 %{
108 key: :truncated_namespace,
109 type: :string,
110 description:
111 "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
112 " For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint."
113 },
114 %{
115 key: :streaming_enabled,
116 type: :boolean,
117 description:
118 "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."
119 }
120 ]
121 },
122 %{
123 group: :pleroma,
124 key: Pleroma.Upload.Filter.Mogrify,
125 type: :group,
126 description: "Uploads mogrify filter settings",
127 children: [
128 %{
129 key: :args,
130 type: [:string, {:list, :string}, {:list, :tuple}],
131 description: "List of actions for the mogrify command",
132 suggestions: [
133 "strip",
134 ["strip", "auto-orient"],
135 [{"implode", "1"}],
136 ["strip", "auto-orient", {"implode", "1"}]
137 ]
138 }
139 ]
140 },
141 %{
142 group: :pleroma,
143 key: Pleroma.Upload.Filter.AnonymizeFilename,
144 type: :group,
145 description: "Filter replaces the filename of the upload",
146 children: [
147 %{
148 key: :text,
149 type: :string,
150 description:
151 "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original" <>
152 " filename extension by using {extension}, for example custom-file-name.{extension}",
153 suggestions: [
154 "custom-file-name.{extension}",
155 nil
156 ]
157 }
158 ]
159 },
160 %{
161 group: :pleroma,
162 key: Pleroma.Emails.Mailer,
163 type: :group,
164 description: "Mailer-related settings",
165 children: [
166 %{
167 key: :adapter,
168 type: :module,
169 description:
170 "One of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters)," <>
171 " or Swoosh.Adapters.Local for in-memory mailbox",
172 suggestions: [
173 Swoosh.Adapters.SMTP,
174 Swoosh.Adapters.Sendgrid,
175 Swoosh.Adapters.Sendmail,
176 Swoosh.Adapters.Mandrill,
177 Swoosh.Adapters.Mailgun,
178 Swoosh.Adapters.Mailjet,
179 Swoosh.Adapters.Postmark,
180 Swoosh.Adapters.SparkPost,
181 Swoosh.Adapters.AmazonSES,
182 Swoosh.Adapters.Dyn,
183 Swoosh.Adapters.SocketLabs,
184 Swoosh.Adapters.Gmail
185 ]
186 },
187 %{
188 key: :enabled,
189 type: :boolean,
190 description: "Allow/disallow send emails"
191 },
192 %{
193 group: {:subgroup, Swoosh.Adapters.SMTP},
194 key: :relay,
195 type: :string,
196 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
197 suggestions: ["smtp.gmail.com"]
198 },
199 %{
200 group: {:subgroup, Swoosh.Adapters.SMTP},
201 key: :username,
202 type: :string,
203 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
204 suggestions: ["pleroma"]
205 },
206 %{
207 group: {:subgroup, Swoosh.Adapters.SMTP},
208 key: :password,
209 type: :string,
210 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
211 suggestions: ["password"]
212 },
213 %{
214 group: {:subgroup, Swoosh.Adapters.SMTP},
215 key: :ssl,
216 type: :boolean,
217 description: "`Swoosh.Adapters.SMTP` adapter specific setting"
218 },
219 %{
220 group: {:subgroup, Swoosh.Adapters.SMTP},
221 key: :tls,
222 type: :atom,
223 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
224 suggestions: [:always, :never, :if_available]
225 },
226 %{
227 group: {:subgroup, Swoosh.Adapters.SMTP},
228 key: :auth,
229 type: :atom,
230 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
231 suggestions: [:always, :never, :if_available]
232 },
233 %{
234 group: {:subgroup, Swoosh.Adapters.SMTP},
235 key: :port,
236 type: :integer,
237 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
238 suggestions: [1025]
239 },
240 %{
241 group: {:subgroup, Swoosh.Adapters.SMTP},
242 key: :retries,
243 type: :integer,
244 description: "`Swoosh.Adapters.SMTP` adapter specific setting",
245 suggestions: [5]
246 },
247 %{
248 group: {:subgroup, Swoosh.Adapters.SMTP},
249 key: :no_mx_lookups,
250 type: :boolean,
251 description: "`Swoosh.Adapters.SMTP` adapter specific setting"
252 },
253 %{
254 group: {:subgroup, Swoosh.Adapters.Sendgrid},
255 key: :api_key,
256 type: :string,
257 description: "`Swoosh.Adapters.Sendgrid` adapter specific setting",
258 suggestions: ["my-api-key"]
259 },
260 %{
261 group: {:subgroup, Swoosh.Adapters.Sendmail},
262 key: :cmd_path,
263 type: :string,
264 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
265 suggestions: ["/usr/bin/sendmail"]
266 },
267 %{
268 group: {:subgroup, Swoosh.Adapters.Sendmail},
269 key: :cmd_args,
270 type: :string,
271 description: "`Swoosh.Adapters.Sendmail` adapter specific setting",
272 suggestions: ["-N delay,failure,success"]
273 },
274 %{
275 group: {:subgroup, Swoosh.Adapters.Sendmail},
276 key: :qmail,
277 type: :boolean,
278 description: "`Swoosh.Adapters.Sendmail` adapter specific setting"
279 },
280 %{
281 group: {:subgroup, Swoosh.Adapters.Mandrill},
282 key: :api_key,
283 type: :string,
284 description: "`Swoosh.Adapters.Mandrill` adapter specific setting",
285 suggestions: ["my-api-key"]
286 },
287 %{
288 group: {:subgroup, Swoosh.Adapters.Mailgun},
289 key: :api_key,
290 type: :string,
291 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
292 suggestions: ["my-api-key"]
293 },
294 %{
295 group: {:subgroup, Swoosh.Adapters.Mailgun},
296 key: :domain,
297 type: :string,
298 description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
299 suggestions: ["pleroma.com"]
300 },
301 %{
302 group: {:subgroup, Swoosh.Adapters.Mailjet},
303 key: :api_key,
304 type: :string,
305 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
306 suggestions: ["my-api-key"]
307 },
308 %{
309 group: {:subgroup, Swoosh.Adapters.Mailjet},
310 key: :secret,
311 type: :string,
312 description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
313 suggestions: ["my-secret-key"]
314 },
315 %{
316 group: {:subgroup, Swoosh.Adapters.Postmark},
317 key: :api_key,
318 type: :string,
319 description: "`Swoosh.Adapters.Postmark` adapter specific setting",
320 suggestions: ["my-api-key"]
321 },
322 %{
323 group: {:subgroup, Swoosh.Adapters.SparkPost},
324 key: :api_key,
325 type: :string,
326 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
327 suggestions: ["my-api-key"]
328 },
329 %{
330 group: {:subgroup, Swoosh.Adapters.SparkPost},
331 key: :endpoint,
332 type: :string,
333 description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
334 suggestions: ["https://api.sparkpost.com/api/v1"]
335 },
336 %{
337 group: {:subgroup, Swoosh.Adapters.AmazonSES},
338 key: :region,
339 type: {:string},
340 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
341 suggestions: ["us-east-1", "us-east-2"]
342 },
343 %{
344 group: {:subgroup, Swoosh.Adapters.AmazonSES},
345 key: :access_key,
346 type: :string,
347 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
348 suggestions: ["aws-access-key"]
349 },
350 %{
351 group: {:subgroup, Swoosh.Adapters.AmazonSES},
352 key: :secret,
353 type: :string,
354 description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
355 suggestions: ["aws-secret-key"]
356 },
357 %{
358 group: {:subgroup, Swoosh.Adapters.Dyn},
359 key: :api_key,
360 type: :string,
361 description: "`Swoosh.Adapters.Dyn` adapter specific setting",
362 suggestions: ["my-api-key"]
363 },
364 %{
365 group: {:subgroup, Swoosh.Adapters.SocketLabs},
366 key: :server_id,
367 type: :string,
368 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
369 },
370 %{
371 group: {:subgroup, Swoosh.Adapters.SocketLabs},
372 key: :api_key,
373 type: :string,
374 description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
375 },
376 %{
377 group: {:subgroup, Swoosh.Adapters.Gmail},
378 key: :access_token,
379 type: :string,
380 description: "`Swoosh.Adapters.Gmail` adapter specific setting"
381 }
382 ]
383 },
384 %{
385 group: :pleroma,
386 key: :uri_schemes,
387 type: :group,
388 description: "URI schemes related settings",
389 children: [
390 %{
391 key: :valid_schemes,
392 type: {:list, :string},
393 description: "List of the scheme part that is considered valid to be an URL",
394 suggestions: [
395 [
396 "https",
397 "http",
398 "dat",
399 "dweb",
400 "gopher",
401 "ipfs",
402 "ipns",
403 "irc",
404 "ircs",
405 "magnet",
406 "mailto",
407 "mumble",
408 "ssb",
409 "xmpp"
410 ]
411 ]
412 }
413 ]
414 },
415 %{
416 group: :pleroma,
417 key: :instance,
418 type: :group,
419 description: "Instance-related settings",
420 children: [
421 %{
422 key: :name,
423 type: :string,
424 description: "Name of the instance",
425 suggestions: [
426 "Pleroma"
427 ]
428 },
429 %{
430 key: :email,
431 type: :string,
432 description: "Email used to reach an Administrator/Moderator of the instance",
433 suggestions: [
434 "email@example.com"
435 ]
436 },
437 %{
438 key: :notify_email,
439 type: :string,
440 description: "Email used for notifications",
441 suggestions: [
442 "notify@example.com"
443 ]
444 },
445 %{
446 key: :description,
447 type: :string,
448 description: "The instance's description, can be seen in nodeinfo and /api/v1/instance",
449 suggestions: [
450 "Very cool instance"
451 ]
452 },
453 %{
454 key: :limit,
455 type: :integer,
456 description: "Posts character limit (CW/Subject included in the counter)",
457 suggestions: [
458 5_000
459 ]
460 },
461 %{
462 key: :remote_limit,
463 type: :integer,
464 description: "Hard character limit beyond which remote posts will be dropped",
465 suggestions: [
466 100_000
467 ]
468 },
469 %{
470 key: :upload_limit,
471 type: :integer,
472 description: "File size limit of uploads (except for avatar, background, banner)",
473 suggestions: [
474 16_000_000
475 ]
476 },
477 %{
478 key: :avatar_upload_limit,
479 type: :integer,
480 description: "File size limit of user's profile avatars",
481 suggestions: [
482 2_000_000
483 ]
484 },
485 %{
486 key: :background_upload_limit,
487 type: :integer,
488 description: "File size limit of user's profile backgrounds",
489 suggestions: [
490 4_000_000
491 ]
492 },
493 %{
494 key: :banner_upload_limit,
495 type: :integer,
496 description: "File size limit of user's profile banners",
497 suggestions: [
498 4_000_000
499 ]
500 },
501 %{
502 key: :poll_limits,
503 type: :map,
504 description: "A map with poll limits for local polls",
505 suggestions: [
506 %{
507 max_options: 20,
508 max_option_chars: 200,
509 min_expiration: 0,
510 max_expiration: 31_536_000
511 }
512 ],
513 children: [
514 %{
515 key: :max_options,
516 type: :integer,
517 description: "Maximum number of options",
518 suggestions: [20]
519 },
520 %{
521 key: :max_option_chars,
522 type: :integer,
523 description: "Maximum number of characters per option",
524 suggestions: [200]
525 },
526 %{
527 key: :min_expiration,
528 type: :integer,
529 description: "Minimum expiration time (in seconds)",
530 suggestions: [0]
531 },
532 %{
533 key: :max_expiration,
534 type: :integer,
535 description: "Maximum expiration time (in seconds)",
536 suggestions: [3600]
537 }
538 ]
539 },
540 %{
541 key: :registrations_open,
542 type: :boolean,
543 description: "Enable registrations for anyone, invitations can be enabled when false"
544 },
545 %{
546 key: :invites_enabled,
547 type: :boolean,
548 description: "Enable user invitations for admins (depends on registrations_open: false)"
549 },
550 %{
551 key: :account_activation_required,
552 type: :boolean,
553 description: "Require users to confirm their emails before signing in"
554 },
555 %{
556 key: :federating,
557 type: :boolean,
558 description: "Enable federation with other instances"
559 },
560 %{
561 key: :federation_incoming_replies_max_depth,
562 type: :integer,
563 description:
564 "Max. depth of reply-to activities fetching on incoming federation, to prevent out-of-memory situations while" <>
565 " 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",
566 suggestions: [
567 100
568 ]
569 },
570 %{
571 key: :federation_reachability_timeout_days,
572 type: :integer,
573 description:
574 "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it",
575 suggestions: [
576 7
577 ]
578 },
579 %{
580 key: :federation_publisher_modules,
581 type: [:list, :module],
582 description: "List of modules for federation publishing",
583 suggestions: [
584 Pleroma.Web.ActivityPub.Publisher
585 ]
586 },
587 %{
588 key: :allow_relay,
589 type: :boolean,
590 description: "Enable Pleroma's Relay, which makes it possible to follow a whole instance"
591 },
592 %{
593 key: :rewrite_policy,
594 type: {:list, :module},
595 description: "A list of MRF policies enabled",
596 suggestions: [
597 Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
598 Generator.mrf_list()
599 ]
600 },
601 %{
602 key: :public,
603 type: :boolean,
604 description:
605 "Makes the client API in authentificated mode-only except for user-profiles." <>
606 " Useful for disabling the Local Timeline and The Whole Known Network"
607 },
608 %{
609 key: :quarantined_instances,
610 type: {:list, :string},
611 description:
612 "List of ActivityPub instances where private(DMs, followers-only) activities will not be send",
613 suggestions: [
614 "quarantined.com",
615 "*.quarantined.com"
616 ]
617 },
618 %{
619 key: :managed_config,
620 type: :boolean,
621 description:
622 "Whenether the config for pleroma-fe is configured in this config or in static/config.json"
623 },
624 %{
625 key: :static_dir,
626 type: :string,
627 description: "Instance static directory",
628 suggestions: [
629 "instance/static/"
630 ]
631 },
632 %{
633 key: :allowed_post_formats,
634 type: {:list, :string},
635 description: "MIME-type list of formats allowed to be posted (transformed into HTML)",
636 suggestions: [
637 [
638 "text/plain",
639 "text/html",
640 "text/markdown",
641 "text/bbcode"
642 ]
643 ]
644 },
645 %{
646 key: :mrf_transparency,
647 type: :boolean,
648 description:
649 "Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
650 },
651 %{
652 key: :mrf_transparency_exclusions,
653 type: {:list, :string},
654 description:
655 "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value",
656 suggestions: [
657 ["exclusion.com"]
658 ]
659 },
660 %{
661 key: :extended_nickname_format,
662 type: :boolean,
663 description:
664 "Set to true to use extended local nicknames format (allows underscores/dashes)." <>
665 " This will break federation with older software for theses nicknames"
666 },
667 %{
668 key: :max_pinned_statuses,
669 type: :integer,
670 description: "The maximum number of pinned statuses. 0 will disable the feature",
671 suggestions: [
672 0,
673 1,
674 3
675 ]
676 },
677 %{
678 key: :autofollowed_nicknames,
679 type: {:list, :string},
680 description:
681 "Set to nicknames of (local) users that every new user should automatically follow",
682 suggestions: [
683 "lain",
684 "kaniini",
685 "lanodan",
686 "rinpatch"
687 ]
688 },
689 %{
690 key: :no_attachment_links,
691 type: :boolean,
692 description:
693 "Set to true to disable automatically adding attachment link text to statuses"
694 },
695 %{
696 key: :welcome_message,
697 type: :string,
698 description:
699 "A message that will be send to a newly registered users as a direct message",
700 suggestions: [
701 "Hi, @username! Welcome to the board!",
702 nil
703 ]
704 },
705 %{
706 key: :welcome_user_nickname,
707 type: :string,
708 description: "The nickname of the local user that sends the welcome message",
709 suggestions: [
710 "lain",
711 nil
712 ]
713 },
714 %{
715 key: :max_report_comment_size,
716 type: :integer,
717 description: "The maximum size of the report comment (Default: 1000)",
718 suggestions: [
719 1_000
720 ]
721 },
722 %{
723 key: :safe_dm_mentions,
724 type: :boolean,
725 description:
726 "If set to true, only mentions at the beginning of a post will be used to address people in direct messages." <>
727 " This is to prevent accidental mentioning of people when talking about them (e.g. \"@friend hey i really don't like @enemy\")." <>
728 " Default: false"
729 },
730 %{
731 key: :healthcheck,
732 type: :boolean,
733 description: "If set to true, system data will be shown on /api/pleroma/healthcheck"
734 },
735 %{
736 key: :remote_post_retention_days,
737 type: :integer,
738 description:
739 "The default amount of days to retain remote posts when pruning the database",
740 suggestions: [
741 90
742 ]
743 },
744 %{
745 key: :user_bio_length,
746 type: :integer,
747 description: "A user bio maximum length (default: 5000)",
748 suggestions: [
749 5_000
750 ]
751 },
752 %{
753 key: :user_name_length,
754 type: :integer,
755 description: "A user name maximum length (default: 100)",
756 suggestions: [
757 100
758 ]
759 },
760 %{
761 key: :skip_thread_containment,
762 type: :boolean,
763 description: "Skip filter out broken threads. The default is true"
764 },
765 %{
766 key: :limit_to_local_content,
767 type: [:atom, false],
768 description:
769 "Limit unauthenticated users to search for local statutes and users only. The default is :unauthenticated ",
770 suggestions: [
771 :unauthenticated,
772 :all,
773 false
774 ]
775 },
776 %{
777 key: :dynamic_configuration,
778 type: :boolean,
779 description:
780 "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
781 },
782 %{
783 key: :max_account_fields,
784 type: :integer,
785 description: "The maximum number of custom fields in the user profile (default: 10)",
786 suggestions: [
787 10
788 ]
789 },
790 %{
791 key: :max_remote_account_fields,
792 type: :integer,
793 description:
794 "The maximum number of custom fields in the remote user profile (default: 20)",
795 suggestions: [
796 20
797 ]
798 },
799 %{
800 key: :account_field_name_length,
801 type: :integer,
802 description: "An account field name maximum length (default: 512)",
803 suggestions: [
804 512
805 ]
806 },
807 %{
808 key: :account_field_value_length,
809 type: :integer,
810 description: "An account field value maximum length (default: 2048)",
811 suggestions: [
812 2048
813 ]
814 },
815 %{
816 key: :external_user_synchronization,
817 type: :boolean,
818 description: "Enabling following/followers counters synchronization for external users"
819 }
820 ]
821 },
822 %{
823 group: :logger,
824 type: :group,
825 description: "Logger-related settings",
826 children: [
827 %{
828 key: :backends,
829 type: [:atom, :tuple, :module],
830 description:
831 "Where logs will be send, :console - send logs to stdout, {ExSyslogger, :ex_syslogger} - to syslog, Quack.Logger - to Slack.",
832 suggestions: [[:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]]
833 }
834 ]
835 },
836 %{
837 group: :logger,
838 type: :group,
839 key: :ex_syslogger,
840 description: "ExSyslogger-related settings",
841 children: [
842 %{
843 key: :level,
844 type: :atom,
845 description: "Log level",
846 suggestions: [:debug, :info, :warn, :error]
847 },
848 %{
849 key: :ident,
850 type: :string,
851 description:
852 "A string that's prepended to every message, and is typically set to the app name",
853 suggestions: ["pleroma"]
854 },
855 %{
856 key: :format,
857 type: :string,
858 description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
859 suggestions: ["$metadata[$level] $message"]
860 },
861 %{
862 key: :metadata,
863 type: {:list, :atom},
864 suggestions: [[:request_id]]
865 }
866 ]
867 },
868 %{
869 group: :logger,
870 type: :group,
871 key: :console,
872 description: "Console logger settings",
873 children: [
874 %{
875 key: :level,
876 type: :atom,
877 description: "Log level",
878 suggestions: [:debug, :info, :warn, :error]
879 },
880 %{
881 key: :format,
882 type: :string,
883 description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
884 suggestions: ["$metadata[$level] $message"]
885 },
886 %{
887 key: :metadata,
888 type: {:list, :atom},
889 suggestions: [[:request_id]]
890 }
891 ]
892 },
893 %{
894 group: :quack,
895 type: :group,
896 description: "Quack-related settings",
897 children: [
898 %{
899 key: :level,
900 type: :atom,
901 description: "Log level",
902 suggestions: [:debug, :info, :warn, :error]
903 },
904 %{
905 key: :meta,
906 type: {:list, :atom},
907 description: "Configure which metadata you want to report on",
908 suggestions: [
909 :application,
910 :module,
911 :file,
912 :function,
913 :line,
914 :pid,
915 :crash_reason,
916 :initial_call,
917 :registered_name,
918 :all,
919 :none
920 ]
921 },
922 %{
923 key: :webhook_url,
924 type: :string,
925 description: "Configure the Slack incoming webhook",
926 suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
927 }
928 ]
929 },
930 %{
931 group: :pleroma,
932 key: :frontend_configurations,
933 type: :group,
934 description: "A keyword list that keeps the configuration data for any kind of frontend",
935 children: [
936 %{
937 key: :pleroma_fe,
938 type: :map,
939 description: "Settings for Pleroma FE",
940 suggestions: [
941 %{
942 theme: "pleroma-dark",
943 logo: "/static/logo.png",
944 background: "/images/city.jpg",
945 redirectRootNoLogin: "/main/all",
946 redirectRootLogin: "/main/friends",
947 showInstanceSpecificPanel: true,
948 scopeOptionsEnabled: false,
949 formattingOptionsEnabled: false,
950 collapseMessageWithSubject: false,
951 hidePostStats: false,
952 hideUserStats: false,
953 scopeCopy: true,
954 subjectLineBehavior: "email",
955 alwaysShowSubjectInput: true
956 }
957 ],
958 children: [
959 %{
960 key: :theme,
961 type: :string,
962 description: "Which theme to use, they are defined in styles.json",
963 suggestions: ["pleroma-dark"]
964 },
965 %{
966 key: :logo,
967 type: :string,
968 description: "URL of the logo, defaults to Pleroma's logo",
969 suggestions: ["/static/logo.png"]
970 },
971 %{
972 key: :background,
973 type: :string,
974 description:
975 "URL of the background, unless viewing a user profile with a background that is set",
976 suggestions: ["/images/city.jpg"]
977 },
978 %{
979 key: :redirectRootNoLogin,
980 type: :string,
981 description:
982 "relative URL which indicates where to redirect when a user isn't logged in",
983 suggestions: ["/main/all"]
984 },
985 %{
986 key: :redirectRootLogin,
987 type: :string,
988 description:
989 "relative URL which indicates where to redirect when a user is logged in",
990 suggestions: ["/main/friends"]
991 },
992 %{
993 key: :showInstanceSpecificPanel,
994 type: :boolean,
995 description: "Whenether to show the instance's specific panel"
996 },
997 %{
998 key: :scopeOptionsEnabled,
999 type: :boolean,
1000 description: "Enable setting an notice visibility and subject/CW when posting"
1001 },
1002 %{
1003 key: :formattingOptionsEnabled,
1004 type: :boolean,
1005 description:
1006 "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to :instance, allowed_post_formats"
1007 },
1008 %{
1009 key: :collapseMessageWithSubject,
1010 type: :boolean,
1011 description:
1012 "When a message has a subject(aka Content Warning), collapse it by default"
1013 },
1014 %{
1015 key: :hidePostStats,
1016 type: :boolean,
1017 description: "Hide notices statistics(repeats, favorites, ...)"
1018 },
1019 %{
1020 key: :hideUserStats,
1021 type: :boolean,
1022 description:
1023 "Hide profile statistics(posts, posts per day, followers, followings, ...)"
1024 },
1025 %{
1026 key: :scopeCopy,
1027 type: :boolean,
1028 description: "Copy the scope (private/unlisted/public) in replies to posts by default"
1029 },
1030 %{
1031 key: :subjectLineBehavior,
1032 type: :string,
1033 description: "Allows changing the default behaviour of subject lines in replies.
1034 `email`: Copy and preprend re:, as in email,
1035 `masto`: Copy verbatim, as in Mastodon,
1036 `noop`: Don't copy the subjec",
1037 suggestions: ["email", "masto", "noop"]
1038 },
1039 %{
1040 key: :alwaysShowSubjectInput,
1041 type: :boolean,
1042 description: "When set to false, auto-hide the subject field when it's empty"
1043 }
1044 ]
1045 },
1046 %{
1047 key: :masto_fe,
1048 type: :map,
1049 description: "Settings for Masto FE",
1050 suggestions: [
1051 %{
1052 showInstanceSpecificPanel: true
1053 }
1054 ],
1055 children: [
1056 %{
1057 key: :showInstanceSpecificPanel,
1058 type: :boolean,
1059 description: "Whenether to show the instance's specific panel"
1060 }
1061 ]
1062 }
1063 ]
1064 },
1065 %{
1066 group: :pleroma,
1067 key: :assets,
1068 type: :group,
1069 description:
1070 "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend",
1071 children: [
1072 %{
1073 key: :mascots,
1074 type: :keyword,
1075 description:
1076 "Keyword of mascots, each element MUST contain both a url and a mime_type key",
1077 suggestions: [
1078 [
1079 pleroma_fox_tan: %{
1080 url: "/images/pleroma-fox-tan-smol.png",
1081 mime_type: "image/png"
1082 },
1083 pleroma_fox_tan_shy: %{
1084 url: "/images/pleroma-fox-tan-shy.png",
1085 mime_type: "image/png"
1086 }
1087 ]
1088 ]
1089 },
1090 %{
1091 key: :default_mascot,
1092 type: :atom,
1093 description:
1094 "This will be used as the default mascot on MastoFE (default: :pleroma_fox_tan)",
1095 suggestions: [
1096 :pleroma_fox_tan
1097 ]
1098 }
1099 ]
1100 },
1101 %{
1102 group: :pleroma,
1103 key: :manifest,
1104 type: :group,
1105 description:
1106 "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE",
1107 children: [
1108 %{
1109 key: :icons,
1110 type: {:list, :map},
1111 description: "Describe the icons of the app",
1112 suggestion: [
1113 %{
1114 src: "/static/logo.png"
1115 },
1116 %{
1117 src: "/static/icon.png",
1118 type: "image/png"
1119 },
1120 %{
1121 src: "/static/icon.ico",
1122 sizes: "72x72 96x96 128x128 256x256"
1123 }
1124 ]
1125 },
1126 %{
1127 key: :theme_color,
1128 type: :string,
1129 description: "Describe the theme color of the app",
1130 suggestions: ["#282c37", "mediumpurple"]
1131 },
1132 %{
1133 key: :background_color,
1134 type: :string,
1135 description: "Describe the background color of the app",
1136 suggestions: ["#191b22", "aliceblue"]
1137 }
1138 ]
1139 },
1140 %{
1141 group: :pleroma,
1142 key: :mrf_simple,
1143 type: :group,
1144 description: "Message Rewrite Facility",
1145 children: [
1146 %{
1147 key: :media_removal,
1148 type: {:list, :string},
1149 description: "List of instances to remove medias from",
1150 suggestions: ["example.com", "*.example.com"]
1151 },
1152 %{
1153 key: :media_nsfw,
1154 type: {:list, :string},
1155 description: "List of instances to put medias as NSFW(sensitive) from",
1156 suggestions: ["example.com", "*.example.com"]
1157 },
1158 %{
1159 key: :federated_timeline_removal,
1160 type: {:list, :string},
1161 description:
1162 "List of instances to remove from Federated (aka The Whole Known Network) Timeline",
1163 suggestions: ["example.com", "*.example.com"]
1164 },
1165 %{
1166 key: :reject,
1167 type: {:list, :string},
1168 description: "List of instances to reject any activities from",
1169 suggestions: ["example.com", "*.example.com"]
1170 },
1171 %{
1172 key: :accept,
1173 type: {:list, :string},
1174 description: "List of instances to accept any activities from",
1175 suggestions: ["example.com", "*.example.com"]
1176 },
1177 %{
1178 key: :report_removal,
1179 type: {:list, :string},
1180 description: "List of instances to reject reports from",
1181 suggestions: ["example.com", "*.example.com"]
1182 },
1183 %{
1184 key: :avatar_removal,
1185 type: {:list, :string},
1186 description: "List of instances to strip avatars from",
1187 suggestions: ["example.com", "*.example.com"]
1188 },
1189 %{
1190 key: :banner_removal,
1191 type: {:list, :string},
1192 description: "List of instances to strip banners from",
1193 suggestions: ["example.com", "*.example.com"]
1194 }
1195 ]
1196 },
1197 %{
1198 group: :pleroma,
1199 key: :mrf_subchain,
1200 type: :group,
1201 description:
1202 "This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
1203 " All criteria are configured as a map of regular expressions to lists of policy modules.",
1204 children: [
1205 %{
1206 key: :match_actor,
1207 type: :map,
1208 description: "Matches a series of regular expressions against the actor field",
1209 suggestions: [
1210 %{
1211 ~r/https:\/\/example.com/s => [Pleroma.Web.ActivityPub.MRF.DropPolicy]
1212 }
1213 ]
1214 }
1215 ]
1216 },
1217 %{
1218 group: :pleroma,
1219 key: :mrf_rejectnonpublic,
1220 type: :group,
1221 children: [
1222 %{
1223 key: :allow_followersonly,
1224 type: :boolean,
1225 description: "whether to allow followers-only posts"
1226 },
1227 %{
1228 key: :allow_direct,
1229 type: :boolean,
1230 description: "whether to allow direct messages"
1231 }
1232 ]
1233 },
1234 %{
1235 group: :pleroma,
1236 key: :mrf_hellthread,
1237 type: :group,
1238 description: "Block messages with too much mentions",
1239 children: [
1240 %{
1241 key: :delist_threshold,
1242 type: :integer,
1243 description:
1244 "Number of mentioned users after which the message gets delisted (the message can still be seen, " <>
1245 " but it will not show up in public timelines and mentioned users won't get notifications about it). Set to 0 to disable",
1246 suggestions: [10]
1247 },
1248 %{
1249 key: :reject_threshold,
1250 type: :integer,
1251 description:
1252 "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable",
1253 suggestions: [20]
1254 }
1255 ]
1256 },
1257 %{
1258 group: :pleroma,
1259 key: :mrf_keyword,
1260 type: :group,
1261 description: "Reject or Word-Replace messages with a keyword or regex",
1262 children: [
1263 %{
1264 key: :reject,
1265 type: [:string, :regex],
1266 description:
1267 "A list of patterns which result in message being rejected, each pattern can be a string or a regular expression",
1268 suggestions: ["foo", ~r/foo/iu]
1269 },
1270 %{
1271 key: :federated_timeline_removal,
1272 type: [:string, :regex],
1273 description:
1274 "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",
1275 suggestions: ["foo", ~r/foo/iu]
1276 },
1277 %{
1278 key: :replace,
1279 type: [{:string, :string}, {:regex, :string}],
1280 description:
1281 "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",
1282 suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
1283 }
1284 ]
1285 },
1286 %{
1287 group: :pleroma,
1288 key: :mrf_mention,
1289 type: :group,
1290 description: "Block messages which mention a user",
1291 children: [
1292 %{
1293 key: :actors,
1294 type: {:list, :string},
1295 description: "A list of actors, for which to drop any posts mentioning",
1296 suggestions: [["actor1", "actor2"]]
1297 }
1298 ]
1299 },
1300 %{
1301 group: :pleroma,
1302 key: :mrf_vocabulary,
1303 type: :group,
1304 description: "Filter messages which belong to certain activity vocabularies",
1305 children: [
1306 %{
1307 key: :accept,
1308 type: {:list, :string},
1309 description:
1310 "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted",
1311 suggestions: [["Create", "Follow", "Mention", "Announce", "Like"]]
1312 },
1313 %{
1314 key: :reject,
1315 type: {:list, :string},
1316 description:
1317 "A list of ActivityStreams terms to reject. If empty, no messages are rejected",
1318 suggestions: [["Create", "Follow", "Mention", "Announce", "Like"]]
1319 }
1320 ]
1321 },
1322 # %{
1323 # group: :pleroma,
1324 # key: :mrf_user_allowlist,
1325 # type: :group,
1326 # description:
1327 # "The keys in this section are the domain names that the policy should apply to." <>
1328 # " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID",
1329 # children: [
1330 # ["example.org": ["https://example.org/users/admin"]],
1331 # suggestions: [
1332 # ["example.org": ["https://example.org/users/admin"]]
1333 # ]
1334 # ]
1335 # },
1336 %{
1337 group: :pleroma,
1338 key: :media_proxy,
1339 type: :group,
1340 description: "Media proxy",
1341 children: [
1342 %{
1343 key: :enabled,
1344 type: :boolean,
1345 description: "Enables proxying of remote media to the instance's proxy"
1346 },
1347 %{
1348 key: :base_url,
1349 type: :string,
1350 description:
1351 "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts",
1352 suggestions: ["https://example.com"]
1353 },
1354 %{
1355 key: :proxy_opts,
1356 type: :keyword,
1357 description: "Options for Pleroma.ReverseProxy",
1358 suggestions: [[max_body_length: 25 * 1_048_576, redirect_on_failure: false]]
1359 },
1360 %{
1361 key: :whitelist,
1362 type: {:list, :string},
1363 description: "List of domains to bypass the mediaproxy",
1364 suggestions: ["example.com"]
1365 }
1366 ]
1367 },
1368 %{
1369 group: :pleroma,
1370 key: :gopher,
1371 type: :group,
1372 description: "Gopher settings",
1373 children: [
1374 %{
1375 key: :enabled,
1376 type: :boolean,
1377 description: "Enables the gopher interface"
1378 },
1379 %{
1380 key: :ip,
1381 type: :tuple,
1382 description: "IP address to bind to",
1383 suggestions: [{0, 0, 0, 0}]
1384 },
1385 %{
1386 key: :port,
1387 type: :integer,
1388 description: "Port to bind to",
1389 suggestions: [9999]
1390 },
1391 %{
1392 key: :dstport,
1393 type: :integer,
1394 description: "Port advertised in urls (optional, defaults to port)",
1395 suggestions: [9999]
1396 }
1397 ]
1398 },
1399 %{
1400 group: :pleroma,
1401 key: Pleroma.Web.Endpoint,
1402 type: :group,
1403 description: "Phoenix endpoint configuration",
1404 children: [
1405 %{
1406 key: :http,
1407 type: :keyword,
1408 description: "http protocol configuration",
1409 suggestions: [
1410 [port: 8080, ip: {127, 0, 0, 1}]
1411 ],
1412 children: [
1413 %{
1414 key: :dispatch,
1415 type: {:list, :tuple},
1416 description: "dispatch settings",
1417 suggestions: [
1418 [
1419 {:_,
1420 [
1421 {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
1422 {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
1423 {Phoenix.Transports.WebSocket,
1424 {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, websocket_config}}},
1425 {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
1426 ]}
1427 # end copied from config.exs
1428 ]
1429 ]
1430 },
1431 %{
1432 key: :ip,
1433 type: :tuple,
1434 description: "ip",
1435 suggestions: [
1436 {0, 0, 0, 0}
1437 ]
1438 },
1439 %{
1440 key: :port,
1441 type: :integer,
1442 description: "port",
1443 suggestions: [
1444 2020
1445 ]
1446 }
1447 ]
1448 },
1449 %{
1450 key: :url,
1451 type: :keyword,
1452 description: "configuration for generating urls",
1453 suggestions: [
1454 [host: "example.com", port: 2020, scheme: "https"]
1455 ],
1456 children: [
1457 %{
1458 key: :host,
1459 type: :string,
1460 description: "Host",
1461 suggestions: [
1462 "example.com"
1463 ]
1464 },
1465 %{
1466 key: :port,
1467 type: :integer,
1468 description: "port",
1469 suggestions: [
1470 2020
1471 ]
1472 },
1473 %{
1474 key: :scheme,
1475 type: :string,
1476 description: "Scheme",
1477 suggestions: [
1478 "https",
1479 "https"
1480 ]
1481 }
1482 ]
1483 },
1484 %{
1485 key: :instrumenters,
1486 type: {:list, :module},
1487 suggestions: [Pleroma.Web.Endpoint.Instrumenter]
1488 },
1489 %{
1490 key: :protocol,
1491 type: :string,
1492 suggestions: ["https"]
1493 },
1494 %{
1495 key: :secret_key_base,
1496 type: :string,
1497 suggestions: ["aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl"]
1498 },
1499 %{
1500 key: :signing_salt,
1501 type: :string,
1502 suggestions: ["CqaoopA2"]
1503 },
1504 %{
1505 key: :render_errors,
1506 type: :keyword,
1507 suggestions: [[view: Pleroma.Web.ErrorView, accepts: ~w(json)]],
1508 children: [
1509 %{
1510 key: :view,
1511 type: :module,
1512 suggestions: [Pleroma.Web.ErrorView]
1513 },
1514 %{
1515 key: :accepts,
1516 type: {:list, :string},
1517 suggestions: ["json"]
1518 }
1519 ]
1520 },
1521 %{
1522 key: :pubsub,
1523 type: :keyword,
1524 suggestions: [[name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2]],
1525 children: [
1526 %{
1527 key: :name,
1528 type: :module,
1529 suggestions: [Pleroma.PubSub]
1530 },
1531 %{
1532 key: :adapter,
1533 type: :module,
1534 suggestions: [Phoenix.PubSub.PG2]
1535 }
1536 ]
1537 },
1538 %{
1539 key: :secure_cookie_flag,
1540 type: :boolean
1541 },
1542 %{
1543 key: :extra_cookie_attrs,
1544 type: {:list, :string},
1545 suggestions: ["SameSite=Lax"]
1546 }
1547 ]
1548 },
1549 %{
1550 group: :pleroma,
1551 key: :activitypub,
1552 type: :group,
1553 description: "ActivityPub-related settings",
1554 children: [
1555 %{
1556 key: :unfollow_blocked,
1557 type: :boolean,
1558 description: "Whether blocks result in people getting unfollowed"
1559 },
1560 %{
1561 key: :outgoing_blocks,
1562 type: :boolean,
1563 description: "Whether to federate blocks to other instances"
1564 },
1565 %{
1566 key: :sign_object_fetches,
1567 type: :boolean,
1568 description: "Sign object fetches with HTTP signatures"
1569 },
1570 %{
1571 key: :follow_handshake_timeout,
1572 type: :integer,
1573 description: "Following handshake timeout",
1574 suggestions: [500]
1575 }
1576 ]
1577 },
1578 %{
1579 group: :pleroma,
1580 key: :http_security,
1581 type: :group,
1582 description: "HTTP security settings",
1583 children: [
1584 %{
1585 key: :enabled,
1586 type: :boolean,
1587 description: "Whether the managed content security policy is enabled"
1588 },
1589 %{
1590 key: :sts,
1591 type: :boolean,
1592 description: "Whether to additionally send a Strict-Transport-Security header"
1593 },
1594 %{
1595 key: :sts_max_age,
1596 type: :integer,
1597 description: "The maximum age for the Strict-Transport-Security header if sent",
1598 suggestions: [31_536_000]
1599 },
1600 %{
1601 key: :ct_max_age,
1602 type: :integer,
1603 description: "The maximum age for the Expect-CT header if sent",
1604 suggestions: [2_592_000]
1605 },
1606 %{
1607 key: :referrer_policy,
1608 type: :string,
1609 description: "The referrer policy to use, either \"same-origin\" or \"no-referrer\"",
1610 suggestions: ["same-origin", "no-referrer"]
1611 },
1612 %{
1613 key: :report_uri,
1614 type: :string,
1615 description: "Adds the specified url to report-uri and report-to group in CSP header",
1616 suggestions: ["https://example.com/report-uri"]
1617 }
1618 ]
1619 },
1620 %{
1621 group: :web_push_encryption,
1622 key: :vapid_details,
1623 type: :group,
1624 description:
1625 "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it",
1626 children: [
1627 %{
1628 key: :subject,
1629 type: :string,
1630 description:
1631 "a mailto link for the administrative contact." <>
1632 " It's best if this email is not a personal email address, but rather a group email so that if a person leaves an organization," <>
1633 " is unavailable for an extended period, or otherwise can't respond, someone else on the list can",
1634 suggestions: ["Subject"]
1635 },
1636 %{
1637 key: :public_key,
1638 type: :string,
1639 description: "VAPID public key",
1640 suggestions: ["Public key"]
1641 },
1642 %{
1643 key: :private_key,
1644 type: :string,
1645 description: "VAPID private keyn",
1646 suggestions: ["Private key"]
1647 }
1648 ]
1649 },
1650 %{
1651 group: :pleroma,
1652 key: Pleroma.Captcha,
1653 type: :group,
1654 description: "Captcha-related settings",
1655 children: [
1656 %{
1657 key: :enabled,
1658 type: :boolean,
1659 description: "Whether the captcha should be shown on registration"
1660 },
1661 %{
1662 key: :method,
1663 type: :module,
1664 description: "The method/service to use for captcha",
1665 suggestions: [Pleroma.Captcha.Kocaptcha]
1666 },
1667 %{
1668 key: :seconds_valid,
1669 type: :integer,
1670 description: "The time in seconds for which the captcha is valid",
1671 suggestions: [60]
1672 }
1673 ]
1674 },
1675 %{
1676 group: :pleroma,
1677 key: Pleroma.Captcha.Kocaptcha,
1678 type: :group,
1679 description:
1680 "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is" <>
1681 " here: https://github.com/koto-bank/kocaptcha. The default endpoint https://captcha.kotobank.ch is hosted by the developer",
1682 children: [
1683 %{
1684 key: :endpoint,
1685 type: :string,
1686 description: "the kocaptcha endpoint to use",
1687 suggestions: ["https://captcha.kotobank.ch"]
1688 }
1689 ]
1690 },
1691 %{
1692 group: :pleroma,
1693 type: :group,
1694 description:
1695 "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the 'admin_token' parameter",
1696 children: [
1697 %{
1698 key: :admin_token,
1699 type: :string,
1700 description: "Token",
1701 suggestions: ["some_random_token"]
1702 }
1703 ]
1704 },
1705 %{
1706 group: :pleroma_job_queue,
1707 key: :queues,
1708 type: :group,
1709 description: "[Deprecated] Replaced with `Oban`/`:queues` (keeping the same format)"
1710 },
1711 %{
1712 group: :pleroma,
1713 key: Pleroma.Web.Federator.RetryQueue,
1714 type: :group,
1715 description: "[Deprecated] See `Oban` and `:workers` sections for configuration notes",
1716 children: [
1717 %{
1718 key: :max_retries,
1719 type: :integer,
1720 description: "[Deprecated] Replaced as `Oban`/`:queues`/`:outgoing_federation` value"
1721 }
1722 ]
1723 },
1724 %{
1725 group: :pleroma,
1726 key: Oban,
1727 type: :group,
1728 description: """
1729 [Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration.
1730
1731 Note: if you are running PostgreSQL in [`silent_mode`](https://postgresqlco.nf/en/doc/param/silent_mode?version=9.1),
1732 it's advised to set [`log_destination`](https://postgresqlco.nf/en/doc/param/log_destination?version=9.1) to `syslog`,
1733 otherwise `postmaster.log` file may grow because of "you don't own a lock of type ShareLock" warnings
1734 (see https://github.com/sorentwo/oban/issues/52).
1735 """,
1736 children: [
1737 %{
1738 key: :repo,
1739 type: :module,
1740 description: "Application's Ecto repo",
1741 suggestions: [Pleroma.Repo]
1742 },
1743 %{
1744 key: :verbose,
1745 type: :boolean,
1746 description: "Logs verbose mode"
1747 },
1748 %{
1749 key: :prune,
1750 type: [:atom, :tuple],
1751 description:
1752 "Non-retryable jobs [pruning settings](https://github.com/sorentwo/oban#pruning)",
1753 suggestions: [:disabled, {:maxlen, 1500}, {:maxage, 60 * 60}]
1754 },
1755 %{
1756 key: :queues,
1757 type: :keyword,
1758 description:
1759 "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)",
1760 suggestions: [
1761 [
1762 activity_expiration: 10,
1763 background: 5,
1764 federator_incoming: 50,
1765 federator_outgoing: 50,
1766 mailer: 10,
1767 scheduled_activities: 10,
1768 transmogrifier: 20,
1769 web_push: 50
1770 ]
1771 ],
1772 children: [
1773 %{
1774 key: :activity_expiration,
1775 type: :integer,
1776 description: "Activity expiration queue",
1777 suggestions: [10]
1778 },
1779 %{
1780 key: :background,
1781 type: :integer,
1782 description: "Background queue",
1783 suggestions: [5]
1784 },
1785 %{
1786 key: :federator_incoming,
1787 type: :integer,
1788 description: "Incoming federation queue",
1789 suggestions: [50]
1790 },
1791 %{
1792 key: :federator_outgoing,
1793 type: :integer,
1794 description: "Outgoing federation queue",
1795 suggestions: [50]
1796 },
1797 %{
1798 key: :mailer,
1799 type: :integer,
1800 description: "Email sender queue, see Pleroma.Emails.Mailer",
1801 suggestions: [10]
1802 },
1803 %{
1804 key: :scheduled_activities,
1805 type: :integer,
1806 description: "Scheduled activities queue, see Pleroma.ScheduledActivities",
1807 suggestions: [10]
1808 },
1809 %{
1810 key: :transmogrifier,
1811 type: :integer,
1812 description: "Transmogrifier queue",
1813 suggestions: [20]
1814 },
1815 %{
1816 key: :web_push,
1817 type: :integer,
1818 description: "Web push notifications queue",
1819 suggestions: [50]
1820 }
1821 ]
1822 }
1823 ]
1824 },
1825 %{
1826 group: :pleroma,
1827 key: :workers,
1828 type: :group,
1829 description: "Includes custom worker options not interpretable directly by `Oban`",
1830 children: [
1831 %{
1832 key: :retries,
1833 type: :keyword,
1834 description: "Max retry attempts for failed jobs, per `Oban` queue",
1835 suggestions: [
1836 [
1837 federator_incoming: 5,
1838 federator_outgoing: 5
1839 ]
1840 ]
1841 }
1842 ]
1843 },
1844 %{
1845 group: :pleroma,
1846 key: Pleroma.Web.Metadata,
1847 type: :group,
1848 decsription: "Metadata-related settings",
1849 children: [
1850 %{
1851 key: :providers,
1852 type: {:list, :module},
1853 description: "List of metadata providers to enable",
1854 suggestions: [
1855 [
1856 Pleroma.Web.Metadata.Providers.OpenGraph,
1857 Pleroma.Web.Metadata.Providers.TwitterCard,
1858 Pleroma.Web.Metadata.Providers.RelMe
1859 ]
1860 ]
1861 },
1862 %{
1863 key: :unfurl_nsfw,
1864 type: :boolean,
1865 description: "If set to true nsfw attachments will be shown in previews"
1866 }
1867 ]
1868 },
1869 %{
1870 group: :pleroma,
1871 key: :rich_media,
1872 type: :group,
1873 children: [
1874 %{
1875 key: :enabled,
1876 type: :boolean,
1877 description:
1878 "if enabled the instance will parse metadata from attached links to generate link previews"
1879 },
1880 %{
1881 key: :ignore_hosts,
1882 type: {:list, :string},
1883 description: "list of hosts which will be ignored by the metadata parser",
1884 suggestions: [["accounts.google.com", "xss.website"]]
1885 },
1886 %{
1887 key: :ignore_tld,
1888 type: {:list, :string},
1889 description: "list TLDs (top-level domains) which will ignore for parse metadata",
1890 suggestions: [["local", "localdomain", "lan"]]
1891 },
1892 %{
1893 key: :parsers,
1894 type: {:list, :module},
1895 description: "list of Rich Media parsers",
1896 suggestions: [
1897 Generator.richmedia_parsers()
1898 ]
1899 },
1900 %{
1901 key: :ttl_setters,
1902 type: {:list, :module},
1903 description: "list of rich media ttl setters",
1904 suggestions: [
1905 [Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl]
1906 ]
1907 }
1908 ]
1909 },
1910 %{
1911 group: :pleroma,
1912 key: :fetch_initial_posts,
1913 type: :group,
1914 description: "Fetching initial posts settings",
1915 children: [
1916 %{
1917 key: :enabled,
1918 type: :boolean,
1919 description:
1920 "if enabled, when a new user is federated with, fetch some of their latest posts"
1921 },
1922 %{
1923 key: :pages,
1924 type: :integer,
1925 description: "the amount of pages to fetch",
1926 suggestions: [5]
1927 }
1928 ]
1929 },
1930 %{
1931 group: :auto_linker,
1932 key: :opts,
1933 type: :group,
1934 description: "Configuration for the auto_linker library",
1935 children: [
1936 %{
1937 key: :class,
1938 type: [:string, false],
1939 description: "specify the class to be added to the generated link. false to clear",
1940 suggestions: ["auto-linker", false]
1941 },
1942 %{
1943 key: :rel,
1944 type: [:string, false],
1945 description: "override the rel attribute. false to clear",
1946 suggestions: ["ugc", "noopener noreferrer", false]
1947 },
1948 %{
1949 key: :new_window,
1950 type: :boolean,
1951 description: "set to false to remove target='_blank' attribute"
1952 },
1953 %{
1954 key: :scheme,
1955 type: :boolean,
1956 description: "Set to true to link urls with schema http://google.com"
1957 },
1958 %{
1959 key: :truncate,
1960 type: [:integer, false],
1961 description:
1962 "Set to a number to truncate urls longer then the number. Truncated urls will end in `..`",
1963 suggestions: [15, false]
1964 },
1965 %{
1966 key: :strip_prefix,
1967 type: :boolean,
1968 description: "Strip the scheme prefix"
1969 },
1970 %{
1971 key: :extra,
1972 type: :boolean,
1973 description: "link urls with rarely used schemes (magnet, ipfs, irc, etc.)"
1974 }
1975 ]
1976 },
1977 %{
1978 group: :pleroma,
1979 key: Pleroma.ScheduledActivity,
1980 type: :group,
1981 description: "Scheduled activities settings",
1982 children: [
1983 %{
1984 key: :daily_user_limit,
1985 type: :integer,
1986 description:
1987 "the number of scheduled activities a user is allowed to create in a single day (Default: 25)",
1988 suggestions: [25]
1989 },
1990 %{
1991 key: :total_user_limit,
1992 type: :integer,
1993 description:
1994 "the number of scheduled activities a user is allowed to create in total (Default: 300)",
1995 suggestions: [300]
1996 },
1997 %{
1998 key: :enabled,
1999 type: :boolean,
2000 description: "whether scheduled activities are sent to the job queue to be executed"
2001 }
2002 ]
2003 },
2004 %{
2005 group: :pleroma,
2006 key: Pleroma.ActivityExpiration,
2007 type: :group,
2008 description: "Expired activity settings",
2009 children: [
2010 %{
2011 key: :enabled,
2012 type: :boolean,
2013 description: "whether expired activities will be sent to the job queue to be deleted"
2014 }
2015 ]
2016 },
2017 %{
2018 group: :pleroma,
2019 type: :group,
2020 description: "Authenticator",
2021 children: [
2022 %{
2023 key: Pleroma.Web.Auth.Authenticator,
2024 type: :module,
2025 suggestions: [Pleroma.Web.Auth.PleromaAuthenticator, Pleroma.Web.Auth.LDAPAuthenticator]
2026 }
2027 ]
2028 },
2029 %{
2030 group: :pleroma,
2031 key: :ldap,
2032 type: :group,
2033 description:
2034 "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
2035 " will be verified by trying to authenticate (bind) to an LDAP server." <>
2036 " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
2037 " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
2038 children: [
2039 %{
2040 key: :enabled,
2041 type: :boolean,
2042 description: "enables LDAP authentication"
2043 },
2044 %{
2045 key: :host,
2046 type: :string,
2047 description: "LDAP server hostname",
2048 suggestions: ["localhosts"]
2049 },
2050 %{
2051 key: :port,
2052 type: :integer,
2053 description: "LDAP port, e.g. 389 or 636",
2054 suggestions: [389, 636]
2055 },
2056 %{
2057 key: :ssl,
2058 type: :boolean,
2059 description: "true to use SSL, usually implies the port 636"
2060 },
2061 %{
2062 key: :sslopts,
2063 type: :keyword,
2064 description: "additional SSL options"
2065 },
2066 %{
2067 key: :tls,
2068 type: :boolean,
2069 description: "true to start TLS, usually implies the port 389"
2070 },
2071 %{
2072 key: :tlsopts,
2073 type: :keyword,
2074 description: "additional TLS options"
2075 },
2076 %{
2077 key: :base,
2078 type: :string,
2079 description: "LDAP base, e.g. \"dc=example,dc=com\"",
2080 suggestions: ["dc=example,dc=com"]
2081 },
2082 %{
2083 key: :uid,
2084 type: :string,
2085 description:
2086 "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
2087 suggestions: ["cn"]
2088 }
2089 ]
2090 },
2091 %{
2092 group: :pleroma,
2093 key: :auth,
2094 type: :group,
2095 description: "Authentication / authorization settings",
2096 children: [
2097 %{
2098 key: :enforce_oauth_admin_scope_usage,
2099 type: :boolean,
2100 description:
2101 "OAuth admin scope requirement toggle. " <>
2102 "If `true`, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
2103 "(client app must support admin scopes). If `false` and token doesn't have admin scope(s)," <>
2104 "`is_admin` user flag grants access to admin-specific actions."
2105 },
2106 %{
2107 key: :auth_template,
2108 type: :string,
2109 description:
2110 "authentication form template. By default it's show.html which corresponds to lib/pleroma/web/templates/o_auth/o_auth/show.html.ee",
2111 suggestions: ["show.html"]
2112 },
2113 %{
2114 key: :oauth_consumer_template,
2115 type: :string,
2116 description:
2117 "OAuth consumer mode authentication form template. By default it's consumer.html which corresponds to" <>
2118 " lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex",
2119 suggestions: ["consumer.html"]
2120 },
2121 %{
2122 key: :oauth_consumer_strategies,
2123 type: :string,
2124 description:
2125 "the list of enabled OAuth consumer strategies; by default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
2126 " Each entry in this space-delimited string should be of format <strategy> or <strategy>:<dependency>" <>
2127 " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
2128 suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
2129 }
2130 ]
2131 },
2132 %{
2133 group: :pleroma,
2134 key: :email_notifications,
2135 type: :group,
2136 description: "Email notifications settings",
2137 children: [
2138 %{
2139 key: :digest,
2140 type: :map,
2141 description:
2142 "emails of \"what you've missed\" for users who have been inactive for a while",
2143 suggestions: [
2144 %{
2145 active: false,
2146 schedule: "0 0 * * 0",
2147 interval: 7,
2148 inactivity_threshold: 7
2149 }
2150 ],
2151 children: [
2152 %{
2153 key: :active,
2154 type: :boolean,
2155 description: "globally enable or disable digest emails"
2156 },
2157 %{
2158 key: :schedule,
2159 type: :string,
2160 description:
2161 "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"",
2162 suggestions: ["0 0 * * 0"]
2163 },
2164 %{
2165 key: :interval,
2166 type: :ininteger,
2167 description: "Minimum interval between digest emails to one user",
2168 suggestions: [7]
2169 },
2170 %{
2171 key: :inactivity_threshold,
2172 type: :integer,
2173 description: "Minimum user inactivity threshold",
2174 suggestions: [7]
2175 }
2176 ]
2177 }
2178 ]
2179 },
2180 %{
2181 group: :pleroma,
2182 key: Pleroma.Emails.UserEmail,
2183 type: :group,
2184 description: "Email template settings",
2185 children: [
2186 %{
2187 key: :logo,
2188 type: [:string, nil],
2189 description: "a path to a custom logo. Set it to nil to use the default Pleroma logo",
2190 suggestions: ["some/path/logo.png", nil]
2191 },
2192 %{
2193 key: :styling,
2194 type: :map,
2195 description: "a map with color settings for email templates.",
2196 suggestions: [
2197 %{
2198 link_color: "#d8a070",
2199 background_color: "#2C3645",
2200 content_background_color: "#1B2635",
2201 header_color: "#d8a070",
2202 text_color: "#b9b9ba",
2203 text_muted_color: "#b9b9ba"
2204 }
2205 ],
2206 children: [
2207 %{
2208 key: :link_color,
2209 type: :string,
2210 suggestions: ["#d8a070"]
2211 },
2212 %{
2213 key: :background_color,
2214 type: :string,
2215 suggestions: ["#2C3645"]
2216 },
2217 %{
2218 key: :content_background_color,
2219 type: :string,
2220 suggestions: ["#1B2635"]
2221 },
2222 %{
2223 key: :header_color,
2224 type: :string,
2225 suggestions: ["#d8a070"]
2226 },
2227 %{
2228 key: :text_color,
2229 type: :string,
2230 suggestions: ["#b9b9ba"]
2231 },
2232 %{
2233 key: :text_muted_color,
2234 type: :string,
2235 suggestions: ["#b9b9ba"]
2236 }
2237 ]
2238 }
2239 ]
2240 },
2241 %{
2242 group: :pleroma,
2243 key: :oauth2,
2244 type: :group,
2245 description: "Configure OAuth 2 provider capabilities",
2246 children: [
2247 %{
2248 key: :token_expires_in,
2249 type: :integer,
2250 description: "The lifetime in seconds of the access token",
2251 suggestions: [600]
2252 },
2253 %{
2254 key: :issue_new_refresh_token,
2255 type: :boolean,
2256 description:
2257 "Keeps old refresh token or generate new refresh token when to obtain an access token"
2258 },
2259 %{
2260 key: :clean_expired_tokens,
2261 type: :boolean,
2262 description: "Enable a background job to clean expired oauth tokens. Defaults to false"
2263 },
2264 %{
2265 key: :clean_expired_tokens_interval,
2266 type: :integer,
2267 description:
2268 "Interval to run the job to clean expired tokens. Defaults to 86_400_000 (24 hours).",
2269 suggestions: [86_400_000]
2270 }
2271 ]
2272 },
2273 %{
2274 group: :pleroma,
2275 key: :emoji,
2276 type: :group,
2277 children: [
2278 %{
2279 key: :shortcode_globs,
2280 type: {:list, :string},
2281 description: "Location of custom emoji files. * can be used as a wildcard",
2282 suggestions: [["/emoji/custom/**/*.png"]]
2283 },
2284 %{
2285 key: :pack_extensions,
2286 type: {:list, :string},
2287 description:
2288 "A list of file extensions for emojis, when no emoji.txt for a pack is present",
2289 suggestions: [[".png", ".gif"]]
2290 },
2291 %{
2292 key: :groups,
2293 type: :keyword,
2294 description:
2295 "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the groupname" <>
2296 " and the value the location or array of locations. * can be used as a wildcard",
2297 suggestions: [
2298 [
2299 # Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
2300 Custom: ["/emoji/*.png", "/emoji/**/*.png"]
2301 ]
2302 ]
2303 },
2304 %{
2305 key: :default_manifest,
2306 type: :string,
2307 description:
2308 "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
2309 " Currently only one manifest can be added (no arrays)",
2310 suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
2311 },
2312 %{
2313 key: :shared_pack_cache_seconds_per_file,
2314 type: :integer,
2315 descpiption:
2316 "When an emoji pack is shared, the archive is created and cached in memory" <>
2317 " for this amount of seconds multiplied by the number of files.",
2318 suggestions: [60]
2319 }
2320 ]
2321 },
2322 %{
2323 group: :pleroma,
2324 key: :database,
2325 type: :group,
2326 description: "Database related settings",
2327 children: [
2328 %{
2329 key: :rum_enabled,
2330 type: :boolean,
2331 description: "If RUM indexes should be used. Defaults to false"
2332 }
2333 ]
2334 },
2335 %{
2336 group: :pleroma,
2337 key: :rate_limit,
2338 type: :group,
2339 description:
2340 "Rate limit settings. This is an advanced feature enabled only for :authentication by default.",
2341 children: [
2342 %{
2343 key: :search,
2344 type: [:tuple, {:list, :tuple}],
2345 description: "for the search requests (account & status search etc.)",
2346 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2347 },
2348 %{
2349 key: :app_account_creation,
2350 type: [:tuple, {:list, :tuple}],
2351 description: "for registering user accounts from the same IP address",
2352 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2353 },
2354 %{
2355 key: :relations_actions,
2356 type: [:tuple, {:list, :tuple}],
2357 description: "for actions on relations with all users (follow, unfollow)",
2358 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2359 },
2360 %{
2361 key: :relation_id_action,
2362 type: [:tuple, {:list, :tuple}],
2363 description: "for actions on relation with a specific user (follow, unfollow)",
2364 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2365 },
2366 %{
2367 key: :statuses_actions,
2368 type: [:tuple, {:list, :tuple}],
2369 description:
2370 "for create / delete / fav / unfav / reblog / unreblog actions on any statuses",
2371 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2372 },
2373 %{
2374 key: :status_id_action,
2375 type: [:tuple, {:list, :tuple}],
2376 description:
2377 "for fav / unfav or reblog / unreblog actions on the same status by the same user",
2378 suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
2379 },
2380 %{
2381 key: :authentication,
2382 type: [:tuple, {:list, :tuple}],
2383 description: "for authentication create / password check / user existence check requests",
2384 suggestions: [{60_000, 15}]
2385 }
2386 ]
2387 },
2388 %{
2389 group: :esshd,
2390 type: :group,
2391 description:
2392 "To enable simple command line interface accessible over ssh, add a setting like this to your configuration file",
2393 children: [
2394 %{
2395 key: :enabled,
2396 type: :boolean,
2397 description: "Enables ssh"
2398 },
2399 %{
2400 key: :priv_dir,
2401 type: :string,
2402 description: "Dir with ssh keys",
2403 suggestions: ["/some/path/ssh_keys"]
2404 },
2405 %{
2406 key: :handler,
2407 type: :string,
2408 description: "Handler module",
2409 suggestions: ["Pleroma.BBS.Handler"]
2410 },
2411 %{
2412 key: :port,
2413 type: :integer,
2414 description: "Port to connect",
2415 suggestions: [10_022]
2416 },
2417 %{
2418 key: :password_authenticator,
2419 type: :string,
2420 description: "Authenticator module",
2421 suggestions: ["Pleroma.BBS.Authenticator"]
2422 }
2423 ]
2424 },
2425 %{
2426 group: :mime,
2427 type: :group,
2428 description: "Mime types",
2429 children: [
2430 %{
2431 key: :types,
2432 type: :map,
2433 suggestions: [
2434 %{
2435 "application/xml" => ["xml"],
2436 "application/xrd+xml" => ["xrd+xml"],
2437 "application/jrd+json" => ["jrd+json"],
2438 "application/activity+json" => ["activity+json"],
2439 "application/ld+json" => ["activity+json"]
2440 }
2441 ],
2442 children: [
2443 %{
2444 key: "application/xml",
2445 type: {:list, :string},
2446 suggestions: [["xml"]]
2447 },
2448 %{
2449 key: "application/xrd+xml",
2450 type: {:list, :string},
2451 suggestions: [["xrd+xml"]]
2452 },
2453 %{
2454 key: "application/jrd+json",
2455 type: {:list, :string},
2456 suggestions: [["jrd+json"]]
2457 },
2458 %{
2459 key: "application/activity+json",
2460 type: {:list, :string},
2461 suggestions: [["activity+json"]]
2462 },
2463 %{
2464 key: "application/ld+json",
2465 type: {:list, :string},
2466 suggestions: [["activity+json"]]
2467 }
2468 ]
2469 }
2470 ]
2471 },
2472 %{
2473 group: :tesla,
2474 type: :group,
2475 description: "Tesla settings",
2476 children: [
2477 %{
2478 key: :adapter,
2479 type: :module,
2480 description: "Tesla adapter",
2481 suggestions: [Tesla.Adapter.Hackney]
2482 }
2483 ]
2484 },
2485 %{
2486 group: :pleroma,
2487 key: :chat,
2488 type: :group,
2489 description: "Pleroma chat settings",
2490 children: [
2491 %{
2492 key: :enabled,
2493 type: :boolean
2494 }
2495 ]
2496 },
2497 %{
2498 group: :pleroma,
2499 key: :suggestions,
2500 type: :group,
2501 children: [
2502 %{
2503 key: :enabled,
2504 type: :boolean,
2505 description: "Enables suggestions"
2506 },
2507 %{
2508 key: :third_party_engine,
2509 type: :string,
2510 description: "URL for third party engine",
2511 suggestions: [
2512 "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-suggestions-api.cgi?{{host}}+{{user}}"
2513 ]
2514 },
2515 %{
2516 key: :timeout,
2517 type: :integer,
2518 description: "Request timeout to third party engine",
2519 suggestions: [300_000]
2520 },
2521 %{
2522 key: :limit,
2523 type: :integer,
2524 description: "Limit for suggestions",
2525 suggestions: [40]
2526 },
2527 %{
2528 key: :web,
2529 type: :string,
2530 suggestions: ["https://vinayaka.distsn.org"]
2531 }
2532 ]
2533 },
2534 %{
2535 group: :prometheus,
2536 key: Pleroma.Web.Endpoint.MetricsExporter,
2537 type: :group,
2538 description: "Prometheus settings",
2539 children: [
2540 %{
2541 key: :path,
2542 type: :string,
2543 description: "API endpoint with metrics",
2544 suggestions: ["/api/pleroma/app_metrics"]
2545 }
2546 ]
2547 },
2548 %{
2549 group: :http_signatures,
2550 type: :group,
2551 description: "HTTP Signatures settings",
2552 children: [
2553 %{
2554 key: :adapter,
2555 type: :module,
2556 suggestions: [Pleroma.Signature]
2557 }
2558 ]
2559 },
2560 %{
2561 group: :pleroma,
2562 key: :http,
2563 type: :group,
2564 description: "HTTP settings",
2565 children: [
2566 %{
2567 key: :proxy_url,
2568 type: [:string, :atom, nil],
2569 suggestions: ["localhost:9020", {:socks5, :localhost, 3090}, nil]
2570 },
2571 %{
2572 key: :send_user_agent,
2573 type: :boolean
2574 },
2575 %{
2576 key: :adapter,
2577 type: :keyword,
2578 suggestions: [
2579 [
2580 ssl_options: [
2581 # Workaround for remote server certificate chain issues
2582 partial_chain: &:hackney_connect.partial_chain/1,
2583 # We don't support TLS v1.3 yet
2584 versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"]
2585 ]
2586 ]
2587 ]
2588 }
2589 ]
2590 },
2591 %{
2592 group: :pleroma,
2593 key: :markup,
2594 type: :group,
2595 children: [
2596 %{
2597 key: :allow_inline_images,
2598 type: :boolean
2599 },
2600 %{
2601 key: :allow_headings,
2602 type: :boolean
2603 },
2604 %{
2605 key: :allow_tables,
2606 type: :boolean
2607 },
2608 %{
2609 key: :allow_fonts,
2610 type: :boolean
2611 },
2612 %{
2613 key: :scrub_policy,
2614 type: {:list, :module},
2615 suggestions: [[Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]]
2616 }
2617 ]
2618 },
2619 %{
2620 group: :pleroma,
2621 key: :user,
2622 type: :group,
2623 children: [
2624 %{
2625 key: :deny_follow_blocked,
2626 type: :boolean
2627 }
2628 ]
2629 },
2630 %{
2631 group: :pleroma,
2632 key: :mrf_normalize_markup,
2633 type: :group,
2634 children: [
2635 %{
2636 key: :scrub_policy,
2637 type: :module,
2638 suggestions: [Pleroma.HTML.Scrubber.Default]
2639 }
2640 ]
2641 },
2642 %{
2643 group: :pleroma,
2644 key: Pleroma.User,
2645 type: :group,
2646 children: [
2647 %{
2648 key: :restricted_nicknames,
2649 type: {:list, :string},
2650 suggestions: [
2651 [
2652 ".well-known",
2653 "~",
2654 "about",
2655 "activities",
2656 "api",
2657 "auth",
2658 "check_password",
2659 "dev",
2660 "friend-requests",
2661 "inbox",
2662 "internal",
2663 "main",
2664 "media",
2665 "nodeinfo",
2666 "notice",
2667 "oauth",
2668 "objects",
2669 "ostatus_subscribe",
2670 "pleroma",
2671 "proxy",
2672 "push",
2673 "registration",
2674 "relay",
2675 "settings",
2676 "status",
2677 "tag",
2678 "user-search",
2679 "user_exists",
2680 "users",
2681 "web"
2682 ]
2683 ]
2684 }
2685 ]
2686 },
2687 %{
2688 group: :cors_plug,
2689 type: :group,
2690 children: [
2691 %{
2692 key: :max_age,
2693 type: :integer,
2694 suggestions: [86_400]
2695 },
2696 %{
2697 key: :methods,
2698 type: {:list, :string},
2699 suggestions: [["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]]
2700 },
2701 %{
2702 key: :expose,
2703 type: :string,
2704 suggestions: [
2705 [
2706 "Link",
2707 "X-RateLimit-Reset",
2708 "X-RateLimit-Limit",
2709 "X-RateLimit-Remaining",
2710 "X-Request-Id",
2711 "Idempotency-Key"
2712 ]
2713 ]
2714 },
2715 %{
2716 key: :credentials,
2717 type: :boolean
2718 },
2719 %{
2720 key: :headers,
2721 type: {:list, :string},
2722 suggestions: [["Authorization", "Content-Type", "Idempotency-Key"]]
2723 }
2724 ]
2725 },
2726 %{
2727 group: :pleroma,
2728 key: Pleroma.Plugs.RemoteIp,
2729 type: :group,
2730 description: """
2731 **If your instance is not behind at least one reverse proxy, you should not enable this plug.**
2732
2733 `Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
2734 """,
2735 children: [
2736 %{
2737 key: :enabled,
2738 type: :boolean,
2739 description: "Enable/disable the plug. Defaults to `false`.",
2740 suggestions: [true, false]
2741 },
2742 %{
2743 key: :headers,
2744 type: {:list, :string},
2745 description:
2746 "A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Defaults to `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
2747 },
2748 %{
2749 key: :proxies,
2750 type: {:list, :string},
2751 description:
2752 "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Defaults to `[]`."
2753 },
2754 %{
2755 key: :reserved,
2756 type: {:list, :string},
2757 description:
2758 "Defaults to [localhost](https://en.wikipedia.org/wiki/Localhost) and [private network](https://en.wikipedia.org/wiki/Private_network)."
2759 }
2760 ]
2761 },
2762 %{
2763 group: :pleroma,
2764 key: :web_cache_ttl,
2765 type: :group,
2766 description:
2767 "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
2768 children: [
2769 %{
2770 key: :activity_pub,
2771 type: :integer,
2772 description:
2773 "activity pub routes (except question activities). Defaults to `nil` (no expiration).",
2774 suggestions: [30_000, nil]
2775 },
2776 %{
2777 key: :activity_pub_question,
2778 type: :integer,
2779 description:
2780 "activity pub routes (question activities). Defaults to `30_000` (30 seconds).",
2781 suggestions: [30_000]
2782 }
2783 ]
2784 }
2785 ]