Skip to content

Commit df602d0

Browse files
committed
.
1 parent dd60831 commit df602d0

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

app/api/v1/feeds.rb

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
require_relative '../../account_manager'
77
require_relative '../../auth'
88
require_relative '../../auto_source'
9+
require_relative '../../feed_generator'
910
require_relative '../../feeds'
1011
require_relative '../../exceptions'
1112
require_relative '../../feed_token'
@@ -17,6 +18,8 @@ module Api
1718
module V1
1819
# RESTful API v1 for feeds
1920
module Feeds
21+
DEFAULT_TTL_SECONDS = 3600 # 1 hour
22+
2023
class << self
2124
def show(request, token)
2225
ensure_auto_source_enabled!
@@ -93,14 +96,16 @@ def ensure_access!(account, url)
9396
end
9497

9598
def render_generated_feed(request, url)
96-
rss_content = AutoSource.generate_feed_content(url, normalize_strategy(request.params['strategy']))
99+
strategy = normalize_strategy(request.params['strategy'])
100+
feed_object = AutoSource.generate_feed_object(url, strategy)
101+
rendered_feed = FeedGenerator.process_feed_content(url, strategy, feed_object)
97102

98103
request.response['Content-Type'] = 'application/xml'
99104

100-
# TODO: get ttl from feed
101-
HttpCache.expires(request.response, 600, cache_control: 'public')
105+
ttl = extract_ttl_from_feed_object(feed_object)
106+
HttpCache.expires(request.response, ttl, cache_control: 'public')
102107

103-
rss_content.to_s
108+
rendered_feed.to_s
104109
end
105110

106111
def require_account(request)
@@ -145,6 +150,14 @@ def extract_site_title(url)
145150
rescue StandardError
146151
nil
147152
end
153+
154+
def extract_ttl_from_feed_object(feed_object)
155+
ttl_value = feed_object.respond_to?(:channel) ? feed_object.channel&.ttl : nil
156+
ttl_minutes = ttl_value.respond_to?(:to_i) ? ttl_value.to_i : 0
157+
return DEFAULT_TTL_SECONDS if ttl_minutes <= 0
158+
159+
ttl_minutes * 60
160+
end
148161
end
149162
end
150163
end

app/auto_source.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ def generate_feed_from_stable_id(feed_id, token_data)
4646
}
4747
end
4848

49+
def generate_feed_object(url, strategy = 'ssrf_filter')
50+
FeedGenerator.call_strategy(url, strategy)
51+
end
52+
4953
def generate_feed_content(url, strategy = 'ssrf_filter')
5054
feed_content = FeedGenerator.call_strategy(url, strategy)
5155
FeedGenerator.process_feed_content(url, strategy, feed_content)

0 commit comments

Comments
 (0)