Browse Source

Merge branch 'from/develop/tusooa/add-remove-emails' into 'develop'

Allow users to remove their emails if instance does not need email to register

See merge request pleroma/pleroma!3522
develop
Haelwenn 2 years ago
parent
commit
92a8ff59aa
5 changed files with 95 additions and 6 deletions
  1. +1
    -0
      CHANGELOG.md
  2. +1
    -1
      lib/pleroma/user.ex
  3. +4
    -1
      lib/pleroma/web/api_spec/operations/twitter_util_operation.ex
  4. +49
    -1
      test/pleroma/user_test.exs
  5. +40
    -3
      test/pleroma/web/twitter_api/util_controller_test.exs

+ 1
- 0
CHANGELOG.md View File

@@ -11,6 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- MastoFE

### Changed
- Allow users to remove their emails if instance does not need email to register

### Added



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

@@ -2246,7 +2246,7 @@ defmodule Pleroma.User do
def change_email(user, email) do
user
|> cast(%{email: email}, [:email])
|> validate_required([:email])
|> maybe_validate_required_email(false)
|> unique_constraint(:email)
|> validate_format(:email, @email_regex)
|> update_and_set_cache()


+ 4
- 1
lib/pleroma/web/api_spec/operations/twitter_util_operation.ex View File

@@ -121,7 +121,10 @@ defmodule Pleroma.Web.ApiSpec.TwitterUtilOperation do
type: :object,
required: [:email, :password],
properties: %{
email: %Schema{type: :string, description: "New email"},
email: %Schema{
type: :string,
description: "New email. Set to blank to remove the user's email."
},
password: %Schema{type: :string, description: "Current password"}
}
}


+ 49
- 1
test/pleroma/user_test.exs View File

@@ -2197,11 +2197,40 @@ defmodule Pleroma.UserTest do
[user: insert(:user)]
end

test "blank email returns error", %{user: user} do
test "blank email returns error if we require an email on registration", %{user: user} do
orig_account_activation_required =
Pleroma.Config.get([:instance, :account_activation_required])

Pleroma.Config.put([:instance, :account_activation_required], true)

on_exit(fn ->
Pleroma.Config.put(
[:instance, :account_activation_required],
orig_account_activation_required
)
end)

assert {:error, %{errors: [email: {"can't be blank", _}]}} = User.change_email(user, "")
assert {:error, %{errors: [email: {"can't be blank", _}]}} = User.change_email(user, nil)
end

test "blank email should be fine if we do not require an email on registration", %{user: user} do
orig_account_activation_required =
Pleroma.Config.get([:instance, :account_activation_required])

Pleroma.Config.put([:instance, :account_activation_required], false)

on_exit(fn ->
Pleroma.Config.put(
[:instance, :account_activation_required],
orig_account_activation_required
)
end)

assert {:ok, %User{email: nil}} = User.change_email(user, "")
assert {:ok, %User{email: nil}} = User.change_email(user, nil)
end

test "non unique email returns error", %{user: user} do
%{email: email} = insert(:user)

@@ -2217,6 +2246,25 @@ defmodule Pleroma.UserTest do
test "changes email", %{user: user} do
assert {:ok, %User{email: "cofe@cofe.party"}} = User.change_email(user, "cofe@cofe.party")
end

test "adds email", %{user: user} do
orig_account_activation_required =
Pleroma.Config.get([:instance, :account_activation_required])

Pleroma.Config.put([:instance, :account_activation_required], false)

on_exit(fn ->
Pleroma.Config.put(
[:instance, :account_activation_required],
orig_account_activation_required
)
end)

assert {:ok, _} = User.change_email(user, "")
Pleroma.Config.put([:instance, :account_activation_required], true)

assert {:ok, %User{email: "cofe2@cofe.party"}} = User.change_email(user, "cofe2@cofe.party")
end
end

describe "get_cached_by_nickname_or_id" do


+ 40
- 3
test/pleroma/web/twitter_api/util_controller_test.exs View File

@@ -302,9 +302,22 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
assert %{"error" => "Missing field: email."} = json_response_and_validate_schema(conn, 400)
end

test "with proper permissions, valid password and blank email", %{
conn: conn
} do
test "with proper permissions, valid password and blank email, when instance requires user email",
%{
conn: conn
} do
orig_account_activation_required =
Pleroma.Config.get([:instance, :account_activation_required])

Pleroma.Config.put([:instance, :account_activation_required], true)

on_exit(fn ->
Pleroma.Config.put(
[:instance, :account_activation_required],
orig_account_activation_required
)
end)

conn =
conn
|> put_req_header("content-type", "multipart/form-data")
@@ -313,6 +326,30 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
assert json_response_and_validate_schema(conn, 200) == %{"error" => "Email can't be blank."}
end

test "with proper permissions, valid password and blank email, when instance does not require user email",
%{
conn: conn
} do
orig_account_activation_required =
Pleroma.Config.get([:instance, :account_activation_required])

Pleroma.Config.put([:instance, :account_activation_required], false)

on_exit(fn ->
Pleroma.Config.put(
[:instance, :account_activation_required],
orig_account_activation_required
)
end)

conn =
conn
|> put_req_header("content-type", "multipart/form-data")
|> post("/api/pleroma/change_email", %{password: "test", email: ""})

assert json_response_and_validate_schema(conn, 200) == %{"status" => "success"}
end

test "with proper permissions, valid password and non unique email", %{
conn: conn
} do


Loading…
Cancel
Save