Browse Source

Merge branch 'feature/896-toggling-confirmation' into 'develop'

Feature/896 toggling confirmation

Closes #896

See merge request pleroma/pleroma!1165
tags/v1.1.4
rinpatch 5 years ago
parent
commit
103f205097
6 changed files with 80 additions and 2 deletions
  1. +2
    -1
      CHANGELOG.md
  2. +19
    -0
      lib/mix/tasks/pleroma/user.ex
  3. +13
    -0
      lib/pleroma/user.ex
  4. +1
    -1
      lib/pleroma/user/info.ex
  5. +27
    -0
      test/tasks/user_test.exs
  6. +18
    -0
      test/user_test.exs

+ 2
- 1
CHANGELOG.md View File

@@ -11,6 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- [Prometheus](https://prometheus.io/) metrics
- Support for Mastodon's remote interaction
- Mix Tasks: `mix pleroma.database remove_embedded_objects`
- Mix Tasks: `mix pleroma.user toggle_confirmed`
- Federation: Support for reports
- Configuration: `safe_dm_mentions` option
- Configuration: `link_name` option
@@ -98,7 +99,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Mastodon API: Make `irreversible` field default to `false` [`POST /api/v1/filters`]

## Removed
- Configuration: `config :pleroma, :fe` in favor of the more flexible `config :pleroma, :frontend_configurations`
- Configuration: `config :pleroma, :fe` in favor of the more flexible `config :pleroma, :frontend_configurations`

## [0.9.9999] - 2019-04-05
### Security


+ 19
- 0
lib/mix/tasks/pleroma/user.ex View File

@@ -77,6 +77,10 @@ defmodule Mix.Tasks.Pleroma.User do
## Delete tags from a user.

mix pleroma.user untag NICKNAME TAGS

## Toggle confirmation of the user's account.

mix pleroma.user toggle_confirmed NICKNAME
"""
def run(["new", nickname, email | rest]) do
{options, [], []} =
@@ -388,6 +392,21 @@ defmodule Mix.Tasks.Pleroma.User do
end
end

def run(["toggle_confirmed", nickname]) do
Common.start_pleroma()

with %User{} = user <- User.get_cached_by_nickname(nickname) do
{:ok, user} = User.toggle_confirmation(user)

message = if user.info.confirmation_pending, do: "needs", else: "doesn't need"

Mix.shell().info("#{nickname} #{message} confirmation.")
else
_ ->
Mix.shell().error("No local user #{nickname}")
end
end

defp set_moderator(user, value) do
info_cng = User.Info.admin_api_update(user.info, %{is_moderator: value})



+ 13
- 0
lib/pleroma/user.ex View File

@@ -1378,4 +1378,17 @@ defmodule Pleroma.User do
def showing_reblogs?(%User{} = user, %User{} = target) do
target.ap_id not in user.info.muted_reblogs
end

@spec toggle_confirmation(User.t()) :: {:ok, User.t()} | {:error, Changeset.t()}
def toggle_confirmation(%User{} = user) do
need_confirmation? = !user.info.confirmation_pending

info_changeset =
User.Info.confirmation_changeset(user.info, need_confirmation: need_confirmation?)

user
|> change()
|> put_embed(:info, info_changeset)
|> update_and_set_cache()
end
end

+ 1
- 1
lib/pleroma/user/info.ex View File

@@ -212,7 +212,7 @@ defmodule Pleroma.User.Info do
])
end

@spec confirmation_changeset(Info.t(), keyword()) :: Ecto.Changerset.t()
@spec confirmation_changeset(Info.t(), keyword()) :: Changeset.t()
def confirmation_changeset(info, opts) do
need_confirmation? = Keyword.get(opts, :need_confirmation)



+ 27
- 0
test/tasks/user_test.exs View File

@@ -338,4 +338,31 @@ defmodule Mix.Tasks.Pleroma.UserTest do
assert message == "User #{nickname} statuses deleted."
end
end

describe "running toggle_confirmed" do
test "user is confirmed" do
%{id: id, nickname: nickname} = insert(:user, info: %{confirmation_pending: false})

assert :ok = Mix.Tasks.Pleroma.User.run(["toggle_confirmed", nickname])
assert_received {:mix_shell, :info, [message]}
assert message == "#{nickname} needs confirmation."

user = Repo.get(User, id)
assert user.info.confirmation_pending
assert user.info.confirmation_token
end

test "user is not confirmed" do
%{id: id, nickname: nickname} =
insert(:user, info: %{confirmation_pending: true, confirmation_token: "some token"})

assert :ok = Mix.Tasks.Pleroma.User.run(["toggle_confirmed", nickname])
assert_received {:mix_shell, :info, [message]}
assert message == "#{nickname} doesn't need confirmation."

user = Repo.get(User, id)
refute user.info.confirmation_pending
refute user.info.confirmation_token
end
end
end

+ 18
- 0
test/user_test.exs View File

@@ -1204,4 +1204,22 @@ defmodule Pleroma.UserTest do

assert Map.get(user_show, "followers_count") == 2
end

describe "toggle_confirmation/1" do
test "if user is confirmed" do
user = insert(:user, info: %{confirmation_pending: false})
{:ok, user} = User.toggle_confirmation(user)

assert user.info.confirmation_pending
assert user.info.confirmation_token
end

test "if user is unconfirmed" do
user = insert(:user, info: %{confirmation_pending: true, confirmation_token: "some token"})
{:ok, user} = User.toggle_confirmation(user)

refute user.info.confirmation_pending
refute user.info.confirmation_token
end
end
end

Loading…
Cancel
Save