forked from AkkomaGang/akkoma
Merge remote-tracking branch 'remotes/origin/develop' into 1560-non-federating-instances-routes-restrictions
This commit is contained in:
commit
972889550d
31 changed files with 107 additions and 99 deletions
39
CHANGELOG.md
39
CHANGELOG.md
|
@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
## [Unreleased]
|
## [2.0.0] - 2019-03-08
|
||||||
### Security
|
### Security
|
||||||
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
|
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
|
||||||
|
|
||||||
|
@ -150,6 +150,43 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Mastodon API: Marking a conversation as read (`POST /api/v1/conversations/:id/read`) now no longer brings it to the top in the user's direct conversation list
|
- Mastodon API: Marking a conversation as read (`POST /api/v1/conversations/:id/read`) now no longer brings it to the top in the user's direct conversation list
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## [1.1.9] - 2020-02-10
|
||||||
|
### Fixed
|
||||||
|
- OTP: Inability to set the upload limit (again)
|
||||||
|
- Not being able to pin polls
|
||||||
|
- Streaming API: incorrect handling of reblog mutes
|
||||||
|
- Rejecting the user when field length limit is exceeded
|
||||||
|
- OpenGraph provider: html entities in descriptions
|
||||||
|
|
||||||
|
## [1.1.8] - 2020-01-10
|
||||||
|
### Fixed
|
||||||
|
- Captcha generation issues
|
||||||
|
- Returned Kocaptcha endpoint to configuration
|
||||||
|
- Captcha validity is now 5 minutes
|
||||||
|
|
||||||
|
## [1.1.7] - 2019-12-13
|
||||||
|
### Fixed
|
||||||
|
- OTP: Inability to set the upload limit
|
||||||
|
- OTP: Inability to override node name/distribution type to run 2 Pleroma instances on the same machine
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Integrated captcha provider
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Captcha enabled by default
|
||||||
|
- Default Captcha provider changed from `Pleroma.Captcha.Kocaptcha` to `Pleroma.Captcha.Native`
|
||||||
|
- Better `Cache-Control` header for static content
|
||||||
|
|
||||||
|
### Bundled Pleroma-FE Changes
|
||||||
|
#### Added
|
||||||
|
- Icons in the navigation panel
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
- Improved support unauthenticated view of private instances
|
||||||
|
|
||||||
|
#### Removed
|
||||||
|
- Whitespace hack on empty post content
|
||||||
|
|
||||||
## [1.1.6] - 2019-11-19
|
## [1.1.6] - 2019-11-19
|
||||||
### Fixed
|
### Fixed
|
||||||
- Not being able to log into to third party apps when the browser is logged into mastofe
|
- Not being able to log into to third party apps when the browser is logged into mastofe
|
||||||
|
|
|
@ -18,9 +18,8 @@
|
||||||
6. Run `sudo -Hu postgres pg_restore -d <pleroma_db> -v -1 </path/to/backup_location/pleroma.pgdump>`
|
6. Run `sudo -Hu postgres pg_restore -d <pleroma_db> -v -1 </path/to/backup_location/pleroma.pgdump>`
|
||||||
7. If you installed a newer Pleroma version, you should run `mix ecto.migrate`[^1]. This task performs database migrations, if there were any.
|
7. If you installed a newer Pleroma version, you should run `mix ecto.migrate`[^1]. This task performs database migrations, if there were any.
|
||||||
8. Restart the Pleroma service.
|
8. Restart the Pleroma service.
|
||||||
9. After you've restarted Pleroma, you will notice that postgres will take up more cpu resources than usual. A lot in fact. To fix this you must do a VACUUM ANLAYZE. This can also be done while the instance is still running like so:
|
9. Run `sudo -Hu postgres vacuumdb --all --analyze-in-stages`. This will quickly generate the statistics so that postgres can properly plan queries.
|
||||||
$ sudo -u postgres psql pleroma_database_name
|
|
||||||
pleroma=# VACUUM ANALYZE;
|
|
||||||
[^1]: Prefix with `MIX_ENV=prod` to run it using the production config file.
|
[^1]: Prefix with `MIX_ENV=prod` to run it using the production config file.
|
||||||
|
|
||||||
## Remove
|
## Remove
|
||||||
|
|
|
@ -12,6 +12,19 @@ def start_pleroma do
|
||||||
end
|
end
|
||||||
|
|
||||||
{:ok, _} = Application.ensure_all_started(:pleroma)
|
{:ok, _} = Application.ensure_all_started(:pleroma)
|
||||||
|
|
||||||
|
if Pleroma.Config.get(:env) not in [:test, :benchmark] do
|
||||||
|
pleroma_rebooted?()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp pleroma_rebooted? do
|
||||||
|
if Restarter.Pleroma.rebooted?() do
|
||||||
|
:ok
|
||||||
|
else
|
||||||
|
Process.sleep(10)
|
||||||
|
pleroma_rebooted?()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_pleroma do
|
def load_pleroma do
|
||||||
|
|
|
@ -42,7 +42,8 @@ def start_link(_) do
|
||||||
|
|
||||||
@spec load_and_update_env([ConfigDB.t()]) :: :ok | false
|
@spec load_and_update_env([ConfigDB.t()]) :: :ok | false
|
||||||
def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do
|
def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do
|
||||||
with true <- Pleroma.Config.get(:configurable_from_database),
|
with {:configurable, true} <-
|
||||||
|
{:configurable, Pleroma.Config.get(:configurable_from_database)},
|
||||||
true <- Ecto.Adapters.SQL.table_exists?(Repo, "config"),
|
true <- Ecto.Adapters.SQL.table_exists?(Repo, "config"),
|
||||||
started_applications <- Application.started_applications() do
|
started_applications <- Application.started_applications() do
|
||||||
# We need to restart applications for loaded settings take effect
|
# We need to restart applications for loaded settings take effect
|
||||||
|
@ -65,12 +66,15 @@ def load_and_update_env(deleted \\ [], restart_pleroma? \\ true) do
|
||||||
if :pleroma in applications do
|
if :pleroma in applications do
|
||||||
List.delete(applications, :pleroma) ++ [:pleroma]
|
List.delete(applications, :pleroma) ++ [:pleroma]
|
||||||
else
|
else
|
||||||
|
Restarter.Pleroma.rebooted()
|
||||||
applications
|
applications
|
||||||
end
|
end
|
||||||
|
|
||||||
Enum.each(applications, &restart(started_applications, &1, Pleroma.Config.get(:env)))
|
Enum.each(applications, &restart(started_applications, &1, Pleroma.Config.get(:env)))
|
||||||
|
|
||||||
:ok
|
:ok
|
||||||
|
else
|
||||||
|
{:configurable, false} -> Restarter.Pleroma.rebooted()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -387,24 +387,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} created users: #{users_to_nicknames_string(subjects)}"
|
"@#{actor_nickname} created users: #{users_to_nicknames_string(subjects)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "activate",
|
|
||||||
"subject" => user
|
|
||||||
}
|
|
||||||
})
|
|
||||||
when is_map(user) do
|
|
||||||
get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "activate",
|
|
||||||
"subject" => [user]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
@spec get_log_entry_message(ModerationLog) :: String.t()
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
|
@ -416,24 +398,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} activated users: #{users_to_nicknames_string(users)}"
|
"@#{actor_nickname} activated users: #{users_to_nicknames_string(users)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "deactivate",
|
|
||||||
"subject" => user
|
|
||||||
}
|
|
||||||
})
|
|
||||||
when is_map(user) do
|
|
||||||
get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "deactivate",
|
|
||||||
"subject" => [user]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
@spec get_log_entry_message(ModerationLog) :: String.t()
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
|
@ -473,26 +437,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} removed tags: #{tags_string} from users: #{nicknames_to_string(nicknames)}"
|
"@#{actor_nickname} removed tags: #{tags_string} from users: #{nicknames_to_string(nicknames)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "grant",
|
|
||||||
"subject" => user,
|
|
||||||
"permission" => permission
|
|
||||||
}
|
|
||||||
})
|
|
||||||
when is_map(user) do
|
|
||||||
get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "grant",
|
|
||||||
"subject" => [user],
|
|
||||||
"permission" => permission
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
@spec get_log_entry_message(ModerationLog) :: String.t()
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
|
@ -505,26 +449,6 @@ def get_log_entry_message(%ModerationLog{
|
||||||
"@#{actor_nickname} made #{users_to_nicknames_string(users)} #{permission}"
|
"@#{actor_nickname} made #{users_to_nicknames_string(users)} #{permission}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
|
||||||
def get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "revoke",
|
|
||||||
"subject" => user,
|
|
||||||
"permission" => permission
|
|
||||||
}
|
|
||||||
})
|
|
||||||
when is_map(user) do
|
|
||||||
get_log_entry_message(%ModerationLog{
|
|
||||||
data: %{
|
|
||||||
"actor" => %{"nickname" => actor_nickname},
|
|
||||||
"action" => "revoke",
|
|
||||||
"subject" => [user],
|
|
||||||
"permission" => permission
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec get_log_entry_message(ModerationLog) :: String.t()
|
@spec get_log_entry_message(ModerationLog) :: String.t()
|
||||||
def get_log_entry_message(%ModerationLog{
|
def get_log_entry_message(%ModerationLog{
|
||||||
data: %{
|
data: %{
|
||||||
|
|
|
@ -591,7 +591,7 @@ def validate_character_limit(full_payload, _attachments) do
|
||||||
limit = Pleroma.Config.get([:instance, :limit])
|
limit = Pleroma.Config.get([:instance, :limit])
|
||||||
length = String.length(full_payload)
|
length = String.length(full_payload)
|
||||||
|
|
||||||
if length < limit do
|
if length <= limit do
|
||||||
:ok
|
:ok
|
||||||
else
|
else
|
||||||
{:error, dgettext("errors", "The status is over the character limit")}
|
{:error, dgettext("errors", "The status is over the character limit")}
|
||||||
|
|
2
mix.exs
2
mix.exs
|
@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do
|
||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
app: :pleroma,
|
app: :pleroma,
|
||||||
version: version("1.1.50"),
|
version: version("2.0.50"),
|
||||||
elixir: "~> 1.8",
|
elixir: "~> 1.8",
|
||||||
elixirc_paths: elixirc_paths(Mix.env()),
|
elixirc_paths: elixirc_paths(Mix.env()),
|
||||||
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
|
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.FixModerationLogSubjects do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
execute(
|
||||||
|
"update moderation_log set data = safe_jsonb_set(data, '{subject}', safe_jsonb_set('[]'::jsonb, '{0}', data->'subject')) where jsonb_typeof(data->'subject') != 'array' and data->>'action' = ANY('{revoke,grant,activate,deactivate,delete}');"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1 +1 @@
|
||||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>Admin FE</title><link rel="shortcut icon" href=favicon.ico><link href=chunk-elementUI.1abbc9b8.css rel=stylesheet><link href=chunk-libs.686b5876.css rel=stylesheet><link href=app.c836e084.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/runtime.ae93ea9f.js></script><script type=text/javascript src=static/js/chunk-elementUI.fba0efec.js></script><script type=text/javascript src=static/js/chunk-libs.b8c453ab.js></script><script type=text/javascript src=static/js/app.30262183.js></script></body></html>
|
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>Admin FE</title><link rel="shortcut icon" href=favicon.ico><link href=chunk-elementUI.1abbc9b8.css rel=stylesheet><link href=chunk-libs.686b5876.css rel=stylesheet><link href=app.c836e084.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/runtime.ae93ea9f.js></script><script type=text/javascript src=static/js/chunk-elementUI.fba0efec.js></script><script type=text/javascript src=static/js/chunk-libs.b8c453ab.js></script><script type=text/javascript src=static/js/app.55df3157.js></script></body></html>
|
Binary file not shown.
Binary file not shown.
BIN
priv/static/adminfe/static/js/app.55df3157.js
Normal file
BIN
priv/static/adminfe/static/js/app.55df3157.js
Normal file
Binary file not shown.
BIN
priv/static/adminfe/static/js/app.55df3157.js.map
Normal file
BIN
priv/static/adminfe/static/js/app.55df3157.js.map
Normal file
Binary file not shown.
|
@ -1 +1 @@
|
||||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,user-scalable=no"><title>Pleroma</title><!--server-generated-meta--><link rel=icon type=image/png href=/favicon.png><link href=/static/css/vendors~app.b2603a50868c68a1c192.css rel=stylesheet><link href=/static/css/app.1055039ce3f2fe4dd110.css rel=stylesheet><link href=/static/fontello.1582927362782.css rel=stylesheet></head><body class=hidden><noscript>To use Pleroma, please enable JavaScript.</noscript><div id=app></div><script type=text/javascript src=/static/js/vendors~app.c5bbd3734647f0cc7eef.js></script><script type=text/javascript src=/static/js/app.128bd8b808a3b5b6da6b.js></script></body></html>
|
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,user-scalable=no"><title>Pleroma</title><!--server-generated-meta--><link rel=icon type=image/png href=/favicon.png><link href=/static/css/vendors~app.b2603a50868c68a1c192.css rel=stylesheet><link href=/static/css/app.1055039ce3f2fe4dd110.css rel=stylesheet><link href=/static/fontello.1583594169021.css rel=stylesheet></head><body class=hidden><noscript>To use Pleroma, please enable JavaScript.</noscript><div id=app></div><script type=text/javascript src=/static/js/vendors~app.c5bbd3734647f0cc7eef.js></script><script type=text/javascript src=/static/js/app.5c94bdec79a7d0f3cfcb.js></script></body></html>
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Binary file not shown.
Binary file not shown.
BIN
priv/static/static/font/fontello.1583594169021.woff2
Normal file
BIN
priv/static/static/font/fontello.1583594169021.woff2
Normal file
Binary file not shown.
BIN
priv/static/static/fontello.1581007281335.css
vendored
BIN
priv/static/static/fontello.1581007281335.css
vendored
Binary file not shown.
BIN
priv/static/static/fontello.1582927362782.css
vendored
BIN
priv/static/static/fontello.1582927362782.css
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js
Normal file
BIN
priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js
Normal file
Binary file not shown.
BIN
priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js.map
Normal file
BIN
priv/static/static/js/app.5c94bdec79a7d0f3cfcb.js.map
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,11 +3,21 @@ defmodule Restarter.Pleroma do
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
@init_state %{need_reboot: false, rebooted: false, after_boot: false}
|
||||||
|
|
||||||
def start_link(_) do
|
def start_link(_) do
|
||||||
GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
GenServer.start_link(__MODULE__, [], name: __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
def init(_), do: {:ok, %{need_reboot?: false}}
|
def init(_), do: {:ok, @init_state}
|
||||||
|
|
||||||
|
def rebooted? do
|
||||||
|
GenServer.call(__MODULE__, :rebooted?)
|
||||||
|
end
|
||||||
|
|
||||||
|
def rebooted do
|
||||||
|
GenServer.cast(__MODULE__, :rebooted)
|
||||||
|
end
|
||||||
|
|
||||||
def need_reboot? do
|
def need_reboot? do
|
||||||
GenServer.call(__MODULE__, :need_reboot?)
|
GenServer.call(__MODULE__, :need_reboot?)
|
||||||
|
@ -29,41 +39,51 @@ def restart_after_boot(env) do
|
||||||
GenServer.cast(__MODULE__, {:after_boot, env})
|
GenServer.cast(__MODULE__, {:after_boot, env})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_call(:rebooted?, _from, state) do
|
||||||
|
{:reply, state[:rebooted], state}
|
||||||
|
end
|
||||||
|
|
||||||
def handle_call(:need_reboot?, _from, state) do
|
def handle_call(:need_reboot?, _from, state) do
|
||||||
{:reply, state[:need_reboot?], state}
|
{:reply, state[:need_reboot], state}
|
||||||
|
end
|
||||||
|
|
||||||
|
def handle_cast(:rebooted, state) do
|
||||||
|
{:noreply, Map.put(state, :rebooted, true)}
|
||||||
|
end
|
||||||
|
|
||||||
|
def handle_cast(:need_reboot, %{need_reboot: true} = state), do: {:noreply, state}
|
||||||
|
|
||||||
|
def handle_cast(:need_reboot, state) do
|
||||||
|
{:noreply, Map.put(state, :need_reboot, true)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_cast(:refresh, _state) do
|
def handle_cast(:refresh, _state) do
|
||||||
{:noreply, %{need_reboot?: false}}
|
{:noreply, @init_state}
|
||||||
end
|
|
||||||
|
|
||||||
def handle_cast(:need_reboot, %{need_reboot?: true} = state), do: {:noreply, state}
|
|
||||||
|
|
||||||
def handle_cast(:need_reboot, state) do
|
|
||||||
{:noreply, Map.put(state, :need_reboot?, true)}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_cast({:restart, :test, _}, state) do
|
def handle_cast({:restart, :test, _}, state) do
|
||||||
Logger.warn("pleroma restarted")
|
Logger.warn("pleroma restarted")
|
||||||
{:noreply, Map.put(state, :need_reboot?, false)}
|
{:noreply, Map.put(state, :need_reboot, false)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_cast({:restart, _, delay}, state) do
|
def handle_cast({:restart, _, delay}, state) do
|
||||||
Process.sleep(delay)
|
Process.sleep(delay)
|
||||||
do_restart(:pleroma)
|
do_restart(:pleroma)
|
||||||
{:noreply, Map.put(state, :need_reboot?, false)}
|
{:noreply, Map.put(state, :need_reboot, false)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state}
|
def handle_cast({:after_boot, _}, %{after_boot: true} = state), do: {:noreply, state}
|
||||||
|
|
||||||
def handle_cast({:after_boot, :test}, state) do
|
def handle_cast({:after_boot, :test}, state) do
|
||||||
Logger.warn("pleroma restarted")
|
Logger.warn("pleroma restarted")
|
||||||
{:noreply, Map.put(state, :after_boot, true)}
|
state = %{state | after_boot: true, rebooted: true}
|
||||||
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_cast({:after_boot, _}, state) do
|
def handle_cast({:after_boot, _}, state) do
|
||||||
do_restart(:pleroma)
|
do_restart(:pleroma)
|
||||||
{:noreply, Map.put(state, :after_boot, true)}
|
state = %{state | after_boot: true, rebooted: true}
|
||||||
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp do_restart(app) do
|
defp do_restart(app) do
|
||||||
|
|
|
@ -202,13 +202,15 @@ test "it returns error when status is empty and no attachments" do
|
||||||
CommonAPI.post(user, %{"status" => ""})
|
CommonAPI.post(user, %{"status" => ""})
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns error when character limit is exceeded" do
|
test "it validates character limits are correctly enforced" do
|
||||||
Pleroma.Config.put([:instance, :limit], 5)
|
Pleroma.Config.put([:instance, :limit], 5)
|
||||||
|
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
assert {:error, "The status is over the character limit"} =
|
assert {:error, "The status is over the character limit"} =
|
||||||
CommonAPI.post(user, %{"status" => "foobar"})
|
CommonAPI.post(user, %{"status" => "foobar"})
|
||||||
|
|
||||||
|
assert {:ok, activity} = CommonAPI.post(user, %{"status" => "12345"})
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it can handle activities that expire" do
|
test "it can handle activities that expire" do
|
||||||
|
|
Loading…
Reference in a new issue