33require 'uri'
44require_relative 'auth'
55require_relative 'xml_builder'
6+ require_relative 'local_config'
67
78module Html2rss
89 module Web
@@ -13,13 +14,10 @@ module AutoSource
1314
1415 def enabled?
1516 # Enable by default in development, require explicit setting in production
16- rack_env = ENV . fetch ( 'RACK_ENV' , nil )
17- auto_source_enabled = ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil )
18-
19- if rack_env == 'development'
20- auto_source_enabled != 'false'
17+ if development?
18+ ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil ) != 'false'
2119 else
22- auto_source_enabled == 'true'
20+ ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil ) == 'true'
2321 end
2422 end
2523
@@ -34,7 +32,7 @@ def allowed_origin?(request)
3432 end
3533
3634 def allowed_origins
37- if ENV . fetch ( 'RACK_ENV' , nil ) == ' development'
35+ if development?
3836 default_origins = 'localhost:3000,localhost:3001,127.0.0.1:3000,127.0.0.1:3001'
3937 origins = ENV . fetch ( 'AUTO_SOURCE_ALLOWED_ORIGINS' , default_origins )
4038 else
@@ -61,29 +59,31 @@ def create_stable_feed(name, url, token_data, strategy = 'ssrf_filter')
6159 build_feed_data ( name , url , token_data , strategy , feed_id , feed_token )
6260 end
6361
64- def build_feed_data ( name , url , token_data , strategy , feed_id , feed_token )
65- public_url = "/feeds/ #{ feed_id } ?token= #{ feed_token } &url= #{ URI . encode_www_form_component ( url ) } "
62+ def generate_feed_from_stable_id ( feed_id , token_data )
63+ return nil unless token_data
6664
65+ # Reconstruct feed data from token and feed_id
66+ # This is stateless - we don't store anything permanently
6767 {
6868 id : feed_id ,
69- name : name ,
70- url : url ,
69+ url : nil , # Will be provided in request
7170 username : token_data [ :username ] ,
72- strategy : strategy ,
73- public_url : public_url
71+ strategy : 'ssrf_filter'
7472 }
7573 end
7674
77- def generate_feed_from_stable_id ( feed_id , token_data )
78- return nil unless token_data
75+ private
76+
77+ def build_feed_data ( name , url , token_data , strategy , feed_id , feed_token )
78+ public_url = "/feeds/#{ feed_id } ?token=#{ feed_token } &url=#{ URI . encode_www_form_component ( url ) } "
7979
80- # Reconstruct feed data from token and feed_id
81- # This is stateless - we don't store anything permanently
8280 {
8381 id : feed_id ,
84- url : nil , # Will be provided in request
82+ name : name ,
83+ url : url ,
8584 username : token_data [ :username ] ,
86- strategy : 'ssrf_filter'
85+ strategy : strategy ,
86+ public_url : public_url
8787 }
8888 end
8989
@@ -111,14 +111,15 @@ def create_empty_feed_warning(url, strategy)
111111 )
112112 end
113113
114- # rubocop:disable Metrics/MethodLength
115114 def call_strategy ( url , strategy )
115+ global_config = LocalConfig . global
116+
116117 config = {
117- stylesheets : [ { href : '/rss.xsl' , type : 'text/xsl' } ] ,
118+ stylesheets : global_config [ :stylesheets ] ,
119+ headers : global_config [ :headers ] ,
118120 strategy : strategy . to_sym ,
119121 channel : {
120- url : url ,
121- title : extract_channel_title ( url )
122+ url : url
122123 } ,
123124 auto_source : {
124125 # Auto source configuration for automatic content detection
@@ -128,11 +129,6 @@ def call_strategy(url, strategy)
128129
129130 Html2rss . feed ( config )
130131 end
131- # rubocop:enable Metrics/MethodLength
132-
133- def extract_channel_title ( url )
134- Html2rss ::Url . for_channel ( url ) . channel_titleized || 'RSS Feed'
135- end
136132
137133 def extract_site_title ( url )
138134 Html2rss ::Url . for_channel ( url ) . channel_titleized
@@ -147,6 +143,10 @@ def error_feed(message)
147143 def access_denied_feed ( url )
148144 XmlBuilder . build_access_denied_feed ( url )
149145 end
146+
147+ def development?
148+ ENV . fetch ( 'RACK_ENV' , nil ) == 'development'
149+ end
150150 end
151151 end
152152end
0 commit comments