Merge branch 'develop' into issue/1936
This commit is contained in:
commit
56470647de
|
@ -194,7 +194,7 @@
|
||||||
type: [:string, {:list, :string}, {:list, :tuple}],
|
type: [:string, {:list, :string}, {:list, :tuple}],
|
||||||
description:
|
description:
|
||||||
"List of actions for the mogrify command. It's possible to add self-written settings as string. " <>
|
"List of actions for the mogrify command. It's possible to add self-written settings as string. " <>
|
||||||
"For example `[\"auto-orient\", \"strip\", {\"resize\", \"3840x1080>\"}]` string will be parsed into list of the settings.",
|
"For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings.",
|
||||||
suggestions: [
|
suggestions: [
|
||||||
"strip",
|
"strip",
|
||||||
"auto-orient",
|
"auto-orient",
|
||||||
|
@ -951,7 +951,7 @@
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :instance_thumbnail,
|
key: :instance_thumbnail,
|
||||||
type: :string,
|
type: {:string, :image},
|
||||||
description:
|
description:
|
||||||
"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.",
|
"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.",
|
||||||
suggestions: ["/instance/thumbnail.jpeg"]
|
suggestions: ["/instance/thumbnail.jpeg"]
|
||||||
|
@ -964,25 +964,25 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
group: :welcome,
|
group: :pleroma,
|
||||||
|
key: :welcome,
|
||||||
type: :group,
|
type: :group,
|
||||||
description: "Welcome messages settings",
|
description: "Welcome messages settings",
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
group: :direct_message,
|
key: :direct_message,
|
||||||
type: :group,
|
type: :keyword,
|
||||||
descpiption: "Direct message settings",
|
descpiption: "Direct message settings",
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: :enabled,
|
key: :enabled,
|
||||||
type: :boolean,
|
type: :boolean,
|
||||||
description: "Enables sends direct message for new user after registration"
|
description: "Enables sending a direct message to newly registered users"
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :message,
|
key: :message,
|
||||||
type: :string,
|
type: :string,
|
||||||
description:
|
description: "A message that will be sent to newly registered users",
|
||||||
"A message that will be sent to a newly registered users as a direct message",
|
|
||||||
suggestions: [
|
suggestions: [
|
||||||
"Hi, @username! Welcome on board!"
|
"Hi, @username! Welcome on board!"
|
||||||
]
|
]
|
||||||
|
@ -990,7 +990,7 @@
|
||||||
%{
|
%{
|
||||||
key: :sender_nickname,
|
key: :sender_nickname,
|
||||||
type: :string,
|
type: :string,
|
||||||
description: "The nickname of the local user that sends the welcome message",
|
description: "The nickname of the local user that sends a welcome message",
|
||||||
suggestions: [
|
suggestions: [
|
||||||
"lain"
|
"lain"
|
||||||
]
|
]
|
||||||
|
@ -998,20 +998,20 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
group: :chat_message,
|
key: :chat_message,
|
||||||
type: :group,
|
type: :keyword,
|
||||||
descpiption: "Chat message settings",
|
descpiption: "Chat message settings",
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: :enabled,
|
key: :enabled,
|
||||||
type: :boolean,
|
type: :boolean,
|
||||||
description: "Enables sends chat message for new user after registration"
|
description: "Enables sending a chat message to newly registered users"
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :message,
|
key: :message,
|
||||||
type: :string,
|
type: :string,
|
||||||
description:
|
description:
|
||||||
"A message that will be sent to a newly registered users as a chat message",
|
"A message that will be sent to newly registered users as a chat message",
|
||||||
suggestions: [
|
suggestions: [
|
||||||
"Hello, welcome on board!"
|
"Hello, welcome on board!"
|
||||||
]
|
]
|
||||||
|
@ -1019,7 +1019,7 @@
|
||||||
%{
|
%{
|
||||||
key: :sender_nickname,
|
key: :sender_nickname,
|
||||||
type: :string,
|
type: :string,
|
||||||
description: "The nickname of the local user that sends the welcome message",
|
description: "The nickname of the local user that sends a welcome chat message",
|
||||||
suggestions: [
|
suggestions: [
|
||||||
"lain"
|
"lain"
|
||||||
]
|
]
|
||||||
|
@ -1027,20 +1027,20 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
group: :email,
|
key: :email,
|
||||||
type: :group,
|
type: :keyword,
|
||||||
descpiption: "Email message settings",
|
descpiption: "Email message settings",
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: :enabled,
|
key: :enabled,
|
||||||
type: :boolean,
|
type: :boolean,
|
||||||
description: "Enables sends direct message for new user after registration"
|
description: "Enables sending an email to newly registered users"
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :sender,
|
key: :sender,
|
||||||
type: [:string, :tuple],
|
type: [:string, :tuple],
|
||||||
description:
|
description:
|
||||||
"The email address or tuple with `{nickname, email}` that will use as sender to the welcome email.",
|
"Email address and/or nickname that will be used to send the welcome email.",
|
||||||
suggestions: [
|
suggestions: [
|
||||||
{"Pleroma App", "welcome@pleroma.app"}
|
{"Pleroma App", "welcome@pleroma.app"}
|
||||||
]
|
]
|
||||||
|
@ -1049,21 +1049,21 @@
|
||||||
key: :subject,
|
key: :subject,
|
||||||
type: :string,
|
type: :string,
|
||||||
description:
|
description:
|
||||||
"The subject of welcome email. Can be use EEX template with `user` and `instance_name` variables.",
|
"Subject of the welcome email. EEX template with user and instance_name variables can be used.",
|
||||||
suggestions: ["Welcome to <%= instance_name%>"]
|
suggestions: ["Welcome to <%= instance_name%>"]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :html,
|
key: :html,
|
||||||
type: :string,
|
type: :string,
|
||||||
description:
|
description:
|
||||||
"The html content of welcome email. Can be use EEX template with `user` and `instance_name` variables.",
|
"HTML content of the welcome email. EEX template with user and instance_name variables can be used.",
|
||||||
suggestions: ["<h1>Hello <%= user.name%>. Welcome to <%= instance_name%></h1>"]
|
suggestions: ["<h1>Hello <%= user.name%>. Welcome to <%= instance_name%></h1>"]
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :text,
|
key: :text,
|
||||||
type: :string,
|
type: :string,
|
||||||
description:
|
description:
|
||||||
"The text content of welcome email. Can be use EEX template with `user` and `instance_name` variables.",
|
"Text content of the welcome email. EEX template with user and instance_name variables can be used.",
|
||||||
suggestions: ["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"]
|
suggestions: ["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -1236,7 +1236,7 @@
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :background,
|
key: :background,
|
||||||
type: :string,
|
type: {:string, :image},
|
||||||
description:
|
description:
|
||||||
"URL of the background, unless viewing a user profile with a background that is set",
|
"URL of the background, unless viewing a user profile with a background that is set",
|
||||||
suggestions: ["/images/city.jpg"]
|
suggestions: ["/images/city.jpg"]
|
||||||
|
@ -1293,7 +1293,7 @@
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :logo,
|
key: :logo,
|
||||||
type: :string,
|
type: {:string, :image},
|
||||||
description: "URL of the logo, defaults to Pleroma's logo",
|
description: "URL of the logo, defaults to Pleroma's logo",
|
||||||
suggestions: ["/static/logo.png"]
|
suggestions: ["/static/logo.png"]
|
||||||
},
|
},
|
||||||
|
@ -1325,7 +1325,7 @@
|
||||||
%{
|
%{
|
||||||
key: :nsfwCensorImage,
|
key: :nsfwCensorImage,
|
||||||
label: "NSFW Censor Image",
|
label: "NSFW Censor Image",
|
||||||
type: :string,
|
type: {:string, :image},
|
||||||
description:
|
description:
|
||||||
"URL of the image to use for hiding NSFW media attachments in the timeline",
|
"URL of the image to use for hiding NSFW media attachments in the timeline",
|
||||||
suggestions: ["/static/img/nsfw.74818f9.png"]
|
suggestions: ["/static/img/nsfw.74818f9.png"]
|
||||||
|
@ -1451,7 +1451,7 @@
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: :default_user_avatar,
|
key: :default_user_avatar,
|
||||||
type: :string,
|
type: {:string, :image},
|
||||||
description: "URL of the default user avatar",
|
description: "URL of the default user avatar",
|
||||||
suggestions: ["/images/avi.png"]
|
suggestions: ["/images/avi.png"]
|
||||||
}
|
}
|
||||||
|
@ -2642,7 +2642,7 @@
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: :logo,
|
key: :logo,
|
||||||
type: :string,
|
type: {:string, :image},
|
||||||
description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
|
description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
|
||||||
suggestions: ["some/path/logo.png"]
|
suggestions: ["some/path/logo.png"]
|
||||||
},
|
},
|
||||||
|
@ -3299,7 +3299,7 @@
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :connections_pool,
|
key: :connections_pool,
|
||||||
type: :group,
|
type: :group,
|
||||||
description: "Advanced settings for `gun` connections pool",
|
description: "Advanced settings for `Gun` connections pool",
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: :connection_acquisition_wait,
|
key: :connection_acquisition_wait,
|
||||||
|
@ -3340,7 +3340,7 @@
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :pools,
|
key: :pools,
|
||||||
type: :group,
|
type: :group,
|
||||||
description: "Advanced settings for `gun` workers pools",
|
description: "Advanced settings for `Gun` workers pools",
|
||||||
children:
|
children:
|
||||||
Enum.map([:federation, :media, :upload, :default], fn pool_name ->
|
Enum.map([:federation, :media, :upload, :default], fn pool_name ->
|
||||||
%{
|
%{
|
||||||
|
@ -3369,7 +3369,7 @@
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :hackney_pools,
|
key: :hackney_pools,
|
||||||
type: :group,
|
type: :group,
|
||||||
description: "Advanced settings for `hackney` connections pools",
|
description: "Advanced settings for `Hackney` connections pools",
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: :federation,
|
key: :federation,
|
||||||
|
@ -3433,6 +3433,7 @@
|
||||||
%{
|
%{
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :restrict_unauthenticated,
|
key: :restrict_unauthenticated,
|
||||||
|
label: "Restrict Unauthenticated",
|
||||||
type: :group,
|
type: :group,
|
||||||
description:
|
description:
|
||||||
"Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
|
"Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
|
||||||
|
@ -3555,13 +3556,17 @@
|
||||||
children: [
|
children: [
|
||||||
%{
|
%{
|
||||||
key: "name",
|
key: "name",
|
||||||
|
label: "Name",
|
||||||
type: :string,
|
type: :string,
|
||||||
description: "Name of the installed primary frontend"
|
description:
|
||||||
|
"Name of the installed primary frontend. Valid config must include both `Name` and `Reference` values."
|
||||||
},
|
},
|
||||||
%{
|
%{
|
||||||
key: "ref",
|
key: "ref",
|
||||||
|
label: "Reference",
|
||||||
type: :string,
|
type: :string,
|
||||||
description: "reference of the installed primary frontend to be used"
|
description:
|
||||||
|
"Reference of the installed primary frontend to be used. Valid config must include both `Name` and `Reference` values."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Managing robots.txt
|
||||||
|
|
||||||
|
{! backend/administration/CLI_tasks/general_cli_task_info.include !}
|
||||||
|
|
||||||
|
## Generate a new robots.txt file and add it to the static directory
|
||||||
|
|
||||||
|
The `robots.txt` that ships by default is permissive. It allows well-behaved search engines to index all of your instance's URIs.
|
||||||
|
|
||||||
|
If you want to generate a restrictive `robots.txt`, you can run the following mix task. The generated `robots.txt` will be written in your instance [static directory](../../../configuration/static_dir/).
|
||||||
|
|
||||||
|
```elixir tab="OTP"
|
||||||
|
./bin/pleroma_ctl robots_txt disallow_all
|
||||||
|
```
|
||||||
|
|
||||||
|
```elixir tab="From Source"
|
||||||
|
mix pleroma.robots_txt disallow_all
|
||||||
|
```
|
|
@ -1,45 +1,57 @@
|
||||||
# Static Directory
|
# Static Directory
|
||||||
|
|
||||||
Static frontend files are shipped in `priv/static/` and tracked by version control in this repository. If you want to overwrite or update these without the possibility of merge conflicts, you can write your custom versions to `instance/static/`.
|
Static frontend files are shipped with pleroma. If you want to overwrite or update these without problems during upgrades, you can write your custom versions to the static directory.
|
||||||
|
|
||||||
|
You can find the location of the static directory in the [configuration](../cheatsheet/#instance).
|
||||||
|
|
||||||
|
```elixir tab="OTP"
|
||||||
|
config :pleroma, :instance,
|
||||||
|
static_dir: "/var/lib/pleroma/static/",
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```elixir tab="From Source"
|
||||||
config :pleroma, :instance,
|
config :pleroma, :instance,
|
||||||
static_dir: "instance/static/",
|
static_dir: "instance/static/",
|
||||||
```
|
```
|
||||||
|
|
||||||
For example, edit `instance/static/instance/panel.html` .
|
|
||||||
|
|
||||||
Alternatively, you can overwrite this value in your configuration to use a different static instance directory.
|
Alternatively, you can overwrite this value in your configuration to use a different static instance directory.
|
||||||
|
|
||||||
This document is written assuming `instance/static/`.
|
This document is written using `$static_dir` as the value of the `config :pleroma, :instance, static_dir` setting.
|
||||||
|
|
||||||
Or, if you want to manage your custom file in git repository, basically remove the `instance/` entry from `.gitignore`.
|
If you use a From Source installation and want to manage your custom files in the git repository, you can remove the `instance/` entry from `.gitignore`.
|
||||||
|
|
||||||
## robots.txt
|
## robots.txt
|
||||||
|
|
||||||
By default, the `robots.txt` that ships in `priv/static/` is permissive. It allows well-behaved search engines to index all of your instance's URIs.
|
There's a mix tasks to [generate a new robot.txt](../../administration/CLI_tasks/robots_txt/).
|
||||||
|
|
||||||
If you want to generate a restrictive `robots.txt`, you can run the following mix task. The generated `robots.txt` will be written in your instance static directory.
|
For more complex things, you can write your own robots.txt to `$static_dir/robots.txt`.
|
||||||
|
|
||||||
|
E.g. if you want to block all crawlers except for [fediverse.network](https://fediverse.network/about) you can use
|
||||||
|
|
||||||
```
|
```
|
||||||
mix pleroma.robots_txt disallow_all
|
User-Agent: *
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-Agent: crawler-us-il-1.fediverse.network
|
||||||
|
Allow: /
|
||||||
|
|
||||||
|
User-Agent: makhnovtchina.random.sh
|
||||||
|
Allow: /
|
||||||
```
|
```
|
||||||
|
|
||||||
## Thumbnail
|
## Thumbnail
|
||||||
|
|
||||||
Put on `instance/static/instance/thumbnail.jpeg` with your selfie or other neat picture. It will appear in [Pleroma Instances](http://distsn.org/pleroma-instances.html).
|
Add `$static_dir/instance/thumbnail.jpeg` with your selfie or other neat picture. It will be available on `http://your-domain.tld/instance/thumbnail.jpeg` and can be used by external applications.
|
||||||
|
|
||||||
## Instance-specific panel
|
## Instance-specific panel
|
||||||
|
|
||||||
![instance-specific panel demo](/uploads/296b19ec806b130e0b49b16bfe29ce8a/image.png)
|
Create and Edit your file at `$static_dir/instance/panel.html`.
|
||||||
|
|
||||||
Create and Edit your file on `instance/static/instance/panel.html`.
|
|
||||||
|
|
||||||
## Background
|
## Background
|
||||||
|
|
||||||
You can change the background of your Pleroma instance by uploading it to `instance/static/`, and then changing `background` in `config/prod.secret.exs` accordingly.
|
You can change the background of your Pleroma instance by uploading it to `$static_dir/`, and then changing `background` in [your configuration](../cheatsheet/#frontend_configurations) accordingly.
|
||||||
|
|
||||||
If you put `instance/static/images/background.jpg`
|
E.g. if you put `$static_dir/images/background.jpg`
|
||||||
|
|
||||||
```
|
```
|
||||||
config :pleroma, :frontend_configurations,
|
config :pleroma, :frontend_configurations,
|
||||||
|
@ -50,12 +62,14 @@ config :pleroma, :frontend_configurations,
|
||||||
|
|
||||||
## Logo
|
## Logo
|
||||||
|
|
||||||
![logo modification demo](/uploads/c70b14de60fa74245e7f0dcfa695ebff/image.png)
|
!!! important
|
||||||
|
Note the extra `static` folder for the default logo.png location
|
||||||
|
|
||||||
If you want to give a brand to your instance, You can change the logo of your instance by uploading it to `instance/static/`.
|
If you want to give a brand to your instance, You can change the logo of your instance by uploading it to the static directory `$static_dir/static/logo.png`.
|
||||||
|
|
||||||
Alternatively, you can specify the path with config.
|
Alternatively, you can specify the path to your logo in [your configuration](../cheatsheet/#frontend_configurations).
|
||||||
If you put `instance/static/static/mylogo-file.png`
|
|
||||||
|
E.g. if you put `$static_dir/static/mylogo-file.png`
|
||||||
|
|
||||||
```
|
```
|
||||||
config :pleroma, :frontend_configurations,
|
config :pleroma, :frontend_configurations,
|
||||||
|
@ -66,4 +80,7 @@ config :pleroma, :frontend_configurations,
|
||||||
|
|
||||||
## Terms of Service
|
## Terms of Service
|
||||||
|
|
||||||
Terms of Service will be shown to all users on the registration page. It's the best place where to write down the rules for your instance. You can modify the rules by changing `instance/static/static/terms-of-service.html`.
|
!!! important
|
||||||
|
Note the extra `static` folder for the terms-of-service.html
|
||||||
|
|
||||||
|
Terms of Service will be shown to all users on the registration page. It's the best place where to write down the rules for your instance. You can modify the rules by adding and changing `$static_dir/static/terms-of-service.html`.
|
||||||
|
|
|
@ -15,8 +15,8 @@ def start_link(_) do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def init(state) do
|
def init(state) do
|
||||||
:telemetry.attach("oban-monitor-failure", [:oban, :failure], &handle_event/4, nil)
|
:telemetry.attach("oban-monitor-failure", [:oban, :job, :exception], &handle_event/4, nil)
|
||||||
:telemetry.attach("oban-monitor-success", [:oban, :success], &handle_event/4, nil)
|
:telemetry.attach("oban-monitor-success", [:oban, :job, :stop], &handle_event/4, nil)
|
||||||
|
|
||||||
{:ok, state}
|
{:ok, state}
|
||||||
end
|
end
|
||||||
|
@ -25,8 +25,11 @@ def stats do
|
||||||
GenServer.call(__MODULE__, :stats)
|
GenServer.call(__MODULE__, :stats)
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event([:oban, status], %{duration: duration}, meta, _) do
|
def handle_event([:oban, :job, event], %{duration: duration}, meta, _) do
|
||||||
GenServer.cast(__MODULE__, {:process_event, status, duration, meta})
|
GenServer.cast(
|
||||||
|
__MODULE__,
|
||||||
|
{:process_event, mapping_status(event), duration, meta}
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
@ -75,4 +78,7 @@ defp update_queue(queue, status, _meta, _duration) do
|
||||||
|> Map.update!(:processed_jobs, &(&1 + 1))
|
|> Map.update!(:processed_jobs, &(&1 + 1))
|
||||||
|> Map.update!(status, &(&1 + 1))
|
|> Map.update!(status, &(&1 + 1))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp mapping_status(:stop), do: :success
|
||||||
|
defp mapping_status(:exception), do: :failure
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,6 +18,12 @@ def falsy_param?(value),
|
||||||
|
|
||||||
def truthy_param?(value), do: not falsy_param?(value)
|
def truthy_param?(value), do: not falsy_param?(value)
|
||||||
|
|
||||||
|
def json_response(conn, status, _) when status in [204, :no_content] do
|
||||||
|
conn
|
||||||
|
|> put_resp_header("content-type", "application/json")
|
||||||
|
|> send_resp(status, "")
|
||||||
|
end
|
||||||
|
|
||||||
def json_response(conn, status, json) do
|
def json_response(conn, status, json) do
|
||||||
conn
|
conn
|
||||||
|> put_status(status)
|
|> put_status(status)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.SetDefaultsToUserApprovalPending do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def up do
|
||||||
|
execute("UPDATE users SET approval_pending = false WHERE approval_pending IS NULL")
|
||||||
|
|
||||||
|
alter table(:users) do
|
||||||
|
modify(:approval_pending, :boolean, default: false, null: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
end
|
|
@ -56,6 +56,13 @@ defp request_content_type(%{conn: conn}) do
|
||||||
[conn: conn]
|
[conn: conn]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp empty_json_response(conn) do
|
||||||
|
body = response(conn, 204)
|
||||||
|
response_content_type(conn, :json)
|
||||||
|
|
||||||
|
body
|
||||||
|
end
|
||||||
|
|
||||||
defp json_response_and_validate_schema(
|
defp json_response_and_validate_schema(
|
||||||
%{
|
%{
|
||||||
private: %{
|
private: %{
|
||||||
|
@ -79,7 +86,7 @@ defp json_response_and_validate_schema(
|
||||||
end
|
end
|
||||||
|
|
||||||
schema = lookup[op_id].responses[status].content[content_type].schema
|
schema = lookup[op_id].responses[status].content[content_type].schema
|
||||||
json = json_response(conn, status)
|
json = if status == 204, do: empty_json_response(conn), else: json_response(conn, status)
|
||||||
|
|
||||||
case OpenApiSpex.cast_value(json, schema, spec) do
|
case OpenApiSpex.cast_value(json, schema, spec) do
|
||||||
{:ok, _data} ->
|
{:ok, _data} ->
|
||||||
|
|
|
@ -439,7 +439,7 @@ test "it appends specified tags to users with specified nicknames", %{
|
||||||
user1: user1,
|
user1: user1,
|
||||||
user2: user2
|
user2: user2
|
||||||
} do
|
} do
|
||||||
assert json_response(conn, :no_content)
|
assert empty_json_response(conn)
|
||||||
assert User.get_cached_by_id(user1.id).tags == ["x", "foo", "bar"]
|
assert User.get_cached_by_id(user1.id).tags == ["x", "foo", "bar"]
|
||||||
assert User.get_cached_by_id(user2.id).tags == ["y", "foo", "bar"]
|
assert User.get_cached_by_id(user2.id).tags == ["y", "foo", "bar"]
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ test "it appends specified tags to users with specified nicknames", %{
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
|
test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
|
||||||
assert json_response(conn, :no_content)
|
assert empty_json_response(conn)
|
||||||
assert User.get_cached_by_id(user3.id).tags == ["unchanged"]
|
assert User.get_cached_by_id(user3.id).tags == ["unchanged"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -485,7 +485,7 @@ test "it removes specified tags from users with specified nicknames", %{
|
||||||
user1: user1,
|
user1: user1,
|
||||||
user2: user2
|
user2: user2
|
||||||
} do
|
} do
|
||||||
assert json_response(conn, :no_content)
|
assert empty_json_response(conn)
|
||||||
assert User.get_cached_by_id(user1.id).tags == []
|
assert User.get_cached_by_id(user1.id).tags == []
|
||||||
assert User.get_cached_by_id(user2.id).tags == ["y"]
|
assert User.get_cached_by_id(user2.id).tags == ["y"]
|
||||||
|
|
||||||
|
@ -503,7 +503,7 @@ test "it removes specified tags from users with specified nicknames", %{
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
|
test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
|
||||||
assert json_response(conn, :no_content)
|
assert empty_json_response(conn)
|
||||||
assert User.get_cached_by_id(user3.id).tags == ["unchanged"]
|
assert User.get_cached_by_id(user3.id).tags == ["unchanged"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1777,7 +1777,7 @@ test "sets password_reset_pending to true", %{conn: conn} do
|
||||||
conn =
|
conn =
|
||||||
patch(conn, "/api/pleroma/admin/users/force_password_reset", %{nicknames: [user.nickname]})
|
patch(conn, "/api/pleroma/admin/users/force_password_reset", %{nicknames: [user.nickname]})
|
||||||
|
|
||||||
assert json_response(conn, 204) == ""
|
assert empty_json_response(conn) == ""
|
||||||
|
|
||||||
ObanHelpers.perform_all()
|
ObanHelpers.perform_all()
|
||||||
|
|
||||||
|
|
|
@ -1342,6 +1342,75 @@ test "args for Pleroma.Upload.Filter.Mogrify with custom tuples", %{conn: conn}
|
||||||
args: ["auto-orient", "strip", {"implode", "1"}, {"resize", "3840x1080>"}]
|
args: ["auto-orient", "strip", {"implode", "1"}, {"resize", "3840x1080>"}]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "enables the welcome messages", %{conn: conn} do
|
||||||
|
clear_config([:welcome])
|
||||||
|
|
||||||
|
params = %{
|
||||||
|
"group" => ":pleroma",
|
||||||
|
"key" => ":welcome",
|
||||||
|
"value" => [
|
||||||
|
%{
|
||||||
|
"tuple" => [
|
||||||
|
":direct_message",
|
||||||
|
[
|
||||||
|
%{"tuple" => [":enabled", true]},
|
||||||
|
%{"tuple" => [":message", "Welcome to Pleroma!"]},
|
||||||
|
%{"tuple" => [":sender_nickname", "pleroma"]}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
"tuple" => [
|
||||||
|
":chat_message",
|
||||||
|
[
|
||||||
|
%{"tuple" => [":enabled", true]},
|
||||||
|
%{"tuple" => [":message", "Welcome to Pleroma!"]},
|
||||||
|
%{"tuple" => [":sender_nickname", "pleroma"]}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
%{
|
||||||
|
"tuple" => [
|
||||||
|
":email",
|
||||||
|
[
|
||||||
|
%{"tuple" => [":enabled", true]},
|
||||||
|
%{"tuple" => [":sender", %{"tuple" => ["pleroma@dev.dev", "Pleroma"]}]},
|
||||||
|
%{"tuple" => [":subject", "Welcome to <%= instance_name %>!"]},
|
||||||
|
%{"tuple" => [":html", "Welcome to <%= instance_name %>!"]},
|
||||||
|
%{"tuple" => [":text", "Welcome to <%= instance_name %>!"]}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
refute Pleroma.User.WelcomeEmail.enabled?()
|
||||||
|
refute Pleroma.User.WelcomeMessage.enabled?()
|
||||||
|
refute Pleroma.User.WelcomeChatMessage.enabled?()
|
||||||
|
|
||||||
|
res =
|
||||||
|
assert conn
|
||||||
|
|> put_req_header("content-type", "application/json")
|
||||||
|
|> post("/api/pleroma/admin/config", %{"configs" => [params]})
|
||||||
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
|
assert Pleroma.User.WelcomeEmail.enabled?()
|
||||||
|
assert Pleroma.User.WelcomeMessage.enabled?()
|
||||||
|
assert Pleroma.User.WelcomeChatMessage.enabled?()
|
||||||
|
|
||||||
|
assert res == %{
|
||||||
|
"configs" => [
|
||||||
|
%{
|
||||||
|
"db" => [":direct_message", ":chat_message", ":email"],
|
||||||
|
"group" => ":pleroma",
|
||||||
|
"key" => ":welcome",
|
||||||
|
"value" => params["value"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"need_reboot" => false
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /api/pleroma/admin/config/descriptions" do
|
describe "GET /api/pleroma/admin/config/descriptions" do
|
||||||
|
|
Loading…
Reference in New Issue