Compare commits
12 Commits
Author | SHA1 | Date |
---|---|---|
|
f241081e5b | |
|
b71f29e7d5 | |
|
29e14a7043 | |
|
9c12d2f1b1 | |
|
20a46e4e1f | |
|
e719461e3c | |
|
235eba5355 | |
|
5fd2ce94ab | |
|
fd5f951898 | |
|
c8e8ab7dda | |
|
7e98125597 | |
|
255994447a |
|
@ -0,0 +1 @@
|
||||||
|
github: [slashtechno]
|
|
@ -1,4 +1,5 @@
|
||||||
# Cloudflare Gateway Adblocking
|
# Cloudflare Gateway Adblocking
|
||||||
|

|
||||||
Serverless adblocking via Cloudflare Zero Trust Gateway
|
Serverless adblocking via Cloudflare Zero Trust Gateway
|
||||||
|
|
||||||
### What is this?
|
### What is this?
|
||||||
|
@ -34,7 +35,7 @@ The following command line flags can be used to set the Cloudflare credentials:
|
||||||
* Cloudflare Token: `--token` / `-t`
|
* Cloudflare Token: `--token` / `-t`
|
||||||
#### Passing blocklists
|
#### Passing blocklists
|
||||||
Blocklists can be passed to the program via the command line flag `--blocklist` / `-b`. This flag can either point to a hosts file or a directory containing hosts files. If this flag is not passed, the program will look for a file or directory named `blocklists` in the current working directory.
|
Blocklists can be passed to the program via the command line flag `--blocklist` / `-b`. This flag can either point to a hosts file or a directory containing hosts files. If this flag is not passed, the program will look for a file or directory named `blocklists` in the current working directory.
|
||||||
# Passing whitelists
|
#### Passing whitelists
|
||||||
Whitelists can be passed to the program via the command line flag `--whitelist` / `-w`. This flag can either point to a hosts file or a directory containing hosts files. If this flag is not passed, then if a file or directory named `whitelists` exists in the current working directory, it will be used. Domains in this whitelist will be excluded from the blocklists.
|
Whitelists can be passed to the program via the command line flag `--whitelist` / `-w`. This flag can either point to a hosts file or a directory containing hosts files. If this flag is not passed, then if a file or directory named `whitelists` exists in the current working directory, it will be used. Domains in this whitelist will be excluded from the blocklists.
|
||||||
#### Uploading blocklists and creating a firewall policy
|
#### Uploading blocklists and creating a firewall policy
|
||||||
To upload the blocklists to Cloudflare and create a firewall policy, use the `upload` subcommand.
|
To upload the blocklists to Cloudflare and create a firewall policy, use the `upload` subcommand.
|
||||||
|
@ -45,4 +46,8 @@ To delete the blocklists from Cloudflare and delete the firewall policy, use the
|
||||||
For example:
|
For example:
|
||||||
`cloudflare-gateway-adblocking delete`
|
`cloudflare-gateway-adblocking delete`
|
||||||
### Help
|
### Help
|
||||||
For help, use the `--help` flag.
|
For help, use the `--help` flag.
|
||||||
|
### Contributing
|
||||||
|
* [Sponsoring](https://github.com/sponsors/slashtechno) via GitHub
|
||||||
|
* Contributing code via a pull request
|
||||||
|
* Reporting encoutered issues
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
|
# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyio"
|
name = "anyio"
|
||||||
|
@ -23,33 +23,33 @@ trio = ["trio (<0.22)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "black"
|
name = "black"
|
||||||
version = "23.7.0"
|
version = "24.4.2"
|
||||||
description = "The uncompromising code formatter."
|
description = "The uncompromising code formatter."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"},
|
{file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"},
|
||||||
{file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"},
|
{file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"},
|
||||||
{file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"},
|
{file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"},
|
||||||
{file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"},
|
{file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"},
|
||||||
{file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"},
|
{file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"},
|
||||||
{file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"},
|
{file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"},
|
||||||
{file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"},
|
{file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"},
|
||||||
{file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"},
|
{file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"},
|
||||||
{file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"},
|
{file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"},
|
||||||
{file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"},
|
{file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"},
|
||||||
{file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"},
|
{file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"},
|
||||||
{file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"},
|
{file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"},
|
||||||
{file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"},
|
{file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"},
|
||||||
{file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"},
|
{file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"},
|
||||||
{file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"},
|
{file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"},
|
||||||
{file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"},
|
{file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"},
|
||||||
{file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"},
|
{file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"},
|
||||||
{file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"},
|
{file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"},
|
||||||
{file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"},
|
{file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"},
|
||||||
{file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"},
|
{file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"},
|
||||||
{file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"},
|
{file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"},
|
||||||
{file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"},
|
{file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
@ -59,10 +59,11 @@ packaging = ">=22.0"
|
||||||
pathspec = ">=0.9.0"
|
pathspec = ">=0.9.0"
|
||||||
platformdirs = ">=2"
|
platformdirs = ">=2"
|
||||||
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
|
tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
|
||||||
|
typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
colorama = ["colorama (>=0.4.3)"]
|
colorama = ["colorama (>=0.4.3)"]
|
||||||
d = ["aiohttp (>=3.7.4)"]
|
d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
|
||||||
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
|
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
|
||||||
uvloop = ["uvloop (>=0.15.2)"]
|
uvloop = ["uvloop (>=0.15.2)"]
|
||||||
|
|
||||||
|
@ -257,13 +258,13 @@ socks = ["socksio (==1.*)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.4"
|
version = "3.7"
|
||||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
|
{file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
|
||||||
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
|
{file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -415,15 +416,26 @@ files = [
|
||||||
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typing-extensions"
|
||||||
|
version = "4.11.0"
|
||||||
|
description = "Backported and Experimental Type Hints for Python 3.8+"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"},
|
||||||
|
{file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "2.0.4"
|
version = "2.0.7"
|
||||||
description = "HTTP library with thread-safe connection pooling, file post, and more."
|
description = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"},
|
{file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
|
||||||
{file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"},
|
{file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
@ -449,4 +461,4 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.10"
|
python-versions = "^3.10"
|
||||||
content-hash = "0c9985ad60dc4fee35917dd0ff673af48019ca19a009b5185f6eff9343428a84"
|
content-hash = "6930b7a4d843d920177257c386b9793f74619ee1ec2ab1e7d263935e89e629c8"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "cloudflare-gateway-adblocking"
|
name = "cloudflare-gateway-adblocking"
|
||||||
version = "0.1.1"
|
version = "0.1.4"
|
||||||
description = "Serverless adblocking via Cloudflare Zero Trust Gateway"
|
description = "Serverless adblocking via Cloudflare Zero Trust Gateway"
|
||||||
authors = ["slastechno <77907286+slashtechno@users.noreply.github.com>"]
|
authors = ["slastechno <77907286+slashtechno@users.noreply.github.com>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -23,7 +23,7 @@ httpx = "^0.24.1"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
ruff = "^0.0.281"
|
ruff = "^0.0.281"
|
||||||
black = "^23.7.0"
|
black = ">=23.7,<25.0"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["poetry-core"]
|
||||||
|
|
|
@ -35,7 +35,12 @@ def main():
|
||||||
argparser.add_argument(
|
argparser.add_argument(
|
||||||
"--log-level", "-l", help="Log level", default="INFO"
|
"--log-level", "-l", help="Log level", default="INFO"
|
||||||
) # noqa E501
|
) # noqa E501
|
||||||
|
argparser.add_argument(
|
||||||
|
"--timeout",
|
||||||
|
help="Timeout for requests",
|
||||||
|
default=None,
|
||||||
|
type = int
|
||||||
|
)
|
||||||
# Credential arguments
|
# Credential arguments
|
||||||
credential_args.add_argument(
|
credential_args.add_argument(
|
||||||
"--account-id",
|
"--account-id",
|
||||||
|
@ -95,7 +100,7 @@ def main():
|
||||||
logger.info("No credentials provided with flags")
|
logger.info("No credentials provided with flags")
|
||||||
if Path(".env").is_file():
|
if Path(".env").is_file():
|
||||||
logger.debug("Loading .env")
|
logger.debug("Loading .env")
|
||||||
dotenv.load_dotenv()
|
dotenv.load_dotenv(Path(Path.cwd() / ".env"))
|
||||||
else:
|
else:
|
||||||
logger.debug("No .env file found")
|
logger.debug("No .env file found")
|
||||||
try:
|
try:
|
||||||
|
@ -106,7 +111,8 @@ def main():
|
||||||
logger.error("No credentials provided")
|
logger.error("No credentials provided")
|
||||||
argparser.print_help()
|
argparser.print_help()
|
||||||
exit(1)
|
exit(1)
|
||||||
|
# For debugging, print cwd
|
||||||
|
logger.debug(f"Current working directory: {Path.cwd()}")
|
||||||
try:
|
try:
|
||||||
args.func(args)
|
args.func(args)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -120,19 +126,19 @@ def upload_to_cloudflare(args):
|
||||||
blocklists = upload.get_blocklists(args.blocklists)
|
blocklists = upload.get_blocklists(args.blocklists)
|
||||||
blocklists = upload.apply_whitelists(blocklists, args.whitelists)
|
blocklists = upload.apply_whitelists(blocklists, args.whitelists)
|
||||||
lists = upload.split_list(blocklists)
|
lists = upload.split_list(blocklists)
|
||||||
asyncio.run(upload.upload_to_cloudflare(lists, ACCOUNT_ID, TOKEN))
|
asyncio.run(upload.upload_to_cloudflare(lists, ACCOUNT_ID, TOKEN, args.timeout))
|
||||||
cloud_lists = utils.get_lists(ACCOUNT_ID, TOKEN)
|
cloud_lists = utils.get_lists(ACCOUNT_ID, TOKEN, args.timeout)
|
||||||
cloud_lists = utils.filter_adblock_lists(cloud_lists)
|
cloud_lists = utils.filter_adblock_lists(cloud_lists)
|
||||||
upload.create_dns_policy(cloud_lists, ACCOUNT_ID, TOKEN)
|
upload.create_dns_policy(cloud_lists, ACCOUNT_ID, TOKEN, args.timeout)
|
||||||
|
|
||||||
|
|
||||||
def delete_from_cloudflare(args):
|
def delete_from_cloudflare(args):
|
||||||
logger.info("Deleting from Cloudflare")
|
logger.info("Deleting from Cloudflare")
|
||||||
rules = utils.get_gateway_rules(ACCOUNT_ID, TOKEN)
|
rules = utils.get_gateway_rules(ACCOUNT_ID, TOKEN, timeout = args.timeout)
|
||||||
delete.delete_adblock_policy(rules, ACCOUNT_ID, TOKEN)
|
delete.delete_adblock_policy(rules, ACCOUNT_ID, TOKEN, args.timeout)
|
||||||
lists = utils.get_lists(ACCOUNT_ID, TOKEN)
|
lists = utils.get_lists(ACCOUNT_ID, TOKEN, args.timeout)
|
||||||
lists = utils.filter_adblock_lists(lists)
|
lists = utils.filter_adblock_lists(lists)
|
||||||
asyncio.run(delete.delete_adblock_list(lists, ACCOUNT_ID, TOKEN))
|
asyncio.run(delete.delete_adblock_list(lists, ACCOUNT_ID, TOKEN, args.timeout))
|
||||||
|
|
||||||
|
|
||||||
def set_primary_logger(log_level):
|
def set_primary_logger(log_level):
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
# This is a scriprt to undo the changes made by adblock-zerotrust.py
|
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
@ -8,7 +6,7 @@ import requests
|
||||||
from . import utils
|
from . import utils
|
||||||
|
|
||||||
|
|
||||||
async def delete_adblock_list(lists: dict, account_id: str, token: str):
|
async def delete_adblock_list(lists: dict, account_id: str, token: str, timeout:int = 10):
|
||||||
try:
|
try:
|
||||||
async with httpx.AsyncClient() as client:
|
async with httpx.AsyncClient() as client:
|
||||||
for lst in lists:
|
for lst in lists:
|
||||||
|
@ -17,8 +15,7 @@ async def delete_adblock_list(lists: dict, account_id: str, token: str):
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
}
|
||||||
# response = requests.delete(url, headers=headers, timeout=10)
|
response = await client.delete(url, headers=headers, timeout=timeout)
|
||||||
response = await client.delete(url, headers=headers, timeout=10)
|
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f"Error deleting list: {response.text}")
|
print(f"Error deleting list: {response.text}")
|
||||||
else:
|
else:
|
||||||
|
@ -30,7 +27,7 @@ async def delete_adblock_list(lists: dict, account_id: str, token: str):
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
def delete_adblock_policy(policies: dict, account_id: str, token: str):
|
def delete_adblock_policy(policies: dict, account_id: str, token: str, timeout:int = 10):
|
||||||
for policy in policies:
|
for policy in policies:
|
||||||
if policy["name"] == "Block Ads":
|
if policy["name"] == "Block Ads":
|
||||||
url = f'https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules/{policy["id"]}'
|
url = f'https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules/{policy["id"]}'
|
||||||
|
@ -38,7 +35,7 @@ def delete_adblock_policy(policies: dict, account_id: str, token: str):
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
}
|
||||||
response = requests.delete(url, headers=headers, timeout=10)
|
response = requests.delete(url, headers=headers, timeout=timeout)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f"Error deleting policy: {response.text}")
|
print(f"Error deleting policy: {response.text}")
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -48,7 +48,7 @@ def split_list(blocklists):
|
||||||
return lists
|
return lists
|
||||||
|
|
||||||
|
|
||||||
async def upload_to_cloudflare(lists, account_id: str, token: str) -> None:
|
async def upload_to_cloudflare(lists, account_id: str, token: str, timeout:int = 10) -> None:
|
||||||
async with httpx.AsyncClient() as client:
|
async with httpx.AsyncClient() as client:
|
||||||
for i, lst in enumerate(lists):
|
for i, lst in enumerate(lists):
|
||||||
list_name = f"adblock-list-{i + 1}"
|
list_name = f"adblock-list-{i + 1}"
|
||||||
|
@ -70,14 +70,14 @@ async def upload_to_cloudflare(lists, account_id: str, token: str) -> None:
|
||||||
for x in lst
|
for x in lst
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
response = await client.post(url, headers=headers, json=data)
|
response = await client.post(url, headers=headers, json=data, timeout=timeout)
|
||||||
print(f"Uploaded {list_name} to Cloudflare")
|
print(f"Uploaded {list_name} to Cloudflare")
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f"Error uploading {list_name}: {response.text}")
|
print(f"Error uploading {list_name}: {response.text}")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
def create_dns_policy(lists, account_id: str, token: str) -> None:
|
def create_dns_policy(lists, account_id: str, token: str, timeout = 10) -> None:
|
||||||
url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules"
|
url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules"
|
||||||
headers = {
|
headers = {
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
|
@ -98,7 +98,7 @@ def create_dns_policy(lists, account_id: str, token: str) -> None:
|
||||||
"traffic": traffic,
|
"traffic": traffic,
|
||||||
"enabled": True,
|
"enabled": True,
|
||||||
}
|
}
|
||||||
response = requests.post(url, headers=headers, json=data, timeout=10)
|
response = requests.post(url, headers=headers, json=data, timeout=timeout)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f"Error creating DNS policy: {response.text}")
|
print(f"Error creating DNS policy: {response.text}")
|
||||||
|
|
||||||
|
|
|
@ -73,25 +73,25 @@ def convert_to_list(file: pathlib.Path) -> list:
|
||||||
re.search(r"^(?:127\.0\.0\.1|0\.0\.0\.0|::1)\s+(.+?)(?:\s+#.+)?$", line)
|
re.search(r"^(?:127\.0\.0\.1|0\.0\.0\.0|::1)\s+(.+?)(?:\s+#.+)?$", line)
|
||||||
for line in f
|
for line in f
|
||||||
]
|
]
|
||||||
hosts = [
|
hosts = {
|
||||||
match.group(1)
|
match.group(1)
|
||||||
for match in matches
|
for match in matches
|
||||||
if match and match.group(1) not in loopback
|
if match and match.group(1) not in loopback
|
||||||
]
|
}
|
||||||
# print(f"First 5 hosts: {hosts[:5]}")
|
# print(f"First 5 hosts: {hosts[:5]}")
|
||||||
return hosts
|
return list(hosts)
|
||||||
|
|
||||||
|
|
||||||
# General Utils
|
# General Utils
|
||||||
|
|
||||||
|
|
||||||
def get_lists(account_id, token) -> dict:
|
def get_lists(account_id, token, timeout = 10) -> dict:
|
||||||
url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/lists"
|
url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/lists"
|
||||||
headers = {
|
headers = {
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
}
|
||||||
response = requests.get(url, headers=headers, timeout=10)
|
response = requests.get(url, headers=headers, timeout=timeout)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f"Error getting lists: {response.text}")
|
print(f"Error getting lists: {response.text}")
|
||||||
return response.json()["result"]
|
return response.json()["result"]
|
||||||
|
@ -111,13 +111,13 @@ def filter_adblock_lists(lists: dict) -> dict:
|
||||||
return adblock_lists
|
return adblock_lists
|
||||||
|
|
||||||
|
|
||||||
def get_gateway_rules(account_id, token) -> dict:
|
def get_gateway_rules(account_id, token, timeout = 10) -> dict:
|
||||||
url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules"
|
url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules"
|
||||||
headers = {
|
headers = {
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
}
|
||||||
response = requests.get(url, headers=headers, timeout=10)
|
response = requests.get(url, headers=headers, timeout=timeout)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f"Error getting lists: {response.text}")
|
print(f"Error getting lists: {response.text}")
|
||||||
return response.json()["result"]
|
return response.json()["result"]
|
||||||
|
|
Loading…
Reference in New Issue