最後活躍 1745852183

修訂 178b462ea890e87bfd4297d5f67411bf8c1215d3

app.js 原始檔案
1import axios from 'axios';
2import pLimit from 'p-limit';
3const CONCURRENCY_LIMIT = 2; // setting this to any higher value will make cloudflare block you for 5 minutes
4
5const api = axios.create({
6 baseURL: 'https://api.cloudflare.com/client/v4',
7 headers: {
8 "X-Auth-Email": "deez",
9 "X-Auth-Key": "peter_griffin",
10 "Content-Type": "application/json"
11 }
12});
13
14async function fetchAllIPAccessRules() {
15 const allRules = [];
16 let page = 1;
17 const perPage = 100;
18
19 while (true) {
20 const response = await api.get('/user/firewall/access_rules/rules', {
21 params: {
22 per_page: perPage,
23 page
24 }
25 });
26
27 const rules = response.data.result;
28 const ipRules = rules.filter(rule =>
29 rule.configuration.target === 'ip' ||
30 rule.configuration.target === 'ip_range' ||
31 rule.configuration.target === 'ip6'
32 );
33
34 allRules.push(...ipRules);
35
36 const { total_pages } = response.data.result_info;
37 console.log(`Fetched page ${page} of ${total_pages} (${ipRules.length} IP rules)`);
38
39 if (page >= total_pages) break;
40 page++;
41 }
42
43 return allRules;
44}
45
46async function deleteRule(ruleId) {
47 try {
48 await api.delete(`/user/firewall/access_rules/rules/${ruleId}`);
49 console.log(`Deleted rule ${ruleId}`);
50 } catch (err) {
51 console.error(`Failed to delete rule ${ruleId}:`, err.response?.data || err.message);
52 }
53}
54
55async function deleteAllIPAccessRules() {
56 try {
57 const ipRules = await fetchAllIPAccessRules();
58 console.log(`Total IP access rules to delete: ${ipRules.length}`);
59
60 const limit = pLimit(CONCURRENCY_LIMIT);
61
62 const deletePromises = ipRules.map(rule =>
63 limit(() => deleteRule(rule.id))
64 );
65
66 await Promise.allSettled(deletePromises);
67 console.log('Finished deleting all rules.');
68 } catch (err) {
69 console.error('Error:', err.response?.data || err.message);
70 }
71}
72
73deleteAllIPAccessRules();