diff --git a/.codecov.yml b/.codecov.yml index 9ec7ff8..d9edfbf 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -3,3 +3,6 @@ coverage: project: default: target: 90% + patch: + default: + target: 80% diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..4e3adcc --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +max-line-length = 88 +ignore = E501, E203, W503 \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 822b66b..a54644a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,15 +1,15 @@ **⚠ Pull Requests not made with this template will be automatically closed 🔥** -# Prerequisites +## Prerequisites - [ ] Have you read the documentation on contributing? https://github.com/bee-san/pyWhat/wiki/Adding-your-own-Regex -# Why do we need this pull request? +## Why do we need this pull request? * Explain the _why_ behind your PR. We can see what it does from the code. But _why_ does it do that? -# What [GitHub issues](https://github.com/bee-san/pyWhat/issues) does this fix? +## What [GitHub issues](https://github.com/bee-san/pyWhat/issues) does this fix? * Fixes #10000 -# Copy / paste of output +## Copy / paste of output Please copy and paste the output of PyWhat with your new addition using an example that tests this addition below: diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 0064b7a..dbd4de4 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -6,7 +6,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.6', '3.7', '3.8', '3.9'] + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] os: [ubuntu-latest, windows-latest, macos-latest] exclude: - os: macos-latest @@ -19,8 +19,7 @@ jobs: with: python-version: ${{ matrix.python-version }} architecture: x64 - - run: python -m pip install flake8 nox poetry - - run: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + - run: python -m pip install nox poetry - run: python -m nox env: OS: ${{ matrix.os }} diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..0ca5a9a --- /dev/null +++ b/conftest.py @@ -0,0 +1,6 @@ +import logging + + +def pytest_configure(config): + # Silence Flake8 warnings + logging.getLogger("flake8").setLevel(logging.ERROR) diff --git a/fixtures/file b/fixtures/file index 1101af0..99df774 100644 --- a/fixtures/file +++ b/fixtures/file @@ -95,4 +95,11 @@ b2ced6f5-2542-4f7d-b131-e3ada95d8b75 otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example -sshpass -p MyPassw0RD! ssh root@10.0.0.10 \ No newline at end of file +sshpass -p MyPassw0RD! ssh root@10.0.0.10 + +https://hooks.slack.com/services/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 + +doi:10.1392/BC1.0 +10.1000/123 + +a80122b2565c3e26a61cbf58d1d1aad7-us5 diff --git a/noxfile.py b/noxfile.py index aa327e8..4c794f4 100644 --- a/noxfile.py +++ b/noxfile.py @@ -46,6 +46,7 @@ def tests(session: Session) -> None: "pytest-black", "pytest-cov", "pytest-isort", + "pytest-flake8", "pytest-mypy", "types-requests", "types-orjson", diff --git a/poetry.lock b/poetry.lock index 5e53cbe..688755d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -51,7 +51,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2021.5.30" +version = "2021.10.8" description = "Python package for providing Mozilla's CA Bundle." category = "dev" optional = false @@ -59,7 +59,7 @@ python-versions = "*" [[package]] name = "charset-normalizer" -version = "2.0.6" +version = "2.0.7" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false @@ -105,7 +105,7 @@ python-versions = ">=3.6, <3.7" [[package]] name = "filelock" -version = "3.3.0" +version = "3.3.1" description = "A platform independent file lock." category = "dev" optional = false @@ -117,21 +117,21 @@ testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-co [[package]] name = "flake8" -version = "3.8.4" +version = "3.9.2" description = "the modular source code checker: pep8 pyflakes and co" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.6.0a1,<2.7.0" -pyflakes = ">=2.2.0,<2.3.0" +pycodestyle = ">=2.7.0,<2.8.0" +pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "idna" -version = "3.2" +version = "3.3" description = "Internationalized Domain Names in Applications (IDNA)" category = "dev" optional = false @@ -274,7 +274,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pycodestyle" -version = "2.6.0" +version = "2.7.0" description = "Python style guide checker" category = "dev" optional = false @@ -282,7 +282,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pyflakes" -version = "2.2.0" +version = "2.3.1" description = "passive checker of Python programs" category = "dev" optional = false @@ -339,6 +339,18 @@ black = {version = "*", markers = "python_version >= \"3.6\""} pytest = ">=3.5.0" toml = "*" +[[package]] +name = "pytest-flake8" +version = "1.0.7" +description = "pytest plugin to check FLAKE8 requirements" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +flake8 = ">=3.5" +pytest = ">=3.5" + [[package]] name = "pytest-isort" version = "2.0.0" @@ -373,7 +385,7 @@ pytest = ">=3.5" [[package]] name = "regex" -version = "2021.9.30" +version = "2021.10.21" description = "Alternative regular expression module, to replace re." category = "dev" optional = false @@ -441,7 +453,7 @@ python-versions = "*" [[package]] name = "types-orjson" -version = "3.6.0" +version = "3.6.1" description = "Typing stubs for orjson" category = "dev" optional = false @@ -449,7 +461,7 @@ python-versions = "*" [[package]] name = "types-requests" -version = "2.25.9" +version = "2.25.11" description = "Typing stubs for requests" category = "dev" optional = false @@ -494,7 +506,7 @@ optimize = ["orjson"] [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "a78669cf63b492bdde411ba7e3bebbcc2dfb468d740ae134c815ea6792195698" +content-hash = "cd8b175220ef5cc8a972320cb9cd194e5216d32559f1bee09c486ee8e16503f8" [metadata.files] atomicwrites = [ @@ -510,12 +522,12 @@ black = [ {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, ] certifi = [ - {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, - {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"}, - {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"}, + {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"}, + {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -534,16 +546,16 @@ dataclasses = [ {file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"}, ] filelock = [ - {file = "filelock-3.3.0-py3-none-any.whl", hash = "sha256:bbc6a0382fe8ec4744ecdf6683a2e07f65eb10ff1aff53fc02a202565446cde0"}, - {file = "filelock-3.3.0.tar.gz", hash = "sha256:8c7eab13dc442dc249e95158bcc12dec724465919bdc9831fdbf0660f03d1785"}, + {file = "filelock-3.3.1-py3-none-any.whl", hash = "sha256:2b5eb3589e7fdda14599e7eb1a50e09b4cc14f34ed98b8ba56d33bfaafcbef2f"}, + {file = "filelock-3.3.1.tar.gz", hash = "sha256:34a9f35f95c441e7b38209775d6e0337f9a3759f3565f6c5798f19618527c76f"}, ] flake8 = [ - {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, - {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, + {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, + {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, ] idna = [ - {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, - {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] importlib-metadata = [ {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"}, @@ -640,12 +652,12 @@ py = [ {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pycodestyle = [ - {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, - {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] pyflakes = [ - {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, - {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, + {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, + {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, ] pygments = [ {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, @@ -662,6 +674,10 @@ pytest = [ pytest-black = [ {file = "pytest-black-0.3.12.tar.gz", hash = "sha256:1d339b004f764d6cd0f06e690f6dd748df3d62e6fe1a692d6a5500ac2c5b75a5"}, ] +pytest-flake8 = [ + {file = "pytest-flake8-1.0.7.tar.gz", hash = "sha256:f0259761a903563f33d6f099914afef339c085085e643bee8343eb323b32dd6b"}, + {file = "pytest_flake8-1.0.7-py2.py3-none-any.whl", hash = "sha256:c28cf23e7d359753c896745fd4ba859495d02e16c84bac36caa8b1eec58f5bc1"}, +] pytest-isort = [ {file = "pytest-isort-2.0.0.tar.gz", hash = "sha256:821a8c5c9c4f3a3c52cfa9c541fbe89ac9e28728125125af53724c4c3f129117"}, {file = "pytest_isort-2.0.0-py3-none-any.whl", hash = "sha256:ab949c593213dad38ba75db32a0ce361fcddd11d4152be4a2c93b85104cc4376"}, @@ -671,47 +687,42 @@ pytest-mypy = [ {file = "pytest_mypy-0.8.1-py3-none-any.whl", hash = "sha256:6e68e8eb7ceeb7d1c83a1590912f784879f037b51adfb9c17b95c6b2fc57466b"}, ] regex = [ - {file = "regex-2021.9.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66696c8336a1b5d1182464f3af3427cc760118f26d0b09a2ddc16a976a4d2637"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d87459ad3ab40cd8493774f8a454b2e490d8e729e7e402a0625867a983e4e02"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cf6a1e023caf5e9a982f5377414e1aeac55198831b852835732cfd0a0ca5ff"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:255791523f80ea8e48e79af7120b4697ef3b74f6886995dcdb08c41f8e516be0"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e502f8d4e5ef714bcc2c94d499684890c94239526d61fdf1096547db91ca6aa6"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4907fb0f9b9309a5bded72343e675a252c2589a41871874feace9a05a540241e"}, - {file = "regex-2021.9.30-cp310-cp310-win32.whl", hash = "sha256:3be40f720af170a6b20ddd2ad7904c58b13d2b56f6734ee5d09bbdeed2fa4816"}, - {file = "regex-2021.9.30-cp310-cp310-win_amd64.whl", hash = "sha256:c2b180ed30856dfa70cfe927b0fd38e6b68198a03039abdbeb1f2029758d87e7"}, - {file = "regex-2021.9.30-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6f2d2f93001801296fe3ca86515eb04915472b5380d4d8752f09f25f0b9b0ed"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fa7ba9ab2eba7284e0d7d94f61df7af86015b0398e123331362270d71fab0b9"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28040e89a04b60d579c69095c509a4f6a1a5379cd865258e3a186b7105de72c6"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f588209d3e4797882cd238195c175290dbc501973b10a581086b5c6bcd095ffb"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42952d325439ef223e4e9db7ee6d9087b5c68c5c15b1f9de68e990837682fc7b"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cae4099031d80703954c39680323dabd87a69b21262303160776aa0e55970ca0"}, - {file = "regex-2021.9.30-cp36-cp36m-win32.whl", hash = "sha256:0de8ad66b08c3e673b61981b9e3626f8784d5564f8c3928e2ad408c0eb5ac38c"}, - {file = "regex-2021.9.30-cp36-cp36m-win_amd64.whl", hash = "sha256:b345ecde37c86dd7084c62954468a4a655fd2d24fd9b237949dd07a4d0dd6f4c"}, - {file = "regex-2021.9.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6f08187136f11e430638c2c66e1db091105d7c2e9902489f0dbc69b44c222b4"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b55442650f541d195a535ccec33078c78a9521973fb960923da7515e9ed78fa6"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87e9c489aa98f50f367fb26cc9c8908d668e9228d327644d7aa568d47e456f47"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2cb7d4909ed16ed35729d38af585673f1f0833e73dfdf0c18e5be0061107b99"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0861e7f6325e821d5c40514c551fd538b292f8cc3960086e73491b9c5d8291d"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:81fdc90f999b2147fc62e303440c424c47e5573a9b615ed5d43a5b832efcca9e"}, - {file = "regex-2021.9.30-cp37-cp37m-win32.whl", hash = "sha256:8c1ad61fa024195136a6b7b89538030bd00df15f90ac177ca278df9b2386c96f"}, - {file = "regex-2021.9.30-cp37-cp37m-win_amd64.whl", hash = "sha256:e3770781353a4886b68ef10cec31c1f61e8e3a0be5f213c2bb15a86efd999bc4"}, - {file = "regex-2021.9.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c065d95a514a06b92a5026766d72ac91bfabf581adb5b29bc5c91d4b3ee9b83"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9925985be05d54b3d25fd6c1ea8e50ff1f7c2744c75bdc4d3b45c790afa2bcb3"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470f2c882f2672d8eeda8ab27992aec277c067d280b52541357e1acd7e606dae"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad0517df22a97f1da20d8f1c8cb71a5d1997fa383326b81f9cf22c9dadfbdf34"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e30838df7bfd20db6466fd309d9b580d32855f8e2c2e6d74cf9da27dcd9b63"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b34d2335d6aedec7dcadd3f8283b9682fadad8b9b008da8788d2fce76125ebe"}, - {file = "regex-2021.9.30-cp38-cp38-win32.whl", hash = "sha256:e07049cece3462c626d650e8bf42ddbca3abf4aa08155002c28cb6d9a5a281e2"}, - {file = "regex-2021.9.30-cp38-cp38-win_amd64.whl", hash = "sha256:37868075eda024470bd0feab872c692ac4ee29db1e14baec103257bf6cc64346"}, - {file = "regex-2021.9.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d331f238a7accfbbe1c4cd1ba610d4c087b206353539331e32a8f05345c74aec"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6348a7ab2a502cbdd0b7fd0496d614007489adb7361956b38044d1d588e66e04"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b1cca6c23f19bee8dc40228d9c314d86d1e51996b86f924aca302fc8f8bf9"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1f1125bc5172ab3a049bc6f4b9c0aae95a2a2001a77e6d6e4239fa3653e202b5"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:638e98d069b14113e8afba6a54d1ca123f712c0d105e67c1f9211b2a825ef926"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a0b0db6b49da7fa37ca8eddf9f40a8dbc599bad43e64f452284f37b6c34d91c"}, - {file = "regex-2021.9.30-cp39-cp39-win32.whl", hash = "sha256:9910869c472e5a6728680ca357b5846546cbbd2ab3ad5bef986ef0bc438d0aa6"}, - {file = "regex-2021.9.30-cp39-cp39-win_amd64.whl", hash = "sha256:3b71213ec3bad9a5a02e049f2ec86b3d7c3e350129ae0f4e2f99c12b5da919ed"}, - {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, + {file = "regex-2021.10.21-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:edff4e31d159672a7b9d70164b21289e4b53b239ce1dc945bf9643d266537573"}, + {file = "regex-2021.10.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6432daf42f2c487b357e1aa0bdc43193f050ff53a3188bfab20b88202b53027"}, + {file = "regex-2021.10.21-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:468de52dd3f20187ab5ca4fd265c1bea61a5346baef01ad0333a5e89fa9fad29"}, + {file = "regex-2021.10.21-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5a2ac760f2fc13a1c58131ec217779911890899ce1a0a63c9409bd23fecde6f"}, + {file = "regex-2021.10.21-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ad1fedca001fefc3030d1e9022b038af429e58dc06a7e9c55e40bd1f834582ec"}, + {file = "regex-2021.10.21-cp310-cp310-win32.whl", hash = "sha256:9c613d797a3790f6b12e78a61e1cd29df7fc88135218467cf8b0891353292b9c"}, + {file = "regex-2021.10.21-cp310-cp310-win_amd64.whl", hash = "sha256:678d9a4ce79e1eaa4ebe88bc9769df52919eb30c597576a0deba1f3cf2360e65"}, + {file = "regex-2021.10.21-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2044174af237bb9c56ecc07294cf38623ee379e8dca14b01e970f8b015c71917"}, + {file = "regex-2021.10.21-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98743a2d827a135bf3390452be18d95839b947a099734d53c17e09a64fc09480"}, + {file = "regex-2021.10.21-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f1b23304855303bd97b5954edab63b8ddd56c91c41c6d4eba408228c0bae95f3"}, + {file = "regex-2021.10.21-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19c4fd59747236423016ccd89b9a6485d958bf1aa7a8a902a6ba28029107a87f"}, + {file = "regex-2021.10.21-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:130a002fa386c976615a2f6d6dff0fcc25da24858994a36b14d2e3129dce7de2"}, + {file = "regex-2021.10.21-cp36-cp36m-win32.whl", hash = "sha256:8bd83d9b8ee125350cd666b55294f4bc9993c4f0d9b1be9344a318d0762e94cc"}, + {file = "regex-2021.10.21-cp36-cp36m-win_amd64.whl", hash = "sha256:98fe0e1b07a314f0a86dc58af4e717c379d48a403eddd8d966ab9b8bf91ce164"}, + {file = "regex-2021.10.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ded4748c7be6f31fb207387ee83a3a0f625e700defe32f268cb1d350ed6e4a66"}, + {file = "regex-2021.10.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3da121de36a9ead0f32b44ea720ee8c87edbb59dca6bb980d18377d84ad58a3"}, + {file = "regex-2021.10.21-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9dfba513eae785e3d868803f5a7e21a032cb2b038fa4a1ea7ec691037426ad3"}, + {file = "regex-2021.10.21-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ff91696888755e96230138355cbe8ce2965d930d967d6cff7c636082d038c78"}, + {file = "regex-2021.10.21-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0f82de529d7595011a40573cc0f27422e59cafa94943b64a4d17d966d75f2c01"}, + {file = "regex-2021.10.21-cp37-cp37m-win32.whl", hash = "sha256:164e51ace4d00f07c519f85ec2209e8faaeab18bc77be6b35685c18d4ac1c22a"}, + {file = "regex-2021.10.21-cp37-cp37m-win_amd64.whl", hash = "sha256:e39eafa854e469d7225066c806c76b9a0acba5ff5ce36c82c0224b75e24888f2"}, + {file = "regex-2021.10.21-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:740a28580520b099b804776db1e919360fcbf30a734a14c5985d5e39a39e7237"}, + {file = "regex-2021.10.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de7dbf72ae80f06e79444ff9614fb5e3a7956645d513b0e12d1bbe6f3ccebd11"}, + {file = "regex-2021.10.21-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dc1a9bedf389bf3d3627a4d2b21cbdc5fe5e0f029d1f465972f4437833dcc946"}, + {file = "regex-2021.10.21-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cd14f22425beecf727f6dbdf5c893e46ecbc5ff16197c16a6f38a9066f2d4d5"}, + {file = "regex-2021.10.21-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b75a3db3aab0bfa51b6af3f820760779d360eb79f59e32c88c7fba648990b4f"}, + {file = "regex-2021.10.21-cp38-cp38-win32.whl", hash = "sha256:f68c71aabb10b1352a06515e25a425a703ba85660ae04cf074da5eb91c0af5e5"}, + {file = "regex-2021.10.21-cp38-cp38-win_amd64.whl", hash = "sha256:c0f49f1f03be3e4a5faaadc35db7afa2b83a871943b889f9f7bba56e0e2e8bd5"}, + {file = "regex-2021.10.21-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:201890fdc8a65396cfb6aa4493201353b2a6378e27d2de65234446f8329233cb"}, + {file = "regex-2021.10.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1bfc6b7347de9f0ae1fb6f9080426bed6a9ca55b5766fa4fdf7b3a29ccae9c"}, + {file = "regex-2021.10.21-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:72a0b98d41c4508ed23a96eef41090f78630b44ba746e28cd621ecbe961e0a16"}, + {file = "regex-2021.10.21-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b5a0660a63b0703380758a7141b96cc1c1a13dee2b8e9c280a2522962fd12af"}, + {file = "regex-2021.10.21-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f82d3adde46ac9188db3aa7e6e1690865ebb6448d245df5a3ea22284f70d9e46"}, + {file = "regex-2021.10.21-cp39-cp39-win32.whl", hash = "sha256:bc4637390235f1e3e2fcdd3e904ca0b42aa655ae28a78072248b2992b4ad4c08"}, + {file = "regex-2021.10.21-cp39-cp39-win_amd64.whl", hash = "sha256:74d03c256cf0aed81997e87be8e24297b5792c9718f3a735f5055ddfad392f06"}, + {file = "regex-2021.10.21.tar.gz", hash = "sha256:4832736b3f24617e63dc919ce8c4215680ba94250a5d9e710fcc0c5f457b5028"}, ] requests = [ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, @@ -762,12 +773,12 @@ typed-ast = [ {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, ] types-orjson = [ - {file = "types-orjson-3.6.0.tar.gz", hash = "sha256:e8513f75886a13e6061f5658d53d57d97b3af20cb9c3dcee09e31793f3cee28f"}, - {file = "types_orjson-3.6.0-py3-none-any.whl", hash = "sha256:cdbc920c1354a2b54f2b96ffd95523bbfecdd645063ac5ab40915d0680880d8d"}, + {file = "types-orjson-3.6.1.tar.gz", hash = "sha256:6bc2245b242c9ab4c8845495a4c16a51fa22510c8ac1d83da027ab3ce1f77d8a"}, + {file = "types_orjson-3.6.1-py3-none-any.whl", hash = "sha256:b3e991dd05fc6571a423996cbde37183123983783db64c5bc53e985ae32c7176"}, ] types-requests = [ - {file = "types-requests-2.25.9.tar.gz", hash = "sha256:4ec8b71da73e5344adb9bee725a74ec8598e7286f9bcb17500d627f259fe4fb9"}, - {file = "types_requests-2.25.9-py3-none-any.whl", hash = "sha256:543ba8b3b23e38ac028da1d163aecbbc27d3cc8f654ae64339da539a191a2b1c"}, + {file = "types-requests-2.25.11.tar.gz", hash = "sha256:b279284e51f668e38ee12d9665e4d789089f532dc2a0be4a1508ca0efd98ba9e"}, + {file = "types_requests-2.25.11-py3-none-any.whl", hash = "sha256:ba1d108d512e294b6080c37f6ae7cb2a2abf527560e2b671d1786c1fc46b541a"}, ] typing-extensions = [ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, diff --git a/pyproject.toml b/pyproject.toml index d8ab60e..ccbcffc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pywhat" -version = "4.3.1" +version = "5.0.0" description = "What is that thing?" authors = ["Bee "] license = "MIT" @@ -14,13 +14,14 @@ rich = ">=9.9,<11.0" orjson = {version = "^3.6.1", optional = true} [tool.poetry.dev-dependencies] -pytest = "^6.2.4" -black = {version = "^21.6b0", python = "^3.6.2"} -isort = {version = "^5.9.2", python = "^3.6.1"} -flake8 = "3.8.4" +pytest = "^6.2.5" +black = {version = "^21.9b0", python = "^3.6.2"} +isort = {version = "^5.9.3", python = "^3.6.1"} +flake8 = "<4.0" requests = "^2.26.0" pytest-black = "^0.3.12" pytest-isort = "^2.0.0" +pytest-flake8 = "^1.0.7" pytest-mypy = "^0.8.1" types-requests = "^2.25.9" types-orjson = "^3.6.0" @@ -49,4 +50,4 @@ line_length = 88 ignore_missing_imports = true [tool.pytest.ini_options] -addopts = "--black --isort --mypy" +addopts = "--black --isort --flake8 --mypy" diff --git a/pywhat/Data/regex.json b/pywhat/Data/regex.json index 0d06164..b8ff4f1 100644 --- a/pywhat/Data/regex.json +++ b/pywhat/Data/regex.json @@ -8,7 +8,13 @@ "URL": null, "Tags": [ "PGP" - ] + ], + "Examples": { + "Valid": [ + "-----BEGIN PGP PUBLIC KEY BLOCK-----Comment: Alice's OpenPGP certificateComment: https://www.ietf.org/id/draft-bre-openpgp-samples-01.htmlmDMEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/Ub7O1u120JkFsaWNlIExvdmVsYWNlIDxhbGljZUBvcGVucGdwLmV4YW1wbGU+iJAEExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXaWfOgAKCRDyMVUMT0fjjukrAPoDnHBSogOmsHOsd9qGsiZpgRnOdypvbm+QtXZqth9rvwD9HcDC0tC+PHAsO7OTh1S1TC9RiJsvawAfCPaQZoed8gK4OARcRwTpEgorBgEEAZdVAQUBAQdAQv8GIa2rSTzgqbXCpDDYMiKRVitCsy203x3sE9+eviIDAQgHiHgEGBYIACAWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXEcE6QIbDAAKCRDyMVUMT0fjjlnQAQDFHUs6TIcxrNTtEZFjUFm1M0PJ1Dng/cDW4xN80fsn0QEA22Kr7VkCjeAEC08VSTeV+QFsmz55/lntWkwYWhmvOgE==iIGO-----END PGP PUBLIC KEY BLOCK-----" + ], + "Invalid": [] + } }, { "Name": "PGP Private Key", @@ -20,7 +26,13 @@ "Tags": [ "PGP", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "-----BEGIN PGP PRIVATE KEY BLOCK-----Comment: Alice's OpenPGP Transferable Secret KeyComment: https://www.ietf.org/id/draft-bre-openpgp-samples-01.htmllFgEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/Ub7O1u10AAP9XBeW6lzGOLx7zHH9AsUDUTb2pggYGMzd0P3ulJ2AfvQ4RtCZBbGljZSBMb3ZlbGFjZSA8YWxpY2VAb3BlbnBncC5leGFtcGxlPoiQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE64W7X6M6deFelE5j8jFVDE9H444FAl2lnzoACgkQ8jFVDE9H447pKwD6A5xwUqIDprBzrHfahrImaYEZzncqb25vkLV2arYfa78A/R3AwtLQvjxwLDuzk4dUtUwvUYibL2sAHwj2kGaHnfICnF0EXEcE6RIKKwYBBAGXVQEFAQEHQEL/BiGtq0k84Km1wqQw2DIikVYrQrMttN8d7BPfnr4iAwEIBwAA/3/xFPG6U17rhTuq+07gmEvaFYKfxRB6sgAYiW6TMTpQEK6IeAQYFggAIBYhBOuFu1+jOnXhXpROY/IxVQxPR+OOBQJcRwTpAhsMAAoJEPIxVQxPR+OOWdABAMUdSzpMhzGs1O0RkWNQWbUzQ8nUOeD9wNbjE3zR+yfRAQDbYqvtWQKN4AQLTxVJN5X5AWybPnn+We1aTBhaGa86AQ===n8OM-----END PGP PRIVATE KEY BLOCK-----" + ], + "Invalid": [] + } }, { "Name": "SSH RSA Public Key", @@ -32,7 +44,13 @@ "Tags": [ "Credentials", "SSH Public Key" - ] + ], + "Examples": { + "Valid": [ + "ssh-rsa AAAAB3NzaC1tc2EAAAADAQABAAACAQDrnjkGtf3iA46rtwsvRiscvMTCw30l5Mmln/sf8Wohg4RPc7nuIx3/fB86K9jzBNoQk6Fb00p2cSW0dX6c3OTL5R5Q0rBjOFy6GV07MkS7rXa7WYh4ObxBh+M+LEzxVIw29anzQFZkR0TAf6x2rBoErK7JYU4fyqFBDFupTt3coQDPEEmVwtLLUCEnJrurbbnJKcWJ+/FbItLxYyMLPl8TwEn0iqiJ97onCU2DuBtiYv3hp1WoEH08b5WDF0F04zEPRdJT+WisxlEFRgaj51o2BtjOC+D2qZQDb4LHaAfJ0WcO4nu7YocdlcLp2JPfXKKgu9P5J8UDsmXbR3KCJ1oddFa2R6TbHc6d2hKyG4amBzMX5ltxXu7D6FLPZlFqua8YooY7A2zwIVirOUH/cfx+5O9o0CtspkNmj/iYzN0FPaOpELncWsuauy9hrGql/1cF4SUr20zHFoBoDQUtmvmBnWnKoGfpWXzuda449FVtmcrEjvBzCvCb3RStu0BbyOOybJagbKif3MkcYVO10pRbTveIUwgCD6F3ypD11XztoPNsgScmjme0sj/KWWNLyQkLWtpJEQ4k46745NAC5g+nP28TR2JM8doeqsxA8JovQkLWwDcR+WYZu2z/I8dfhOmalnoMRTJ2NzWDc0OSkKGYWjexR4fN6lAKCUOUptl9Nw== r00t@my-random_host" + ], + "Invalid": [] + } }, { "Name": "PEM-formatted Private Key", @@ -44,7 +62,18 @@ "Tags": [ "Credentials", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "-----BEGIN RSA PRIVATE KEY-----MIIEoQIBAAKCAQBYNGcp1Jm7GOGffs9wvpIsi9RKPE/a4usQyEdf8G2C0pLcOoypfG1MiOQCDDRN4HtMDoe9KTVjVnnREfmQq2k1hT1BZHfaRu/3YvpFrleozzYmY1XRSeUiM6G71ADg8cPZlAuH1RjswlevJyhNVWzy+DLumpbRgv6nKR9dYSdy2GsFySX488l05+ZaVKgHwlGeKd33YNPRAUNLSPKLdd9wi1djGaQpSo7jWRb6lIFJUR7FdvxwjAVMhDljxXYHPP0GXFS6KTGcfB97dle90qu/4nwdKWd4RZ5pqIbFi1D5ejItUzY40GpsPuN/tkamwB5jY0AtFY8S9TMxHjRx05/DAgMBAAECggEAKU5pHYLNd3wAdTPqq27jf28APL+f2e64jIRuQHSUpFY+plnY86oseVIGDRtwByRgOU74rFI3CU0/APS8/c34GDNMa2pEYnkj+aNldupdbNWVE0cjsj47yteJHy/6NV2jDSqyd6sI4B9m9sSMsCKYQfSPzYOhq34ACYJNiOptke9PkxpNNODlFJrFQsRKKpv2KdF7Lh3/Yzc6p53gilYR9U+Sn4mBrkuURLm2Qq++r0CNTjpmbunbjAL5q/oK8bpJEz3uZqbSQ5GbSLCNroRyi7eIF1Evvk0Vb9nSyfm94VdP+yVr1VvtOt8WigHwAr8E+ujg0rrAKMswfbvNFroNMQKBgQCs/rQvlTfpRiHUlCB09HZzquM8o7pBxTpKAX9247SW81V41EHsIS69WGZzcYbYQlxOxQi7gHiALB/yRLFNiAHAhODFMGTYtprTdW/JK6TC8CPvK3TBnPSYDPP/ME2F2UZKVHWlD3FFtUqp9BppWCHDLp7N/+i5eJy+ankJYzeGywKBgQCChsDhaPJAnHp/zHJmhDXQkqVeoB8SW2WzH481xVgyu2gIsEGmgActfEAyCqRuzjnMSIjXBL5LSAZXft8d+wveR3PsUiVdUurbcrije1ku3jDPXdBQrjmyWZvCXXnZ8oqX18C05a0pgzX5oDluA1ShcI7uWNHkIPYcZskcp96z6QKBgG9gpP2lopOrtYg5vhPOeJzLvvWBrB9ALeELydbvj4tIKxVaAv9V9dOuIHfe9aQyRV/pd0/QzMQopIDEPSrfj9E1O8l4+NSV7GSMTWZFlRR0q44GemtU9B0Y6da4cJDmbFzat8uHf7QTnniBUqfUOBiD4XZbdqhCwRfPURH8MPm1AoGAWHZ9yQe4kAO9nlnw+vwGAQsymxRImsdpAOKVy+qpIREUrDbQ98hzlOdOFtxRn2uTjplmbNwhIKJ68dfh3c7kt0yUC4mNG1f0JrD05I/X3MToLdK2OcgrAG5s+2khCY6xUcH/MFstZiIwdbOa2K3XMOc5Z964ujWAt7UN/qbjb+kCgYBdPN6J1b6OuTt4xYTCenX+KlGBb9QsuK8uXMDkhJhrtcHAyuxyJrDjQu5i3djeZerflT0EESCet0zGPd5bGyP4KaIsmLwYheDLrziS6xqqXL0irMZiWVaVquC3JlWJMw6/Y66WRuxd+oRBbE62lHWnzT2J8dfG+su483KKgli02Q==-----END RSA PRIVATE KEY-----", + "-----BEGIN DSA PRIVATE KEY-----MIIDTgIBAAKCAQEAj3k12bmq6b+r7Yh6z0lRtvMuxZ47rzcY6OrElh8+/TYG50NRqcQYMzm4CefCrhxTm6dHW4XQEa24tHmHdUmEaVysDo8UszYIKKIv+icRCj1iqZNFNAmg/mlsRlj4S90ggZw3CaAQV7GVrc0AIz26VIS2KR+dZI74g0SGd5ec7AS0NKasLnXpmF3iPbApL8ERjJ/6nYGB5zONt5K3MNe540lZL2gJmHIVORXqPWuLRlPGM0WPgDsypMLg8nKQJW5OP4o7CDihxFDk4YwaKaN9316hQ95LZv8EkD7VzxYj4VjUh8YI6X8hHNgdyiPLbjgHZfgi40K+SEwFdjk5YBzWZwIdALr2lqaFePff3uf6Z8l3x4XvMrIzuuWAwLzVaV0CggEAFqZcWCBIUHBOdQKjl1cEDTTaOjR4wVTU5KXALSQu4E+W5h5L0JBKvayPN+6x4J8xgtI8kEPLZC+IAEFg7fnKCbMgdqecMqYn8kc+kYebosTnRL0ggVRMtVuALDaNH6g+1InpTg+gaI4yQopceMR4xo0FJ7ccmjq7CwvhLERoljnn08502xAaZaorh/ZMaCbbPscvS1WZg0u07bAvfJDppJbTpV1TW+v8RdT2GfY/Pe27hzklwvIk4HcxKW2oh+weR0j4fvtf3rdUhDFrIjLe5VPdrwIRKw0fAtowlzIk/ieu2oudSyki2bqL457Z4QOmPFKBC8aIt+LtQxbh7xfb3gKCAQB87fMOaF3zru0d3blONyvU4kEclm0i79Shdm2r2dBQo9ru8KdmbBoBS3qS7k//hEuLCCdHAKdLrz8cdbah8ONEVVu/HTDS5TKcm1W/czHch0NhYIfMFschQcEAcswOLjGoRGHl2SZb90pF2dxMxKEgi1QLoPRRX8UWpGy5+ghkaIBEUE31p4dS3vJ1EevQc3itZ2Sh7UcY3hQ8idYptzTwL9p7c4V/aWXLFbQdzJCSi1Q5fr85Uj2eFZTHliYe5ZrZ3R+nl1fbk/ySajbLD6RaTm/ppRfWRxyw3MWjKxPapeLFIsxm1A9rnDyfeEDg1Ixahaq0xLk46RwBo6ZblI0aAh0An8MAVnsLGjtDHBGIlDH+XXPsMkClXnYeBRUGAQ==-----END DSA PRIVATE KEY-----", + "-----BEGIN EC PRIVATE KEY-----MIHcAgEBBEIApe6jUvbal/QN6ZoQ9dZMe/pTx4CiFzd4ln9a5f0Ope+788+BwgLpl1888OThkaWMeg2wevZ/ErMId0T3kZGoE7mgBwYFK4EEACOhgYkDgYYABAE4SLWZJs6lE0bwYgMipcRxB1xtARXDwbPt3o7aDI7680kLnELXGYhIhGeXlhXgAXjE66GuM8TdbPsshqP9nRy9OAGbxJU/OA+7/zuZmo10IYWNu1IrcGYq0WZJwzZex+S12+VKVBEwPoLKlgm5r/sI8x7WnDtialy5i8ipkvUyOyPUxg==-----END EC PRIVATE KEY-----", + "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDaoE09/Cmh1T8I3J9lenqZ2pllw0WXAUrPi4pPV3jmJBsIsfpedZfakdI2ixw2XkWRayAklsxlFFtXCQ6U0yXSd7KJY9vuxb+5cMZejpOoHTZkVwxhlEodCt8DWf5tOc4UA5Ip88WYeszygxuIU6JP0bavJhtQnI5ER+0eZCY8xyNLqQ86h6iuxncAo5fxyc44IKFSm6MDh+GmHBlK5Eql536qfZtA6jMFYnORQ1gVp5J1hQ7bDmiLzFjyCvpNSYLOYbodvcCIWCSUKgp5Q5Uo0EX2h7mX6Z07ONCOQaFXfW3z5/xbn1bJKtI+JSNFS86owWb20EYcopnWwOimmsTXAgMBAAECggEAPW5Tpfon/Jg9+RB9HXeX4YliFw0SjcbILZ9JAthSWWCF1CCmeEpUnA7jYX4fNEuzApR2WLGixzg8Hi2mUj0uYIBPw3kywFoCcGn243Tumoty0CkBip2vYY+/cGKmMizO8iK6vF0KBbljwzUB1IGjlwgXbAmqHTGQbDFFuIdtkx/ggns9X/wNNqK7UPaJoYvlv/YX10/OgBgGQMBWTjvZ3rWg4+TUJymO4edlBK4VmPeBE+syPBcc/YNV+sYDnww8U1hucA5hJ4hOIomFYyaYYUtdWKoAwLJxGf7tZ6hgq16iMbzHcJ2gNCINcWKTByEosqX3aA3TvkyTDMwQguAn8QKBgQD2uViv8qyeVy+RrHH6pC3KoEIUYIz6LTulEDL2YcsRr5FKubzxOU6OEcx1TSmkCmUxyUAyFDyTH/aG0c1H8EWYAwMT7N25Pax1bgjJM+A1z3SU9qxOmdFqFz5v7YC9qnLkODErRByuFsfwdxxJedP4Vles/HZc1tnKYl/v8n81jwKBgQDi2IVlMx9LiBfgZeSI/dkUg3pLT1e3Mu52/WMGmUXRWFKta5P/URw/mgNqJ/nPFQRR3Jn3b6augGtMjomJ+l7pnlv/OX8oj0h46Brx08wrifZMHUStB6Rt2vOy9asLk84rQIgMh7I/PeZ3r/w8dZg7B1IUMyLuyjGcSoh2Q76oOQKBgQDsCy9aRiX35xnPmNgDH4ffz6roq+a0gwoJRZI8Pht19C5g+4pUjqslKMoff49TLc7a7tvIDaxWZcIKAjcPmEQ8xsTvDzKhwut3/anSNRtQ4AV9bvIy0N6VTV+i3erJioUY6tm/tw5pT8pBuPMLKM8vTAvdqDvlXnhHNA7tFWe26QKBgQCok922EiK8n9uWkEIgp/ztqLN2SfVWmIvsc2tm2Pqwk2GFrP+j6mQCw/Krrh+QC/9U0oq8/gUxgw+6Keb+Wci09lFJvzHHM4vZBiwX8Jy28mTNtaZ2q8o/NUqLgNPm26WIMQGpxiHpq5ec9HSPfZhurYcKqeHY8PujOSRmNvv1yQKBgQCx65dznLE32KQhJbN9lXbr7mYdqurJMrchQ4E9zI69cXf7M8kt6FqRHLVv0arPPK+xL6FqF4pq2BuKZlYTqwdG1xsOiEv3IHs3lioTFzbJ1NXhrIuV0H3AiQcw9TbhSs3sWkP7Ri90Uj/fHYQC+psvq5x0L4JZKE3dDTdgjP6vQA==-----END PRIVATE KEY-----", + "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIE6TAbBgkqhkiG9w0BBQMwDgQIHHigg+fwQjQCAggABIIEyLP0cpU55sZ3QSZkCtNtGU425BnZZD57aqO/aa/fV9HGvWn5/GYANT6xDKbUi2kwc68QCi6Zla3C56jPvPsZoDeZ+g81DYjqBVMRsVra1kayQvnKeRvedYPBdfA0VL5n0ndRa9q31Vx6zzXnMYJd9VakUgXYLFntvVeTt/a+iW9LX7mx/ymUPZtD1IrNEJBpW6Al+vc1m6bYA8NpZaT5P6uiclsoEiPDMydEa52cBgcd5q5MfwKllPsQNYtyLsee8W/1k/Eu21pRkCPYreQWgh36gqAn+2zNySCyqiU7USQ1qHMIHPLxJV7awVfOy7eoRMhmbTJ8kCrEpI9r6JyQN3m1VbBN5QifF9p0N0v2yBM8hS6e0fdaSwkFUVFHeWz4140nhaXA6Xu9U+TvJwacdz/FYsN9wi1AIDl8nMT+gFC2v3HuiGmMD0ybA5TOJEsvhdLruxLNLok/uiu6oExDVAV6JI4zM/8ymLruuAibVxSc9bhVEY8FfYbQ5aDiGPm18MXtmCb5UNEG10ylsDl5khfGYwcfuOfgDy3PVst4aA3sHLbk996csBL8FPcGDx7iqgWPYkHEfhuHr4MUt2xqJloOsGlcs6Ts70ldgNHpNCA0DizHnrRY8EF4gXzAJghpJ5gcCllzcVjf26YsoVyNiIZ2IcMe2aoP2WtbnnFqtgl2gOJ6SNAbWyRLhtlSC74mYl0SLvtN5lm7U5bCIlAnAJbm1cqN+Muuxy9/U5TagQYfya4BZNUhHhI9ILH87QLpIWDeCa3v0UZfHi7CBirEusAq+jQGZslTt+fr/iRWQLwo819HA5Yhh4rems2p2aKeuUYPJ/gt5/KIPikYneAEJ2HzqByeS71hWbxpINtEtNz2M1SVGLbFsLrUjfKGTEc29qaaFvM24LpLxahiCTW2huM/1UZFjKyvrL0HYKAZyvA/07EHzY5K9DT3ocNIKApqMzq+D7P5L/gBNQ6E+cx/ZOA+9unVuE7OY6mmQHMsK9MAT6e4T0AxkBqAWg3cf5ovlQNr57mWwms8Zyy1wwIwLr2/wilJ5V3iWSHDIckK1kR92kCDu3MwNIhfM9dalWSsx9FRIg4iFzMIuidYO8pIVq1jJQKqVsgmGXCwioKvD6wDnQqijdDmVpX/Jg08O1iU7URD2MvGLbBRRfzcBFNrEUNjTrbQa3LS+wvDISbizryXKr/8K8okpxV6dBiW3YplePjde/yqrxWl7OQoDbG1F2f2zMmIe8ZNTP15K8aAlq9LC5qn6YnoRTRe2rLecxgP1SQVXUwFvrUKglozy1/cJsuKuCqiRecQneqyasc9mp/0wGu1t9GD3EroMfvuK4zXuaj6uTDyDPUBo6hfvNDG8zSHvEfDDGm4PTFI7kU7U7ohSQZZcGHZBUigFluq9KWJ3SHPgTkRul3nB/Im+89toHSHFoqH/B/GDokAbqsrUPgJ9xpK9lqFEhng5blX2kiae90VHRyb23oE7eIjf3j4G04Amh8m4/W7ER9JDn6nwWqMH4n2MBQRD3USO8DNTgBbggVZZ7MGIUVbv2/YcVZXftBtiS1u+lvVcpYPzwHIj29YrscmBV6ae0CLo1av0xquHYUOrVixSvhmOREOUSZvNSibizBIyNmLkA==-----END ENCRYPTED PRIVATE KEY-----", + "-----BEGIN OPENSSH PRIVATE KEY-----b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBDXVWIoOcQYPyoVODqYrhNAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIDDZHhPJKYsu2hV7bq/vtAbF2Guw8cupqcjv5SqRraVaAAAAoCfV/ZrS3mggJFx1X7aeKzfBFDN2hWrPTHmyJPsw0NaDW+wzL6/yYmWaAB90clbSiCQ7jALlA/RoU/tPz8HvEaKcnj9BgSMN8+Se4RBcfqxMx9eCRYtYcumc9PrQbKSCeywtvsQoCntPxLhyudxH/HYKx7lO5mrMGut9FjOy2s9Iz317p+2F1DJqRYNsEHKyZJpV0DwObF2ZPOlX3PDv3fg=-----END OPENSSH PRIVATE KEY-----" + ], + "Invalid": [] + } }, { "Name": "SSH ECDSA Public Key", @@ -56,7 +85,13 @@ "Tags": [ "Credentials", "SSH Public Key" - ] + ], + "Examples": { + "Valid": [ + "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCE9Uli8bGnD4hOWdeo5KKQJ/P/vOazI4MgqJK54w37emP2JwOAOdMmXuwpxbKng3KZz27mz+nKWIlXJ3rzSGMo= r00t@my-random_host" + ], + "Invalid": [] + } }, { "Name": "SSH ED25519 Public Key", @@ -68,7 +103,13 @@ "Tags": [ "Credentials", "SSH Public Key" - ] + ], + "Examples": { + "Valid": [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK0wmN/Cr3JXqmLW7u+g9pTh+wyqDHpSQEIQczXkVx9q r00t@my-random_host" + ], + "Invalid": [] + } }, { "Name": "Access-Control-Allow-Header", @@ -80,7 +121,13 @@ "Tags": [ "Networking", "Website" - ] + ], + "Examples": { + "Valid": [ + "Access-Control-Allow: *" + ], + "Invalid": [] + } }, { "Name": "TryHackMe Flag Format", @@ -91,7 +138,13 @@ "URL": null, "Tags": [ "CTF Flag" - ] + ], + "Examples": { + "Valid": [ + "thm{hello}" + ], + "Invalid": [] + } }, { "Name": "HackTheBox Flag Format", @@ -102,7 +155,13 @@ "URL": null, "Tags": [ "CTF Flag" - ] + ], + "Examples": { + "Valid": [ + "htb{just_a_test}" + ], + "Invalid": [] + } }, { "Name": "Capture The Flag (CTF) Flag", @@ -113,7 +172,13 @@ "URL": null, "Tags": [ "CTF Flag" - ] + ], + "Examples": { + "Valid": [ + "FLAG{hello}" + ], + "Invalid": [] + } }, { "Name": "YouTube Video", @@ -126,7 +191,14 @@ "Media", "YouTube", "YouTube Video" - ] + ], + "Examples": { + "Valid": [ + "https://www.youtube.com/watch?v=ScOAntcCa78", + "http://www.youtube.com/watch?v=dQw4w9WgXcQ" + ], + "Invalid": [] + } }, { "Name": "Bitcoin Cash (BCH) Wallet Address", @@ -140,7 +212,13 @@ "Cryptocurrency Wallet", "Bitcoin Cash Wallet", "Bitcoin" - ] + ], + "Examples": { + "Valid": [ + "bitcoincash:qzlg6uvceehgzgtz6phmvy8gtdqyt6vf359at4n3lq" + ], + "Invalid": [] + } }, { "Name": "Heroku API Key", @@ -170,11 +248,17 @@ "API Keys", "Credentials", "Slack" - ] + ], + "Examples": { + "Valid": [ + "xoxp-514654431830-843187921057-792480346180-d44d2r9b71f954o8z2k5llt41ovpip6v" + ], + "Invalid": [] + } }, { "Name": "Slack Webhook", - "Regex": "(?i)^(https://hooks.slack.com/services/T[a-zA-Z0-9_]{8}/B[a-zA-Z0-9_]{8}/[a-zA-Z0-9_]{24})$", + "Regex": "(?i)^(https://hooks.slack.com/services/T[a-zA-Z0-9_]{8,10}/B[a-zA-Z0-9_]{8,10}/[a-zA-Z0-9_]{24})$", "plural_name": false, "Description": null, "Exploit": "If the command below returns 'missing_text_or_fallback_or_attachments', it means\nthat the URL is valid, any other responses would mean that the URL is invalid.\n $ curl -s -X POST -H \"Content-type: application/json\" -d '{\"text\":\"\"}' \"SLACK_WEBOOK_URL_HERE\"\n", @@ -185,7 +269,14 @@ "API Keys", "Credentials", "Slack" - ] + ], + "Examples": { + "Valid": [ + "https://hooks.slack.com/services/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", + "https://hooks.slack.com/services/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" + ], + "Invalid": [] + } }, { "Name": "Amazon Web Services Simple Storage (AWS S3) URL", @@ -198,7 +289,13 @@ "Networking", "AWS", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "http://s3.amazonaws.com/bucket" + ], + "Invalid": [] + } }, { "Name": "Amazon Web Services Simple Storage (AWS S3) Internal URL", @@ -211,7 +308,14 @@ "Networking", "AWS", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "s3://bucket/path/key", + "s3://bucket/path/directory/" + ], + "Invalid": [] + } }, { "Name": "Square Application Secret", @@ -226,7 +330,13 @@ "Credentials", "Square", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "sq0csp-LBptIQ85io8CvbjVDvmzD1drQbOERgjlhnNrMgscFGk" + ], + "Invalid": [] + } }, { "Name": "Square Access Token", @@ -241,7 +351,13 @@ "Credentials", "Square", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "EAAAEBQZoq15Ub0PBBr_kw0zK-uIHcBPBZcfjPFT05ODfjng9GqFK9Dbgtj1ILcU" + ], + "Invalid": [] + } }, { "Name": "Stripe API Key", @@ -256,7 +372,13 @@ "Credentials", "Bug Bounty", "Stripe" - ] + ], + "Examples": { + "Valid": [ + "sk_live_vHDDrL02ioRF5vYtyqiYBKma" + ], + "Invalid": [] + } }, { "Name": "GitHub Access Token", @@ -271,7 +393,13 @@ "Credentials", "Bug Bounty", "GitHub" - ] + ], + "Examples": { + "Valid": [ + "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:test@github.com" + ], + "Invalid": [] + } }, { "Name": "Amazon Resource Name (ARN)", @@ -285,22 +413,16 @@ "Networking", "AWS", "Bug Bounty" - ] - }, - { - "Name": "Facebook Access Token", - "Regex": "^(EAACEdEose0cBA[0-9A-Za-z]{512})$", - "plural_name": false, - "Description": null, - "Exploit": null, - "Rarity": 1, - "URL": "https://developers.facebook.com/tools/debug/accesstoken/?access_token=", - "Tags": [ - "API Keys", - "Bug Bounty", - "Credentials", - "Facebook" - ] + ], + "Examples": { + "Valid": [ + "arn:partition:service:region:account-id:resource", + "arn:partition:service:region:account-id:resourcetype/resource", + "arn:partition:service:region:account-id:resourcetype:resource", + "arn:aws:s3:::my_corporate_bucket/Development/*" + ], + "Invalid": [] + } }, { "Name": "Facebook Secret Key", @@ -370,7 +492,13 @@ "Token", "Bug Bounty", "NPM" - ] + ], + "Examples": { + "Valid": [ + "npm_ir3kktsOr4JeXqeD72C3cWo2mbs5sQ2pfnt9" + ], + "Invalid": [] + } }, { "Name": "GitHub Personal Access Token", @@ -385,7 +513,13 @@ "Bug Bounty", "Credentials", "GitHub" - ] + ], + "Examples": { + "Valid": [ + "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" + ], + "Invalid": [] + } }, { "Name": "GitHub OAuth Access Token", @@ -400,7 +534,13 @@ "Bug Bounty", "Credentials", "GitHub" - ] + ], + "Examples": { + "Valid": [ + "gho_16C7e42F292c6912E7710c838347Ae178B4a" + ], + "Invalid": [] + } }, { "Name": "GitHub App Token", @@ -415,7 +555,13 @@ "Bug Bounty", "Credentials", "GitHub" - ] + ], + "Examples": { + "Valid": [ + "ghu_16C7e42F292c6912E7710c838347Ae178B4a" + ], + "Invalid": [] + } }, { "Name": "GitHub Refresh Token", @@ -430,7 +576,13 @@ "Bug Bounty", "Credentials", "GitHub" - ] + ], + "Examples": { + "Valid": [ + "ghr_1B4a2e77838347a7E420ce178F2E7c6912E169246c34E1ccbF66C46812d16D5B1A9Dc86A1498" + ], + "Invalid": [] + } }, { "Name": "LinkedIn Client ID", @@ -460,21 +612,6 @@ "LinkedIn" ] }, - { - "Name": "GitHub Access Token", - "Regex": "(?i)^([a-zA-Z0-9_-]*:[a-zA-Z0-9_-]+@github\\.com)$", - "plural_name": false, - "Description": null, - "Exploit": null, - "Rarity": 1, - "URL": null, - "Tags": [ - "API Keys", - "Bug Bounty", - "Credentials", - "GitHub" - ] - }, { "Name": "Stripe Restricted API Token", "Regex": "(?i)^(rk_live_[0-9a-zA-Z]{24})$", @@ -505,21 +642,6 @@ "Stripe" ] }, - { - "Name": "Square Access Token", - "Regex": "(?i)^(sqOatp-[0-9A-Za-z\\-_]{22})$", - "plural_name": false, - "Description": null, - "Exploit": "Use the command below to verify that the access token is valid:\n $ curl \"https://squareup.com/oauth2/revoke\" -d '{\"access_token\":\"[RANDOM_STRING]\",\"client_id\":\"[APP_ID]\"}' -H \"Content-Type: application/json\" -H \"Authorization: Client TOKEN_HERE\"\n", - "Rarity": 1, - "URL": null, - "Tags": [ - "API Keys", - "Bug Bounty", - "Credentials", - "Square" - ] - }, { "Name": "Square OAuth Token", "Regex": "(?i)^(sq0csp-[ 0-9A-Za-z\\-_]{43})$", @@ -625,7 +747,13 @@ "Bug Bounty", "Credentials", "StackHawk" - ] + ], + "Examples": { + "Valid": [ + "hawk.wz6bAoFDwcVQFCD9dofE.w2R1PWI8UTvEM4jd56XQ" + ], + "Invalid": [] + } }, { "Name": "NuGet API Key", @@ -683,7 +811,13 @@ "Bug Bounty", "Credentials", "Zapier" - ] + ], + "Examples": { + "Valid": [ + "https://hooks.zapier.com/hooks/catch/1234567/f8f22dgg/" + ], + "Invalid": [] + } }, { "Name": "Datadog API Key", @@ -757,7 +891,13 @@ "Bug Bounty", "Credentials", "New Relic" - ] + ], + "Examples": { + "Valid": [ + "NRRA-2a2d50d7d9449f3bb7ef65ac1184c488bd4fe7a8bd" + ], + "Invalid": [] + } }, { "Name": "New Relic Synthetics Location Key", @@ -770,7 +910,13 @@ "Tags": [ "Bug Bounty", "New Relic" - ] + ], + "Examples": { + "Valid": [ + "NRSP-us010E1E3D1716F721FF39F726B3E4CBCB7" + ], + "Invalid": [] + } }, { "Name": "New Relic User API Key", @@ -785,7 +931,13 @@ "Bug Bounty", "Credentials", "New Relic" - ] + ], + "Examples": { + "Valid": [ + "NRAK-WI4JTVS049IF5A3FGS5N51XS3Y5" + ], + "Invalid": [] + } }, { "Name": "Microsoft Teams Webhook", @@ -828,11 +980,17 @@ "URL", "Google Calendar", "Google" - ] + ], + "Examples": { + "Valid": [ + "https://calendar.google.com/calendar/embed?src=ht3jlfaac5lfd6263ulfh4tql8%40group.calendar.google.com&ctz=Europe%2FLondon" + ], + "Invalid": [] + } }, { "Name": "Discord Webhook", - "Regex": "(?i)^(https://discord\\.com/api/webhooks/[0-9]+/[A-Za-z0-9-_]+)$", + "Regex": "(?i)^(https?:\\/\\/(?:ptb\\.|canary\\.)?discord(?:app)?\\.com\\/api(?:\\/v\\d{1,2})?\\/webhooks\\/(\\d{17,19})\\/([\\w-]{68}))$", "plural_name": false, "Description": null, "Exploit": null, @@ -842,7 +1000,36 @@ "Bug Bounty", "URL", "Discord" - ] + ], + "Examples": { + "Valid": [ + "https://discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://discord.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://ptb.discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://canary.discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://ptb.discord.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://canary.discord.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://ptb.discordapp.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://canary.discordapp.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://ptb.discordapp.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://canary.discordapp.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://discordapp.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "https://discordapp.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://discord.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://ptb.discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://canary.discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://ptb.discord.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://canary.discord.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://ptb.discordapp.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://canary.discordapp.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://ptb.discordapp.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://canary.discordapp.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://discordapp.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij", + "http://discordapp.com/api/v9/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij" + ], + "Invalid": [] + } }, { "Name": "Cloudinary Credentials", @@ -871,7 +1058,13 @@ "Credentials", "API Keys", "PyPI" - ] + ], + "Examples": { + "Valid": [ + "pypi-AgEIcHlwaS5vcmcCJDZlNzEyNGJmLWQ4N2UtNGZhYS1iNWEzLWQzYzg2YjU3NzAxYgACJXsicGVybWlzc2lvbnMiOiAidXNlciIsICJ2ZXJzaW9uIjogMX0AAAYgeYcgrZO31PTS_3ipsd0fTSMy1kVkxCzhQvHN6m97yIE" + ], + "Invalid": [] + } }, { "Name": "Shopify Private App Access Token", @@ -960,11 +1153,17 @@ "Bug Bounty", "AWS", "Amazon" - ] + ], + "Examples": { + "Valid": [ + "arn:aws:sns:us-east-2:123456789012:MyTopic" + ], + "Invalid": [] + } }, { "Name": "Notion Note URI", - "Regex": "(?i)^(https:\/\/www\\.notion\\.so\/[A-Za-z0-9-_]+\/.*-[0-9a-f]{32})$", + "Regex": "(?i)^(https://www\\.notion\\.so/[A-Za-z0-9-_]+/.*-[0-9a-f]{32})$", "plural_name": false, "Description": null, "Rarity": 1, @@ -972,11 +1171,17 @@ "Tags": [ "Bug Bounty", "URL" - ] + ], + "Examples": { + "Valid": [ + "https://www.notion.so/test-user/My-Note-fa45346d9dd4421abc6857ce2e7fb0db" + ], + "Invalid": [] + } }, { "Name": "Notion Team Note URI", - "Regex": "(?i)^(https:\/\/[A-Za-z0-9-_]+\\.notion\\.site\/.*-[0-9a-f]{32})$", + "Regex": "(?i)^(https://[A-Za-z0-9-_]+\\.notion\\.site/.*-[0-9a-f]{32})$", "plural_name": false, "Description": null, "Rarity": 1, @@ -984,7 +1189,13 @@ "Tags": [ "Bug Bounty", "URL" - ] + ], + "Examples": { + "Valid": [ + "https://testorg.notion.site/My-Note-9f8863871e024ea6acc64d6564004a22" + ], + "Invalid": [] + } }, { "Name": "Nano (NANO) Wallet Address", @@ -998,57 +1209,90 @@ "Cryptocurrency Wallet", "Nano Wallet", "Nano" - ] + ], + "Examples": { + "Valid": [ + "nano_1c46rz7xnk98ozhzdjq7thwty844sgnqxk9496yysit1bnio1rcdzshc5ymn" + ], + "Invalid": [] + } }, { - "Name": "Time-Based One-Time Password (TOTP) URI", - "Regex": "^([^?\\n]+:\/\/totp\/[^\\n]+secret=[A-Z2-7=]+[^\\n]+)$", - "plural_name": false, - "Description": null, - "Rarity": 1, - "URL": null, - "Tags": [ + "Name": "Time-Based One-Time Password (TOTP) URI", + "Regex": "^([^?\\n]+://totp/[^\\n]+secret=[A-Z2-7=]+[^\\n]+)$", + "plural_name": false, + "Description": null, + "Rarity": 1, + "URL": null, + "Tags": [ "Credentials", "TOTP", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example", + "otpauth://totp/My_Ex0T1c-L00king.name?issuer=ArgsShouldBeCommutable&secret=JBSWY3DPEHPK3PXP&digits=6&period=30" + ], + "Invalid": [] + } }, { - "Name": "SSHPass Clear Password Argument", - "Regex": "^(sshpass [^\\n]*-p\\s+[^ ]+)$", - "plural_name": false, - "Description": null, - "Rarity": 1, - "URL": null, - "Tags": [ + "Name": "SSHPass Clear Password Argument", + "Regex": "^(sshpass [^\\n]*-p[ ]+[^ ]+)$", + "plural_name": false, + "Description": null, + "Rarity": 1, + "URL": null, + "Tags": [ "Credentials", "SSH", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "sshpass -P 'Please enter your password' -p MyPassw0RD!", + "sshpass -p MyPassw0RD!" + ], + "Invalid": [] + } }, { - "Name": "Mount Command With Clear Credentials", - "Regex": "^(mount(.cifs)?\\s+[^\\n]*(username=[^, \\n]+[^\\n ]*password=[^, \\n]+|password=[^, \\n]+[^\\n ]*username=[^, \\n]+))$", - "plural_name": false, - "Description": null, - "Rarity": 1, - "URL": null, - "Tags": [ + "Name": "Mount Command With Clear Credentials", + "Regex": "^(mount(.cifs)?\\s+[^\\n]*(username=[^, \\n]+[^\\n ]*password=[^, \\n]+|password=[^, \\n]+[^\\n ]*username=[^, \\n]+))$", + "plural_name": false, + "Description": null, + "Rarity": 1, + "URL": null, + "Tags": [ "Credentials", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "mount -o username=myuser,password=password", + "mount.cifs -o username=myuser,password=password", + "mount -t cifs -osec=ntlmv2,password=S3cUr3D!,domain=mydomain,noserverino,username=H4x0r" + ], + "Invalid": [] + } }, { - "Name": "CIFS Fstab Entry With Clear Credentials", - "Regex": "^(cifs\\s+[^\\n]*(username=[^, \\n]+[^\\n ]*password=[^, \\n]+|password=[^, \\n]+[^\\n ]*username=[^, \\n]+))$", - "plural_name": false, - "Description": null, - "Rarity": 1, - "URL": null, - "Tags": [ + "Name": "CIFS Fstab Entry With Clear Credentials", + "Regex": "^(cifs\\s+[^\\n]*(username=[^, \\n]+[^\\n ]*password=[^, \\n]+|password=[^, \\n]+[^\\n ]*username=[^, \\n]+))$", + "plural_name": false, + "Description": null, + "Rarity": 1, + "URL": null, + "Tags": [ "Credentials", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "cifs uid=1000,password=password,gid=1000,noperm,nofail,username=myuser" + ] + } }, { "Name": "Google Cloud Platform API Key", @@ -1071,7 +1315,7 @@ "Regex": "(?i)^([0-9a-f]{32}-us[0-9]{1,2})$", "plural_name": false, "Description": null, - "Exploit": "Use the command below to verify that the API key is valid:\n $ curl --request GET --url 'https://.api.mailchimp.com/3.0/' --user 'anystring:API_KEY_HERE' --include\n", + "Exploit": "Use the command below to verify that the API key is valid (substitute for your datacenter, i. e. us5):\n $ curl --request GET --url 'https://.api.mailchimp.com/3.0/' --user 'anystring:API_KEY_HERE' --include\n", "Rarity": 0.8, "URL": null, "Tags": [ @@ -1079,7 +1323,15 @@ "API Keys", "Credentials", "Mailchimp" - ] + ], + "Examples": { + "Valid": [ + "d619ce3b691e29ec064fede7ff9afbff-us5", + "4bf6010e49fb0791f3940681791934e7-us5", + "a80122b2565c3e26a61cbf58d1d1aad7-us5" + ], + "Invalid": [] + } }, { "Name": "Notion Integration Token", @@ -1089,10 +1341,34 @@ "Rarity": 0.8, "URL": null, "Tags": [ - "Credentials", - "API Keys", - "Bug Bounty" - ] + "Credentials", + "API Keys", + "Bug Bounty" + ], + "Examples": { + "Valid": [ + "secret_n2ZeRrMx743JQ5wiucZ0DBEe47opfKubUp22N0wIrOy" + ], + "Invalid": [] + } + }, + { + "Name": "Digital Object Identifier (DOI)", + "Regex": "^((?:https?:\\/\\/(?:(?:www\\.)?doi\\.org\\/)|doi:)?(10\\.[1-9][0-9]{3}[0-9]*\\/\\S+[^;,.\\s]))$", + "plural_name": false, + "Description": null, + "Rarity": 0.7, + "URL": null, + "Tags": [ + "Identifiers", + "Media" + ], + "Examples": { + "Valid": [ + "10.1000/182", + "doi:10.1002/0470841559.ch1" + ] + } }, { "Name": "Internet Protocol (IP) Address Version 6", @@ -1107,11 +1383,18 @@ "IP", "IPv6", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "2001:0db8:85a3:0000:0000:8a2e:0370:7334", + "[2001:db8::1]:8080" + ], + "Invalid": [] + } }, { "Name": "Uniform Resource Locator (URL)", - "Regex": "(?i)^((?:(?:https?|ftp):\\/\\/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?::[0-9]{1,5})?)([a-z0-9-_\\/]?\\.?)*|(?:(?:https?|ftp):\\/\\/)?(?:\\S+:\\S+@)?(?:[a-z0-9-_]?\\.?)+?(?:[a-z0-9-_][a-z0-9-_]{0,62})\\.(?:XN--VERMGENSBERATUNG-PWB|XN--VERMGENSBERATER-CTB|XN--CLCHC0EA0B2G2A9GCD|XN--W4R85EL8FHU5DNRA|NORTHWESTERNMUTUAL|TRAVELERSINSURANCE|XN--3OQ18VL8PN36A|XN--5SU34J936BGSG|XN--BCK1B9A5DRE4C|XN--MGBAH1A3HJKRD|XN--MGBAI9AZGQP6J|XN--MGBERP4A5D4AR|XN--XKC2DL3A5EE0H|XN--FZYS8D69UVGM|XN--MGBA7C0BBN0A|XN--MGBCPQ6GPA1A|XN--XKC2AL3HYE2A|AMERICANEXPRESS|KERRYPROPERTIES|SANDVIKCOROMANT|XN--I1B6B1A6A2E|XN--KCRX77D1X4A|XN--LGBBAT1AD8J|XN--MGBA3A4F16A|XN--MGBAAKC7DVF|XN--MGBC0A9AZCG|XN--NQV7FS00EMA|AFAMILYCOMPANY|AMERICANFAMILY|BANANAREPUBLIC|CANCERRESEARCH|COOKINGCHANNEL|KERRYLOGISTICS|WEATHERCHANNEL|XN--54B7FTA0CC|XN--6QQ986B3XL|XN--80AQECDR1A|XN--B4W605FERD|XN--FIQ228C5HS|XN--H2BREG3EVE|XN--JLQ480N2RG|XN--JLQ61U9W7B|XN--MGBA3A3EJT|XN--MGBAAM7A8H|XN--MGBAYH7GPA|XN--MGBBH1A71E|XN--MGBCA7DZDO|XN--MGBI4ECEXP|XN--MGBX4CD0AB|XN--RVC1E0AM3E|INTERNATIONAL|LIFEINSURANCE|TRAVELCHANNEL|WOLTERSKLUWER|XN--CCKWCXETD|XN--ECKVDTC9D|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--H2BRJ9C8C|XN--TIQ49XQYJ|XN--YFRO4I67O|XN--YGBI2AMMX|CONSTRUCTION|LPLFINANCIAL|SCHOLARSHIPS|VERSICHERUNG|XN--3E0B707E|XN--45BR5CYL|XN--4DBRK0CE|XN--80ADXHKS|XN--80ASEHDB|XN--8Y0A063A|XN--GCKR3F0F|XN--MGB9AWBF|XN--MGBAB2BD|XN--MGBGU82A|XN--MGBPL2FH|XN--MGBT3DHD|XN--MK1BU44C|XN--NGBC5AZD|XN--NGBE9E0A|XN--OGBPF8FL|XN--QCKA1PMC|ACCOUNTANTS|BARCLAYCARD|BLACKFRIDAY|BLOCKBUSTER|BRIDGESTONE|CALVINKLEIN|CONTRACTORS|CREDITUNION|ENGINEERING|ENTERPRISES|FOODNETWORK|INVESTMENTS|KERRYHOTELS|LAMBORGHINI|MOTORCYCLES|OLAYANGROUP|PHOTOGRAPHY|PLAYSTATION|PRODUCTIONS|PROGRESSIVE|REDUMBRELLA|WILLIAMHILL|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--2SCRJ9C|XN--3BST00M|XN--3DS443G|XN--3HCRJ9C|XN--42C2D9A|XN--45BRJ9C|XN--55QW42G|XN--6FRZ82G|XN--80AO21A|XN--9KRT00A|XN--CCK2B3B|XN--CZR694B|XN--D1ACJ3B|XN--EFVY88H|XN--FCT429K|XN--FJQ720A|XN--FLW351E|XN--G2XX48C|XN--GECRJ9C|XN--GK3AT1E|XN--H2BRJ9C|XN--HXT814E|XN--IMR513N|XN--J6W193G|XN--JVR189M|XN--KPRW13D|XN--KPRY57D|XN--MGBBH1A|XN--MGBTX2B|XN--MIX891F|XN--NYQY26A|XN--OTU796D|XN--PGBS0DH|XN--Q9JYB4C|XN--RHQV96G|XN--ROVU88B|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--VUQ861B|XN--W4RS40L|XN--XHQ521B|XN--ZFR164B|ACCOUNTANT|APARTMENTS|ASSOCIATES|BASKETBALL|BNPPARIBAS|BOEHRINGER|CAPITALONE|CONSULTING|CREDITCARD|CUISINELLA|EUROVISION|EXTRASPACE|FOUNDATION|HEALTHCARE|IMMOBILIEN|INDUSTRIES|MANAGEMENT|MITSUBISHI|NEXTDIRECT|PROPERTIES|PROTECTION|PRUDENTIAL|REALESTATE|REPUBLICAN|RESTAURANT|SCHAEFFLER|SWIFTCOVER|TATAMOTORS|TECHNOLOGY|UNIVERSITY|VLAANDEREN|VOLKSWAGEN|XN--30RR7Y|XN--3PXU8K|XN--45Q11C|XN--4GBRIM|XN--55QX5D|XN--5TZM5G|XN--80ASWG|XN--90A3AC|XN--9DBQ2A|XN--9ET52U|XN--C2BR7G|XN--CG4BKI|XN--CZRS0T|XN--CZRU2D|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--IO0A7I|XN--KPUT3I|XN--MXTQ1M|XN--O3CW4H|XN--PSSY2U|XN--Q7CE6A|XN--UNUP4Y|XN--WGBH1C|XN--WGBL6A|XN--Y9A3AQ|ACCENTURE|ALFAROMEO|ALLFINANZ|AMSTERDAM|ANALYTICS|AQUARELLE|BARCELONA|BLOOMBERG|CHRISTMAS|COMMUNITY|DIRECTORY|EDUCATION|EQUIPMENT|FAIRWINDS|FINANCIAL|FIRESTONE|FRESENIUS|FRONTDOOR|FURNITURE|GOLDPOINT|HISAMITSU|HOMEDEPOT|HOMEGOODS|HOMESENSE|INSTITUTE|INSURANCE|KUOKGROUP|LANCASTER|LANDROVER|LIFESTYLE|MARKETING|MARSHALLS|MELBOURNE|MICROSOFT|PANASONIC|PASSAGENS|PRAMERICA|RICHARDLI|SCJOHNSON|SHANGRILA|SOLUTIONS|STATEBANK|STATEFARM|STOCKHOLM|TRAVELERS|VACATIONS|XN--90AIS|XN--C1AVG|XN--D1ALF|XN--E1A4C|XN--FHBEI|XN--J1AEF|XN--J1AMH|XN--L1ACC|XN--NGBRX|XN--NQV7F|XN--P1ACF|XN--QXA6A|XN--TCKWE|XN--VHQUV|YODOBASHI|ABUDHABI|AIRFORCE|ALLSTATE|ATTORNEY|BARCLAYS|BAREFOOT|BARGAINS|BASEBALL|BOUTIQUE|BRADESCO|BROADWAY|BRUSSELS|BUDAPEST|BUILDERS|BUSINESS|CAPETOWN|CATERING|CATHOLIC|CIPRIANI|CITYEATS|CLEANING|CLINIQUE|CLOTHING|COMMBANK|COMPUTER|DELIVERY|DELOITTE|DEMOCRAT|DIAMONDS|DISCOUNT|DISCOVER|DOWNLOAD|ENGINEER|ERICSSON|ETISALAT|EXCHANGE|FEEDBACK|FIDELITY|FIRMDALE|FOOTBALL|FRONTIER|GOODYEAR|GRAINGER|GRAPHICS|GUARDIAN|HDFCBANK|HELSINKI|HOLDINGS|HOSPITAL|INFINITI|IPIRANGA|ISTANBUL|JPMORGAN|LIGHTING|LUNDBECK|MARRIOTT|MASERATI|MCKINSEY|MEMORIAL|MERCKMSD|MORTGAGE|OBSERVER|PARTNERS|PHARMACY|PICTURES|PLUMBING|PROPERTY|REDSTONE|RELIANCE|SAARLAND|SAMSCLUB|SECURITY|SERVICES|SHOPPING|SHOWTIME|SOFTBANK|SOFTWARE|STCGROUP|SUPPLIES|TRAINING|VANGUARD|VENTURES|VERISIGN|WOODSIDE|XN--90AE|XN--NODE|XN--P1AI|XN--QXAM|YOKOHAMA|ABOGADO|ACADEMY|AGAKHAN|ALIBABA|ANDROID|ATHLETA|AUCTION|AUDIBLE|AUSPOST|AVIANCA|BANAMEX|BAUHAUS|BENTLEY|BESTBUY|BOOKING|BROTHER|BUGATTI|CAPITAL|CARAVAN|CAREERS|CHANNEL|CHARITY|CHINTAI|CITADEL|CLUBMED|COLLEGE|COLOGNE|COMCAST|COMPANY|COMPARE|CONTACT|COOKING|CORSICA|COUNTRY|COUPONS|COURSES|CRICKET|CRUISES|DENTIST|DIGITAL|DOMAINS|EXPOSED|EXPRESS|FARMERS|FASHION|FERRARI|FERRERO|FINANCE|FISHING|FITNESS|FLIGHTS|FLORIST|FLOWERS|FORSALE|FROGANS|FUJITSU|GALLERY|GENTING|GODADDY|GROCERY|GUITARS|HAMBURG|HANGOUT|HITACHI|HOLIDAY|HOSTING|HOTELES|HOTMAIL|HYUNDAI|ISMAILI|JEWELRY|JUNIPER|KITCHEN|KOMATSU|LACAIXA|LANXESS|LASALLE|LATROBE|LECLERC|LIMITED|LINCOLN|MARKETS|MONSTER|NETBANK|NETFLIX|NETWORK|NEUSTAR|OKINAWA|OLDNAVY|ORGANIC|ORIGINS|PHILIPS|PIONEER|POLITIE|REALTOR|RECIPES|RENTALS|REVIEWS|REXROTH|SAMSUNG|SANDVIK|SCHMIDT|SCHWARZ|SCIENCE|SHIKSHA|SINGLES|STAPLES|STORAGE|SUPPORT|SURGERY|SYSTEMS|TEMASEK|THEATER|THEATRE|TICKETS|TIFFANY|TOSHIBA|TRADING|WALMART|WANGGOU|WATCHES|WEATHER|WEBSITE|WEDDING|WHOSWHO|WINDOWS|WINNERS|XFINITY|YAMAXUN|YOUTUBE|ZUERICH|ABARTH|ABBOTT|ABBVIE|AFRICA|AGENCY|AIRBUS|AIRTEL|ALIPAY|ALSACE|ALSTOM|AMAZON|ANQUAN|ARAMCO|AUTHOR|BAYERN|BEAUTY|BERLIN|BHARTI|BOSTIK|BOSTON|BROKER|CAMERA|CAREER|CASINO|CENTER|CHANEL|CHROME|CHURCH|CIRCLE|CLAIMS|CLINIC|COFFEE|COMSEC|CONDOS|COUPON|CREDIT|CRUISE|DATING|DATSUN|DEALER|DEGREE|DENTAL|DESIGN|DIRECT|DOCTOR|DUNLOP|DUPONT|DURBAN|EMERCK|ENERGY|ESTATE|EVENTS|EXPERT|FAMILY|FLICKR|FUTBOL|GALLUP|GARDEN|GEORGE|GIVING|GLOBAL|GOOGLE|GRATIS|HEALTH|HERMES|HIPHOP|HOCKEY|HOTELS|HUGHES|IMAMAT|INSURE|INTUIT|JAGUAR|JOBURG|JUEGOS|KAUFEN|KINDER|KINDLE|KOSHER|LANCIA|LATINO|LAWYER|LEFRAK|LIVING|LOCKER|LONDON|LUXURY|MADRID|MAISON|MAKEUP|MARKET|MATTEL|MOBILE|MONASH|MORMON|MOSCOW|MUSEUM|MUTUAL|NAGOYA|NATURA|NISSAN|NISSAY|NORTON|NOWRUZ|OFFICE|OLAYAN|ONLINE|ORACLE|ORANGE|OTSUKA|PFIZER|PHOTOS|PHYSIO|PICTET|QUEBEC|RACING|REALTY|REISEN|REPAIR|REPORT|REVIEW|ROCHER|ROGERS|RYUKYU|SAFETY|SAKURA|SANOFI|SCHOOL|SCHULE|SEARCH|SECURE|SELECT|SHOUJI|SOCCER|SOCIAL|STREAM|STUDIO|SUPPLY|SUZUKI|SWATCH|SYDNEY|TAIPEI|TAOBAO|TARGET|TATTOO|TENNIS|TIENDA|TJMAXX|TKMAXX|TOYOTA|TRAVEL|UNICOM|VIAJES|VIKING|VILLAS|VIRGIN|VISION|VOTING|VOYAGE|VUELOS|WALTER|WEBCAM|XIHUAN|YACHTS|YANDEX|ZAPPOS|ACTOR|ADULT|AETNA|AMFAM|AMICA|APPLE|ARCHI|AUDIO|AUTOS|AZURE|BAIDU|BEATS|BIBLE|BINGO|BLACK|BOATS|BOSCH|BUILD|CANON|CARDS|CHASE|CHEAP|CISCO|CITIC|CLICK|CLOUD|COACH|CODES|CROWN|CYMRU|DABUR|DANCE|DEALS|DELTA|DRIVE|DUBAI|EARTH|EDEKA|EMAIL|EPSON|FAITH|FEDEX|FINAL|FOREX|FORUM|GALLO|GAMES|GIFTS|GIVES|GLADE|GLASS|GLOBO|GMAIL|GREEN|GRIPE|GROUP|GUCCI|GUIDE|HOMES|HONDA|HORSE|HOUSE|HYATT|IKANO|IRISH|JETZT|KOELN|KYOTO|LAMER|LEASE|LEGAL|LEXUS|LILLY|LINDE|LIPSY|LIXIL|LOANS|LOCUS|LOTTE|LOTTO|MACYS|MANGO|MEDIA|MIAMI|MONEY|MOVIE|NEXUS|NIKON|NINJA|NOKIA|NOWTV|OMEGA|OSAKA|PARIS|PARTS|PARTY|PHONE|PHOTO|PIZZA|PLACE|POKER|PRAXI|PRESS|PRIME|PROMO|QUEST|RADIO|REHAB|REISE|RICOH|ROCKS|RODEO|RUGBY|SALON|SENER|SEVEN|SHARP|SHELL|SHOES|SKYPE|SLING|SMART|SMILE|SOLAR|SPACE|SPORT|STADA|STORE|STUDY|STYLE|SUCKS|SWISS|TATAR|TIRES|TIROL|TMALL|TODAY|TOKYO|TOOLS|TORAY|TOTAL|TOURS|TRADE|TRUST|TUNES|TUSHU|UBANK|VEGAS|VIDEO|VODKA|VOLVO|WALES|WATCH|WEBER|WEIBO|WORKS|WORLD|XEROX|YAHOO|AARP|ABLE|ADAC|AERO|AKDN|ALLY|AMEX|ARAB|ARMY|ARPA|ARTE|ASDA|ASIA|AUDI|AUTO|BABY|BAND|BANK|BBVA|BEER|BEST|BIKE|BING|BLOG|BLUE|BOFA|BOND|BOOK|BUZZ|CAFE|CALL|CAMP|CARE|CARS|CASA|CASE|CASH|CBRE|CERN|CHAT|CITI|CITY|CLUB|COOL|COOP|CYOU|DATA|DATE|DCLK|DEAL|DELL|DESI|DIET|DISH|DOCS|DUCK|DVAG|ERNI|FAGE|FAIL|FANS|FARM|FAST|FIAT|FIDO|FILM|FIRE|FISH|FLIR|FOOD|FORD|FREE|FUND|GAME|GBIZ|GENT|GGEE|GIFT|GMBH|GOLD|GOLF|GOOG|GUGE|GURU|HAIR|HAUS|HDFC|HELP|HERE|HGTV|HOST|HSBC|ICBC|IEEE|IMDB|IMMO|INFO|ITAU|JAVA|JEEP|JOBS|JPRS|KDDI|KIWI|KPMG|KRED|LAND|LEGO|LGBT|LIDL|LIFE|LIKE|LIMO|LINK|LIVE|LOAN|LOFT|LOVE|LTDA|LUXE|MAIF|MEET|MEME|MENU|MINI|MINT|MOBI|MODA|MOTO|NAME|NAVY|NEWS|NEXT|NICO|NIKE|OLLO|OPEN|PAGE|PARS|PCCW|PICS|PING|PINK|PLAY|PLUS|POHL|PORN|POST|PROD|PROF|QPON|RAID|READ|REIT|RENT|REST|RICH|RMIT|ROOM|RSVP|RUHR|SAFE|SALE|SARL|SAVE|SAXO|SCOT|SEAT|SEEK|SEXY|SHAW|SHIA|SHOP|SHOW|SILK|SINA|SITE|SKIN|SNCF|SOHU|SONG|SONY|SPOT|STAR|SURF|TALK|TAXI|TEAM|TECH|TEVA|TIAA|TIPS|TOWN|TOYS|TUBE|VANA|VISA|VIVA|VIVO|VOTE|VOTO|WANG|WEIR|WIEN|WIKI|WINE|WORK|XBOX|YOGA|ZARA|ZERO|ZONE|AAA|ABB|ABC|ACO|ADS|AEG|AFL|AIG|ANZ|AOL|APP|ART|AWS|AXA|BAR|BBC|BBT|BCG|BCN|BET|BID|BIO|BIZ|BMS|BMW|BOM|BOO|BOT|BOX|BUY|BZH|CAB|CAL|CAM|CAR|CAT|CBA|CBN|CBS|CEO|CFA|CFD|COM|CPA|CRS|CSC|DAD|DAY|DDS|DEV|DHL|DIY|DNP|DOG|DOT|DTV|DVR|EAT|ECO|EDU|ESQ|EUS|FAN|FIT|FLY|FOO|FOX|FRL|FTR|FUN|FYI|GAL|GAP|GAY|GDN|GEA|GLE|GMO|GMX|GOO|GOP|GOT|GOV|HBO|HIV|HKT|HOT|HOW|IBM|ICE|ICU|IFM|INC|ING|INK|INT|IST|ITV|JCB|JIO|JLL|JMP|JNJ|JOT|JOY|KFH|KIA|KIM|KPN|KRD|LAT|LAW|LDS|LLC|LLP|LOL|LPL|LTD|MAN|MAP|MBA|MED|MEN|MIL|MIT|MLB|MLS|MMA|MOE|MOI|MOM|MOV|MSD|MTN|MTR|NAB|NBA|NEC|NET|NEW|NFL|NGO|NHK|NOW|NRA|NRW|NTT|NYC|OBI|OFF|ONE|ONG|ONL|OOO|ORG|OTT|OVH|PAY|PET|PHD|PID|PIN|PNC|PRO|PRU|PUB|PWC|QVC|RED|REN|RIL|RIO|RIP|RUN|RWE|SAP|SAS|SBI|SBS|SCA|SCB|SES|SEW|SEX|SFR|SKI|SKY|SOY|SPA|SRL|STC|TAB|TAX|TCI|TDK|TEL|THD|TJX|TOP|TRV|TUI|TVS|UBS|UNO|UOL|UPS|VET|VIG|VIN|VIP|WED|WIN|WME|WOW|WTC|WTF|XIN|XXX|XYZ|YOU|YUN|ZIP|AC|AD|AE|AF|AG|AI|AL|AM|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CU|CV|CW|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SU|SV|SX|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TR|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|YE|YT|ZA|ZM|ZW)(?::\\d{2,5})?(?:[\\/?#]\\S*)?)$", + "Regex": "(?i)^((?:(?:https?|ftp):\\/\\/(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?::[0-9]{1,5})?)([a-z0-9-_\\/]?\\.?)*|(?:(?:https?|ftp):\\/\\/)?(?:\\S+:\\S+@)?(?:[a-z0-9-_~]+\\.)*[a-z0-9-]{1,62}\\.(?:XN--VERMGENSBERATUNG-PWB|XN--VERMGENSBERATER-CTB|XN--CLCHC0EA0B2G2A9GCD|XN--W4R85EL8FHU5DNRA|NORTHWESTERNMUTUAL|TRAVELERSINSURANCE|XN--3OQ18VL8PN36A|XN--5SU34J936BGSG|XN--BCK1B9A5DRE4C|XN--MGBAH1A3HJKRD|XN--MGBAI9AZGQP6J|XN--MGBERP4A5D4AR|XN--XKC2DL3A5EE0H|XN--FZYS8D69UVGM|XN--MGBA7C0BBN0A|XN--MGBCPQ6GPA1A|XN--XKC2AL3HYE2A|AMERICANEXPRESS|KERRYPROPERTIES|SANDVIKCOROMANT|XN--I1B6B1A6A2E|XN--KCRX77D1X4A|XN--LGBBAT1AD8J|XN--MGBA3A4F16A|XN--MGBAAKC7DVF|XN--MGBC0A9AZCG|XN--NQV7FS00EMA|AFAMILYCOMPANY|AMERICANFAMILY|BANANAREPUBLIC|CANCERRESEARCH|COOKINGCHANNEL|KERRYLOGISTICS|WEATHERCHANNEL|XN--54B7FTA0CC|XN--6QQ986B3XL|XN--80AQECDR1A|XN--B4W605FERD|XN--FIQ228C5HS|XN--H2BREG3EVE|XN--JLQ480N2RG|XN--JLQ61U9W7B|XN--MGBA3A3EJT|XN--MGBAAM7A8H|XN--MGBAYH7GPA|XN--MGBBH1A71E|XN--MGBCA7DZDO|XN--MGBI4ECEXP|XN--MGBX4CD0AB|XN--RVC1E0AM3E|INTERNATIONAL|LIFEINSURANCE|TRAVELCHANNEL|WOLTERSKLUWER|XN--CCKWCXETD|XN--ECKVDTC9D|XN--FPCRJ9C3D|XN--FZC2C9E2C|XN--H2BRJ9C8C|XN--TIQ49XQYJ|XN--YFRO4I67O|XN--YGBI2AMMX|CONSTRUCTION|LPLFINANCIAL|SCHOLARSHIPS|VERSICHERUNG|XN--3E0B707E|XN--45BR5CYL|XN--4DBRK0CE|XN--80ADXHKS|XN--80ASEHDB|XN--8Y0A063A|XN--GCKR3F0F|XN--MGB9AWBF|XN--MGBAB2BD|XN--MGBGU82A|XN--MGBPL2FH|XN--MGBT3DHD|XN--MK1BU44C|XN--NGBC5AZD|XN--NGBE9E0A|XN--OGBPF8FL|XN--QCKA1PMC|ACCOUNTANTS|BARCLAYCARD|BLACKFRIDAY|BLOCKBUSTER|BRIDGESTONE|CALVINKLEIN|CONTRACTORS|CREDITUNION|ENGINEERING|ENTERPRISES|FOODNETWORK|INVESTMENTS|KERRYHOTELS|LAMBORGHINI|MOTORCYCLES|OLAYANGROUP|PHOTOGRAPHY|PLAYSTATION|PRODUCTIONS|PROGRESSIVE|REDUMBRELLA|WILLIAMHILL|XN--11B4C3D|XN--1CK2E1B|XN--1QQW23A|XN--2SCRJ9C|XN--3BST00M|XN--3DS443G|XN--3HCRJ9C|XN--42C2D9A|XN--45BRJ9C|XN--55QW42G|XN--6FRZ82G|XN--80AO21A|XN--9KRT00A|XN--CCK2B3B|XN--CZR694B|XN--D1ACJ3B|XN--EFVY88H|XN--FCT429K|XN--FJQ720A|XN--FLW351E|XN--G2XX48C|XN--GECRJ9C|XN--GK3AT1E|XN--H2BRJ9C|XN--HXT814E|XN--IMR513N|XN--J6W193G|XN--JVR189M|XN--KPRW13D|XN--KPRY57D|XN--MGBBH1A|XN--MGBTX2B|XN--MIX891F|XN--NYQY26A|XN--OTU796D|XN--PGBS0DH|XN--Q9JYB4C|XN--RHQV96G|XN--ROVU88B|XN--S9BRJ9C|XN--SES554G|XN--T60B56A|XN--VUQ861B|XN--W4RS40L|XN--XHQ521B|XN--ZFR164B|ACCOUNTANT|APARTMENTS|ASSOCIATES|BASKETBALL|BNPPARIBAS|BOEHRINGER|CAPITALONE|CONSULTING|CREDITCARD|CUISINELLA|EUROVISION|EXTRASPACE|FOUNDATION|HEALTHCARE|IMMOBILIEN|INDUSTRIES|MANAGEMENT|MITSUBISHI|NEXTDIRECT|PROPERTIES|PROTECTION|PRUDENTIAL|REALESTATE|REPUBLICAN|RESTAURANT|SCHAEFFLER|SWIFTCOVER|TATAMOTORS|TECHNOLOGY|UNIVERSITY|VLAANDEREN|VOLKSWAGEN|XN--30RR7Y|XN--3PXU8K|XN--45Q11C|XN--4GBRIM|XN--55QX5D|XN--5TZM5G|XN--80ASWG|XN--90A3AC|XN--9DBQ2A|XN--9ET52U|XN--C2BR7G|XN--CG4BKI|XN--CZRS0T|XN--CZRU2D|XN--FIQ64B|XN--FIQS8S|XN--FIQZ9S|XN--IO0A7I|XN--KPUT3I|XN--MXTQ1M|XN--O3CW4H|XN--PSSY2U|XN--Q7CE6A|XN--UNUP4Y|XN--WGBH1C|XN--WGBL6A|XN--Y9A3AQ|ACCENTURE|ALFAROMEO|ALLFINANZ|AMSTERDAM|ANALYTICS|AQUARELLE|BARCELONA|BLOOMBERG|CHRISTMAS|COMMUNITY|DIRECTORY|EDUCATION|EQUIPMENT|FAIRWINDS|FINANCIAL|FIRESTONE|FRESENIUS|FRONTDOOR|FURNITURE|GOLDPOINT|HISAMITSU|HOMEDEPOT|HOMEGOODS|HOMESENSE|INSTITUTE|INSURANCE|KUOKGROUP|LANCASTER|LANDROVER|LIFESTYLE|MARKETING|MARSHALLS|MELBOURNE|MICROSOFT|PANASONIC|PASSAGENS|PRAMERICA|RICHARDLI|SCJOHNSON|SHANGRILA|SOLUTIONS|STATEBANK|STATEFARM|STOCKHOLM|TRAVELERS|VACATIONS|XN--90AIS|XN--C1AVG|XN--D1ALF|XN--E1A4C|XN--FHBEI|XN--J1AEF|XN--J1AMH|XN--L1ACC|XN--NGBRX|XN--NQV7F|XN--P1ACF|XN--QXA6A|XN--TCKWE|XN--VHQUV|YODOBASHI|ABUDHABI|AIRFORCE|ALLSTATE|ATTORNEY|BARCLAYS|BAREFOOT|BARGAINS|BASEBALL|BOUTIQUE|BRADESCO|BROADWAY|BRUSSELS|BUDAPEST|BUILDERS|BUSINESS|CAPETOWN|CATERING|CATHOLIC|CIPRIANI|CITYEATS|CLEANING|CLINIQUE|CLOTHING|COMMBANK|COMPUTER|DELIVERY|DELOITTE|DEMOCRAT|DIAMONDS|DISCOUNT|DISCOVER|DOWNLOAD|ENGINEER|ERICSSON|ETISALAT|EXCHANGE|FEEDBACK|FIDELITY|FIRMDALE|FOOTBALL|FRONTIER|GOODYEAR|GRAINGER|GRAPHICS|GUARDIAN|HDFCBANK|HELSINKI|HOLDINGS|HOSPITAL|INFINITI|IPIRANGA|ISTANBUL|JPMORGAN|LIGHTING|LUNDBECK|MARRIOTT|MASERATI|MCKINSEY|MEMORIAL|MERCKMSD|MORTGAGE|OBSERVER|PARTNERS|PHARMACY|PICTURES|PLUMBING|PROPERTY|REDSTONE|RELIANCE|SAARLAND|SAMSCLUB|SECURITY|SERVICES|SHOPPING|SHOWTIME|SOFTBANK|SOFTWARE|STCGROUP|SUPPLIES|TRAINING|VANGUARD|VENTURES|VERISIGN|WOODSIDE|XN--90AE|XN--NODE|XN--P1AI|XN--QXAM|YOKOHAMA|ABOGADO|ACADEMY|AGAKHAN|ALIBABA|ANDROID|ATHLETA|AUCTION|AUDIBLE|AUSPOST|AVIANCA|BANAMEX|BAUHAUS|BENTLEY|BESTBUY|BOOKING|BROTHER|BUGATTI|CAPITAL|CARAVAN|CAREERS|CHANNEL|CHARITY|CHINTAI|CITADEL|CLUBMED|COLLEGE|COLOGNE|COMCAST|COMPANY|COMPARE|CONTACT|COOKING|CORSICA|COUNTRY|COUPONS|COURSES|CRICKET|CRUISES|DENTIST|DIGITAL|DOMAINS|EXPOSED|EXPRESS|FARMERS|FASHION|FERRARI|FERRERO|FINANCE|FISHING|FITNESS|FLIGHTS|FLORIST|FLOWERS|FORSALE|FROGANS|FUJITSU|GALLERY|GENTING|GODADDY|GROCERY|GUITARS|HAMBURG|HANGOUT|HITACHI|HOLIDAY|HOSTING|HOTELES|HOTMAIL|HYUNDAI|ISMAILI|JEWELRY|JUNIPER|KITCHEN|KOMATSU|LACAIXA|LANXESS|LASALLE|LATROBE|LECLERC|LIMITED|LINCOLN|MARKETS|MONSTER|NETBANK|NETFLIX|NETWORK|NEUSTAR|OKINAWA|OLDNAVY|ORGANIC|ORIGINS|PHILIPS|PIONEER|POLITIE|REALTOR|RECIPES|RENTALS|REVIEWS|REXROTH|SAMSUNG|SANDVIK|SCHMIDT|SCHWARZ|SCIENCE|SHIKSHA|SINGLES|STAPLES|STORAGE|SUPPORT|SURGERY|SYSTEMS|TEMASEK|THEATER|THEATRE|TICKETS|TIFFANY|TOSHIBA|TRADING|WALMART|WANGGOU|WATCHES|WEATHER|WEBSITE|WEDDING|WHOSWHO|WINDOWS|WINNERS|XFINITY|YAMAXUN|YOUTUBE|ZUERICH|ABARTH|ABBOTT|ABBVIE|AFRICA|AGENCY|AIRBUS|AIRTEL|ALIPAY|ALSACE|ALSTOM|AMAZON|ANQUAN|ARAMCO|AUTHOR|BAYERN|BEAUTY|BERLIN|BHARTI|BOSTIK|BOSTON|BROKER|CAMERA|CAREER|CASINO|CENTER|CHANEL|CHROME|CHURCH|CIRCLE|CLAIMS|CLINIC|COFFEE|COMSEC|CONDOS|COUPON|CREDIT|CRUISE|DATING|DATSUN|DEALER|DEGREE|DENTAL|DESIGN|DIRECT|DOCTOR|DUNLOP|DUPONT|DURBAN|EMERCK|ENERGY|ESTATE|EVENTS|EXPERT|FAMILY|FLICKR|FUTBOL|GALLUP|GARDEN|GEORGE|GIVING|GLOBAL|GOOGLE|GRATIS|HEALTH|HERMES|HIPHOP|HOCKEY|HOTELS|HUGHES|IMAMAT|INSURE|INTUIT|JAGUAR|JOBURG|JUEGOS|KAUFEN|KINDER|KINDLE|KOSHER|LANCIA|LATINO|LAWYER|LEFRAK|LIVING|LOCKER|LONDON|LUXURY|MADRID|MAISON|MAKEUP|MARKET|MATTEL|MOBILE|MONASH|MORMON|MOSCOW|MUSEUM|MUTUAL|NAGOYA|NATURA|NISSAN|NISSAY|NORTON|NOWRUZ|OFFICE|OLAYAN|ONLINE|ORACLE|ORANGE|OTSUKA|PFIZER|PHOTOS|PHYSIO|PICTET|QUEBEC|RACING|REALTY|REISEN|REPAIR|REPORT|REVIEW|ROCHER|ROGERS|RYUKYU|SAFETY|SAKURA|SANOFI|SCHOOL|SCHULE|SEARCH|SECURE|SELECT|SHOUJI|SOCCER|SOCIAL|STREAM|STUDIO|SUPPLY|SUZUKI|SWATCH|SYDNEY|TAIPEI|TAOBAO|TARGET|TATTOO|TENNIS|TIENDA|TJMAXX|TKMAXX|TOYOTA|TRAVEL|UNICOM|VIAJES|VIKING|VILLAS|VIRGIN|VISION|VOTING|VOYAGE|VUELOS|WALTER|WEBCAM|XIHUAN|YACHTS|YANDEX|ZAPPOS|ACTOR|ADULT|AETNA|AMFAM|AMICA|APPLE|ARCHI|AUDIO|AUTOS|AZURE|BAIDU|BEATS|BIBLE|BINGO|BLACK|BOATS|BOSCH|BUILD|CANON|CARDS|CHASE|CHEAP|CISCO|CITIC|CLICK|CLOUD|COACH|CODES|CROWN|CYMRU|DABUR|DANCE|DEALS|DELTA|DRIVE|DUBAI|EARTH|EDEKA|EMAIL|EPSON|FAITH|FEDEX|FINAL|FOREX|FORUM|GALLO|GAMES|GIFTS|GIVES|GLADE|GLASS|GLOBO|GMAIL|GREEN|GRIPE|GROUP|GUCCI|GUIDE|HOMES|HONDA|HORSE|HOUSE|HYATT|IKANO|IRISH|JETZT|KOELN|KYOTO|LAMER|LEASE|LEGAL|LEXUS|LILLY|LINDE|LIPSY|LIXIL|LOANS|LOCUS|LOTTE|LOTTO|MACYS|MANGO|MEDIA|MIAMI|MONEY|MOVIE|NEXUS|NIKON|NINJA|NOKIA|NOWTV|OMEGA|OSAKA|PARIS|PARTS|PARTY|PHONE|PHOTO|PIZZA|PLACE|POKER|PRAXI|PRESS|PRIME|PROMO|QUEST|RADIO|REHAB|REISE|RICOH|ROCKS|RODEO|RUGBY|SALON|SENER|SEVEN|SHARP|SHELL|SHOES|SKYPE|SLING|SMART|SMILE|SOLAR|SPACE|SPORT|STADA|STORE|STUDY|STYLE|SUCKS|SWISS|TATAR|TIRES|TIROL|TMALL|TODAY|TOKYO|TOOLS|TORAY|TOTAL|TOURS|TRADE|TRUST|TUNES|TUSHU|UBANK|VEGAS|VIDEO|VODKA|VOLVO|WALES|WATCH|WEBER|WEIBO|WORKS|WORLD|XEROX|YAHOO|AARP|ABLE|ADAC|AERO|AKDN|ALLY|AMEX|ARAB|ARMY|ARPA|ARTE|ASDA|ASIA|AUDI|AUTO|BABY|BAND|BANK|BBVA|BEER|BEST|BIKE|BING|BLOG|BLUE|BOFA|BOND|BOOK|BUZZ|CAFE|CALL|CAMP|CARE|CARS|CASA|CASE|CASH|CBRE|CERN|CHAT|CITI|CITY|CLUB|COOL|COOP|CYOU|DATA|DATE|DCLK|DEAL|DELL|DESI|DIET|DISH|DOCS|DUCK|DVAG|ERNI|FAGE|FAIL|FANS|FARM|FAST|FIAT|FIDO|FILM|FIRE|FISH|FLIR|FOOD|FORD|FREE|FUND|GAME|GBIZ|GENT|GGEE|GIFT|GMBH|GOLD|GOLF|GOOG|GUGE|GURU|HAIR|HAUS|HDFC|HELP|HERE|HGTV|HOST|HSBC|ICBC|IEEE|IMDB|IMMO|INFO|ITAU|JAVA|JEEP|JOBS|JPRS|KDDI|KIWI|KPMG|KRED|LAND|LEGO|LGBT|LIDL|LIFE|LIKE|LIMO|LINK|LIVE|LOAN|LOFT|LOVE|LTDA|LUXE|MAIF|MEET|MEME|MENU|MINI|MINT|MOBI|MODA|MOTO|NAME|NAVY|NEWS|NEXT|NICO|NIKE|OLLO|OPEN|PAGE|PARS|PCCW|PICS|PING|PINK|PLAY|PLUS|POHL|PORN|POST|PROD|PROF|QPON|RAID|READ|REIT|RENT|REST|RICH|RMIT|ROOM|RSVP|RUHR|SAFE|SALE|SARL|SAVE|SAXO|SCOT|SEAT|SEEK|SEXY|SHAW|SHIA|SHOP|SHOW|SILK|SINA|SITE|SKIN|SNCF|SOHU|SONG|SONY|SPOT|STAR|SURF|TALK|TAXI|TEAM|TECH|TEVA|TIAA|TIPS|TOWN|TOYS|TUBE|VANA|VISA|VIVA|VIVO|VOTE|VOTO|WANG|WEIR|WIEN|WIKI|WINE|WORK|XBOX|YOGA|ZARA|ZERO|ZONE|AAA|ABB|ABC|ACO|ADS|AEG|AFL|AIG|ANZ|AOL|APP|ART|AWS|AXA|BAR|BBC|BBT|BCG|BCN|BET|BID|BIO|BIZ|BMS|BMW|BOM|BOO|BOT|BOX|BUY|BZH|CAB|CAL|CAM|CAR|CAT|CBA|CBN|CBS|CEO|CFA|CFD|COM|CPA|CRS|CSC|DAD|DAY|DDS|DEV|DHL|DIY|DNP|DOG|DOT|DTV|DVR|EAT|ECO|EDU|ESQ|EUS|FAN|FIT|FLY|FOO|FOX|FRL|FTR|FUN|FYI|GAL|GAP|GAY|GDN|GEA|GLE|GMO|GMX|GOO|GOP|GOT|GOV|HBO|HIV|HKT|HOT|HOW|IBM|ICE|ICU|IFM|INC|ING|INK|INT|IST|ITV|JCB|JIO|JLL|JMP|JNJ|JOT|JOY|KFH|KIA|KIM|KPN|KRD|LAT|LAW|LDS|LLC|LLP|LOL|LPL|LTD|MAN|MAP|MBA|MED|MEN|MIL|MIT|MLB|MLS|MMA|MOE|MOI|MOM|MOV|MSD|MTN|MTR|NAB|NBA|NEC|NET|NEW|NFL|NGO|NHK|NOW|NRA|NRW|NTT|NYC|OBI|OFF|ONE|ONG|ONL|OOO|ORG|OTT|OVH|PAY|PET|PHD|PID|PIN|PNC|PRO|PRU|PUB|PWC|QVC|RED|REN|RIL|RIO|RIP|RUN|RWE|SAP|SAS|SBI|SBS|SCA|SCB|SES|SEW|SEX|SFR|SKI|SKY|SOY|SPA|SRL|STC|TAB|TAX|TCI|TDK|TEL|THD|TJX|TOP|TRV|TUI|TVS|UBS|UNO|UOL|UPS|VET|VIG|VIN|VIP|WED|WIN|WME|WOW|WTC|WTF|XIN|XXX|XYZ|YOU|YUN|ZIP|AC|AD|AE|AF|AG|AI|AL|AM|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CR|CU|CV|CW|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SU|SV|SX|SY|SZ|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TR|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|YE|YT|ZA|ZM|ZW)(?::\\d{2,5})?(?:\\/[a-z0-9-_~.]+)*(?:[?#]\\S*)*\\/?)$", "plural_name": false, "Description": null, "Rarity": 0.7, @@ -1119,7 +1402,24 @@ "Tags": [ "Identifiers", "URL" - ] + ], + "Examples": { + "Valid": [ + "tryhackme.com", + "http://username:password@example.com/", + "hTTPs://tryhackme.com", + "https://xn--80aaxitdbjk.xn--p1ai/", + "http://10.1.1.1", + "http://10.1.1.1/just/a/test", + "https://img.shields.io/twitter/follow/bee_sec_san?style=social", + "google.com/help", + "https://www.google.com" + ], + "Invalid": [ + "tryhackme.comm", + "www..google.com" + ] + } }, { "Name": "Internet Protocol (IP) Address Version 4", @@ -1134,10 +1434,16 @@ "IP", "IPv4", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "192.0.2.235:80" + ], + "Invalid": [] + } }, { - "Name": "Bitcoin (₿) Wallet Address", + "Name": "Bitcoin (\u20bf) Wallet Address", "Regex": "^(([1][a-km-zA-HJ-NP-Z1-9]{25,35})|([3][a-km-zA-HJ-NP-Z1-9]{33})|(bc|tb)1(?!.*[1bio])[a-z0-9]{39,59})$", "plural_name": false, "Description": null, @@ -1148,11 +1454,19 @@ "Cryptocurrency Wallet", "Bitcoin Wallet", "Bitcoin" - ] + ], + "Examples": { + "Valid": [ + "1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY", + "3EmUH8Uh9EXE7axgyAeBsCc2vdUdKkDqWK", + "bc1qj89046x7zv6pm4n00qgqp505nvljnfp6xfznyw" + ], + "Invalid": [] + } }, { "Name": "Latitude & Longitude Coordinates", - "Regex": "(?i)^((?:(?:N|W|S|E)\\s?\\d+\\s?\\u00B0?\\s?\\d+\\.?\\d*\\s?\\'?\\s?\\d*\\.?\\,?\\d*?\"?\\s?){1,2}|(?:\\d+\\s?\\u00B0\\s?\\d+\\s?\\'\\s?\\d+\\.?\\,?\\d{0,}?\"\\s?(?:N|W|S|E)\\s?){1,2}|(?:[-+]?(?:[0-8]?\\d+\\.\\d{4,}|90(?:\\.0+)?),\\s*[-+]?(?:180(?:\\.0+)?|(?:(?:1[0-7]\\d)|(?:[1-9]?\\d))(?:\\.\\d+)?)))$", + "Regex": "(?i)^((?:(?:N|W|S|E)\\s?\\d+\\s?\\u00B0\\s?\\d+\\.?\\d*\\s?\\'?\\s?\\d*\\.?\\,?\\d*?\\\"?\\s?){1,2}|(?:\\d+\\s?\\u00B0\\s?\\d+\\s?\\'?\\s?\\d+\\.?\\,?\\d{0,}?\\\"?\\s?(?:N|W|S|E)\\s?){1,2}|(?:[-+]?(?:[0-8]?\\d+\\.\\d{4,}|90(?:\\.0+)?),\\s*[-+]?(?:180(?:\\.0+)?|(?:(?:1[0-7]\\d)|(?:[1-9]?\\d))(?:\\.\\d+)?))|(?:@\\d+\\.\\d{4,},\\d+.\\d{4,},\\d+z))$", "plural_name": true, "Description": null, "Rarity": 0.7, @@ -1161,7 +1475,25 @@ "Geo-location", "Lat & Long", "Coords" - ] + ], + "Examples": { + "Valid": [ + "52.6169586, -1.9779857", + "53.76297,-1.9388732", + "77\u00b0 30' 29.9988\" N", + "N 32\u00b0 53.733 W 096\u00b0 48.358", + "41\u00b024'12.2\" N 2\u00b010'26.5\" E", + "40.741895,-73.989308", + "@13.923404,101.3395163,17z" + ], + "Invalid": [ + "123N", + "E123", + "e12.23123", + "n12.1211,e1.12331", + "123.34,78.8" + ] + } }, { "Name": "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)", @@ -1184,6 +1516,18 @@ "entry": "Vendor(s): ", "method": "hashmap", "deletion_pattern": "[:.-]" + }, + "Examples": { + "Valid": [ + "00:00:00:00:00:00", + "00-00-00-00-00-00", + "0000.0000.0000" + ], + "Invalid": [ + "00-00-00-00.00-00", + "00:00-00-00-00-00", + "00:00:0G:00:00:00" + ] } }, { @@ -1198,7 +1542,13 @@ "Cryptocurrency Wallet", "Dogecoin Wallet", "Dogecoin" - ] + ], + "Examples": { + "Valid": [ + "DANHz6EQVoWyZ9rER56DwTXHWUxfkv9k2o" + ], + "Invalid": [] + } }, { "Name": "Email Address", @@ -1212,7 +1562,17 @@ "Credentials", "Email Address", "Email" - ] + ], + "Examples": { + "Valid": [ + "github@skerritt.blog", + "firstname+lastname@example.com", + "john.smith@[123.123.123.123]" + ], + "Invalid": [ + "email@example@example.com" + ] + } }, { "Name": "Phone Number", @@ -1231,6 +1591,15 @@ "path": "phone_codes.json", "entry": "Location(s): ", "method": "hashmap" + }, + "Examples": { + "Valid": [ + "202-555-0178", + "+1-202-555-0156", + "+662025550156", + "+356 202 555 0156" + ], + "Invalid": [] } }, { @@ -1245,7 +1614,23 @@ "SSN", "Social Security Number", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "001-01-0001", + "001:01:0001", + "001.01.0001", + "001 01 0001" + ], + "Invalid": [ + "900-01-2222", + "999-21-2222", + "666-21-2222", + "000-21-5544", + "122-00-5544", + "122-32-0000" + ] + } }, { "Name": "Bitly Secret Key", @@ -1260,7 +1645,13 @@ "Credentials", "API Keys", "Bitly" - ] + ], + "Examples": { + "Valid": [ + "96f79079f1d658895d188a78f303220c6f161b05" + ], + "Invalid": [] + } }, { "Name": "Visual Studio App Center API Token", @@ -1276,7 +1667,13 @@ "Bug Bounty", "Visual Studio", "Microsoft" - ] + ], + "Examples": { + "Valid": [ + "4435bc4358816be97a3f014499116c83ab224fb2" + ], + "Invalid": [] + } }, { "Name": "YouTube Channel ID", @@ -1289,7 +1686,15 @@ "Media", "YouTube", "YouTube Channel" - ] + ], + "Examples": { + "Valid": [ + "UCjXfkj5iapKHJrhYfAF9ZGg" + ], + "Invalid": [ + "078-05-1120" + ] + } }, { "Name": "Discord Bot Token", @@ -1305,7 +1710,15 @@ "Bug Bounty", "Discord", "Discord Bot" - ] + ], + "Examples": { + "Valid": [ + "NzQ4MDk3ODM3OTgzODU4NzIz.X0YeZw.UlcjuCywUAWvPH9s-3cXNBaq3M4", + "MTE4NDQyNjQ0NTAxMjk5MjAz.DPM2DQ.vLNMR02Qxb9DJFucGZK1UtTs__s", + "ODYyOTUyOTE3NTg4NjM5NzY1.YOf1iA.7lARgFXmodxpgmPvOXapaKUga6M" + ], + "Invalid": [] + } }, { "Name": "UUID", @@ -1317,7 +1730,35 @@ "Tags": [ "Identifiers", "UUID" - ] + ], + "Examples": { + "Valid": [ + "b2ced6f5-2542-4f7d-b131-e3ada95d8b75" + ], + "Invalid": [] + } + }, + { + "Name": "United States Postal Service (UPS) Tracking Number", + "Regex": "^(1Z[0-9A-Z]{6}[0-9]{10})$", + "plural_name": false, + "Description": null, + "Rarity": 0.5, + "URL": "https://www.ups.com/track?tracknum=", + "Tags": [ + "Tracking", + "Bug Bounty", + "Identifiers", + "Mailing" + ], + "Examples": { + "Valid": [ + "1Z123ABC0012345678", + "1Z9999999999999999", + "1Z999AA10123456784" + ], + "Invalid": [] + } }, { "Name": "Turkish License Plate Number", @@ -1330,7 +1771,17 @@ "Identifiers", "License Plate", "Turkish" - ] + ], + "Examples": { + "Valid": [ + "34A2344", + "34A23415", + "06BK123", + "06JK1234", + "81ABC75" + ], + "Invalid": [] + } }, { "Name": "Date of Birth", @@ -1343,7 +1794,17 @@ "Identifiers", "Date of Birth", "DOB" - ] + ], + "Examples": { + "Valid": [ + "13.08.1987", + "13081987", + "13/08/1987", + "13-08-1987", + "13 08 1987" + ], + "Invalid": [] + } }, { "Name": "Monero (XMR) Wallet Address", @@ -1357,7 +1818,13 @@ "Cryptocurrency Wallet", "Monero Wallet", "Monero" - ] + ], + "Examples": { + "Valid": [ + "47DF8D9NwtmefhFUghynYRMqrexiZTsm48T1hhi2jZcbfcwoPbkhMrrED6zqJRfeYpXFfdaqAT3jnBEwoMwCx6BYDJ1W3ub" + ], + "Invalid": [] + } }, { "Name": "Litecoin (LTC) Wallet Address", @@ -1371,7 +1838,13 @@ "Cryptocurrency Wallet", "Litecoin Wallet", "Litecoin" - ] + ], + "Examples": { + "Valid": [ + "LRX8rSPVjifTxoLeoJtLf2JYdJFTQFcE7m" + ], + "Invalid": [] + } }, { "Name": "Ripple (XRP) Wallet Address", @@ -1386,7 +1859,13 @@ "Ripple Wallet", "Ripple", "XRP" - ] + ], + "Examples": { + "Valid": [ + "rBPAQmwMrt7FDDPNyjwFgwSqbWZPf6SLkk" + ], + "Invalid": [] + } }, { "Name": "American Express Card Number", @@ -1412,7 +1891,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "6556123456789012" + ], + "Invalid": [] + } }, { "Name": "Carte Blanche Card Number", @@ -1424,7 +1909,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "30137891521480" + ], + "Invalid": [] + } }, { "Name": "Diners Club Card Number", @@ -1436,7 +1927,14 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "3056 9309 0259 04", + "30000000000004" + ], + "Invalid": [] + } }, { "Name": "Discover Card Number", @@ -1449,7 +1947,14 @@ "Credit Card", "Finance", "Discover CC" - ] + ], + "Examples": { + "Valid": [ + "6011000000000004", + "6011 1111 1111 1117" + ], + "Invalid": [] + } }, { "Name": "MasterCard Number", @@ -1469,6 +1974,12 @@ "entry": "Issuer(s): ", "deletion_pattern": "\\s", "method": "hashmap" + }, + "Examples": { + "Valid": [ + "5409010000000004", + "5409 0100 0000 0004" + ] } }, { @@ -1481,7 +1992,14 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "5038146401278870", + "6759 6498 2643 8453" + ], + "Invalid": [] + } }, { "Name": "Visa Card Number", @@ -1495,7 +2013,14 @@ "Finance", "Visa CC", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "4111111111111111", + "4607 0000 0000 0009" + ], + "Invalid": [] + } }, { "Name": "Insta Payment Card Number", @@ -1507,7 +2032,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "6387849878080951" + ], + "Invalid": [] + } }, { "Name": "JCB Card Number", @@ -1519,7 +2050,14 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "3537124887293334", + "3543824683332150682" + ], + "Invalid": [] + } }, { "Name": "Korean Local Card Number", @@ -1531,7 +2069,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "9837282929900015" + ], + "Invalid": [] + } }, { "Name": "Laser Card Number", @@ -1543,7 +2087,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "630495060000000000" + ], + "Invalid": [] + } }, { "Name": "Solo Card Number", @@ -1555,7 +2105,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "6334498823141663" + ], + "Invalid": [] + } }, { "Name": "Switch Card Number", @@ -1567,7 +2123,13 @@ "Tags": [ "Credit Card", "Finance" - ] + ], + "Examples": { + "Valid": [ + "633341812811453789" + ], + "Invalid": [] + } }, { "Name": "Ethereum (ETH) Wallet Address", @@ -1581,7 +2143,13 @@ "Cryptocurrency Wallet", "Ethereum Wallet", "Ethereum" - ] + ], + "Examples": { + "Valid": [ + "0x52908400098527886E0F7030069857D2E4169EE7" + ], + "Invalid": [] + } }, { "Name": "Slack Token", @@ -1596,7 +2164,13 @@ "Credentials", "Bug Bounty", "Slack" - ] + ], + "Examples": { + "Valid": [ + "xoxb-51465443183-hgvhXVd2ISC2x7gaoRWBOUdQ" + ], + "Invalid": [] + } }, { "Name": "Amazon Web Services Organization Identifier", @@ -1609,7 +2183,13 @@ "Identifiers", "AWS", "Amazon" - ] + ], + "Examples": { + "Valid": [ + "o-aa111bb222" + ], + "Invalid": [] + } }, { "Name": "Google API Key", @@ -1624,7 +2204,13 @@ "Credentials", "Google", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "AIzaSyD7CQl6fRhagGok6CzFGOOPne2X1u1spoA" + ], + "Invalid": [] + } }, { "Name": "Google OAuth Token", @@ -1638,7 +2224,13 @@ "Credentials", "Google", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "ya29.AHES6ZRnn6CfjjaK6GCQ84vikePv_hk4NUAJwzaAXamCL0s" + ], + "Invalid": [] + } }, { "Name": "Mailgun API Key", @@ -1653,7 +2245,13 @@ "Credentials", "Bug Bounty", "Mailgun" - ] + ], + "Examples": { + "Valid": [ + "key-1e1631a9414aff7c262721e7b6ff6e43" + ], + "Invalid": [] + } }, { "Name": "Twilio API Key", @@ -1668,7 +2266,13 @@ "Credentials", "Bug Bounty", "Twilio" - ] + ], + "Examples": { + "Valid": [ + "SK012dab2d3f4dab1c2f33dffafdf23142" + ], + "Invalid": [] + } }, { "Name": "Twilio Account SID", @@ -1682,7 +2286,13 @@ "API Keys", "Credentials", "Twilio" - ] + ], + "Examples": { + "Valid": [ + "AC10a133ffdfb112abb2d3f42d1d2d3b14" + ], + "Invalid": [] + } }, { "Name": "Twilio Application SID", @@ -1695,7 +2305,13 @@ "API Keys", "Credentials", "Twilio" - ] + ], + "Examples": { + "Valid": [ + "APfff01abd2b134a2aff3adc243ab211ab" + ], + "Invalid": [] + } }, { "Name": "Google ReCaptcha API Key", @@ -1710,7 +2326,13 @@ "Credentials", "Google", "Bug Bounty" - ] + ], + "Examples": { + "Valid": [ + "6Le3W6QUAAAANNT8X_9JwlNnK4kZGLaYTB3KqFLM" + ], + "Invalid": [] + } }, { "Name": "Amazon Standard Identification Number (ASIN)", @@ -1722,7 +2344,35 @@ "Tags": [ "Identifiers", "Amazon" - ] + ], + "Examples": { + "Valid": [ + "B07ND5BB8V" + ], + "Invalid": [] + } + }, + { + "Name": "Facebook App Token", + "Regex": "^([0-9]{6,}\\|[A-Za-z0-9\\-]{24,})$", + "plural_name": false, + "Description": null, + "Exploit": null, + "Rarity": 0.3, + "URL": "https://developers.facebook.com/tools/debug/accesstoken/?access_token=", + "Tags": [ + "API Keys", + "Bug Bounty", + "Credentials", + "Facebook" + ], + "Examples": { + "Valid": [ + "1201566843289141|401fec62f46bc340d4c0e7e75132f731", + "1201566843289141|WG1OAKQ-dY0lSj5NKyA6uFkvF7w" + ], + "Invalid": [] + } }, { "Name": "JSON Web Token (JWT)", @@ -1736,7 +2386,13 @@ "Website", "JWT Token", "JWT" - ] + ], + "Examples": { + "Valid": [ + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" + ], + "Invalid": [] + } }, { "Name": "Amazon Web Services Access Key", @@ -1751,7 +2407,14 @@ "API Keys", "AWS", "Amazon" - ] + ], + "Examples": { + "Valid": [ + "AKIA31OMZKYAARWZ3ERH", + "AKIAIOSFODNN7EXAMPLE" + ], + "Invalid": [] + } }, { "Name": "Amazon Web Services Secret Access Key", @@ -1767,11 +2430,17 @@ "AWS", "Bug Bounty", "Amazon" - ] + ], + "Examples": { + "Valid": [ + "Nw0XP0t2OdyUkaIk3B8TaAa2gEXAMPLEMvD2tW+g" + ], + "Invalid": [] + } }, { - "Name": "Amazon Web Services EC2 Instance Identifier", - "Regex": "(?i)^(\\b[a-z]+-[a-z0-9]+)$", + "Name": "Amazon Web Services EC2 Instance ID", + "Regex": "(?i)^(i-([a-z0-9]{8}|[a-z0-9]{17}))$", "plural_name": false, "Description": null, "Rarity": 0.2, @@ -1780,7 +2449,14 @@ "Identifiers", "AWS", "Amazon" - ] + ], + "Examples": { + "Valid": [ + "i-1234567890abcdef0", + "i-1a2b3c4d" + ], + "Invalid": [] + } }, { "Name": "Turkish Identification Number", @@ -1793,7 +2469,36 @@ "Credentials", "Identifiers", "Turkish" - ] + ], + "Examples": { + "Valid": [ + "12345678902", + "12345678900" + ], + "Invalid": [] + } + }, + { + "Name": "Facebook Access Token", + "Regex": "^(EA[0-9A-Za-z]{190,})$", + "plural_name": false, + "Description": null, + "Exploit": null, + "Rarity": 0.2, + "URL": "https://developers.facebook.com/tools/debug/accesstoken/?access_token=", + "Tags": [ + "API Keys", + "Bug Bounty", + "Credentials", + "Facebook" + ], + "Examples": { + "Valid": [ + "EAARE0ZATePjUBAFxfm2L2aWdtNXOSscOnMYktEPYJuOSrteSQZCh9VWVVKnhSSYNumEnju6XItaRhija3pA7LFPHquTbi4IDZC8k9EMByeQ4NJzCFsc40FMIQIgvnCTOK5qt6xBZCUMf7S95X6nnqCUVw2iS0DRDbqttxauxIDgBRYJ7zZABXe9V0CY872DUl3BfyINIYfCXmRZC8loACc", + "EAARE0ZATePjUBAHVHoVVbRc9N0u2lNC5eJab59qwD9mG5ZCRgcg3qlbPZC07EkP65Ji3BnPzPKZBMqN7WyOfJ8Riky4RD66aSqX8U0d14EWwHx94rZCtM6qfULiXOrqWKiG2KLyJJnRzAus3ubodKUwTuZCBcPmcGJcvq5Krfk8xgLQVZBoFLGLJs5wT4SlBxiWAdytlggqzQZDZD" + ], + "Invalid": [] + } }, { "Name": "ObjectID", @@ -1805,9 +2510,14 @@ "Tags": [ "Identifiers", "ObjectID" - ] + ], + "Examples": { + "Valid": [ + "5fc7c33a7ef88b139122a38a" + ], + "Invalid": [] + } }, - { "Name": "Recent Unix Timestamp", "Regex": "^([0-9]{10})$", @@ -1819,7 +2529,16 @@ "UNIX Timestamp", "Timestamp", "UNIX" - ] + ], + "Examples": { + "Valid": [ + "1577836800" + ], + "Invalid": [ + "94694400", + "1234567" + ] + } }, { "Name": "Recent Unix Millisecond Timestamp", @@ -1832,7 +2551,15 @@ "UNIX Timestamp", "Timestamp", "UNIX" - ] + ], + "Examples": { + "Valid": [ + "1577836800000" + ], + "Invalid": [ + "94694400000" + ] + } }, { "Name": "Unix Timestamp", @@ -1845,7 +2572,16 @@ "UNIX Timestamp", "Timestamp", "UNIX" - ] + ], + "Examples": { + "Valid": [ + "1577836800", + "94694400" + ], + "Invalid": [ + "1234567" + ] + } }, { "Name": "Unix Millisecond Timestamp", @@ -1858,7 +2594,14 @@ "UNIX Timestamp", "Timestamp", "UNIX" - ] + ], + "Examples": { + "Valid": [ + "1577836800000", + "94694400000" + ], + "Invalid": [] + } }, { "Name": "ULID", @@ -1870,7 +2613,13 @@ "Tags": [ "Identifiers", "ULID" - ] + ], + "Examples": { + "Valid": [ + "01ERJ58HMWDN3VTRRHZQV2T5R5" + ], + "Invalid": [] + } }, { "Name": "YouTube Video ID", @@ -1883,7 +2632,13 @@ "Media", "YouTube Video", "YouTube" - ] + ], + "Examples": { + "Valid": [ + "dQw4w9WgXcQ" + ], + "Invalid": [] + } }, { "Name": "Turkish Tax Number", @@ -1896,7 +2651,13 @@ "Credentials", "Identifiers", "Turkish" - ] + ], + "Examples": { + "Valid": [ + "1234567890" + ], + "Invalid": [] + } }, { "Name": "Key:Value Pair", @@ -1907,6 +2668,12 @@ "URL": null, "Tags": [ "Credentials" - ] + ], + "Examples": { + "Valid": [ + "james:S3cr37_P@$$W0rd" + ], + "Invalid": [] + } } ] diff --git a/pywhat/__init__.py b/pywhat/__init__.py index 8be36c6..d1b290a 100644 --- a/pywhat/__init__.py +++ b/pywhat/__init__.py @@ -2,18 +2,16 @@ from pywhat.helper import AvailableTags, Keys from pywhat.identifier import Identifier -__version__ = "4.3.1" +__version__ = "5.0.0" tags = AvailableTags().get_tags() pywhat_tags = tags # left for backward compatibility purposes -_contents = ["Identifier", "Distribution", "tags", "pywhat_tags", "Keys", "Filter"] +__all__ = ["Identifier", "Distribution", "tags", "pywhat_tags", "Keys", "Filter"] -__all__ = _contents - del AvailableTags, filter def __dir__(): - return _contents + ["__version__"] + return __all__ + ["__version__"] diff --git a/pywhat/filter.py b/pywhat/filter.py index aa47c00..30fe5f6 100644 --- a/pywhat/filter.py +++ b/pywhat/filter.py @@ -91,14 +91,11 @@ def __len__(self): return len(self._dict) def __contains__(self, item): - try: - return ( - self["MinRarity"] <= item["Rarity"] <= self["MaxRarity"] - and set(item["Tags"]) & self["Tags"] - and not set(item["Tags"]) & self["ExcludeTags"] - ) - except: - return False + return ( + self["MinRarity"] <= item["Rarity"] <= self["MaxRarity"] + and set(item["Tags"]) & self["Tags"] + and not set(item["Tags"]) & self["ExcludeTags"] + ) def setdefault(self, key, default=None): return self._dict.setdefault(key, default) diff --git a/pywhat/helper.py b/pywhat/helper.py index 233de6b..581ab93 100644 --- a/pywhat/helper.py +++ b/pywhat/helper.py @@ -86,9 +86,15 @@ def issubset(self, other): class Keys(Enum): - NAME = lambda match: match["Regex Pattern"]["Name"] - RARITY = lambda match: match["Regex Pattern"]["Rarity"] - MATCHED = lambda match: match["Matched"] + def NAME(match): + return match["Regex Pattern"]["Name"] + + def RARITY(match): + return match["Regex Pattern"]["Rarity"] + + def MATCHED(match): + return match["Matched"] + NONE = auto() diff --git a/pywhat/regex_identifier.py b/pywhat/regex_identifier.py index 3d47638..fd4f592 100644 --- a/pywhat/regex_identifier.py +++ b/pywhat/regex_identifier.py @@ -1,4 +1,3 @@ -import copy import re from typing import Optional @@ -28,7 +27,7 @@ def check( reg["Boundaryless Regex"] if reg in boundaryless else reg["Regex"] ) for matched_regex in re.finditer(regex, string, re.MULTILINE): - reg_match = copy.deepcopy(reg) + reg_match = dict(reg) matched = self.clean_text(matched_regex.group(0)) if ( diff --git a/pywhat/what.py b/pywhat/what.py index cb6c91d..5627bda 100644 --- a/pywhat/what.py +++ b/pywhat/what.py @@ -120,7 +120,7 @@ def get_text(ctx, opts, value): required=False, help="Format output according to specified rules.", ) -@click.option("-pt", "--print-tags", is_flag=True, help="Add flags to ouput") +@click.option("-pt", "--print-tags", is_flag=True, help="Add flags to output") def main(**kwargs): """ pyWhat - Identify what something is. @@ -193,7 +193,7 @@ def main(**kwargs): pretty - Output data in the table - json - Ouput data in json format + json - Output data in json format CUSTOM_STRING - Print data in the way you want. For every match CUSTOM_STRING will be printed and '%x' (See below for possible x values) will be substituted with a match value. @@ -214,15 +214,15 @@ def main(**kwargs): %d - description (will not output if absent) - %e - exploit (will not ouput if absent) + %e - exploit (will not output if absent) %r - rarity - %l - link (will not ouput if absent) + %l - link (will not output if absent) %t - tags (in 'tag1, tag2 ...' format) - If you want to print '%' or '\' character - escape it: '\%', '\\'. + If you want to print '%' or '\\' character - escape it: '\\%', '\\\\'. Examples: diff --git a/scripts/format_regex.py b/scripts/format_regex.py new file mode 100644 index 0000000..88d59ba --- /dev/null +++ b/scripts/format_regex.py @@ -0,0 +1,8 @@ +import json + +with open("pywhat/Data/regex.json") as file: + database = json.load(file) + + +with open("pywhat/Data/regex.json", "w") as file: + json.dump(database, file, indent=3) diff --git a/tests/test_click.py b/tests/test_click.py index 6c900f9..cdaf5ec 100644 --- a/tests/test_click.py +++ b/tests/test_click.py @@ -350,6 +350,20 @@ def test_file_fixture_xmr(): assert re.findall("Monero", str(result.output)) +def test_file_fixture_doi(): + runner = CliRunner() + result = runner.invoke(main, ["-db", "fixtures/file"]) + assert result.exit_code == 0 + assert re.findall("DOI", str(result.output)) + + +def test_file_fixture_mailchimp(): + runner = CliRunner() + result = runner.invoke(main, ["-db", "fixtures/file"]) + assert result.exit_code == 0 + assert re.findall("Mailchimp", str(result.output)) + + def test_file_cors(): runner = CliRunner() result = runner.invoke(main, ["-db", "Access-Control-Allow: *"]) @@ -639,6 +653,13 @@ def test_file_fixture_sshpass(): assert re.findall("SSHPass Clear Password Argument", str(result.output)) +def test_file_fixture_slack_webhook(): + runner = CliRunner() + result = runner.invoke(main, ["fixtures/file"]) + assert result.exit_code == 0 + assert re.findall("Slack Webhook", str(result.output)) + + def test_format(): runner = CliRunner() result = runner.invoke( diff --git a/tests/test_filtration.py b/tests/test_filtration.py index 44e50fd..b7461c4 100644 --- a/tests/test_filtration.py +++ b/tests/test_filtration.py @@ -101,7 +101,7 @@ def test_distribution6(): def test_distribution7(): with pytest.raises(InvalidTag): - dist = Distribution({"Tags": "Media", "MinRarity": 0.7}) + Distribution({"Tags": "Media", "MinRarity": 0.7}) def test_filter(): diff --git a/tests/test_identifier.py b/tests/test_identifier.py index 1fd0770..b90801c 100644 --- a/tests/test_identifier.py +++ b/tests/test_identifier.py @@ -2,7 +2,7 @@ from pywhat import identifier from pywhat.filter import Distribution, Filter -from pywhat.helper import Keys, load_regexes +from pywhat.helper import Keys r = identifier.Identifier() @@ -99,7 +99,7 @@ def test_identifier_sorting6(): def test_only_text(): out = r.identify("fixtures/file") - assert None == out["Regexes"] + assert out["Regexes"] is None out = r.identify("THM{7281j}}", only_text=True) assert "TryHackMe Flag Format" in out["Regexes"]["text"][0]["Regex Pattern"]["Name"] diff --git a/tests/test_regex_formatting.py b/tests/test_regex_database.py similarity index 59% rename from tests/test_regex_formatting.py rename to tests/test_regex_database.py index 65b5cc2..21e0b4d 100644 --- a/tests/test_regex_formatting.py +++ b/tests/test_regex_database.py @@ -1,10 +1,25 @@ import re +import pytest + from pywhat.helper import load_regexes database = load_regexes() +@pytest.mark.skip( + reason="Not all regex have tests now, check https://github.com/bee-san/pyWhat/pull/146#issuecomment-927087231 for info." +) +def test_if_all_tests_exist(): + with open("tests/test_regex_identifier.py", "r", encoding="utf-8") as file: + tests = file.read() + + for regex in database: + assert ( + regex["Name"] in tests + ), "No test for this regex found in 'test_regex_identifier.py'. Note that a test needs to assert the whole name." + + def test_name_capitalization(): for entry in database: entry_name = entry["Name"] @@ -36,16 +51,17 @@ def test_regex_format(): def test_check_keys(): for entry in database: - keys = list(entry.keys()) - entry_name = entry["Name"] - - assert "Name" in keys, entry_name - assert "Regex" in keys, entry_name - assert "plural_name" in keys, entry_name - assert "Description" in keys, entry_name - assert "Rarity" in keys, entry_name - assert "URL" in keys, entry_name - assert "Tags" in keys, entry_name + for key in [ + "Name", + "Regex", + "plural_name", + "Description", + "Rarity", + "URL", + "Tags", + # "Examples", # TODO + ]: + assert key in entry, f"{key} is missing in {entry['Name']}" def test_sorted_by_rarity(): @@ -54,3 +70,11 @@ def test_sorted_by_rarity(): assert rarity_num == sorted( rarity_num, reverse=True ), "Regexes should be sorted by rarity in 'regex.json'. Regexes with rarity '1' are at the top of the file and '0' is at the bottom." + + +def test_no_duplicate_regexes(): + names = [regex["Name"] for regex in database] + duplicate_names = {name for name in names if names.count(name) > 1} + assert duplicate_names == set(), ( + ", ".join(duplicate_names) + " present in 'regex.json' more than once." + ) diff --git a/tests/test_regex_identifier.py b/tests/test_regex_identifier.py index 52a1de6..c441a1a 100644 --- a/tests/test_regex_identifier.py +++ b/tests/test_regex_identifier.py @@ -1,5 +1,3 @@ -import re - import pytest from pywhat import regex_identifier @@ -8,1056 +6,88 @@ database = load_regexes() r = regex_identifier.RegexIdentifier() -filter1 = Filter({"MinRarity": 0.0}) -d = Distribution(filter1) -r_rarity_0 = regex_identifier.RegexIdentifier() - - -def _assert_match_first_item(name, res): - assert name in res[0]["Regex Pattern"]["Name"] - - -def _assert_match_exploit_first_item(search, res): - assert search in res[0]["Regex Pattern"]["Exploit"] +dist = Distribution(Filter({"MinRarity": 0.0})) def test_regex_successfully_parses(): - assert "Name" in r.distribution.get_regexes()[0] - - -def _assert_match_in_items(name, res): - assert any(name in i["Regex Pattern"]["Name"] for i in res) - - -@pytest.mark.skip( - reason="Not all regex have tests now, check https://github.com/bee-san/pyWhat/pull/146#issuecomment-927087231 for info." -) -def test_if_all_tests_exist(): - with open("tests/test_regex_identifier.py", "r", encoding="utf-8") as file: - tests = file.read() - - for regex in database: - assert ( - regex["Name"] in tests - ), "No test for this regex found in 'test_regex_identifier.py'. Note that a test needs to assert the whole name." - - -def test_dogecoin(): - res = r.check(["DANHz6EQVoWyZ9rER56DwTXHWUxfkv9k2o"]) - _assert_match_first_item("Dogecoin (DOGE) Wallet Address", res) - - -def test_url(): - res = r.check(["tryhackme.com"]) - _assert_match_first_item("Uniform Resource Locator (URL)", res) - - -def test_url_2(): - res = r.check(["http://username:password@example.com/"]) - _assert_match_first_item("Uniform Resource Locator (URL)", res) - - -def test_invalid_tld(): - res = r.check(["tryhackme.comm"]) - assert "Uniform Resource Locator (URL)" not in res - - -def test_https(): - res = r.check(["hTTPs://tryhackme.com"]) - _assert_match_first_item("Uniform Resource Locator (URL)", res) - - -def test_lat_long(): - res = r.check(["52.6169586, -1.9779857"]) - _assert_match_first_item("Latitude & Longitude Coordinates", res) - + regexes = r.distribution.get_regexes() + assert type(regexes) == list + assert len(regexes) != 0 + assert all([type(regex) == dict for regex in regexes]) -def test_lat_long2(): - res = r.check(["53.76297,-1.9388732"]) - _assert_match_first_item("Latitude & Longitude Coordinates", res) - -def test_lat_long3(): - res = r.check(["77\u00B0 30' 29.9988\" N"]) - _assert_match_first_item("Latitude & Longitude Coordinates", res) - - -def test_lat_long4(): - # degree symbol has to be a unicode character, otherwise Windows will not understand it - res = r.check(["N 32\u00B0 53.733 W 096\u00B0 48.358"]) - _assert_match_first_item("Latitude & Longitude Coordinates", res) - - -def test_lat_long5(): - res = r.check(["41\u00B024'12.2\" N 2\u00B010'26.5\" E"]) - _assert_match_first_item("Latitude & Longitude Coordinates", res) - - -def test_lat_long6(): - res = r.check(["40.741895,-73.989308"]) - _assert_match_first_item("Latitude & Longitude Coordinates", res) - - -def test_ip(): - res = r.check( - ["http://10.1.1.1/just/a/test"], - boundaryless=Filter({"Tags": ["Identifiers"]}), - ) - _assert_match_first_item("Uniform Resource Locator (URL)", res) - assert "Internet Protocol (IP) Address Version 4" in res[1]["Regex Pattern"]["Name"] - - -def test_ip_not_url(): - res = r.check(["http://10.1.1.1"]) - assert "Uniform Resource Locator (URL)" not in res[0] - - -def test_ip2(): - res = r.check(["192.0.2.235:80"]) - assert "192.0.2.235:80" in res[0]["Matched"] - - -def test_ip3(): - res = r.check(["2001:0db8:85a3:0000:0000:8a2e:0370:7334"]) - _assert_match_first_item("Internet Protocol (IP) Address Version 6", res) - - -def test_ip4(): - res = r.check(["[2001:db8::1]:8080"]) - assert "[2001:db8::1]:8080" in res[0]["Matched"] - - -def test_mac(): - res = r.check(["00:00:00:00:00:00"]) - assert ( - res - and "00:00:00:00:00:00" in res[0]["Matched"] - and res[0]["Regex Pattern"]["Name"] - == "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)" - and "Xerox Corp" in res[0]["Regex Pattern"]["Description"] - ) - - -def test_mac2(): - res = r.check(["00-00-00-00-00-00"]) - assert ( - res - and "00-00-00-00-00-00" in res[0]["Matched"] - and res[0]["Regex Pattern"]["Name"] - == "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)" - and "Xerox Corp" in res[0]["Regex Pattern"]["Description"] +def regex_valid_match(name: str, match: str) -> bool: + return any( + name in matched["Regex Pattern"]["Name"] + for matched in r.check([match], dist=dist) ) -def test_mac3(): - res = r.check(["0000.0000.0000"]) - assert ( - res - and "0000.0000.0000" in res[0]["Matched"] - and res[0]["Regex Pattern"]["Name"] - == "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)" - and "Xerox Corp" in res[0]["Regex Pattern"]["Description"] - ) - - -def test_mac4(): - res = r.check(["00-00-00-00.00-00"]) - assert ( - not res - or res[0]["Regex Pattern"]["Name"] - != "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)" - ) - - -def test_mac5(): - res = r.check(["00:00-00-00-00-00"]) - assert ( - not res - or res[0]["Regex Pattern"]["Name"] - != "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)" - ) +@pytest.mark.parametrize( + "name,match", + [ + (regex["Name"], match) + for regex in database + for match in regex.get("Examples", {}).get("Valid", []) + ], +) +def test_regex_valid_match(name: str, match: str): + assert regex_valid_match(name, match) -def test_mac6(): - res = r.check(["00:00:0G:00:00:00"]) - assert ( - not res - or res[0]["Regex Pattern"]["Name"] - != "EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)" - ) +@pytest.mark.parametrize( + "name,match", + [ + (regex["Name"], match) + for regex in database + for match in regex.get("Examples", {}).get("Invalid", []) + ], +) +def test_regex_invalid_match(name: str, match: str): + assert not regex_valid_match(name, match) @pytest.mark.skip( reason="Fails because not a valid TLD. If presented in punycode, it works." ) def test_international_url(): - res = r.check(["http://папироска.рф"]) - _assert_match_first_item("Uniform Resource Locator (URL)", res) - - -def test_same_international_url_in_punycode(): - res = r.check(["https://xn--80aaxitdbjk.xn--p1ai/"]) - _assert_match_first_item("Uniform Resource Locator (URL)", res) - - -def test_ctf_flag(): - res = r.check(["thm{hello}"]) - _assert_match_first_item("TryHackMe Flag Format", res) - - -def test_ctf_flag_uppercase(): - res = r.check(["FLAG{hello}"]) - _assert_match_first_item("Capture The Flag (CTF) Flag", res) - - -def test_htb_flag(): - res = r.check(["htb{just_a_test}"]) - _assert_match_first_item("HackTheBox Flag Format", res) - - -def test_ethereum(): - res = r.check(["0x52908400098527886E0F7030069857D2E4169EE7"]) - _assert_match_first_item("Ethereum (ETH) Wallet Address", res) - - -def test_bitcoin_p2pkh(): - res = r.check(["1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY"]) - _assert_match_first_item("Bitcoin (₿) Wallet Address", res) - - -def test_bitcoin_p2sh(): - res = r.check(["3EmUH8Uh9EXE7axgyAeBsCc2vdUdKkDqWK"]) - _assert_match_first_item("Bitcoin (₿) Wallet Address", res) - - -def test_bitcoin_bech32(): - res = r.check(["bc1qj89046x7zv6pm4n00qgqp505nvljnfp6xfznyw"]) - _assert_match_first_item("Bitcoin (₿) Wallet Address", res) - - -def test_monero(): - res = r.check( - [ - "47DF8D9NwtmefhFUghynYRMqrexiZTsm48T1hhi2jZcbfcwoPbkhMrrED6zqJRfeYpXFfdaqAT3jnBEwoMwCx6BYDJ1W3ub" - ] - ) - _assert_match_first_item("Monero (XMR) Wallet Address", res) - - -def test_litecoin(): - res = r.check(["LRX8rSPVjifTxoLeoJtLf2JYdJFTQFcE7m"]) - _assert_match_first_item("Litecoin (LTC) Wallet Address", res) - - -def test_visual_studio_token(): - res = r.check(["4435bc4358816be97a3f014499116c83ab224fb2"]) - _assert_match_in_items("Visual Studio App Center API Token", res) - - -def test_npm_token(): - res = r.check(["npm_ir3kktsOr4JeXqeD72C3cWo2mbs5sQ2pfnt9"]) - _assert_match_first_item("Node Package Manager (NPM) Token", res) - - -def test_bitly_secret_key(): - res = r.check(["96f79079f1d658895d188a78f303220c6f161b05"]) - _assert_match_in_items("Bitly Secret Key", res) - - -def test_bitcoincash(): - res = r.check(["bitcoincash:qzlg6uvceehgzgtz6phmvy8gtdqyt6vf359at4n3lq"]) - _assert_match_first_item("Bitcoin Cash (BCH) Wallet Address", res) - - -def test_ripple(): - res = r.check(["rBPAQmwMrt7FDDPNyjwFgwSqbWZPf6SLkk"]) - _assert_match_first_item("Ripple (XRP) Wallet Address", res) - - -def test_visa(): - res = r.check(["4111111111111111"]) - _assert_match_first_item("Visa Card Number", res) - - -def test_visa_spaces(): - res = r.check(["4607 0000 0000 0009"]) - _assert_match_first_item("Visa Card Number", res) - - -def test_master_Card(): - res = r.check(["5409010000000004"]) - _assert_match_first_item("MasterCard Number", res) - assert "UNION NATIONAL BANK" in res[0]["Regex Pattern"]["Description"] - - -def test_master_card_spaces(): - res = r.check(["5409 0100 0000 0004"]) - _assert_match_first_item("MasterCard Number", res) - assert "UNION NATIONAL BANK" in res[0]["Regex Pattern"]["Description"] - - -def test_american_express(): - res = r.check(["340000000000009"]) - _assert_match_first_item("American Express Card Number", res) - - -def test_american_express_spaces(): - res = r.check(["3714 4963 5398 431"]) - _assert_match_first_item("American Express Card Number", res) - - -def test_american_diners_club(): - res = r.check(["30000000000004"]) - assert "Diners Club Card Number" in res[1]["Regex Pattern"]["Name"] - - -def test_american_diners_club_spaces(): - res = r.check(["3056 9309 0259 04"]) - _assert_match_first_item("Diners Club Card Number", res) - - -def test_discover_card(): - res = r.check(["6011000000000004"]) - _assert_match_first_item("Discover Card Number", res) - - -def test_discover_card_spaces(): - res = r.check(["6011 1111 1111 1117"]) - _assert_match_first_item("Discover Card Number", res) - - -def test_maestro_card(): - res = r.check(["5038146401278870"]) - _assert_match_first_item("Maestro Card Number", res) - - -def test_maestro_card_spaces(): - res = r.check(["6759 6498 2643 8453"]) - _assert_match_first_item("Maestro Card Number", res) - - -@pytest.mark.skip("Key:Value Pair is not ran by default because of low rarity.") -def test_username(): - res = r.check(["james:S3cr37_P@$$W0rd"]) - _assert_match_first_item("Key:Value Pair", res) - - -def test_email(): - res = r.check(["github@skerritt.blog"]) - _assert_match_first_item("Email Address", res) - - -def test_email2(): - res = r.check(["firstname+lastname@example.com"]) - _assert_match_first_item("Email Address", res) - - -def test_email3(): - res = r.check( - ["john.smith@[123.123.123.123]"], - boundaryless=Filter({"Tags": ["Identifiers"]}), - ) - assert "Email Address" in res[2]["Regex Pattern"]["Name"] - - -def test_email4(): - res = r.check(["email@example@example.com"]) - assert "Email Address" not in res - - -def test_phone_number(): - res = r.check(["202-555-0178"]) - _assert_match_first_item("Phone Number", res) - - -def test_phone_number2(): - res = r.check(["+1-202-555-0156"]) - _assert_match_first_item("Phone Number", res) - assert "United States" in res[0]["Regex Pattern"]["Description"] - - -def test_phone_number3(): - res = r.check(["+662025550156"]) - _assert_match_first_item("Phone Number", res) - assert "Thailand" in res[0]["Regex Pattern"]["Description"] - - -def test_phone_number4(): - res = r.check(["+356 202 555 0156"]) - _assert_match_first_item("Phone Number", res) - assert "Malta" in res[0]["Regex Pattern"]["Description"] - - -def test_youtube(): - res = r.check(["https://www.youtube.com/watch?v=ScOAntcCa78"]) - _assert_match_first_item("YouTube Video", res) - - -def test_youtube2(): - res = r.check(["http://www.youtube.com/watch?v=dQw4w9WgXcQ"]) - _assert_match_first_item("YouTube Video", res) - - -def test_youtube_id(): - res = r.check(["dQw4w9WgXcQ"], dist=d) - _assert_match_first_item("YouTube Video ID", res) - - -def test_youtube_id2(): - res = r.check(["078-05-1120"], dist=d) - assert "YouTube Video ID" not in res - - -def test_youtube_channel_id(): - res = r.check(["UCjXfkj5iapKHJrhYfAF9ZGg"]) - _assert_match_first_item("YouTube Channel ID", res) - - -def test_ssn(): - res = r.check(["001-01-0001"]) - _assert_match_first_item("American Social Security Number", res) - - -def test_ssn2(): - res = r.check(["001:01:0001"]) - _assert_match_first_item("American Social Security Number", res) - - -def test_ssn3(): - res = r.check(["001.01.0001"]) - _assert_match_first_item("American Social Security Number", res) - - -def test_ssn4(): - res = r.check(["001 01 0001"]) - _assert_match_first_item("American Social Security Number", res) - - -def test_ssn5(): - res = r.check(["900-01-2222"]) - assert "American Social Security Number" not in str(res) - - -def test_ssn6(): - res = r.check(["999-21-2222"]) - assert "American Social Security Number" not in str(res) - - -def test_ssn7(): - res = r.check(["666-21-2222"]) - assert "American Social Security Number" not in str(res) - - -def test_ssn8(): - res = r.check(["000-21-5544"]) - assert "American Social Security Number" not in str(res) - - -def test_ssn9(): - res = r.check(["122-00-5544"]) - assert "American Social Security Number" not in str(res) - - -def test_ssn10(): - res = r.check(["122-32-0000"]) - assert "American Social Security Number" not in str(res) - - -def test_cors(): - res = r.check(["Access-Control-Allow: *"]) - _assert_match_first_item("Access-Control-Allow-Header", res) - - -def test_jwt(): - res = r.check( - [ - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" - ] - ) - _assert_match_first_item("JSON Web Token (JWT)", res) - - -def test_s3(): - res = r.check(["http://s3.amazonaws.com/bucket/"]) - _assert_match_first_item("Amazon Web Services Simple Storage (AWS S3) URL", res) - - -def test_s3_internal(): - res = r.check(["s3://bucket/path/key"]) - _assert_match_first_item( - "Amazon Web Services Simple Storage (AWS S3) Internal URL", res - ) - - -def test_s3_internal2(): - res = r.check(["s3://bucket/path/directory/"]) - _assert_match_first_item( - "Amazon Web Services Simple Storage (AWS S3) Internal URL", res - ) - - -def test_arn(): - res = r.check(["arn:partition:service:region:account-id:resource"]) - _assert_match_first_item("Amazon Resource Name (ARN)", res) - - -def test_arn2(): - res = r.check(["arn:partition:service:region:account-id:resourcetype/resource"]) - _assert_match_first_item("Amazon Resource Name (ARN)", res) - - -def test_arn3(): - res = r.check(["arn:partition:service:region:account-id:resourcetype:resource"]) - _assert_match_first_item("Amazon Resource Name (ARN)", res) - - -def test_arn4(): - res = r.check(["arn:aws:s3:::my_corporate_bucket/Development/*"]) - _assert_match_first_item("Amazon Resource Name (ARN)", res) - - -def test_unix_timestamp(): - res = r.check(["1577836800"], dist=d) # 2020-01-01 - keys = [m["Regex Pattern"]["Name"] for m in res] - assert "Unix Timestamp" in keys - assert "Recent Unix Timestamp" in keys - - -def test_unix_timestamp2(): - res = r.check(["94694400"], dist=d) # 1973-01-01 - keys = [m["Regex Pattern"]["Name"] for m in res] - assert "Unix Timestamp" in keys - assert "Recent Unix Timestamp" not in keys - - -def test_unix_timestamp3(): - res = r.check(["1234567"], dist=d) # 7 numbers - keys = [m["Regex Pattern"]["Name"] for m in res] - assert "Unix Timestamp" not in keys - assert "Recent Unix Timestamp" not in keys - - -def test_unix_timestamp4(): - res = r.check(["1577836800000"], dist=d) # 2020-01-01 - keys = [m["Regex Pattern"]["Name"] for m in res] - assert "Unix Millisecond Timestamp" in keys - assert "Recent Unix Millisecond Timestamp" in keys - - -def test_unix_timestamp5(): - res = r.check(["94694400000"], dist=d) # 1973-01-01 - keys = [m["Regex Pattern"]["Name"] for m in res] - assert "Unix Millisecond Timestamp" in keys - assert "Recent Unix Millisecond Timestamp" not in keys - - -def test_ssh_rsa_key(): - res = r.check( - [ - "ssh-rsa AAAAB3NzaC1tc2EAAAADAQABAAACAQDrnjkGtf3iA46rtwsvRiscvMTCw30l5Mmln/sf8Wohg4RPc7nuIx3/fB86K9jzBNoQk6Fb00p2cSW0dX6c3OTL5R5Q0rBjOFy6GV07MkS7rXa7WYh4ObxBh+M+LEzxVIw29anzQFZkR0TAf6x2rBoErK7JYU4fyqFBDFupTt3coQDPEEmVwtLLUCEnJrurbbnJKcWJ+/FbItLxYyMLPl8TwEn0iqiJ97onCU2DuBtiYv3hp1WoEH08b5WDF0F04zEPRdJT+WisxlEFRgaj51o2BtjOC+D2qZQDb4LHaAfJ0WcO4nu7YocdlcLp2JPfXKKgu9P5J8UDsmXbR3KCJ1oddFa2R6TbHc6d2hKyG4amBzMX5ltxXu7D6FLPZlFqua8YooY7A2zwIVirOUH/cfx+5O9o0CtspkNmj/iYzN0FPaOpELncWsuauy9hrGql/1cF4SUr20zHFoBoDQUtmvmBnWnKoGfpWXzuda449FVtmcrEjvBzCvCb3RStu0BbyOOybJagbKif3MkcYVO10pRbTveIUwgCD6F3ypD11XztoPNsgScmjme0sj/KWWNLyQkLWtpJEQ4k46745NAC5g+nP28TR2JM8doeqsxA8JovQkLWwDcR+WYZu2z/I8dfhOmalnoMRTJ2NzWDc0OSkKGYWjexR4fN6lAKCUOUptl9Nw== r00t@my-random_host" - ] - ) - _assert_match_first_item("SSH RSA Public Key", res) - - -def test_pem_rsa_private_key(): - # key size: 2048 bit - res = r.check( - [ - "-----BEGIN RSA PRIVATE KEY-----MIIEoQIBAAKCAQBYNGcp1Jm7GOGffs9wvpIsi9RKPE/a4usQyEdf8G2C0pLcOoypfG1MiOQCDDRN4HtMDoe9KTVjVnnREfmQq2k1hT1BZHfaRu/3YvpFrleozzYmY1XRSeUiM6G71ADg8cPZlAuH1RjswlevJyhNVWzy+DLumpbRgv6nKR9dYSdy2GsFySX488l05+ZaVKgHwlGeKd33YNPRAUNLSPKLdd9wi1djGaQpSo7jWRb6lIFJUR7FdvxwjAVMhDljxXYHPP0GXFS6KTGcfB97dle90qu/4nwdKWd4RZ5pqIbFi1D5ejItUzY40GpsPuN/tkamwB5jY0AtFY8S9TMxHjRx05/DAgMBAAECggEAKU5pHYLNd3wAdTPqq27jf28APL+f2e64jIRuQHSUpFY+plnY86oseVIGDRtwByRgOU74rFI3CU0/APS8/c34GDNMa2pEYnkj+aNldupdbNWVE0cjsj47yteJHy/6NV2jDSqyd6sI4B9m9sSMsCKYQfSPzYOhq34ACYJNiOptke9PkxpNNODlFJrFQsRKKpv2KdF7Lh3/Yzc6p53gilYR9U+Sn4mBrkuURLm2Qq++r0CNTjpmbunbjAL5q/oK8bpJEz3uZqbSQ5GbSLCNroRyi7eIF1Evvk0Vb9nSyfm94VdP+yVr1VvtOt8WigHwAr8E+ujg0rrAKMswfbvNFroNMQKBgQCs/rQvlTfpRiHUlCB09HZzquM8o7pBxTpKAX9247SW81V41EHsIS69WGZzcYbYQlxOxQi7gHiALB/yRLFNiAHAhODFMGTYtprTdW/JK6TC8CPvK3TBnPSYDPP/ME2F2UZKVHWlD3FFtUqp9BppWCHDLp7N/+i5eJy+ankJYzeGywKBgQCChsDhaPJAnHp/zHJmhDXQkqVeoB8SW2WzH481xVgyu2gIsEGmgActfEAyCqRuzjnMSIjXBL5LSAZXft8d+wveR3PsUiVdUurbcrije1ku3jDPXdBQrjmyWZvCXXnZ8oqX18C05a0pgzX5oDluA1ShcI7uWNHkIPYcZskcp96z6QKBgG9gpP2lopOrtYg5vhPOeJzLvvWBrB9ALeELydbvj4tIKxVaAv9V9dOuIHfe9aQyRV/pd0/QzMQopIDEPSrfj9E1O8l4+NSV7GSMTWZFlRR0q44GemtU9B0Y6da4cJDmbFzat8uHf7QTnniBUqfUOBiD4XZbdqhCwRfPURH8MPm1AoGAWHZ9yQe4kAO9nlnw+vwGAQsymxRImsdpAOKVy+qpIREUrDbQ98hzlOdOFtxRn2uTjplmbNwhIKJ68dfh3c7kt0yUC4mNG1f0JrD05I/X3MToLdK2OcgrAG5s+2khCY6xUcH/MFstZiIwdbOa2K3XMOc5Z964ujWAt7UN/qbjb+kCgYBdPN6J1b6OuTt4xYTCenX+KlGBb9QsuK8uXMDkhJhrtcHAyuxyJrDjQu5i3djeZerflT0EESCet0zGPd5bGyP4KaIsmLwYheDLrziS6xqqXL0irMZiWVaVquC3JlWJMw6/Y66WRuxd+oRBbE62lHWnzT2J8dfG+su483KKgli02Q==-----END RSA PRIVATE KEY-----" - ] - ) - _assert_match_first_item("PEM-formatted Private Key", res) - - -def test_pem_dsa_private_key(): - res = r.check( - [ - "-----BEGIN DSA PRIVATE KEY-----MIIDTgIBAAKCAQEAj3k12bmq6b+r7Yh6z0lRtvMuxZ47rzcY6OrElh8+/TYG50NRqcQYMzm4CefCrhxTm6dHW4XQEa24tHmHdUmEaVysDo8UszYIKKIv+icRCj1iqZNFNAmg/mlsRlj4S90ggZw3CaAQV7GVrc0AIz26VIS2KR+dZI74g0SGd5ec7AS0NKasLnXpmF3iPbApL8ERjJ/6nYGB5zONt5K3MNe540lZL2gJmHIVORXqPWuLRlPGM0WPgDsypMLg8nKQJW5OP4o7CDihxFDk4YwaKaN9316hQ95LZv8EkD7VzxYj4VjUh8YI6X8hHNgdyiPLbjgHZfgi40K+SEwFdjk5YBzWZwIdALr2lqaFePff3uf6Z8l3x4XvMrIzuuWAwLzVaV0CggEAFqZcWCBIUHBOdQKjl1cEDTTaOjR4wVTU5KXALSQu4E+W5h5L0JBKvayPN+6x4J8xgtI8kEPLZC+IAEFg7fnKCbMgdqecMqYn8kc+kYebosTnRL0ggVRMtVuALDaNH6g+1InpTg+gaI4yQopceMR4xo0FJ7ccmjq7CwvhLERoljnn08502xAaZaorh/ZMaCbbPscvS1WZg0u07bAvfJDppJbTpV1TW+v8RdT2GfY/Pe27hzklwvIk4HcxKW2oh+weR0j4fvtf3rdUhDFrIjLe5VPdrwIRKw0fAtowlzIk/ieu2oudSyki2bqL457Z4QOmPFKBC8aIt+LtQxbh7xfb3gKCAQB87fMOaF3zru0d3blONyvU4kEclm0i79Shdm2r2dBQo9ru8KdmbBoBS3qS7k//hEuLCCdHAKdLrz8cdbah8ONEVVu/HTDS5TKcm1W/czHch0NhYIfMFschQcEAcswOLjGoRGHl2SZb90pF2dxMxKEgi1QLoPRRX8UWpGy5+ghkaIBEUE31p4dS3vJ1EevQc3itZ2Sh7UcY3hQ8idYptzTwL9p7c4V/aWXLFbQdzJCSi1Q5fr85Uj2eFZTHliYe5ZrZ3R+nl1fbk/ySajbLD6RaTm/ppRfWRxyw3MWjKxPapeLFIsxm1A9rnDyfeEDg1Ixahaq0xLk46RwBo6ZblI0aAh0An8MAVnsLGjtDHBGIlDH+XXPsMkClXnYeBRUGAQ==-----END DSA PRIVATE KEY-----" - ] - ) - _assert_match_first_item("PEM-formatted Private Key", res) - - -def test_pem_ecdsa_private_key(): - res = r.check( - [ - "-----BEGIN EC PRIVATE KEY-----MIHcAgEBBEIApe6jUvbal/QN6ZoQ9dZMe/pTx4CiFzd4ln9a5f0Ope+788+BwgLpl1888OThkaWMeg2wevZ/ErMId0T3kZGoE7mgBwYFK4EEACOhgYkDgYYABAE4SLWZJs6lE0bwYgMipcRxB1xtARXDwbPt3o7aDI7680kLnELXGYhIhGeXlhXgAXjE66GuM8TdbPsshqP9nRy9OAGbxJU/OA+7/zuZmo10IYWNu1IrcGYq0WZJwzZex+S12+VKVBEwPoLKlgm5r/sI8x7WnDtialy5i8ipkvUyOyPUxg==-----END EC PRIVATE KEY-----" - ] - ) - _assert_match_in_items("PEM-formatted Private Key", res) - - -def test_pem_openssl_pkcs8_private_key(): - res = r.check( - [ - "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDaoE09/Cmh1T8I3J9lenqZ2pllw0WXAUrPi4pPV3jmJBsIsfpedZfakdI2ixw2XkWRayAklsxlFFtXCQ6U0yXSd7KJY9vuxb+5cMZejpOoHTZkVwxhlEodCt8DWf5tOc4UA5Ip88WYeszygxuIU6JP0bavJhtQnI5ER+0eZCY8xyNLqQ86h6iuxncAo5fxyc44IKFSm6MDh+GmHBlK5Eql536qfZtA6jMFYnORQ1gVp5J1hQ7bDmiLzFjyCvpNSYLOYbodvcCIWCSUKgp5Q5Uo0EX2h7mX6Z07ONCOQaFXfW3z5/xbn1bJKtI+JSNFS86owWb20EYcopnWwOimmsTXAgMBAAECggEAPW5Tpfon/Jg9+RB9HXeX4YliFw0SjcbILZ9JAthSWWCF1CCmeEpUnA7jYX4fNEuzApR2WLGixzg8Hi2mUj0uYIBPw3kywFoCcGn243Tumoty0CkBip2vYY+/cGKmMizO8iK6vF0KBbljwzUB1IGjlwgXbAmqHTGQbDFFuIdtkx/ggns9X/wNNqK7UPaJoYvlv/YX10/OgBgGQMBWTjvZ3rWg4+TUJymO4edlBK4VmPeBE+syPBcc/YNV+sYDnww8U1hucA5hJ4hOIomFYyaYYUtdWKoAwLJxGf7tZ6hgq16iMbzHcJ2gNCINcWKTByEosqX3aA3TvkyTDMwQguAn8QKBgQD2uViv8qyeVy+RrHH6pC3KoEIUYIz6LTulEDL2YcsRr5FKubzxOU6OEcx1TSmkCmUxyUAyFDyTH/aG0c1H8EWYAwMT7N25Pax1bgjJM+A1z3SU9qxOmdFqFz5v7YC9qnLkODErRByuFsfwdxxJedP4Vles/HZc1tnKYl/v8n81jwKBgQDi2IVlMx9LiBfgZeSI/dkUg3pLT1e3Mu52/WMGmUXRWFKta5P/URw/mgNqJ/nPFQRR3Jn3b6augGtMjomJ+l7pnlv/OX8oj0h46Brx08wrifZMHUStB6Rt2vOy9asLk84rQIgMh7I/PeZ3r/w8dZg7B1IUMyLuyjGcSoh2Q76oOQKBgQDsCy9aRiX35xnPmNgDH4ffz6roq+a0gwoJRZI8Pht19C5g+4pUjqslKMoff49TLc7a7tvIDaxWZcIKAjcPmEQ8xsTvDzKhwut3/anSNRtQ4AV9bvIy0N6VTV+i3erJioUY6tm/tw5pT8pBuPMLKM8vTAvdqDvlXnhHNA7tFWe26QKBgQCok922EiK8n9uWkEIgp/ztqLN2SfVWmIvsc2tm2Pqwk2GFrP+j6mQCw/Krrh+QC/9U0oq8/gUxgw+6Keb+Wci09lFJvzHHM4vZBiwX8Jy28mTNtaZ2q8o/NUqLgNPm26WIMQGpxiHpq5ec9HSPfZhurYcKqeHY8PujOSRmNvv1yQKBgQCx65dznLE32KQhJbN9lXbr7mYdqurJMrchQ4E9zI69cXf7M8kt6FqRHLVv0arPPK+xL6FqF4pq2BuKZlYTqwdG1xsOiEv3IHs3lioTFzbJ1NXhrIuV0H3AiQcw9TbhSs3sWkP7Ri90Uj/fHYQC+psvq5x0L4JZKE3dDTdgjP6vQA==-----END PRIVATE KEY-----" - ] - ) - _assert_match_first_item("PEM-formatted Private Key", res) - - -def test_pem_openssl_pkcs8_encrypted_private_key(): - res = r.check( - [ - "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIE6TAbBgkqhkiG9w0BBQMwDgQIHHigg+fwQjQCAggABIIEyLP0cpU55sZ3QSZkCtNtGU425BnZZD57aqO/aa/fV9HGvWn5/GYANT6xDKbUi2kwc68QCi6Zla3C56jPvPsZoDeZ+g81DYjqBVMRsVra1kayQvnKeRvedYPBdfA0VL5n0ndRa9q31Vx6zzXnMYJd9VakUgXYLFntvVeTt/a+iW9LX7mx/ymUPZtD1IrNEJBpW6Al+vc1m6bYA8NpZaT5P6uiclsoEiPDMydEa52cBgcd5q5MfwKllPsQNYtyLsee8W/1k/Eu21pRkCPYreQWgh36gqAn+2zNySCyqiU7USQ1qHMIHPLxJV7awVfOy7eoRMhmbTJ8kCrEpI9r6JyQN3m1VbBN5QifF9p0N0v2yBM8hS6e0fdaSwkFUVFHeWz4140nhaXA6Xu9U+TvJwacdz/FYsN9wi1AIDl8nMT+gFC2v3HuiGmMD0ybA5TOJEsvhdLruxLNLok/uiu6oExDVAV6JI4zM/8ymLruuAibVxSc9bhVEY8FfYbQ5aDiGPm18MXtmCb5UNEG10ylsDl5khfGYwcfuOfgDy3PVst4aA3sHLbk996csBL8FPcGDx7iqgWPYkHEfhuHr4MUt2xqJloOsGlcs6Ts70ldgNHpNCA0DizHnrRY8EF4gXzAJghpJ5gcCllzcVjf26YsoVyNiIZ2IcMe2aoP2WtbnnFqtgl2gOJ6SNAbWyRLhtlSC74mYl0SLvtN5lm7U5bCIlAnAJbm1cqN+Muuxy9/U5TagQYfya4BZNUhHhI9ILH87QLpIWDeCa3v0UZfHi7CBirEusAq+jQGZslTt+fr/iRWQLwo819HA5Yhh4rems2p2aKeuUYPJ/gt5/KIPikYneAEJ2HzqByeS71hWbxpINtEtNz2M1SVGLbFsLrUjfKGTEc29qaaFvM24LpLxahiCTW2huM/1UZFjKyvrL0HYKAZyvA/07EHzY5K9DT3ocNIKApqMzq+D7P5L/gBNQ6E+cx/ZOA+9unVuE7OY6mmQHMsK9MAT6e4T0AxkBqAWg3cf5ovlQNr57mWwms8Zyy1wwIwLr2/wilJ5V3iWSHDIckK1kR92kCDu3MwNIhfM9dalWSsx9FRIg4iFzMIuidYO8pIVq1jJQKqVsgmGXCwioKvD6wDnQqijdDmVpX/Jg08O1iU7URD2MvGLbBRRfzcBFNrEUNjTrbQa3LS+wvDISbizryXKr/8K8okpxV6dBiW3YplePjde/yqrxWl7OQoDbG1F2f2zMmIe8ZNTP15K8aAlq9LC5qn6YnoRTRe2rLecxgP1SQVXUwFvrUKglozy1/cJsuKuCqiRecQneqyasc9mp/0wGu1t9GD3EroMfvuK4zXuaj6uTDyDPUBo6hfvNDG8zSHvEfDDGm4PTFI7kU7U7ohSQZZcGHZBUigFluq9KWJ3SHPgTkRul3nB/Im+89toHSHFoqH/B/GDokAbqsrUPgJ9xpK9lqFEhng5blX2kiae90VHRyb23oE7eIjf3j4G04Amh8m4/W7ER9JDn6nwWqMH4n2MBQRD3USO8DNTgBbggVZZ7MGIUVbv2/YcVZXftBtiS1u+lvVcpYPzwHIj29YrscmBV6ae0CLo1av0xquHYUOrVixSvhmOREOUSZvNSibizBIyNmLkA==-----END ENCRYPTED PRIVATE KEY-----" - ] - ) - _assert_match_first_item("PEM-formatted Private Key", res) - - -def test_pem_openssh_private_key(): - res = r.check( - [ - "-----BEGIN OPENSSH PRIVATE KEY-----b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBDXVWIoOcQYPyoVODqYrhNAAAAEAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIDDZHhPJKYsu2hV7bq/vtAbF2Guw8cupqcjv5SqRraVaAAAAoCfV/ZrS3mggJFx1X7aeKzfBFDN2hWrPTHmyJPsw0NaDW+wzL6/yYmWaAB90clbSiCQ7jALlA/RoU/tPz8HvEaKcnj9BgSMN8+Se4RBcfqxMx9eCRYtYcumc9PrQbKSCeywtvsQoCntPxLhyudxH/HYKx7lO5mrMGut9FjOy2s9Iz317p+2F1DJqRYNsEHKyZJpV0DwObF2ZPOlX3PDv3fg=-----END OPENSSH PRIVATE KEY-----" - ] - ) - _assert_match_first_item("PEM-formatted Private Key", res) - - -def test_ssh_ecdsa_key(): - res = r.check( - [ - "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCE9Uli8bGnD4hOWdeo5KKQJ/P/vOazI4MgqJK54w37emP2JwOAOdMmXuwpxbKng3KZz27mz+nKWIlXJ3rzSGMo= r00t@my-random_host" - ] - ) - _assert_match_first_item("SSH ECDSA Public Key", res) - - -def test_ssh_ed25519_key(): - res = r.check( - [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK0wmN/Cr3JXqmLW7u+g9pTh+wyqDHpSQEIQczXkVx9q r00t@my-random_host" - ] - ) - _assert_match_first_item("SSH ED25519 Public Key", res) - - -def test_aws_access_key(): - res = r.check(["AKIAIOSFODNN7EXAMPLE"]) - assert "Amazon Web Services Access Key" in str(res) - - -def test_aws_secret_access_key(): - res = r.check(["Nw0XP0t2OdyUkaIk3B8TaAa2gEXAMPLEMvD2tW+g"]) - assert "Amazon Web Services Secret Access Key" in str(res) - - -def test_aws_ec2_id(): - res = r.check(["i-1234567890abcdef0"]) - assert "Amazon Web Services EC2 Instance Identifier" in str(res) - - -def test_aws_org_id(): - res = r.check(["o-aa111bb222"]) - assert "Amazon Web Services Organization Identifier" in str(res) - - -def test_aws_sns(): - res = r.check(["arn:aws:sns:us-east-2:123456789012:MyTopic"]) - assert "Amazon SNS Topic" in str(res) - - -def test_asin(): - res = r.check(["B07ND5BB8V"]) - _assert_match_first_item("Amazon Standard Identification Number (ASIN)", res) - - -def test_google_api_key(): - res = r.check(["AIzaSyD7CQl6fRhagGok6CzFGOOPne2X1u1spoA"]) - _assert_match_first_item("Google API Key", res) - - -def test_google_recaptcha_api_key(): - res = r.check(["6Le3W6QUAAAANNT8X_9JwlNnK4kZGLaYTB3KqFLM"]) - _assert_match_first_item("Google ReCaptcha API Key", res) - - -def test_google_oauth_token(): - res = r.check(["ya29.AHES6ZRnn6CfjjaK6GCQ84vikePv_hk4NUAJwzaAXamCL0s"]) - _assert_match_first_item("Google OAuth Token", res) - - -def test_google_cal(): - res = r.check( - [ - "https://calendar.google.com/calendar/embed?src=ht3jlfaac5lfd6263ulfh4tql8%40group.calendar.google.com&ctz=Europe%2FLondon" - ] - ) - assert "Google Calendar URI" in str(res) - - -def test_notion_note(): - res = r.check( - ["https://www.notion.so/test-user/My-Note-fa45346d9dd4421abc6857ce2e7fb0db"] - ) - assert "Notion Note URI" in str(res) - - -def test_notion_team_note(): - res = r.check( - ["https://testorg.notion.site/My-Note-9f8863871e024ea6acc64d6564004a22"] - ) - assert "Notion Team Note URI" in str(res) - - -def test_aws_access_key_id(): - res = r.check(["AKIA31OMZKYAARWZ3ERH"]) - _assert_match_first_item("Amazon Web Services Access Key", res) - - -def test_mailgun_api_key(): - res = r.check(["key-1e1631a9414aff7c262721e7b6ff6e43"]) - _assert_match_first_item("Mailgun API Key", res) - - -def test_twilio_api_key(): - res = r.check(["SK012dab2d3f4dab1c2f33dffafdf23142"]) - _assert_match_first_item("Twilio API Key", res) - - -def test_twilio_account_sid(): - res = r.check(["AC10a133ffdfb112abb2d3f42d1d2d3b14"]) - _assert_match_first_item("Twilio Account SID", res) - - -def test_twilio_application_sid(): - res = r.check(["APfff01abd2b134a2aff3adc243ab211ab"]) - _assert_match_first_item("Twilio Application SID", res) - - -def test_square_application_secret(): - res = r.check(["sq0csp-LBptIQ85io8CvbjVDvmzD1drQbOERgjlhnNrMgscFGk"]) - _assert_match_first_item("Square Application Secret", res) - - -def test_square_access_token(): - res = r.check(["EAAAEBQZoq15Ub0PBBr_kw0zK-uIHcBPBZcfjPFT05ODfjng9GqFK9Dbgtj1ILcU"]) - _assert_match_first_item("Square Access Token", res) - - -def test_stripe_api_key(): - res = r.check(["sk_live_vHDDrL02ioRF5vYtyqiYBKma"]) - _assert_match_first_item("Stripe API Key", res) - - -def test_github_access_token(): - res = r.check(["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:test@github.com"]) - _assert_match_first_item("GitHub Access Token", res) - - -def test_slack_api_key(): - res = r.check( - ["xoxp-514654431830-843187921057-792480346180-d44d2r9b71f954o8z2k5llt41ovpip6v"] - ) - _assert_match_first_item("Slack API Key", res) - _assert_match_exploit_first_item( - "https://slack.com/api/auth.test?token=xoxp-514654431830-843187921057-792480346180-d44d2r9b71f954o8z2k5llt41ovpip6v", - res, - ) - - -def test_slack_token(): - res = r.check(["xoxb-51465443183-hgvhXVd2ISC2x7gaoRWBOUdQ"]) - _assert_match_first_item("Slack Token", res) - _assert_match_exploit_first_item( - "https://slack.com/api/auth.test?token=xoxb-51465443183-hgvhXVd2ISC2x7gaoRWBOUdQ", - res, - ) - - -def test_notion_integration_token(): - res = r.check(["secret_n2ZeRrMx743JQ5wiucZ0DBEe47opfKubUp22N0wIrOy"]) - _assert_match_first_item("Notion Integration Token", res) - - -def test_pgp_public_key(): - res = r.check( - [ - "-----BEGIN PGP PUBLIC KEY BLOCK-----Comment: Alice's OpenPGP certificateComment: https://www.ietf.org/id/draft-bre-openpgp-samples-01.htmlmDMEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/Ub7O1u120JkFsaWNlIExvdmVsYWNlIDxhbGljZUBvcGVucGdwLmV4YW1wbGU+iJAEExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXaWfOgAKCRDyMVUMT0fjjukrAPoDnHBSogOmsHOsd9qGsiZpgRnOdypvbm+QtXZqth9rvwD9HcDC0tC+PHAsO7OTh1S1TC9RiJsvawAfCPaQZoed8gK4OARcRwTpEgorBgEEAZdVAQUBAQdAQv8GIa2rSTzgqbXCpDDYMiKRVitCsy203x3sE9+eviIDAQgHiHgEGBYIACAWIQTrhbtfozp14V6UTmPyMVUMT0fjjgUCXEcE6QIbDAAKCRDyMVUMT0fjjlnQAQDFHUs6TIcxrNTtEZFjUFm1M0PJ1Dng/cDW4xN80fsn0QEA22Kr7VkCjeAEC08VSTeV+QFsmz55/lntWkwYWhmvOgE==iIGO-----END PGP PUBLIC KEY BLOCK-----" - ] - ) - _assert_match_first_item("PGP Public Key", res) - - -def test_pgp_private_key(): - res = r.check( - [ - "-----BEGIN PGP PRIVATE KEY BLOCK-----Comment: Alice's OpenPGP Transferable Secret KeyComment: https://www.ietf.org/id/draft-bre-openpgp-samples-01.htmllFgEXEcE6RYJKwYBBAHaRw8BAQdArjWwk3FAqyiFbFBKT4TzXcVBqPTB3gmzlC/Ub7O1u10AAP9XBeW6lzGOLx7zHH9AsUDUTb2pggYGMzd0P3ulJ2AfvQ4RtCZBbGljZSBMb3ZlbGFjZSA8YWxpY2VAb3BlbnBncC5leGFtcGxlPoiQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEE64W7X6M6deFelE5j8jFVDE9H444FAl2lnzoACgkQ8jFVDE9H447pKwD6A5xwUqIDprBzrHfahrImaYEZzncqb25vkLV2arYfa78A/R3AwtLQvjxwLDuzk4dUtUwvUYibL2sAHwj2kGaHnfICnF0EXEcE6RIKKwYBBAGXVQEFAQEHQEL/BiGtq0k84Km1wqQw2DIikVYrQrMttN8d7BPfnr4iAwEIBwAA/3/xFPG6U17rhTuq+07gmEvaFYKfxRB6sgAYiW6TMTpQEK6IeAQYFggAIBYhBOuFu1+jOnXhXpROY/IxVQxPR+OOBQJcRwTpAhsMAAoJEPIxVQxPR+OOWdABAMUdSzpMhzGs1O0RkWNQWbUzQ8nUOeD9wNbjE3zR+yfRAQDbYqvtWQKN4AQLTxVJN5X5AWybPnn+We1aTBhaGa86AQ===n8OM-----END PGP PRIVATE KEY BLOCK-----" - ] - ) - _assert_match_first_item("PGP Private Key", res) - - -def test_discord_token(): - res = r.check(["NzQ4MDk3ODM3OTgzODU4NzIz.X0YeZw.UlcjuCywUAWvPH9s-3cXNBaq3M4"]) - _assert_match_first_item("Discord Bot Token", res) - - -def test_discord_token_2(): - res = r.check(["MTE4NDQyNjQ0NTAxMjk5MjAz.DPM2DQ.vLNMR02Qxb9DJFucGZK1UtTs__s"]) - _assert_match_first_item("Discord Bot Token", res) - - -def test_discord_token_3(): - res = r.check(["ODYyOTUyOTE3NTg4NjM5NzY1.YOf1iA.7lARgFXmodxpgmPvOXapaKUga6M"]) - _assert_match_first_item("Discord Bot Token", res) - - -def test_bcglobal(): - res = r.check(["6556123456789012"]) - _assert_match_first_item("BCGlobal Card Number", res) - - -def test_carte_blanche(): - res = r.check(["30137891521480"]) - _assert_match_first_item("Carte Blanche Card Number", res) - - -def test_instapayment(): - res = r.check(["6387849878080951"]) - _assert_match_first_item("Insta Payment Card Number", res) - - -def test_stackhawk(): - res = r.check(["hawk.wz6bAoFDwcVQFCD9dofE.w2R1PWI8UTvEM4jd56XQ"]) - _assert_match_first_item("StackHawk API Key", res) - - -def test_jcb_card(): - res = r.check(["3537124887293334"]) - _assert_match_first_item("JCB Card Number", res) - - res = r.check(["3543824683332150682"]) - _assert_match_first_item("JCB Card Number", res) - - -def test_switch_card(): - res = r.check(["633341812811453789"]) - _assert_match_first_item("Switch Card Number", res) - - -def test_korean_card(): - res = r.check(["9837282929900015"]) - _assert_match_first_item("Korean Local Card Number", res) - - -def test_laser_card(): - res = r.check(["630495060000000000"]) - _assert_match_first_item("Laser Card Number", res) - - -def test_solo_card(): - res = r.check(["6334498823141663"]) - _assert_match_first_item("Solo Card Number", res) - - -def test_github_personal_access_token(): - res = r.check(["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"]) - _assert_match_first_item("GitHub Personal Access Token", res) - - -def test_discord_webhook(): - res = r.check( - [ - "https://discord.com/api/webhooks/894893734582452235/KhNc2-_zwY9FfCAK0iGUa_KfYyW8m5Ja_5i-V24fEY6ETwvLLn-GmdT_vq0Do9-YRsij" - ] - ) - _assert_match_first_item("Discord Webhook", res) - - -def test_github_oauth_token(): - res = r.check(["gho_16C7e42F292c6912E7710c838347Ae178B4a"]) - _assert_match_first_item("GitHub OAuth Access Token", res) - - -def test_github_refresh_token(): - res = r.check( - [ - "ghr_1B4a2e77838347a7E420ce178F2E7c6912E169246c34E1ccbF66C46812d16D5B1A9Dc86A1498" - ] - ) - _assert_match_first_item("GitHub Refresh Token", res) - - -def test_github_app_token(): - res = r.check(["ghu_16C7e42F292c6912E7710c838347Ae178B4a"]) - _assert_match_first_item("GitHub App Token", res) - - -def test_zapier_webhook(): - res = r.check(["https://hooks.zapier.com/hooks/catch/1234567/f8f22dgg/"]) - _assert_match_first_item("Zapier Webhook Token", res) - - -def test_datadog_api_key(): - res = r.check(["acb6d73d95a10d30aef9894603e90963"]) - _assert_match_first_item("Datadog API Key", res) - - -def test_datadog_client_token(): - res = r.check(["pub85abf45b82e2f86f25003d559bca07d9"]) - _assert_match_first_item("Datadog Client Token", res) - - -def test_new_relic_rest_api_key(): - res = r.check(["NRRA-2a2d50d7d9449f3bb7ef65ac1184c488bd4fe7a8bd"]) - _assert_match_first_item("New Relic REST API Key", res) - - -def test_new_relic_synthetics_api_key(): - res = r.check(["NRSP-us010E1E3D1716F721FF39F726B3E4CBCB7"]) - _assert_match_first_item("New Relic Synthetics Location Key", res) - - -def test_new_relic_user_api_key(): - res = r.check(["NRAK-WI4JTVS049IF5A3FGS5N51XS3Y5"]) - _assert_match_first_item("New Relic User API Key", res) - - -def test_nano(): - res = r.check(["nano_1c46rz7xnk98ozhzdjq7thwty844sgnqxk9496yysit1bnio1rcdzshc5ymn"]) - _assert_match_first_item("Nano (NANO) Wallet Address", res) - - -def test_pypi_upload_token(): - res = r.check( - [ - "pypi-AgEIcHlwaS5vcmcCJDZlNzEyNGJmLWQ4N2UtNGZhYS1iNWEzLWQzYzg2YjU3NzAxYgACJXsicGVybWlzc2lvbnMiOiAidXNlciIsICJ2ZXJzaW9uIjogMX0AAAYgeYcgrZO31PTS_3ipsd0fTSMy1kVkxCzhQvHN6m97yIE" - ] - ) - _assert_match_first_item("PyPI Upload Token", res) - - -def test_turkish_car_plate(): - res = r.check(["34A2344"]) - _assert_match_first_item("Turkish License Plate Number", res) - - -def test_turkish_car_plate2(): - res = r.check(["34A23415"]) - _assert_match_first_item("Turkish License Plate Number", res) - - -def test_turkish_car_plate3(): - res = r.check(["06BK123"]) - _assert_match_first_item("Turkish License Plate Number", res) - - -def test_turkish_car_plate4(): - res = r.check(["06JK1234"]) - _assert_match_first_item("Turkish License Plate Number", res) - - -def test_turkish_car_plate5(): - res = r.check(["81ABC75"]) - _assert_match_first_item("Turkish License Plate Number", res) - - -def test_date_of_birth(): - res = r.check(["13.08.1987"]) - _assert_match_first_item("Date of Birth", res) - - -def test_date_of_birth2(): - res = r.check(["13081987"]) - _assert_match_first_item("Date of Birth", res) - - -def test_date_of_birth3(): - res = r.check(["13/08/1987"]) - _assert_match_first_item("Date of Birth", res) - - -def test_date_of_birth4(): - res = r.check(["13-08-1987"]) - _assert_match_first_item("Date of Birth", res) - - -def test_date_of_birth5(): - res = r.check(["13 08 1987"]) - _assert_match_first_item("Date of Birth", res) - - -def test_turkish_id_number(): - res = r.check(["12345678902"]) - assert "Turkish Identification Number" in str(res) - - -def test_turkish_id_number2(): - res = r.check(["12345678900"]) - assert "Turkish Identification Number" in str(res) - - -def test_turkish_tax_number(): - res = r.check(["1234567890"], dist=d) - assert "Turkish Tax Number" in str(res) - - -def test_uuid(): - res = r.check(["b2ced6f5-2542-4f7d-b131-e3ada95d8b75"]) - assert "UUID" in str(res) - - -def test_objectid(): - res = r_rarity_0.check(["5fc7c33a7ef88b139122a38a"], dist=d) - assert "ObjectID" in str(res) - - -def test_ulid(): - res = r_rarity_0.check(["01ERJ58HMWDN3VTRRHZQV2T5R5"], dist=d) - assert "ULID" in str(res) - - -def test_totp_URI(): - res = r.check( - [ - "otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example" - ] - ) - _assert_match_first_item("Time-Based One-Time Password (TOTP) URI", res) - - -def test_complex_totp_URI(): - res = r.check( - [ - "otpauth://totp/My_Ex0T1c-L00king.name?issuer=ArgsShouldBeCommutable&secret=JBSWY3DPEHPK3PXP&digits=6&period=30" - ] - ) - _assert_match_first_item("Time-Based One-Time Password (TOTP) URI", res) - - -def test_sshpass(): - res = r.check(["sshpass -p MyPassw0RD!"]) - _assert_match_first_item("SSHPass Clear Password Argument", res) - - -def test_sshpass_multiple_args(): - res = r.check(["sshpass -P 'Please enter your password' -p MyPassw0RD!"]) - _assert_match_first_item("SSHPass Clear Password Argument", res) - - -def test_mount_command(): - res = r.check(["mount -o username=myuser,password=password"]) - _assert_match_first_item("Mount Command With Clear Credentials", res) - - -def test_mountcifs_command(): - res = r.check(["mount.cifs -o username=myuser,password=password"]) - _assert_match_first_item("Mount Command With Clear Credentials", res) - - -def test_complex_mount_command(): - res = r.check( - [ - "mount -t cifs -osec=ntlmv2,password=S3cUr3D!,domain=mydomain,noserverino,username=H4x0r" - ] - ) - _assert_match_first_item("Mount Command With Clear Credentials", res) - - -def test_cifs_fstab_entry(): - res = r.check( - ["cifs uid=1000,password=password,gid=1000,noperm,nofail,username=myuser"] - ) - _assert_match_first_item("CIFS Fstab Entry With Clear Credentials", res) + assert regex_valid_match( + "Uniform Resource Locator (URL)", r.check(["http://папироска.рф"]) + ) + + +@pytest.mark.parametrize( + "match, description", + [ + # EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc) + ("00:00:00:00:00:00", "Xerox Corp"), + ("00-00-00-00-00-00", "Xerox Corp"), + ("0000.0000.0000", "Xerox Corp"), + # MasterCard Number + ("5409010000000004", "UNION NATIONAL BANK"), + ("5409 0100 0000 0004", "UNION NATIONAL BANK"), + # Phone Number + ("+1-202-555-0156", "United States"), + ("+662025550156", "Thailand"), + ("+356 202 555 0156", "Malta"), + ], +) +def test_match_description(match: str, description: str): + assert description in r.check([match])[0]["Regex Pattern"]["Description"] + + +@pytest.mark.parametrize( + "match, exploit", + [ + ( + "xoxp-514654431830-843187921057-792480346180-d44d2r9b71f954o8z2k5llt41ovpip6v", + "https://slack.com/api/auth.test?token=xoxp-514654431830-843187921057-792480346180-d44d2r9b71f954o8z2k5llt41ovpip6v", + ), + ( + "xoxb-51465443183-hgvhXVd2ISC2x7gaoRWBOUdQ", + "https://slack.com/api/auth.test?token=xoxb-51465443183-hgvhXVd2ISC2x7gaoRWBOUdQ", + ), + ], +) +def test_match_exploit(match: str, exploit: str): + assert exploit in r.check([match])[0]["Regex Pattern"]["Exploit"]