1
1
<?php
2
- // PROXY
3
-
4
- const VERSION = "0.015 " ;
5
- const CACHE_DURATIONS = [
6
- "2m " => 6220800 ,
7
- "1w " => 604800 ,
8
- "tx " => 604800 ,
9
- "1d " => 86400 ,
10
- "1h " => 3600
11
- ];
12
-
13
- // Main API function that handles caching and retrieval of data
14
- function api ($ url , $ data , $ headers , $ ct , $ cfd , $ meta , $ fn ) {
15
- $ cf = $ cfd ?? false ;
16
- if (!$ cf ) {
17
- return get_non_cached_result ($ url , $ data , $ headers );
18
- }
19
-
20
- $ cache_refresh = CACHE_DURATIONS [$ cf ] ?? 3600 ;
21
- $ cache_time = $ ct ?? $ cache_refresh ;
22
- $ cache_folder = "cache/ " . $ cf . "/ " ;
23
- $ filename = $ fn ?? md5 ($ data . $ url );
24
- $ cache_file = $ cache_folder . $ filename ;
25
-
26
- if (file_exists ($ cache_file ) && is_cache_valid ($ cache_file , $ cache_time )) {
27
- return get_cached_result ($ cache_file , $ cache_time , $ meta );
28
- }
29
-
30
- return get_and_cache_result ($ url , $ data , $ headers , $ cache_folder , $ cache_file , $ cache_time , $ meta );
2
+ // PROXY
3
+
4
+ const VERSION = "0.016 " ;
5
+ const CACHE_DURATIONS = [
6
+ "2m " => 6220800 ,
7
+ "1w " => 604800 ,
8
+ "tx " => 604800 ,
9
+ "1d " => 86400 ,
10
+ "1h " => 3600
11
+ ];
12
+
13
+ // Main API function that handles caching and retrieval of data
14
+ function api ($ url , $ data , $ headers , $ ct , $ cfd , $ meta , $ fn ) {
15
+ $ cf = $ cfd ?? false ;
16
+ if (!$ cf ) {
17
+ return get_non_cached_result ($ url , $ data , $ headers );
31
18
}
32
19
33
- // Retrieves non-cached result from the API
34
- function get_non_cached_result ($ url , $ data , $ headers ) {
35
- $ curlResult = curl_get ($ url , $ data , $ headers );
20
+ $ cache_refresh = CACHE_DURATIONS [$ cf ] ?? 3600 ;
21
+ $ cache_time = $ ct ?? $ cache_refresh ;
22
+ $ cache_folder = "cache/ " . $ cf . "/ " ;
23
+ $ filename = $ fn ?? md5 ($ data . $ url );
24
+ $ cache_file = $ cache_folder . $ filename ;
25
+
26
+ if (file_exists ($ cache_file ) && is_cache_valid ($ cache_file , $ cache_time )) {
27
+ return get_cached_result ($ cache_file , $ cache_time , $ meta );
28
+ }
29
+ return get_and_cache_result ($ url , $ data , $ headers , $ cache_folder , $ cache_file , $ cache_time , $ meta , $ cf );
30
+ }
31
+
32
+ // Retrieves non-cached result from the API
33
+ function get_non_cached_result ($ url , $ data , $ headers ) {
34
+ $ curlResult = curl_get ($ url , $ data , $ headers );
35
+ return [
36
+ "br_cache " => "no caching " ,
37
+ "br_result " => json_decode ($ curlResult ),
38
+ ];
39
+ }
40
+
41
+ // Checks if the cached data is still valid
42
+ function is_cache_valid ($ cache_file , $ cache_time ) {
43
+ $ filetime = filemtime ($ cache_file );
44
+ return (time () - $ filetime ) < $ cache_time ;
45
+ }
46
+
47
+ // Retrieves and formats cached result
48
+ function get_cached_result ($ cache_file , $ cache_time , $ meta ) {
49
+ $ filetime = filemtime ($ cache_file );
50
+ $ time_in_cache = time () - $ filetime ;
51
+ $ cache_object = [
52
+ "filename " => basename ($ cache_file ),
53
+ "title " => $ time_in_cache . " of " . $ cache_time . " seconds in cache " ,
54
+ "created " => gmdate ("Y-m-d h:i:sa " , $ filetime ) . " (UTC) " ,
55
+ "created_utc " => $ filetime ,
56
+ "cache_time " => $ cache_time ,
57
+ "time_in_cache " => $ time_in_cache ,
58
+ "utc_timestamp " => time (),
59
+ "version " => VERSION
60
+ ];
61
+ $ cache_contents = json_decode (file_get_contents ($ cache_file ));
62
+ return $ meta === false ? $ cache_contents : [
63
+ "br_cache " => $ cache_object ,
64
+ "br_result " => $ cache_contents
65
+ ];
66
+ }
67
+
68
+ // Fetches new data from API and caches it
69
+ function get_and_cache_result ($ url , $ data , $ headers , $ cache_folder , $ cache_file , $ cache_time , $ meta , $ cf ) {
70
+ $ api_result = $ url ? curl_get ($ url , $ data , $ headers ) : $ data ;
71
+ if (!$ api_result ) {
72
+ if (file_exists ($ cache_file )) {
73
+ unlink ($ cache_file );
74
+ }
36
75
return [
37
76
"br_cache " => "no caching " ,
38
- "br_result " => json_decode ( $ curlResult ),
77
+ "br_result " => [ " error " => [ " message " => " No API result " ]]
39
78
];
40
79
}
41
80
42
- // Checks if the cached data is still valid
43
- function is_cache_valid ($ cache_file , $ cache_time ) {
44
- $ filetime = filemtime ($ cache_file );
45
- return (time () - $ filetime ) < $ cache_time ;
46
- }
47
-
48
- // Retrieves and formats cached result
49
- function get_cached_result ($ cache_file , $ cache_time , $ meta ) {
50
- $ filetime = filemtime ($ cache_file );
51
- $ time_in_cache = time () - $ filetime ;
52
- $ cache_object = [
53
- "filename " => basename ($ cache_file ),
54
- "title " => $ time_in_cache . " of " . $ cache_time . " seconds in cache " ,
55
- "created " => gmdate ("Y-m-d h:i:sa " , $ filetime ) . " (UTC) " ,
56
- "created_utc " => $ filetime ,
57
- "cache_time " => $ cache_time ,
58
- "time_in_cache " => $ time_in_cache ,
59
- "utc_timestamp " => time (),
60
- "version " => VERSION
61
- ];
62
- $ cache_contents = json_decode (file_get_contents ($ cache_file ));
63
- return $ meta === false ? $ cache_contents : [
64
- "br_cache " => $ cache_object ,
65
- "br_result " => $ cache_contents
81
+ if (!is_dir ($ cache_folder ) && !mkdir ($ cache_folder , 0777 , true )) {
82
+ return [
83
+ "br_cache " => "no caching " ,
84
+ "br_result " => ["error " => ["message " => "No write access " ]]
66
85
];
67
86
}
68
87
69
- // Fetches new data from API and caches it
70
- function get_and_cache_result ($ url , $ data , $ headers , $ cache_folder , $ cache_file , $ cache_time , $ meta ) {
71
- $ api_result = $ url ? curl_get ($ url , $ data , $ headers ) : $ data ;
72
- if (!$ api_result ) {
73
- if (file_exists ($ cache_file )) {
74
- unlink ($ cache_file );
75
- }
76
- return [
77
- "br_cache " => "no caching " ,
78
- "br_result " => ["error " => ["message " => "No API result " ]]
79
- ];
80
- }
81
-
82
- if (!is_dir ($ cache_folder ) && !mkdir ($ cache_folder , 0777 , true )) {
83
- return [
84
- "br_cache " => "no caching " ,
85
- "br_result " => ["error " => ["message " => "No write access " ]]
86
- ];
87
- }
88
-
89
- file_put_contents ($ cache_file , $ api_result );
90
- update_cache_monitor ($ cache_folder );
91
-
92
- $ cache_object = [
93
- "filename " => basename ($ cache_file ),
94
- "title " => "0 of " . $ cache_time . " seconds in cache " ,
95
- "created " => gmdate ("Y-m-d h:i:sa " , time ()) . " (UTC) " ,
96
- "created_utc " => time (),
97
- "cache_time " => $ cache_time ,
98
- "time_in_cache " => 0 ,
99
- "utc_timestamp " => time (),
100
- "version " => VERSION
101
- ];
102
- $ api_contents = json_decode ($ api_result );
103
- return $ meta === false ? $ api_contents : [
104
- "br_cache " => $ cache_object ,
105
- "br_result " => $ api_contents
106
- ];
88
+ file_put_contents ($ cache_file , $ api_result );
89
+ update_cache_monitor ($ cache_folder , $ cf );
90
+
91
+ $ cache_object = [
92
+ "filename " => basename ($ cache_file ),
93
+ "title " => "0 of " . $ cache_time . " seconds in cache " ,
94
+ "created " => gmdate ("Y-m-d h:i:sa " , time ()) . " (UTC) " ,
95
+ "created_utc " => time (),
96
+ "cache_time " => $ cache_time ,
97
+ "time_in_cache " => 0 ,
98
+ "utc_timestamp " => time (),
99
+ "version " => VERSION
100
+ ];
101
+ $ api_contents = json_decode ($ api_result );
102
+ return $ meta === false ? $ api_contents : [
103
+ "br_cache " => $ cache_object ,
104
+ "br_result " => $ api_contents
105
+ ];
106
+ }
107
+
108
+ // Updates the cache monitor file
109
+ function update_cache_monitor ($ cache_folder , $ cf ) {
110
+ $ cacheMonitor = $ cache_folder . "cachemonitor " ;
111
+ $ time = time ();
112
+ $ cacheContent = json_encode ([
113
+ "created " => gmdate ("Y-m-d h:i:sa " , $ time ) . " (UTC) " ,
114
+ "created_utc " => $ time
115
+ ]);
116
+
117
+ if (!file_exists ($ cacheMonitor ) || ($ time - filemtime ($ cacheMonitor ) > 3600 )) {
118
+ cleanup_old_cache ($ cache_folder , $ cf );
119
+ file_put_contents ($ cacheMonitor , $ cacheContent );
107
120
}
108
-
109
- // Updates the cache monitor file
110
- function update_cache_monitor ($ cache_folder ) {
111
- $ cacheMonitor = $ cache_folder . "cachemonitor " ;
112
- $ time = time ();
113
- $ cacheContent = json_encode ([
114
- "created " => gmdate ("Y-m-d h:i:sa " , $ time ) . " (UTC) " ,
115
- "created_utc " => $ time
116
- ]);
117
-
118
- if (!file_exists ($ cacheMonitor ) || ($ time - filemtime ($ cacheMonitor ) > 3600 )) {
119
- cleanup_old_cache ($ cache_folder );
120
- file_put_contents ($ cacheMonitor , $ cacheContent );
121
+ }
122
+
123
+ // Removes old cache files
124
+ function cleanup_old_cache ($ cache_folder , $ cf ) {
125
+ $ files = glob ($ cache_folder . "* " );
126
+ $ cache_refresh = $ cf ? CACHE_DURATIONS [$ cf ] : 3600 ;
127
+ $ time = time ();
128
+ foreach ($ files as $ file ) {
129
+ if ($ time - filemtime ($ file ) > $ cache_refresh ) {
130
+ unlink ($ file );
121
131
}
122
132
}
133
+ }
123
134
124
- // Removes old cache files
125
- function cleanup_old_cache (string $ cache_folder ) {
126
- $ files = glob ($ cache_folder . "* " );
127
- $ cache_refresh = max (array_values (CACHE_DURATIONS )); // Explicitly convert to array for max()
128
- $ time = time ();
129
- foreach ($ files as $ file ) {
130
- if ($ time - filemtime ($ file ) > $ cache_refresh ) {
131
- unlink ($ file );
132
- }
133
- }
135
+ // Performs a cURL request to fetch data from a URL
136
+ function curl_get ($ url , $ data , $ headers ) {
137
+ if (strpos ($ url , ".onion " ) !== false ) {
138
+ require_once "ln/tor/index.php " ;
139
+ return fetch_tor ($ url , $ data , $ headers );
134
140
}
135
141
136
- // Performs a cURL request to fetch data from a URL
137
- function curl_get ($ url , $ data , $ headers ) {
138
- if (strpos ($ url , ".onion " ) !== false ) {
139
- require_once "ln/tor/index.php " ;
140
- return fetch_tor ($ url , $ data , $ headers );
142
+ $ ch = curl_init ();
143
+ curl_setopt_array ($ ch , [
144
+ CURLOPT_URL => $ url ,
145
+ CURLOPT_RETURNTRANSFER => true ,
146
+ CURLOPT_CONNECTTIMEOUT => 0 ,
147
+ CURLOPT_TIMEOUT => 5
148
+ ]);
149
+
150
+ if (!empty ($ headers )) {
151
+ curl_setopt ($ ch , CURLOPT_HTTPHEADER , $ headers );
152
+ if (isset ($ headers ["tls_wildcard " ])) {
153
+ curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , 0 );
141
154
}
155
+ }
142
156
143
- $ ch = curl_init ();
144
- curl_setopt_array ($ ch , [
145
- CURLOPT_URL => $ url ,
146
- CURLOPT_RETURNTRANSFER => true ,
147
- CURLOPT_CONNECTTIMEOUT => 0 ,
148
- CURLOPT_TIMEOUT => 5
149
- ]);
150
-
151
- if (!empty ($ headers )) {
152
- curl_setopt ($ ch , CURLOPT_HTTPHEADER , $ headers );
153
- if (isset ($ headers ["tls_wildcard " ])) {
154
- curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , 0 );
155
- }
156
- }
157
-
158
- if (!empty ($ data )) {
159
- curl_setopt ($ ch , CURLOPT_POSTFIELDS , $ data );
160
- }
161
-
162
- $ result = curl_exec ($ ch );
163
- if (curl_errno ($ ch )) {
164
- return error_object ("411 " , curl_error ($ ch ));
165
- }
166
- curl_close ($ ch );
167
-
168
- return $ result ?: error_object ("411 " , "no result " );
157
+ if (!empty ($ data )) {
158
+ curl_setopt ($ ch , CURLOPT_POSTFIELDS , $ data );
169
159
}
170
160
171
- // Creates a JSON-encoded error object
172
- function error_object ($ code , $ message ) {
173
- return json_encode ([
174
- "error " => [
175
- "code " => $ code ,
176
- "message " => $ message
177
- ]
178
- ]);
179
- }
161
+ $ result = curl_exec ($ ch );
162
+ if (curl_errno ($ ch )) {
163
+ return error_object ("411 " , curl_error ($ ch ));
164
+ }
165
+ curl_close ($ ch );
166
+
167
+ return $ result ?: error_object ("411 " , "no result " );
168
+ }
169
+
170
+ // Creates a JSON-encoded error object
171
+ function error_object ($ code , $ message ) {
172
+ return json_encode ([
173
+ "error " => [
174
+ "code " => $ code ,
175
+ "message " => $ message
176
+ ]
177
+ ]);
178
+ }
0 commit comments