forked from AkkomaGang/akkoma
Rename notification "privacy_option" setting
This commit is contained in:
parent
fd5e797379
commit
69848d5c97
10 changed files with 45 additions and 26 deletions
|
@ -288,7 +288,7 @@ See [Admin-API](admin_api.md)
|
||||||
* Authentication: required
|
* Authentication: required
|
||||||
* Params:
|
* Params:
|
||||||
* `block_from_strangers`: BOOLEAN field, blocks notifications from accounts you do not follow
|
* `block_from_strangers`: BOOLEAN field, blocks notifications from accounts you do not follow
|
||||||
* `privacy_option`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification.
|
* `hide_notification_contents`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification.
|
||||||
* Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}`
|
* Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}`
|
||||||
|
|
||||||
## `/api/pleroma/healthcheck`
|
## `/api/pleroma/healthcheck`
|
||||||
|
|
|
@ -3,8 +3,8 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
> mix pleroma.notification_settings --privacy-option=false --nickname-users="parallel588" # set false only for parallel588 user
|
> mix pleroma.notification_settings --hide-notification-contents=false --nickname-users="parallel588" # set false only for parallel588 user
|
||||||
> mix pleroma.notification_settings --privacy-option=true # set true for all users
|
> mix pleroma.notification_settings --hide-notification-contents=true # set true for all users
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -19,16 +19,16 @@ def run(args) do
|
||||||
OptionParser.parse(
|
OptionParser.parse(
|
||||||
args,
|
args,
|
||||||
strict: [
|
strict: [
|
||||||
privacy_option: :boolean,
|
hide_notification_contents: :boolean,
|
||||||
email_users: :string,
|
email_users: :string,
|
||||||
nickname_users: :string
|
nickname_users: :string
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
privacy_option = Keyword.get(options, :privacy_option)
|
hide_notification_contents = Keyword.get(options, :hide_notification_contents)
|
||||||
|
|
||||||
if not is_nil(privacy_option) do
|
if not is_nil(hide_notification_contents) do
|
||||||
privacy_option
|
hide_notification_contents
|
||||||
|> build_query(options)
|
|> build_query(options)
|
||||||
|> Pleroma.Repo.update_all([])
|
|> Pleroma.Repo.update_all([])
|
||||||
end
|
end
|
||||||
|
@ -36,15 +36,15 @@ def run(args) do
|
||||||
shell_info("Done")
|
shell_info("Done")
|
||||||
end
|
end
|
||||||
|
|
||||||
defp build_query(privacy_option, options) do
|
defp build_query(hide_notification_contents, options) do
|
||||||
query =
|
query =
|
||||||
from(u in Pleroma.User,
|
from(u in Pleroma.User,
|
||||||
update: [
|
update: [
|
||||||
set: [
|
set: [
|
||||||
notification_settings:
|
notification_settings:
|
||||||
fragment(
|
fragment(
|
||||||
"jsonb_set(notification_settings, '{privacy_option}', ?)",
|
"jsonb_set(notification_settings, '{hide_notification_contents}', ?)",
|
||||||
^privacy_option
|
^hide_notification_contents
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
|
@ -11,14 +11,14 @@ defmodule Pleroma.User.NotificationSetting do
|
||||||
|
|
||||||
embedded_schema do
|
embedded_schema do
|
||||||
field(:block_from_strangers, :boolean, default: false)
|
field(:block_from_strangers, :boolean, default: false)
|
||||||
field(:privacy_option, :boolean, default: false)
|
field(:hide_notification_contents, :boolean, default: false)
|
||||||
end
|
end
|
||||||
|
|
||||||
def changeset(schema, params) do
|
def changeset(schema, params) do
|
||||||
schema
|
schema
|
||||||
|> cast(prepare_attrs(params), [
|
|> cast(prepare_attrs(params), [
|
||||||
:block_from_strangers,
|
:block_from_strangers,
|
||||||
:privacy_option
|
:hide_notification_contents
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
|
||||||
type: :object,
|
type: :object,
|
||||||
properties: %{
|
properties: %{
|
||||||
block_from_strangers: %Schema{type: :boolean},
|
block_from_strangers: %Schema{type: :boolean},
|
||||||
privacy_option: %Schema{type: :boolean}
|
hide_notification_contents: %Schema{type: :boolean}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
relationship: AccountRelationship,
|
relationship: AccountRelationship,
|
||||||
|
@ -121,7 +121,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
|
||||||
"tags" => [],
|
"tags" => [],
|
||||||
"notification_settings" => %{
|
"notification_settings" => %{
|
||||||
"block_from_strangers" => false,
|
"block_from_strangers" => false,
|
||||||
"privacy_option" => false
|
"hide_notification_contents" => false
|
||||||
},
|
},
|
||||||
"relationship" => %{
|
"relationship" => %{
|
||||||
"blocked_by" => false,
|
"blocked_by" => false,
|
||||||
|
|
|
@ -104,7 +104,7 @@ def build_content(notification, actor, object, mastodon_type \\ nil)
|
||||||
|
|
||||||
def build_content(
|
def build_content(
|
||||||
%{
|
%{
|
||||||
user: %{notification_settings: %{privacy_option: true}}
|
user: %{notification_settings: %{hide_notification_contents: true}}
|
||||||
} = notification,
|
} = notification,
|
||||||
_actor,
|
_actor,
|
||||||
_object,
|
_object,
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.RenameNotificationPrivacyOption do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def up do
|
||||||
|
execute(
|
||||||
|
"UPDATE users SET notification_settings = notification_settings - 'privacy_option' || jsonb_build_object('hide_notification_contents', notification_settings->'privacy_option')
|
||||||
|
where notification_settings ? 'privacy_option'
|
||||||
|
and local"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
execute(
|
||||||
|
"UPDATE users SET notification_settings = notification_settings - 'hide_notification_contents' || jsonb_build_object('privacy_option', notification_settings->'hide_notification_contents')
|
||||||
|
where notification_settings ? 'hide_notification_contents'
|
||||||
|
and local"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -8,11 +8,11 @@ defmodule Pleroma.User.NotificationSettingTest do
|
||||||
alias Pleroma.User.NotificationSetting
|
alias Pleroma.User.NotificationSetting
|
||||||
|
|
||||||
describe "changeset/2" do
|
describe "changeset/2" do
|
||||||
test "sets valid privacy option" do
|
test "sets option to hide notification contents" do
|
||||||
changeset =
|
changeset =
|
||||||
NotificationSetting.changeset(
|
NotificationSetting.changeset(
|
||||||
%NotificationSetting{},
|
%NotificationSetting{},
|
||||||
%{"privacy_option" => true}
|
%{"hide_notification_contents" => true}
|
||||||
)
|
)
|
||||||
|
|
||||||
assert %Ecto.Changeset{valid?: true} = changeset
|
assert %Ecto.Changeset{valid?: true} = changeset
|
||||||
|
|
|
@ -97,7 +97,7 @@ test "Represent the user account for the account owner" do
|
||||||
|
|
||||||
notification_settings = %{
|
notification_settings = %{
|
||||||
block_from_strangers: false,
|
block_from_strangers: false,
|
||||||
privacy_option: false
|
hide_notification_contents: false
|
||||||
}
|
}
|
||||||
|
|
||||||
privacy = user.default_scope
|
privacy = user.default_scope
|
||||||
|
|
|
@ -238,9 +238,9 @@ test "builds content for chat messages with no content" do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
test "hides details for notifications when privacy option enabled" do
|
test "hides contents of notifications when option enabled" do
|
||||||
user = insert(:user, nickname: "Bob")
|
user = insert(:user, nickname: "Bob")
|
||||||
user2 = insert(:user, nickname: "Rob", notification_settings: %{privacy_option: true})
|
user2 = insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: true})
|
||||||
|
|
||||||
{:ok, activity} =
|
{:ok, activity} =
|
||||||
CommonAPI.post(user, %{
|
CommonAPI.post(user, %{
|
||||||
|
@ -284,9 +284,9 @@ test "hides details for notifications when privacy option enabled" do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
test "returns regular content for notifications with privacy option disabled" do
|
test "returns regular content when hiding contents option disabled" do
|
||||||
user = insert(:user, nickname: "Bob")
|
user = insert(:user, nickname: "Bob")
|
||||||
user2 = insert(:user, nickname: "Rob", notification_settings: %{privacy_option: false})
|
user2 = insert(:user, nickname: "Rob", notification_settings: %{hide_notification_contents: false})
|
||||||
|
|
||||||
{:ok, activity} =
|
{:ok, activity} =
|
||||||
CommonAPI.post(user, %{
|
CommonAPI.post(user, %{
|
||||||
|
|
|
@ -200,20 +200,20 @@ test "it updates notification settings", %{user: user, conn: conn} do
|
||||||
|
|
||||||
assert %Pleroma.User.NotificationSetting{
|
assert %Pleroma.User.NotificationSetting{
|
||||||
block_from_strangers: true,
|
block_from_strangers: true,
|
||||||
privacy_option: false
|
hide_notification_contents: false
|
||||||
} == user.notification_settings
|
} == user.notification_settings
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it updates notification privacy option", %{user: user, conn: conn} do
|
test "it updates notification settings to enable hiding contents", %{user: user, conn: conn} do
|
||||||
conn
|
conn
|
||||||
|> put("/api/pleroma/notification_settings", %{"privacy_option" => "1"})
|
|> put("/api/pleroma/notification_settings", %{"hide_notification_contents" => "1"})
|
||||||
|> json_response(:ok)
|
|> json_response(:ok)
|
||||||
|
|
||||||
user = refresh_record(user)
|
user = refresh_record(user)
|
||||||
|
|
||||||
assert %Pleroma.User.NotificationSetting{
|
assert %Pleroma.User.NotificationSetting{
|
||||||
block_from_strangers: false,
|
block_from_strangers: false,
|
||||||
privacy_option: true
|
hide_notification_contents: true
|
||||||
} == user.notification_settings
|
} == user.notification_settings
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue