Change user.confirmation_pending field to user.is_confirmed
[akkoma] / lib / pleroma / user.ex
index 7b26ac7a3ebe0917934adf42a5565b55bfc0cb81..04ce1768d0a707db8209b41d47646caa400871c0 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.User do
@@ -51,7 +51,6 @@ defmodule Pleroma.User do
 
   # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength
   @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
-  @url_regex ~r/^https?:\/\/[^\s]{1,256}$/
 
   @strict_local_nickname_regex ~r/^[a-zA-Z\d]+$/
   @extended_local_nickname_regex ~r/^[a-zA-Z\d_-]+$/
@@ -111,7 +110,7 @@ defmodule Pleroma.User do
     field(:follower_count, :integer, default: 0)
     field(:following_count, :integer, default: 0)
     field(:is_locked, :boolean, default: false)
-    field(:confirmation_pending, :boolean, default: false)
+    field(:is_confirmed, :boolean, default: true)
     field(:password_reset_pending, :boolean, default: false)
     field(:approval_pending, :boolean, default: false)
     field(:registration_reason, :string, default: nil)
@@ -143,7 +142,7 @@ defmodule Pleroma.User do
     field(:allow_following_move, :boolean, default: true)
     field(:skip_thread_containment, :boolean, default: false)
     field(:actor_type, :string, default: "Person")
-    field(:also_known_as, {:array, :string}, default: [])
+    field(:also_known_as, {:array, ObjectValidators.ObjectID}, default: [])
     field(:inbox, :string)
     field(:shared_inbox, :string)
     field(:accepts_chat_messages, :boolean, default: nil)
@@ -291,7 +290,7 @@ defmodule Pleroma.User do
   def account_status(%User{password_reset_pending: true}), do: :password_reset_pending
   def account_status(%User{local: true, approval_pending: true}), do: :approval_pending
 
-  def account_status(%User{local: true, confirmation_pending: true}) do
+  def account_status(%User{local: true, is_confirmed: false}) do
     if Config.get([:instance, :account_activation_required]) do
       :confirmation_pending
     else
@@ -530,7 +529,6 @@ defmodule Pleroma.User do
     )
     |> unique_constraint(:nickname)
     |> validate_format(:nickname, local_nickname_regex())
-    |> validate_also_known_as()
     |> validate_length(:bio, max: bio_limit)
     |> validate_length(:name, min: 1, max: name_limit)
     |> validate_inclusion(:actor_type, ["Person", "Service"])
@@ -810,7 +808,7 @@ defmodule Pleroma.User do
     end
   end
 
-  def post_register_action(%User{confirmation_pending: true} = user) do
+  def post_register_action(%User{is_confirmed: false} = user) do
     with {:ok, _} <- try_send_confirmation_email(user) do
       {:ok, user}
     end
@@ -823,7 +821,7 @@ defmodule Pleroma.User do
     end
   end
 
-  def post_register_action(%User{approval_pending: false, confirmation_pending: false} = user) do
+  def post_register_action(%User{approval_pending: false, is_confirmed: true} = user) do
     with {:ok, user} <- autofollow_users(user),
          {:ok, _} <- autofollowing_users(user),
          {:ok, user} <- set_cache(user),
@@ -884,7 +882,7 @@ defmodule Pleroma.User do
   def send_welcome_email(_), do: {:ok, :noop}
 
   @spec try_send_confirmation_email(User.t()) :: {:ok, :enqueued | :noop}
-  def try_send_confirmation_email(%User{confirmation_pending: true, email: email} = user)
+  def try_send_confirmation_email(%User{is_confirmed: false, email: email} = user)
       when is_binary(email) do
     if Config.get([:instance, :account_activation_required]) do
       send_confirmation_email(user)
@@ -1644,7 +1642,7 @@ defmodule Pleroma.User do
     end)
   end
 
-  def confirm(%User{confirmation_pending: true} = user) do
+  def confirm(%User{is_confirmed: false} = user) do
     with chg <- confirmation_changeset(user, need_confirmation: false),
          {:ok, user} <- update_and_set_cache(chg) do
       post_register_action(user)
@@ -1684,7 +1682,7 @@ defmodule Pleroma.User do
       follower_count: 0,
       following_count: 0,
       is_locked: false,
-      confirmation_pending: false,
+      is_confirmed: true,
       password_reset_pending: false,
       approval_pending: false,
       registration_reason: nil,
@@ -2189,7 +2187,7 @@ defmodule Pleroma.User do
   defp put_password_hash(
          %Ecto.Changeset{valid?: true, changes: %{password: password}} = changeset
        ) do
-    change(changeset, password_hash: Pbkdf2.hash_pwd_salt(password))
+    change(changeset, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt(password))
   end
 
   defp put_password_hash(changeset), do: changeset
@@ -2315,17 +2313,17 @@ defmodule Pleroma.User do
     params =
       if need_confirmation? do
         %{
-          confirmation_pending: true,
+          is_confirmed: false,
           confirmation_token: :crypto.strong_rand_bytes(32) |> Base.url_encode64()
         }
       else
         %{
-          confirmation_pending: false,
+          is_confirmed: true,
           confirmation_token: nil
         }
       end
 
-    cast(user, params, [:confirmation_pending, :confirmation_token])
+    cast(user, params, [:is_confirmed, :confirmation_token])
   end
 
   @spec approval_changeset(User.t(), keyword()) :: Changeset.t()
@@ -2456,15 +2454,6 @@ defmodule Pleroma.User do
     |> Map.put(:fields, fields)
   end
 
-  defp validate_also_known_as(changeset) do
-    validate_change(changeset, :also_known_as, fn :also_known_as, also_known_as ->
-      case Enum.all?(also_known_as, fn a -> Regex.match?(@url_regex, a) end) do
-        true -> []
-        false -> [also_known_as: "Invalid ap_id format. Must be a URL."]
-      end
-    end)
-  end
-
   def get_host(%User{ap_id: ap_id} = _user) do
     URI.parse(ap_id).host
   end