diff --git a/app/lib/fasp/request.rb b/app/lib/fasp/request.rb index 6ea837b89cc..2002e90bb06 100644 --- a/app/lib/fasp/request.rb +++ b/app/lib/fasp/request.rb @@ -49,6 +49,8 @@ class Fasp::Request end def validate!(response) + raise Mastodon::UnexpectedResponseError, response if response.code >= 400 + content_digest_header = response.headers['content-digest'] raise Mastodon::SignatureVerificationError, 'content-digest missing' if content_digest_header.blank? raise Mastodon::SignatureVerificationError, 'content-digest does not match' if content_digest_header != content_digest(response.body) diff --git a/spec/lib/fasp/request_spec.rb b/spec/lib/fasp/request_spec.rb index 80d061dc61f..9b354c8f44b 100644 --- a/spec/lib/fasp/request_spec.rb +++ b/spec/lib/fasp/request_spec.rb @@ -32,13 +32,27 @@ RSpec.describe Fasp::Request do context 'when the response is not signed' do before do stub_request(method, 'https://reqprov.example.com/fasp/test_path') - .to_return(status: 200) + .to_return(status:) end - it 'raises an error' do - expect do - subject.send(method, '/test_path') - end.to raise_error(Mastodon::SignatureVerificationError) + context 'when the request was successful' do + let(:status) { 200 } + + it 'raises a signature verification error' do + expect do + subject.send(method, '/test_path') + end.to raise_error(Mastodon::SignatureVerificationError) + end + end + + context 'when an error response is received' do + let(:status) { 401 } + + it 'raises an unexpected response error' do + expect do + subject.send(method, '/test_path') + end.to raise_error(Mastodon::UnexpectedResponseError) + end end end end