fix: user limit

This commit is contained in:
Yoshino-s
2023-06-08 15:33:42 +08:00
parent 0a6d1f86b7
commit b130ce2b40
9 changed files with 191 additions and 12 deletions

77
generate.py Executable file
View File

@@ -0,0 +1,77 @@
#!/usr/bin/env python3
import jwt
from Crypto.PublicKey import ECC
REPLACE_TEMPLATE = '''
from sys import argv
public_key = bytes.fromhex(
"67186ade9d222c21b1be112009b7c43676aab17f1b8796682f88c8636dceaf2f")
new_public_key = bytes.fromhex(
"<NEW_KEY>")
with open(argv[1], "rb") as f:
data = f.read()
assert public_key in data
with open(argv[1], "wb") as f:
f.write(data.replace(public_key, new_public_key))
'''
def create_ed25519_pair(is_save=False):
f = ECC.generate(curve="ed25519")
private_key = f.export_key(format="PEM") # 生成私钥
public_key = f.public_key().export_key(format="PEM") # 生成公钥
if is_save:
with open("private.pem", "w") as f:
f.write(private_key)
with open("public.pem", "w") as f:
f.write(public_key)
return public_key, private_key
data = {
"exp": 1706356587,
"nbf": 1674820527,
"iat": 1674820527,
"license_expires": 1706356587,
"account_type": "salesforce",
"account_id": "1234567890",
"trial": False,
"all_features": True,
"version": 3,
"features": {
"appearance": 1,
"audit_log": 1,
"browser_only": 1,
"external_provisioner_daemons": 1,
"high_availability": 1,
"multiple_git_auth": 1,
"scim": 1,
"template_rbac": 1,
"user_limit": 114514
}
}
public_key, private_key = create_ed25519_pair(is_save=True)
with open("private.pem", "rb") as f:
private_key = f.read()
with open("public.pem", "rb") as f:
public_key = f.read()
encoded = jwt.encode(data, private_key, algorithm="EdDSA", headers={
"kid": "2022-08-12",
})
with open("lic.txt", "w") as f:
f.write(encoded)
with open("replace.py", "w") as f:
f.write(REPLACE_TEMPLATE.replace("<NEW_KEY>", ECC.import_key(
public_key).export_key(format="raw").hex()))

1
lic.txt Normal file
View File

@@ -0,0 +1 @@
eyJhbGciOiJFZERTQSIsImtpZCI6IjIwMjItMDgtMTIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE3MDYzNTY1ODcsIm5iZiI6MTY3NDgyMDUyNywiaWF0IjoxNjc0ODIwNTI3LCJsaWNlbnNlX2V4cGlyZXMiOjE3MDYzNTY1ODcsImFjY291bnRfdHlwZSI6InNhbGVzZm9yY2UiLCJhY2NvdW50X2lkIjoiMTIzNDU2Nzg5MCIsInRyaWFsIjpmYWxzZSwiYWxsX2ZlYXR1cmVzIjp0cnVlLCJ2ZXJzaW9uIjozLCJmZWF0dXJlcyI6eyJhcHBlYXJhbmNlIjoxLCJhdWRpdF9sb2ciOjEsImJyb3dzZXJfb25seSI6MSwiZXh0ZXJuYWxfcHJvdmlzaW9uZXJfZGFlbW9ucyI6MSwiaGlnaF9hdmFpbGFiaWxpdHkiOjEsIm11bHRpcGxlX2dpdF9hdXRoIjoxLCJzY2ltIjoxLCJ0ZW1wbGF0ZV9yYmFjIjoxLCJ1c2VyX2xpbWl0IjoxMTQ1MTR9fQ.4SaSTTOz5AuH8X8044hObulxdgOYXHn5C7PECzCTPzU3eZIUQIX0rxm2AsfJ3yQM5DdrTLh5YVlb090KrI2DDA

66
poetry.lock generated
View File

@@ -399,6 +399,64 @@ files = [
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
]
[[package]]
name = "pycryptodome"
version = "3.18.0"
description = "Cryptographic library for Python"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
files = [
{file = "pycryptodome-3.18.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54"},
{file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024"},
{file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148"},
{file = "pycryptodome-3.18.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2"},
{file = "pycryptodome-3.18.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27"},
{file = "pycryptodome-3.18.0-cp27-cp27m-win32.whl", hash = "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf"},
{file = "pycryptodome-3.18.0-cp27-cp27m-win_amd64.whl", hash = "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4"},
{file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944"},
{file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918"},
{file = "pycryptodome-3.18.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e"},
{file = "pycryptodome-3.18.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14"},
{file = "pycryptodome-3.18.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1"},
{file = "pycryptodome-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb"},
{file = "pycryptodome-3.18.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6"},
{file = "pycryptodome-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf"},
{file = "pycryptodome-3.18.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4"},
{file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2"},
{file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e"},
{file = "pycryptodome-3.18.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f"},
{file = "pycryptodome-3.18.0-cp35-abi3-win32.whl", hash = "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3"},
{file = "pycryptodome-3.18.0-cp35-abi3-win_amd64.whl", hash = "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9"},
{file = "pycryptodome-3.18.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec"},
{file = "pycryptodome-3.18.0-pp27-pypy_73-win32.whl", hash = "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08"},
{file = "pycryptodome-3.18.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b"},
{file = "pycryptodome-3.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825"},
{file = "pycryptodome-3.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403"},
{file = "pycryptodome-3.18.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c"},
{file = "pycryptodome-3.18.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb"},
{file = "pycryptodome-3.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2"},
{file = "pycryptodome-3.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec"},
{file = "pycryptodome-3.18.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380"},
{file = "pycryptodome-3.18.0.tar.gz", hash = "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413"},
]
[[package]]
name = "pyjwt"
version = "2.7.0"
description = "JSON Web Token implementation in Python"
optional = false
python-versions = ">=3.7"
files = [
{file = "PyJWT-2.7.0-py3-none-any.whl", hash = "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1"},
{file = "PyJWT-2.7.0.tar.gz", hash = "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074"},
]
[package.extras]
crypto = ["cryptography (>=3.4.0)"]
dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"]
docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"]
tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
[[package]]
name = "python-dxf"
version = "11.1.1"
@@ -523,13 +581,13 @@ telegram = ["requests"]
[[package]]
name = "urllib3"
version = "2.0.2"
version = "2.0.3"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.7"
files = [
{file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"},
{file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"},
{file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"},
{file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"},
]
[package.extras]
@@ -655,4 +713,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
content-hash = "e41ea2ea50dd7d4443c8fe88f97e461e455a741a1287b40f33a3c3eae2273949"
content-hash = "fe6451f1477503e299668687b5ca10f19175790e36757426c3128ee98afa27f1"

3
private.pem Normal file
View File

@@ -0,0 +1,3 @@
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIGfUStJNG34iEU2qzhCN0UZMUvkxTZfB+ExmSJuajWF1
-----END PRIVATE KEY-----

3
public.pem Normal file
View File

@@ -0,0 +1,3 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAhlPYC6sti527iM0ODr6bmfWI1ClaWZ1LaPFpauQBd+8=
-----END PUBLIC KEY-----

View File

@@ -13,6 +13,8 @@ python-dxf = "^11.1.1"
[tool.poetry.group.dev.dependencies]
pre-commit = "^3.3.2"
autopep8 = "^2.0.2"
pycryptodome = "^3.18.0"
pyjwt = "^2.7.0"
[build-system]
requires = ["poetry-core"]

View File

@@ -1,11 +1,10 @@
# token: eyJhbGciOiJFZERTQSIsImtpZCI6IjIwMjItMDgtMTIiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJ0ZXN0QHRlc3RpbmcudGVzdCIsImV4cCI6MTcwNjM1NjU4NywibmJmIjoxNjc0ODIwNTI3LCJpYXQiOjE2NzQ4MjA1MjcsImxpY2Vuc2VfZXhwaXJlcyI6MTcwNjM1NjU4NywiYWNjb3VudF90eXBlIjoic2FsZXNmb3JjZSIsImFjY291bnRfaWQiOiIxMjM0NTY3ODkwIiwidHJpYWwiOmZhbHNlLCJhbGxfZmVhdHVyZXMiOnRydWUsInZlcnNpb24iOjMsImZlYXR1cmVzIjp7ImFwcGVhcmFuY2UiOjEsImF1ZGl0X2xvZyI6MSwiYnJvd3Nlcl9vbmx5IjoxLCJleHRlcm5hbF9wcm92aXNpb25lcl9kYWVtb25zIjoxLCJoaWdoX2F2YWlsYWJpbGl0eSI6MSwibXVsdGlwbGVfZ2l0X2F1dGgiOjEsInNjaW0iOjEsInRlbXBsYXRlX3JiYWMiOjEsInVzZXJfbGltaXQiOjF9fQ.ry5C5C1ymqL1NLj3zbASYi44Pn-impuQFlk50gWEBIWwFvmXxNgfTkpXxajEGTQe3mZ7CC8tCABviNgtzsaRDQ
from sys import argv
public_key = bytes.fromhex(
"67186ade9d222c21b1be112009b7c43676aab17f1b8796682f88c8636dceaf2f")
new_public_key = bytes.fromhex(
"011c247acf8d1953b51868f93d2fd5ca6406cb5e356f8e80ab5431420423d42e")
"8653d80bab2d8b9dbb88cd0e0ebe9b99f588d4295a599d4b68f1696ae40177ef")
with open(argv[1], "rb") as f:

View File

@@ -203,6 +203,42 @@ pycodestyle==2.10.0 ; python_version >= "3.11" and python_version < "4.0" \
pycparser==2.21 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
--hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
pycryptodome==3.18.0 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb \
--hash=sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6 \
--hash=sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403 \
--hash=sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148 \
--hash=sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4 \
--hash=sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825 \
--hash=sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2 \
--hash=sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14 \
--hash=sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c \
--hash=sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4 \
--hash=sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2 \
--hash=sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb \
--hash=sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf \
--hash=sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec \
--hash=sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918 \
--hash=sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3 \
--hash=sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944 \
--hash=sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e \
--hash=sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024 \
--hash=sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f \
--hash=sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1 \
--hash=sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380 \
--hash=sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9 \
--hash=sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e \
--hash=sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413 \
--hash=sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec \
--hash=sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54 \
--hash=sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2 \
--hash=sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27 \
--hash=sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b \
--hash=sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf \
--hash=sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08
pyjwt==2.7.0 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1 \
--hash=sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074
python-dxf==11.1.1 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:0027b685013a0fd5527ccca73b5de99ebefb36c1d617a3a017c6b7c587d5f746
pyyaml==6.0 ; python_version >= "3.11" and python_version < "4.0" \
@@ -255,9 +291,9 @@ setuptools==67.8.0 ; python_version >= "3.11" and python_version < "4.0" \
tqdm==4.65.0 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5 \
--hash=sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671
urllib3==2.0.2 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc \
--hash=sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e
urllib3==2.0.3 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1 \
--hash=sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825
virtualenv==20.23.0 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e \
--hash=sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924

View File

@@ -184,9 +184,9 @@ requests==2.31.0 ; python_version >= "3.11" and python_version < "4.0" \
tqdm==4.65.0 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5 \
--hash=sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671
urllib3==2.0.2 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc \
--hash=sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e
urllib3==2.0.3 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1 \
--hash=sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825
wrapt==1.15.0 ; python_version >= "3.11" and python_version < "4.0" \
--hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \
--hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \