Fix get_cached_by_nickname_or_id not allowing to get local users by
nickname Closes #1293
This commit is contained in:
parent
a553ed5427
commit
6b7cd7d850
3 changed files with 62 additions and 1 deletions
|
@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
|
## [1.1.0] - 2019-??-??
|
||||||
|
Fixed:
|
||||||
|
- Mastodon API: Inability to get some local users by nickname in `/api/v1/accounts/:id_or_nickname`
|
||||||
|
|
||||||
## [1.0.90] - 2019-09-30
|
## [1.0.90] - 2019-09-30
|
||||||
### Security
|
### Security
|
||||||
- OStatus: eliminate the possibility of a protocol downgrade attack.
|
- OStatus: eliminate the possibility of a protocol downgrade attack.
|
||||||
|
|
|
@ -576,7 +576,7 @@ defmodule Pleroma.User do
|
||||||
is_integer(nickname_or_id) or Pleroma.FlakeId.is_flake_id?(nickname_or_id) ->
|
is_integer(nickname_or_id) or Pleroma.FlakeId.is_flake_id?(nickname_or_id) ->
|
||||||
get_cached_by_id(nickname_or_id) || get_cached_by_nickname(nickname_or_id)
|
get_cached_by_id(nickname_or_id) || get_cached_by_nickname(nickname_or_id)
|
||||||
|
|
||||||
restrict_to_local == false ->
|
restrict_to_local == false or not String.contains?(nickname_or_id, "@") ->
|
||||||
get_cached_by_nickname(nickname_or_id)
|
get_cached_by_nickname(nickname_or_id)
|
||||||
|
|
||||||
restrict_to_local == :unauthenticated and match?(%User{}, opts[:for]) ->
|
restrict_to_local == :unauthenticated and match?(%User{}, opts[:for]) ->
|
||||||
|
|
|
@ -1641,4 +1641,61 @@ defmodule Pleroma.UserTest do
|
||||||
assert {:ok, %User{email: "cofe@cofe.party"}} = User.change_email(user, "cofe@cofe.party")
|
assert {:ok, %User{email: "cofe@cofe.party"}} = User.change_email(user, "cofe@cofe.party")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "get_cached_by_nickname_or_id" do
|
||||||
|
setup do
|
||||||
|
limit_to_local_content = Pleroma.Config.get([:instance, :limit_to_local_content])
|
||||||
|
local_user = insert(:user)
|
||||||
|
remote_user = insert(:user, nickname: "nickname@example.com", local: false)
|
||||||
|
|
||||||
|
on_exit(fn ->
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], limit_to_local_content)
|
||||||
|
end)
|
||||||
|
|
||||||
|
[local_user: local_user, remote_user: remote_user]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "allows getting remote users by id no matter what :limit_to_local_content is set to", %{
|
||||||
|
remote_user: remote_user
|
||||||
|
} do
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], false)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(remote_user.id)
|
||||||
|
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], true)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(remote_user.id)
|
||||||
|
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(remote_user.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "disallows getting remote users by nickname without authentication when :limit_to_local_content is set to :unauthenticated",
|
||||||
|
%{remote_user: remote_user} do
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
|
||||||
|
assert nil == User.get_cached_by_nickname_or_id(remote_user.nickname)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "allows getting remote users by nickname with authentication when :limit_to_local_content is set to :unauthenticated",
|
||||||
|
%{remote_user: remote_user, local_user: local_user} do
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(remote_user.nickname, for: local_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "disallows getting remote users by nickname when :limit_to_local_content is set to true",
|
||||||
|
%{remote_user: remote_user} do
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], true)
|
||||||
|
assert nil == User.get_cached_by_nickname_or_id(remote_user.nickname)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "allows getting local users by nickname no matter what :limit_to_local_content is set to",
|
||||||
|
%{local_user: local_user} do
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], false)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(local_user.nickname)
|
||||||
|
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], true)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(local_user.nickname)
|
||||||
|
|
||||||
|
Pleroma.Config.put([:instance, :limit_to_local_content], :unauthenticated)
|
||||||
|
assert %User{} = User.get_cached_by_nickname_or_id(local_user.nickname)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue