117 lines
3.7 KiB
Elixir
117 lines
3.7 KiB
Elixir
use Mix.Config
|
|
|
|
###
|
|
# Tooling for runtime-configuration
|
|
###
|
|
defmodule Docker do
|
|
###
|
|
# Gets an environment variable and casts it accordingly.
|
|
###
|
|
def env(shortname, verbatim \\ false) do
|
|
name = if verbatim, do: "", else: "pleroma_" <> Atom.to_string(shortname) |> String.upcase()
|
|
raw_var = System.get_env(name)
|
|
|
|
if raw_var == nil do
|
|
raise "Could not find #{name} in environment. Please define it and try again."
|
|
end
|
|
|
|
if !String.contains?(raw_var, ":") do
|
|
raw_var
|
|
else
|
|
var_parts = String.split(raw_var, ":", parts: 2)
|
|
|
|
type = Enum.at(var_parts, 0)
|
|
var = Enum.at(var_parts, 1)
|
|
|
|
noop = fn(x) -> x end
|
|
|
|
# Auto-select function and return call
|
|
(case type do
|
|
"int" -> fn(x) -> Integer.parse(x) |> elem(0) end
|
|
"bool" -> fn(x) -> x == "true" end
|
|
"string" -> noop
|
|
_ -> if verbatim, do: noop, else: raise "Unknown type #{type} used in variable #{raw_var}."
|
|
end).(var)
|
|
end
|
|
end
|
|
|
|
###
|
|
# Gets an environment variable and splits it
|
|
###
|
|
def split(shortname, verbatim \\ false) do
|
|
var = Docker.env(shortname, verbatim)
|
|
|
|
if var == nil do
|
|
[]
|
|
else
|
|
var
|
|
|> String.split(';')
|
|
|> Enum.map(&String.trim/1)
|
|
end
|
|
end
|
|
end
|
|
|
|
###
|
|
# Apply config
|
|
###
|
|
config :logger, level: String.to_atom(Docker.env(:loglevel) || "info")
|
|
|
|
config :pleroma, :emoji, shortcode_globs: Docker.split(:emoji_shortcode_globs)
|
|
|
|
config :pleroma, Pleroma.Web.Endpoint,
|
|
url: [
|
|
host: Docker.env(:url),
|
|
scheme: Docker.env(:scheme),
|
|
port: Docker.env(:port)
|
|
],
|
|
secret_key_base: Docker.env(:secret_key_base)
|
|
|
|
config :pleroma, Pleroma.Upload,
|
|
uploads: Docker.env(:uploads_path),
|
|
strip_exif: Docker.env(:uploads_strip_exif)
|
|
|
|
config :pleroma, :chat,
|
|
enabled: Docker.env(:chat_enabled)
|
|
|
|
config :pleroma, :instance,
|
|
name: Docker.env(:name),
|
|
description: Docker.env(:description),
|
|
email: Docker.env(:admin_email),
|
|
limit: Docker.env(:max_notice_chars),
|
|
registrations_open: Docker.env(:registrations_open),
|
|
federating: Docker.env(:federating),
|
|
rewrite_policy: Docker.split(:rewrite_policies)
|
|
|
|
if Docker.split(:rewrite_policies) |> Enum.any?(fn(x) -> x == "Pleroma.Web.ActivityPub.MRF.SimplePolicy" end) do
|
|
config :pleroma, :mrf_simple,
|
|
media_removal: Docker.split(:mrf_media_removal),
|
|
media_nsfw: Docker.split(:mrf_media_nsfw),
|
|
reject: Docker.split(:mrf_reject),
|
|
federated_timeline_removal: Docker.split(:mrf_federated_timeline_removal)
|
|
end
|
|
|
|
config :pleroma, :media_proxy,
|
|
enabled: Docker.env(:media_proxy_enabled),
|
|
redirect_on_failure: Docker.env(:media_proxy_redirect_on_failure),
|
|
base_url: Docker.env(:media_proxy_url)
|
|
|
|
config :pleroma, Pleroma.Repo,
|
|
adapter: Ecto.Adapters.Postgres,
|
|
username: Docker.env(:postgres_user, true),
|
|
password: Docker.env(:postgres_password, true),
|
|
database: Docker.env(:postgres_db, true),
|
|
hostname: Docker.env(:postgres_ip, true),
|
|
pool_size: Docker.env(:db_pool_size)
|
|
|
|
config :pleroma, :fe,
|
|
theme: Docker.env(:fe_theme),
|
|
logo: Docker.env(:fe_logo),
|
|
background: Docker.env(:fe_background),
|
|
redirect_root_no_login: Docker.env(:fe_redirect_no_login),
|
|
redirect_root_login: Docker.env(:fe_redirect_login),
|
|
show_instance_panel: Docker.env(:fe_show_instance_panel),
|
|
show_who_to_follow_panel: Docker.env(:fe_show_who_to_follow_panel),
|
|
who_to_follow_provider: Docker.env(:fe_who_to_follow_provider),
|
|
who_to_follow_link: Docker.env(:fe_who_to_follow_link),
|
|
scope_options_enabled: Docker.env(:fe_scope_options_enabled)
|