Rename notification "privacy_option" setting

This commit is contained in:
Mark Felder 2020-06-26 12:45:46 -05:00
parent fd5e797379
commit 69848d5c97
10 changed files with 45 additions and 26 deletions

View file

@ -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`

View file

@ -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
) )
] ]
] ]

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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, %{

View file

@ -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