56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
|
import pathlib
|
||
|
import os
|
||
|
import requests
|
||
|
from dotenv import load_dotenv
|
||
|
|
||
|
# List Utils
|
||
|
|
||
|
# Convert a hosts file to a simple hostname list
|
||
|
def convert_to_list(file:pathlib.Path) -> list:
|
||
|
with open(file, 'r') as f:
|
||
|
# Don't read commented lines; strip whitespace; remove 127.0.0.1 from beginning of line; ignore lines with "localhost"; ignore lines with "::1"; ignore newlines blocklists.extend([i[10:].strip() for i in f.readlines() if not i.startswith('#') and 'localhost' not in i and '::1' not in i])
|
||
|
hosts = ([i[10:].strip() for i in f.readlines() if not i.startswith('#') and 'localhost' not in i and '::1' not in i])
|
||
|
# Equivalent to:
|
||
|
# for x in f.readlines():
|
||
|
# if not x.startswith('#') and 'localhost' not in x and '::1' not in x:
|
||
|
# hosts.append(x[10:].strip())
|
||
|
# If there are any empty strings in the list, remove them since for some reason, whitespace is stil in the list
|
||
|
hosts = [i for i in hosts if i != '']
|
||
|
return hosts
|
||
|
|
||
|
# General Utils
|
||
|
|
||
|
# Load environment variables
|
||
|
def load_env() -> dict:
|
||
|
load_dotenv(".env")
|
||
|
if not os.environ.get('CLOUDFLARE_TOKEN') and not os.environ.get('CLOUDFLARE_ACCOUNT_ID'):
|
||
|
load_dotenv(".envrc")
|
||
|
if not os.environ.get('CLOUDFLARE_TOKEN') or not os.environ.get('CLOUDFLARE_ACCOUNT_ID'):
|
||
|
print('No environment variables found. Please create a .env file or .envrc file')
|
||
|
exit()
|
||
|
else:
|
||
|
return {"CLOUDFLARE_TOKEN": os.environ.get('CLOUDFLARE_TOKEN'), "CLOUDFLARE_ACCOUNT_ID": os.environ.get('CLOUDFLARE_ACCOUNT_ID')}
|
||
|
|
||
|
|
||
|
|
||
|
def get_lists() -> dict:
|
||
|
url = f'https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/gateway/lists'
|
||
|
headers = {
|
||
|
'Authorization': f'Bearer {TOKEN}',
|
||
|
"Content-Type": "application/json",
|
||
|
}
|
||
|
response = requests.get(url, headers=headers)
|
||
|
if response.status_code != 200:
|
||
|
print(f'Error getting lists: {response.text}')
|
||
|
return response.json()['result']
|
||
|
|
||
|
def filter_adblock_lists(lists: dict) -> dict:
|
||
|
adblock_lists = []
|
||
|
for lst in lists:
|
||
|
if lst['name'].startswith('adblock-list') and lst['type'] == 'DOMAIN':
|
||
|
adblock_lists.append(lst)
|
||
|
return adblock_lists
|
||
|
|
||
|
TOKEN = load_env()['CLOUDFLARE_TOKEN']
|
||
|
ACCOUNT_ID = load_env()['CLOUDFLARE_ACCOUNT_ID']
|