@@ -11,68 +11,70 @@ module Web
1111 ##
1212 # Auto source functionality for generating RSS feeds from any website
1313 module AutoSource
14- module_function
15-
16- # @return [Boolean]
17- def enabled ?
18- if EnvironmentValidator . development?
19- ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil ) != 'false'
20- else
21- ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil ) == 'true'
14+ class << self
15+ # @return [Boolean]
16+ def enabled?
17+ if EnvironmentValidator . development ?
18+ ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil ) != 'false'
19+ else
20+ ENV . fetch ( 'AUTO_SOURCE_ENABLED' , nil ) == 'true'
21+ end
2222 end
23- end
2423
25- def create_stable_feed ( name , url , token_data , strategy = 'ssrf_filter' )
26- return nil unless url_allowed_for_token? ( token_data , url )
24+ def create_stable_feed ( name , url , token_data , strategy = 'ssrf_filter' )
25+ return nil unless url_allowed_for_token? ( token_data , url )
2726
28- feed_id = AuthUtils . generate_feed_id ( token_data [ :username ] , url , token_data [ :token ] )
29- feed_token = Auth . generate_feed_token ( token_data [ :username ] , url )
30- return nil unless feed_token
27+ feed_id = AuthUtils . generate_feed_id ( token_data [ :username ] , url , token_data [ :token ] )
28+ feed_token = Auth . generate_feed_token ( token_data [ :username ] , url )
29+ return nil unless feed_token
3130
32- identifiers = { feed_id : feed_id , feed_token : feed_token }
31+ identifiers = { feed_id : feed_id , feed_token : feed_token }
3332
34- build_feed_data ( name , url , token_data , strategy , identifiers )
35- end
33+ build_feed_data ( name , url , token_data , strategy , identifiers )
34+ end
3635
37- # @param token_data [Hash]
38- # @param url [String]
39- # @return [Boolean]
40- def url_allowed_for_token? ( token_data , url )
41- account = AccountManager . get_account_by_username ( token_data [ :username ] )
42- return false unless account
36+ def generate_feed_from_stable_id ( feed_id , token_data )
37+ return nil unless token_data
4338
44- UrlValidator . url_allowed? ( account , url )
45- end
39+ # Reconstruct feed data from token and feed_id
40+ # Stateless operation
41+ {
42+ id : feed_id ,
43+ url : nil , # Will be provided in request
44+ username : token_data [ :username ] ,
45+ strategy : 'ssrf_filter'
46+ }
47+ end
4648
47- def generate_feed_from_stable_id ( feed_id , token_data )
48- return nil unless token_data
49+ def generate_feed_content ( url , strategy = 'ssrf_filter' )
50+ feed_content = FeedGenerator . call_strategy ( url , strategy )
51+ FeedGenerator . process_feed_content ( url , strategy , feed_content )
52+ end
4953
50- # Reconstruct feed data from token and feed_id
51- # Stateless operation
52- {
53- id : feed_id ,
54- url : nil , # Will be provided in request
55- username : token_data [ :username ] ,
56- strategy : 'ssrf_filter'
57- }
58- end
54+ private
5955
60- def generate_feed_content ( url , strategy = 'ssrf_filter' )
61- feed_content = FeedGenerator . call_strategy ( url , strategy )
62- FeedGenerator . process_feed_content ( url , strategy , feed_content )
63- end
56+ # @param token_data [Hash]
57+ # @param url [String]
58+ # @return [Boolean]
59+ def url_allowed_for_token? ( token_data , url )
60+ account = AccountManager . get_account_by_username ( token_data [ :username ] )
61+ return false unless account
6462
65- def build_feed_data ( name , url , token_data , strategy , identifiers )
66- public_url = "/api/v1/feeds/#{ identifiers [ :feed_token ] } "
63+ UrlValidator . url_allowed? ( account , url )
64+ end
65+
66+ def build_feed_data ( name , url , token_data , strategy , identifiers )
67+ public_url = "/api/v1/feeds/#{ identifiers [ :feed_token ] } "
6768
68- {
69- id : identifiers [ :feed_id ] ,
70- name : name ,
71- url : url ,
72- username : token_data [ :username ] ,
73- strategy : strategy ,
74- public_url : public_url
75- }
69+ {
70+ id : identifiers [ :feed_id ] ,
71+ name : name ,
72+ url : url ,
73+ username : token_data [ :username ] ,
74+ strategy : strategy ,
75+ public_url : public_url
76+ }
77+ end
7678 end
7779 end
7880 end
0 commit comments