Handle scenario when webfinger response `subject` is missing host value (#28088)
parent
b9492d84a0
commit
6b46bf9953
|
@ -100,7 +100,9 @@ class ResolveAccountService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def split_acct(acct)
|
def split_acct(acct)
|
||||||
acct.delete_prefix('acct:').split('@')
|
acct.delete_prefix('acct:').split('@').tap do |parts|
|
||||||
|
raise Webfinger::Error, 'Webfinger response is missing user or host value' unless parts.size == 2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_account!
|
def fetch_account!
|
||||||
|
|
|
@ -144,6 +144,19 @@ RSpec.describe ResolveAccountService, type: :service do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with webfinger response subject missing a host value' do
|
||||||
|
let(:body) { Oj.dump({ subject: 'user@' }) }
|
||||||
|
let(:url) { 'https://host.example/.well-known/webfinger?resource=acct:user@host.example' }
|
||||||
|
|
||||||
|
before do
|
||||||
|
stub_request(:get, url).to_return(status: 200, body: body)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns nil with incomplete subject in response' do
|
||||||
|
expect(subject.call('user@host.example')).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'with an ActivityPub account' do
|
context 'with an ActivityPub account' do
|
||||||
it 'returns new remote account' do
|
it 'returns new remote account' do
|
||||||
account = subject.call('foo@ap.example.com')
|
account = subject.call('foo@ap.example.com')
|
||||||
|
|
Loading…
Reference in New Issue