Skip to content

Commit 4a047cc

Browse files
authored
refactor: remove ssrf_filter dependency (#894)
## Summary - remove the custom `ssrf_filter` request strategy and its boot wiring - switch backend defaults and strategy metadata to supported request-service strategies - update Ruby and smoke specs to match the new strategy baseline ## Verification - docker compose -f .devcontainer/docker-compose.yml run --rm app make setup - docker compose -f .devcontainer/docker-compose.yml run --rm app make ready
1 parent fe3f4be commit 4a047cc

16 files changed

Lines changed: 47 additions & 74 deletions

app/web/api/v1/strategies.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ def index(_request)
3333

3434
def display_name_for(name)
3535
case name.to_s
36-
when 'ssrf_filter' then 'Standard (recommended)'
37-
when 'browserless' then 'JavaScript pages'
36+
when 'faraday' then 'Standard rendering'
37+
when 'browserless' then 'JavaScript pages (recommended)'
3838
else name.to_s.split('_').map(&:capitalize).join(' ')
3939
end
4040
end

app/web/boot/setup.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ def validate_environment!
2626

2727
# @return [void]
2828
def configure_request_service!
29-
Html2rss::RequestService.register_strategy(:ssrf_filter, SsrfFilterStrategy)
30-
Html2rss::RequestService.default_strategy_name = :ssrf_filter
31-
Html2rss::RequestService.unregister_strategy(:faraday)
29+
nil
3230
end
3331
end
3432
end

app/web/domain/auto_source.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def enabled?
2121
# @param token_data [Hash{Symbol=>Object}] authenticated account data.
2222
# @param strategy [String]
2323
# @return [Html2rss::Web::Api::V1::FeedMetadata::Metadata, nil]
24-
def create_stable_feed(name, url, token_data, strategy = 'ssrf_filter')
24+
def create_stable_feed(name, url, token_data, strategy = 'faraday')
2525
return nil unless token_data && FeedAccess.url_allowed_for_username?(token_data[:username], url)
2626

2727
feed_token = Auth.generate_feed_token(token_data[:username], url, strategy: strategy)

app/web/feeds/source_resolver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def static_cache_identity(feed_name, params)
6969
def static_generator_input(config, params)
7070
generator_input = config.dup
7171
generator_input[:params] = merged_static_params(config, params)
72-
generator_input[:strategy] ||= Html2rss::RequestService.default_strategy_name
72+
generator_input[:strategy] ||= :faraday
7373
generator_input
7474
end
7575

app/web/security/ssrf_filter_strategy.rb

Lines changed: 0 additions & 25 deletions
This file was deleted.

spec/html2rss/web/api/v1/feed_metadata_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
name: 'Example Feed',
1212
url: 'https://example.com/articles',
1313
username: 'alice',
14-
strategy: 'ssrf_filter',
14+
strategy: 'faraday',
1515
feed_token: 'generated-token',
1616
identity_token: 'account-token'
1717
}
@@ -23,7 +23,7 @@
2323
name: 'Example Feed',
2424
url: 'https://example.com/articles',
2525
username: 'alice',
26-
strategy: 'ssrf_filter',
26+
strategy: 'faraday',
2727
feed_token: 'generated-token',
2828
public_url: '/api/v1/feeds/generated-token',
2929
json_public_url: '/api/v1/feeds/generated-token.json'

spec/html2rss/web/api/v1_spec.rb

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ def ghost_feed_token
4949
.create_with_validation(
5050
username: 'ghost',
5151
url: feed_url,
52-
strategy: 'ssrf_filter',
52+
strategy: 'faraday',
5353
secret_key: ENV.fetch('HTML2RSS_SECRET_KEY')
5454
)
5555
.encode
5656
end
5757

5858
def valid_feed_token
59-
Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'ssrf_filter')
59+
Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'faraday')
6060
end
6161

6262
def json_feed_response_for(token)
@@ -285,7 +285,7 @@ def json_feed_headers_tuple
285285
end
286286

287287
it 'renders feed for a valid token', :aggregate_failures do
288-
token = Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'ssrf_filter')
288+
token = Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'faraday')
289289

290290
allow(Html2rss::Web::Feeds::Service).to receive(:call).and_return(feed_result)
291291
allow(Html2rss::Web::Feeds::RssRenderer).to receive(:call).and_return('<rss version="2.0"></rss>')
@@ -305,7 +305,7 @@ def json_feed_headers_tuple
305305
end
306306

307307
it 'prefers xml when Accept quality outranks json', :aggregate_failures do
308-
token = Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'ssrf_filter')
308+
token = Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'faraday')
309309

310310
allow(Html2rss::Web::Feeds::Service).to receive(:call).and_return(feed_result)
311311
allow(Html2rss::Web::Feeds::RssRenderer).to receive(:call).and_return('<rss version="2.0"></rss>')
@@ -317,7 +317,7 @@ def json_feed_headers_tuple
317317
end
318318

319319
it 'ignores query param strategy overrides', :aggregate_failures, openapi: false do
320-
token = Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'ssrf_filter')
320+
token = Html2rss::Web::Auth.generate_feed_token('admin', feed_url, strategy: 'faraday')
321321

322322
allow(Html2rss::Web::Feeds::Service).to receive(:call).and_return(feed_result)
323323
allow(Html2rss::Web::Feeds::RssRenderer).to receive(:call).and_return('<rss version="2.0"></rss>')
@@ -346,7 +346,7 @@ def json_feed_headers_tuple
346346

347347
it 'returns forbidden when auto source is disabled', :aggregate_failures do
348348
unique_url = "#{feed_url}/disabled"
349-
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'ssrf_filter')
349+
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'faraday')
350350

351351
ClimateControl.modify(AUTO_SOURCE_ENABLED: 'false') do
352352
get "/api/v1/feeds/#{token}", {}, { 'HTTP_ACCEPT' => 'application/xml' }
@@ -359,7 +359,7 @@ def json_feed_headers_tuple
359359

360360
it 'returns JSON Feed-shaped forbidden errors when requested through Accept', :aggregate_failures do
361361
unique_url = "#{feed_url}/disabled-json"
362-
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'ssrf_filter')
362+
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'faraday')
363363

364364
ClimateControl.modify(AUTO_SOURCE_ENABLED: 'false') do
365365
get "/api/v1/feeds/#{token}", {}, { 'HTTP_ACCEPT' => 'application/feed+json' }
@@ -372,7 +372,7 @@ def json_feed_headers_tuple
372372

373373
it 'returns non-cacheable xml feed errors when service generation fails', :aggregate_failures do
374374
unique_url = "#{feed_url}/service-error-xml"
375-
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'ssrf_filter')
375+
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'faraday')
376376

377377
allow(Html2rss::Web::Feeds::Service).to receive(:call).and_return(service_error_result)
378378

@@ -386,7 +386,7 @@ def json_feed_headers_tuple
386386

387387
it 'returns non-cacheable json feed errors when service generation fails', :aggregate_failures do
388388
unique_url = "#{feed_url}/service-error-json"
389-
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'ssrf_filter')
389+
token = Html2rss::Web::Auth.generate_feed_token('admin', unique_url, strategy: 'faraday')
390390

391391
status, content_type, cache_control, title = json_feed_service_error_tuple(token)
392392

@@ -404,7 +404,7 @@ def json_feed_headers_tuple
404404
let(:request_params) do
405405
{
406406
url: feed_url,
407-
strategy: 'ssrf_filter'
407+
strategy: 'faraday'
408408
}
409409
end
410410

spec/html2rss/web/app_integration_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
Html2rss::Web::FeedToken,
6060
url: feed_url,
6161
username: account[:username],
62-
strategy: 'ssrf_filter'
62+
strategy: 'faraday'
6363
)
6464
allow(Html2rss::Web::FeedToken).to receive_messages(
6565
decode: token_payload,
@@ -187,7 +187,7 @@ def stub_escaped_feed_token(raw_token:, encoded_token:)
187187
Html2rss::Web::FeedToken,
188188
url: feed_url,
189189
username: account[:username],
190-
strategy: 'ssrf_filter'
190+
strategy: 'faraday'
191191
)
192192

193193
allow(Html2rss::Web::FeedToken).to receive(:decode).with(raw_token).and_return(escaped_token_payload)
@@ -203,7 +203,7 @@ def stub_escaped_feed_token(raw_token:, encoded_token:)
203203
let(:request_payload) do
204204
{
205205
url: feed_url,
206-
strategy: 'ssrf_filter'
206+
strategy: 'faraday'
207207
}
208208
end
209209

@@ -212,7 +212,7 @@ def stub_escaped_feed_token(raw_token:, encoded_token:)
212212
id: 'feed-123',
213213
name: 'Example Feed',
214214
url: feed_url,
215-
strategy: 'ssrf_filter',
215+
strategy: 'faraday',
216216
feed_token: feed_token,
217217
public_url: "/api/v1/feeds/#{feed_token}",
218218
json_public_url: "/api/v1/feeds/#{feed_token}.json",

spec/html2rss/web/boot/setup_spec.rb

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,22 @@
22

33
require 'spec_helper'
44

5-
require_relative '../../../../app/web/boot/setup'
5+
require_relative '../../../../app'
66

77
RSpec.describe Html2rss::Web::Boot::Setup do
88
describe '.call!' do
99
before do
1010
allow(Html2rss::Web::EnvironmentValidator).to receive(:validate_environment!)
1111
allow(Html2rss::Web::EnvironmentValidator).to receive(:validate_production_security!)
1212
allow(Html2rss::Web::Flags).to receive(:validate!)
13-
allow(Html2rss::RequestService).to receive(:register_strategy)
14-
allow(Html2rss::RequestService).to receive(:default_strategy_name=)
15-
allow(Html2rss::RequestService).to receive(:unregister_strategy)
1613
end
1714

18-
it 'validates environment state and configures the request service', :aggregate_failures do
15+
it 'validates environment state', :aggregate_failures do
1916
described_class.call!
2017

2118
expect(Html2rss::Web::EnvironmentValidator).to have_received(:validate_environment!).once
2219
expect(Html2rss::Web::EnvironmentValidator).to have_received(:validate_production_security!).once
2320
expect(Html2rss::Web::Flags).to have_received(:validate!).once
24-
expect(Html2rss::RequestService).to have_received(:register_strategy)
25-
.with(:ssrf_filter, Html2rss::Web::SsrfFilterStrategy).once
26-
expect(Html2rss::RequestService).to have_received(:default_strategy_name=).with(:ssrf_filter).once
27-
expect(Html2rss::RequestService).to have_received(:unregister_strategy).with(:faraday).once
2821
end
2922
end
3023
end

spec/html2rss/web/feeds/cache_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
feed: Object.new,
1414
site_title: 'Example',
1515
url: 'https://example.com',
16-
strategy: 'ssrf_filter'
16+
strategy: 'faraday'
1717
),
1818
message: nil,
1919
ttl_seconds: 60,

0 commit comments

Comments
 (0)