refactored rule creation

This commit is contained in:
Viet Huynh
2023-09-09 23:12:22 +07:00
parent 603c9a0870
commit 8e96c87c27
3 changed files with 27 additions and 60 deletions
+3 -59
View File
@@ -1,34 +1,7 @@
import 'dotenv/config';
import fetch from 'node-fetch';
const API_TOKEN = process.env.CLOUDFLARE_API_KEY;
const ACCOUNT_ID = process.env.CLOUDFLARE_ACCOUNT_ID;
const ACCOUNT_EMAIL = process.env.CLOUDFLARE_ACCOUNT_EMAIL;
// Function to read Cloudflare Zero Trust lists
async function getZeroTrustLists() {
const url = `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/gateway/lists`;
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json',
'X-Auth-Email': ACCOUNT_EMAIL,
'X-Auth-Key': API_TOKEN,
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.result;
}
import { createZeroTrustRule, getZeroTrustLists } from './lib/api.js';
;(async() => {
const lists = await getZeroTrustLists();
const { result: lists } = await getZeroTrustLists();
const filtered_lists = lists.filter(list => list.name.startsWith('CGPS List'));
let wirefilter_expression = '';
@@ -44,34 +17,5 @@ async function getZeroTrustLists() {
wirefilter_expression = wirefilter_expression.trim().replace('\n', '');
if (!process.env.CI) console.log(`Firewall expression contains ${wirefilter_expression.length} characters, and checks against ${filtered_lists.length} filter lists.`)
const url = `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/gateway/rules`;
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json',
'X-Auth-Email': ACCOUNT_EMAIL,
'X-Auth-Key': API_TOKEN,
},
body: JSON.stringify({
"name": "CGPS Filter Lists",
"description": "Filter lists created by Cloudflare Gateway Pi-hole Scripts. Avoid editing this rule. Changing the name of this rule will break the script.",
"enabled": true,
"action": "block",
"filters": ["dns"],
"traffic": wirefilter_expression,
}),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log('Success:', data.success);
await createZeroTrustRule(wirefilter_expression);
})();
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
+19
View File
@@ -126,3 +126,22 @@ export const deleteZeroTrustListsAtOnce = async (lists) => {
console.error(`Error occurred while deleting lists - ${err.toString()}`);
}
};
/**
* Creates a Zero Trust rule.
* @param {string} wirefilterExpression The expression to be used for the rule.
* @returns {Promise<any>}
*/
export const createZeroTrustRule = (wirefilterExpression) =>
requestGateway("/rules", {
method: "POST",
body: JSON.stringify({
name: "CGPS Filter Lists",
description:
"Filter lists created by Cloudflare Gateway Pi-hole Scripts. Avoid editing this rule. Changing the name of this rule will break the script.",
enabled: true,
action: "block",
filters: ["dns"],
traffic: wirefilterExpression,
}),
});
+5 -1
View File
@@ -21,7 +21,11 @@ const request = async (url, options) => {
throw new Error(`HTTP error! Status: ${response.status}`);
}
return response.json();
const data = response.json();
console.log(data.success);
return data;
};
/**