11# frozen_string_literal: true
22
33require 'time'
4+ require 'html2rss/url'
45
6+ require_relative '../../account_manager'
57require_relative '../../auth'
68require_relative '../../auto_source'
79require_relative '../../feeds'
810require_relative '../../exceptions'
911require_relative '../../feed_token'
12+ require_relative '../../url_validator'
1013
1114module Html2rss
1215 module Web
@@ -16,11 +19,6 @@ module V1
1619 module Feeds
1720 module_function
1821
19- def index ( _request )
20- feeds = Html2rss ::Web ::Feeds . list_feeds
21- { success : true , data : { feeds : feeds } , meta : { total : feeds . count } }
22- end
23-
2422 def show ( request , token )
2523 handle_token_based_feed ( request , token )
2624 end
@@ -48,10 +46,6 @@ def handle_token_based_feed(request, token)
4846 generate_feed_response ( request , feed_token . url )
4947 end
5048
51- def extract_site_title ( url )
52- AutoSource . extract_site_title ( url )
53- end
54-
5549 def validate_feed_token ( token )
5650 feed_token = FeedToken . decode ( token )
5751 raise UnauthorizedError , 'Invalid token' unless feed_token
@@ -63,21 +57,23 @@ def validate_feed_token(token)
6357 end
6458
6559 def get_account_for_token ( feed_token )
66- account = Auth . get_account_by_username ( feed_token . username )
60+ account = AccountManager . get_account_by_username ( feed_token . username )
6761 raise UnauthorizedError , 'Account not found' unless account
6862
6963 account
7064 end
7165
7266 def validate_account_access ( account , url )
73- raise ForbiddenError , 'Access Denied' unless Auth . url_allowed? ( account , url )
67+ raise ForbiddenError , 'Access Denied' unless UrlValidator . url_allowed? ( account , url )
7468 end
7569
7670 def generate_feed_response ( request , url )
7771 strategy = select_strategy ( request . params [ 'strategy' ] )
7872 rss_content = AutoSource . generate_feed_content ( url , strategy )
7973
8074 request . response [ 'Content-Type' ] = 'application/xml'
75+
76+ # TODO: get ttl from feed
8177 HttpCache . expires ( request . response , 600 , cache_control : 'public' )
8278
8379 rss_content . to_s
@@ -97,15 +93,16 @@ def extract_create_params(request)
9793 strategy = select_strategy ( request . params [ 'strategy' ] )
9894 {
9995 url : url ,
100- name : request . params [ 'name' ] || extract_site_title ( url ) ,
96+ name : extract_site_title ( url ) ,
10197 strategy : strategy
10298 }
10399 end
104100
105101 def validate_create_params ( params , account )
106102 raise BadRequestError , 'URL parameter is required' if params [ :url ] . nil? || params [ :url ] . empty?
107- raise BadRequestError , 'Invalid URL format' unless Auth . valid_url? ( params [ :url ] )
108- raise ForbiddenError , 'URL not allowed for this account' unless Auth . url_allowed? ( account , params [ :url ] )
103+ raise BadRequestError , 'Invalid URL format' unless UrlValidator . valid_url? ( params [ :url ] )
104+ raise ForbiddenError , 'URL not allowed for this account' unless UrlValidator . url_allowed? ( account ,
105+ params [ :url ] )
109106 end
110107
111108 def build_create_response ( request , feed_data )
@@ -147,12 +144,18 @@ def feed_response_payload(feed_data)
147144 }
148145 end
149146
147+ def extract_site_title ( url )
148+ Html2rss ::Url . for_channel ( url ) . channel_titleized
149+ rescue StandardError
150+ nil
151+ end
152+
150153 module_function :extract_create_params , :validate_create_params , :build_create_response ,
151154 :authenticate_request , :select_strategy , :supported_strategies , :default_strategy ,
152- :feed_response_payload
155+ :feed_response_payload , :extract_site_title
153156 private_class_method :extract_create_params , :validate_create_params , :build_create_response ,
154157 :authenticate_request , :select_strategy , :supported_strategies , :default_strategy ,
155- :feed_response_payload
158+ :feed_response_payload , :extract_site_title
156159 end
157160 end
158161 end
0 commit comments