projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Twitter ActivityView: fix crash when activity content is nil
[akkoma]
/
lib
/
pleroma
/
user.ex
diff --git
a/lib/pleroma/user.ex
b/lib/pleroma/user.ex
index e146b562cbc08a5ecdcc61a125144434b9a3fa1d..3ad1ab87a69347c775e9fa7f2081414d53e814d6 100644
(file)
--- a/
lib/pleroma/user.ex
+++ b/
lib/pleroma/user.ex
@@
-11,6
+11,11
@@
defmodule Pleroma.User do
@type t :: %__MODULE__{}
@type t :: %__MODULE__{}
+ @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])?)*$/
+
+ @strict_local_nickname_regex ~r/^[a-zA-Z\d]+$/
+ @extended_local_nickname_regex ~r/^[a-zA-Z\d_-]+$/
+
schema "users" do
field(:bio, :string)
field(:email, :string)
schema "users" do
field(:bio, :string)
field(:email, :string)
@@
-77,7
+82,6
@@
defmodule Pleroma.User do
}
end
}
end
- @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])?)*$/
def remote_user_creation(params) do
params =
params
def remote_user_creation(params) do
params =
params
@@
-117,7
+121,7
@@
defmodule Pleroma.User do
struct
|> cast(params, [:bio, :name, :avatar])
|> unique_constraint(:nickname)
struct
|> cast(params, [:bio, :name, :avatar])
|> unique_constraint(:nickname)
- |> validate_format(:nickname,
~r/^[a-zA-Z\d]+$/
)
+ |> validate_format(:nickname,
local_nickname_regex()
)
|> validate_length(:bio, max: 5000)
|> validate_length(:name, min: 1, max: 100)
end
|> validate_length(:bio, max: 5000)
|> validate_length(:name, min: 1, max: 100)
end
@@
-134,7
+138,7
@@
defmodule Pleroma.User do
struct
|> cast(params, [:bio, :name, :follower_address, :avatar, :last_refreshed_at])
|> unique_constraint(:nickname)
struct
|> cast(params, [:bio, :name, :follower_address, :avatar, :last_refreshed_at])
|> unique_constraint(:nickname)
- |> validate_format(:nickname,
~r/^[a-zA-Z\d]+$/
)
+ |> validate_format(:nickname,
local_nickname_regex()
)
|> validate_length(:bio, max: 5000)
|> validate_length(:name, max: 100)
|> put_embed(:info, info_cng)
|> validate_length(:bio, max: 5000)
|> validate_length(:name, max: 100)
|> put_embed(:info, info_cng)
@@
-172,7
+176,7
@@
defmodule Pleroma.User do
|> validate_confirmation(:password)
|> unique_constraint(:email)
|> unique_constraint(:nickname)
|> validate_confirmation(:password)
|> unique_constraint(:email)
|> unique_constraint(:nickname)
- |> validate_format(:nickname,
~r/^[a-zA-Z\d]+$/
)
+ |> validate_format(:nickname,
local_nickname_regex()
)
|> validate_format(:email, @email_regex)
|> validate_length(:bio, max: 1000)
|> validate_length(:name, min: 1, max: 100)
|> validate_format(:email, @email_regex)
|> validate_length(:bio, max: 1000)
|> validate_length(:name, min: 1, max: 100)
@@
-834,7
+838,7
@@
defmodule Pleroma.User do
do: tag(User.get_by_nickname(nickname), tags)
def tag(%User{} = user, tags),
do: tag(User.get_by_nickname(nickname), tags)
def tag(%User{} = user, tags),
- do: update_tags(user, Enum.uniq(
user.tags
++ normalize_tags(tags)))
+ do: update_tags(user, Enum.uniq(
(user.tags || [])
++ normalize_tags(tags)))
def untag(user_identifiers, tags) when is_list(user_identifiers) do
Repo.transaction(fn ->
def untag(user_identifiers, tags) when is_list(user_identifiers) do
Repo.transaction(fn ->
@@
-845,7
+849,8
@@
defmodule Pleroma.User do
def untag(nickname, tags) when is_binary(nickname),
do: untag(User.get_by_nickname(nickname), tags)
def untag(nickname, tags) when is_binary(nickname),
do: untag(User.get_by_nickname(nickname), tags)
- def untag(%User{} = user, tags), do: update_tags(user, user.tags -- normalize_tags(tags))
+ def untag(%User{} = user, tags),
+ do: update_tags(user, (user.tags || []) -- normalize_tags(tags))
defp update_tags(%User{} = user, new_tags) do
{:ok, updated_user} =
defp update_tags(%User{} = user, new_tags) do
{:ok, updated_user} =
@@
-861,4
+866,12
@@
defmodule Pleroma.User do
|> List.flatten()
|> Enum.map(&String.downcase(&1))
end
|> List.flatten()
|> Enum.map(&String.downcase(&1))
end
+
+ defp local_nickname_regex() do
+ if Pleroma.Config.get([:instance, :extended_nickname_format]) do
+ @extended_local_nickname_regex
+ else
+ @strict_local_nickname_regex
+ end
+ end
end
end