Fix tests.
[akkoma] / lib / pleroma / user.ex
index 8c1c524ffff8f8a60cbb28f61278c74860f75943..e92b85f52c2baea89ecc9c96f4bf8f4064e07d5a 100644 (file)
@@ -99,7 +99,7 @@ defmodule Pleroma.User do
     |> cast(params, [:bio, :name])
     |> unique_constraint(:nickname)
     |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/)
-    |> validate_length(:bio, min: 1, max: 1000)
+    |> validate_length(:bio, max: 1000)
     |> validate_length(:name, min: 1, max: 100)
   end
 
@@ -108,8 +108,8 @@ defmodule Pleroma.User do
     |> cast(params, [:bio, :name, :info, :follower_address, :avatar])
     |> unique_constraint(:nickname)
     |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/)
-    |> validate_length(:bio, min: 1, max: 1000)
-    |> validate_length(:name, min: 1, max: 100)
+    |> validate_length(:bio, max: 5000)
+    |> validate_length(:name, max: 100)
   end
 
   def password_update_changeset(struct, params) do
@@ -134,13 +134,13 @@ defmodule Pleroma.User do
   def register_changeset(struct, params \\ %{}) do
     changeset = struct
     |> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation])
-    |> validate_required([:bio, :email, :name, :nickname, :password, :password_confirmation])
+    |> validate_required([:email, :name, :nickname, :password, :password_confirmation])
     |> validate_confirmation(:password)
     |> unique_constraint(:email)
     |> unique_constraint(:nickname)
     |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/)
     |> validate_format(:email, @email_regex)
-    |> validate_length(:bio, min: 1, max: 1000)
+    |> validate_length(:bio, max: 1000)
     |> validate_length(:name, min: 1, max: 100)
 
     if changeset.valid? do
@@ -218,6 +218,11 @@ defmodule Pleroma.User do
     end
   end
 
+  def invalidate_cache(user) do
+    Cachex.del(:user_cache, "ap_id:#{user.ap_id}")
+    Cachex.del(:user_cache, "nickname:#{user.nickname}")
+  end
+
   def get_cached_by_ap_id(ap_id) do
     key = "ap_id:#{ap_id}"
     Cachex.get!(:user_cache, key, fallback: fn(_) -> get_by_ap_id(ap_id) end)
@@ -405,8 +410,15 @@ defmodule Pleroma.User do
     if user = get_by_ap_id(ap_id) do
       user
     else
-      with {:ok, user} <- ActivityPub.make_user_from_ap_id(ap_id) do
-        user
+      ap_try = ActivityPub.make_user_from_ap_id(ap_id)
+
+      case ap_try do
+        {:ok, user} -> user
+        _ ->
+          case OStatus.make_user(ap_id) do
+            {:ok, user} -> user
+            _ -> {:error, "Could not fetch by AP id"}
+          end
       end
     end
   end
@@ -445,4 +457,13 @@ defmodule Pleroma.User do
   end
 
   def ap_enabled?(%User{info: info}), do: info["ap_enabled"]
+  def ap_enabled?(_), do: false
+
+  def get_or_fetch(uri_or_nickname) do
+    if String.starts_with?(uri_or_nickname, "http") do
+      get_or_fetch_by_ap_id(uri_or_nickname)
+    else
+      get_or_fetch_by_nickname(uri_or_nickname)
+    end
+  end
 end