User: Correctly handle whitespace names.
This commit is contained in:
parent
096e4518ad
commit
60e379ce0b
4 changed files with 60 additions and 6 deletions
|
@ -426,7 +426,6 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do
|
||||||
params,
|
params,
|
||||||
[
|
[
|
||||||
:bio,
|
:bio,
|
||||||
:name,
|
|
||||||
:emoji,
|
:emoji,
|
||||||
:ap_id,
|
:ap_id,
|
||||||
:inbox,
|
:inbox,
|
||||||
|
@ -455,7 +454,9 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do
|
||||||
:accepts_chat_messages
|
:accepts_chat_messages
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|> validate_required([:name, :ap_id])
|
|> cast(params, [:name], empty_values: [])
|
||||||
|
|> validate_required([:ap_id])
|
||||||
|
|> validate_required([:name], trim: false)
|
||||||
|> unique_constraint(:nickname)
|
|> unique_constraint(:nickname)
|
||||||
|> validate_format(:nickname, @email_regex)
|
|> validate_format(:nickname, @email_regex)
|
||||||
|> validate_length(:bio, max: bio_limit)
|
|> validate_length(:bio, max: bio_limit)
|
||||||
|
|
|
@ -1378,10 +1378,6 @@ def fetch_and_prepare_user_from_ap_id(ap_id, opts \\ []) do
|
||||||
{:ok, data} <- user_data_from_user_object(data) do
|
{:ok, data} <- user_data_from_user_object(data) do
|
||||||
{:ok, maybe_update_follow_information(data)}
|
{:ok, maybe_update_follow_information(data)}
|
||||||
else
|
else
|
||||||
{:error, "Object has been deleted" = e} ->
|
|
||||||
Logger.debug("Could not decode user at fetch #{ap_id}, #{inspect(e)}")
|
|
||||||
{:error, e}
|
|
||||||
|
|
||||||
{:error, {:reject, reason} = e} ->
|
{:error, {:reject, reason} = e} ->
|
||||||
Logger.info("Rejected user #{ap_id}: #{inspect(reason)}")
|
Logger.info("Rejected user #{ap_id}: #{inspect(reason)}")
|
||||||
{:error, e}
|
{:error, e}
|
||||||
|
|
46
test/fixtures/mewmew_no_name.json
vendored
Normal file
46
test/fixtures/mewmew_no_name.json
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
"@context" : [
|
||||||
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://princess.cat/schemas/litepub-0.1.jsonld",
|
||||||
|
{
|
||||||
|
"@language" : "und"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"attachment" : [],
|
||||||
|
"capabilities" : {
|
||||||
|
"acceptsChatMessages" : true
|
||||||
|
},
|
||||||
|
"discoverable" : false,
|
||||||
|
"endpoints" : {
|
||||||
|
"oauthAuthorizationEndpoint" : "https://princess.cat/oauth/authorize",
|
||||||
|
"oauthRegistrationEndpoint" : "https://princess.cat/api/v1/apps",
|
||||||
|
"oauthTokenEndpoint" : "https://princess.cat/oauth/token",
|
||||||
|
"sharedInbox" : "https://princess.cat/inbox",
|
||||||
|
"uploadMedia" : "https://princess.cat/api/ap/upload_media"
|
||||||
|
},
|
||||||
|
"followers" : "https://princess.cat/users/mewmew/followers",
|
||||||
|
"following" : "https://princess.cat/users/mewmew/following",
|
||||||
|
"icon" : {
|
||||||
|
"type" : "Image",
|
||||||
|
"url" : "https://princess.cat/media/12794fb50e86911e65be97f69196814049dcb398a2f8b58b99bb6591576e648c.png?name=blobcatpresentpink.png"
|
||||||
|
},
|
||||||
|
"id" : "https://princess.cat/users/mewmew",
|
||||||
|
"image" : {
|
||||||
|
"type" : "Image",
|
||||||
|
"url" : "https://princess.cat/media/05d8bf3953ab6028fc920494ffc643fbee9dcef40d7bdd06f107e19acbfbd7f9.png"
|
||||||
|
},
|
||||||
|
"inbox" : "https://princess.cat/users/mewmew/inbox",
|
||||||
|
"manuallyApprovesFollowers" : true,
|
||||||
|
"name" : " ",
|
||||||
|
"outbox" : "https://princess.cat/users/mewmew/outbox",
|
||||||
|
"preferredUsername" : "mewmew",
|
||||||
|
"publicKey" : {
|
||||||
|
"id" : "https://princess.cat/users/mewmew#main-key",
|
||||||
|
"owner" : "https://princess.cat/users/mewmew",
|
||||||
|
"publicKeyPem" : "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAru7VpygVef4zrFwnj0Mh\nrbO/2z2EdKN3rERtNrT8zWsLXNLQ50lfpRPnGDrd+xq7Rva4EIu0d5KJJ9n4vtY0\nuxK3On9vA2oyjLlR9O0lI3XTrHJborG3P7IPXrmNUMFpHiFHNqHp5tugUrs1gUFq\n7tmOmM92IP4Wjk8qNHFcsfnUbaPTX7sNIhteQKdi5HrTb/6lrEIe4G/FlMKRqxo3\nRNHuv6SNFQuiUKvFzjzazvjkjvBSm+aFROgdHa2tKl88StpLr7xmuY8qNFCRT6W0\nLacRp6c8ah5f03Kd+xCBVhCKvKaF1K0ERnQTBiitUh85md+Mtx/CoDoLnmpnngR3\nvQIDAQAB\n-----END PUBLIC KEY-----\n\n"
|
||||||
|
},
|
||||||
|
"summary" : "please reply to my posts as direct messages if you have many followers",
|
||||||
|
"tag" : [],
|
||||||
|
"type" : "Person",
|
||||||
|
"url" : "https://princess.cat/users/mewmew"
|
||||||
|
}
|
|
@ -2273,4 +2273,15 @@ test "`following` still contains self-replies by friends" do
|
||||||
assert length(activities) == 2
|
assert length(activities) == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "allow fetching of accounts with an empty string name field" do
|
||||||
|
Tesla.Mock.mock(fn
|
||||||
|
%{method: :get, url: "https://princess.cat/users/mewmew"} ->
|
||||||
|
file = File.read!("test/fixtures/mewmew_no_name.json")
|
||||||
|
%Tesla.Env{status: 200, body: file}
|
||||||
|
end)
|
||||||
|
|
||||||
|
{:ok, user} = ActivityPub.make_user_from_ap_id("https://princess.cat/users/mewmew")
|
||||||
|
assert user.name == " "
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue