Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
c11c922
blastdns wip
TheTechromancer Jan 2, 2026
1df86d2
[create-pull-request] automated change
TheTechromancer Mar 17, 2026
ec1acae
Merge pull request #2971 from blacklanternsecurity/dev
TheTechromancer Mar 17, 2026
ddd5d16
Merge pull request #2973 from blacklanternsecurity/update-docs
liquidsec Mar 23, 2026
e97b880
ci: add CLA workflow
aconite33 Mar 30, 2026
dcdd46d
ci: add org members to CLA allowlist
aconite33 Mar 30, 2026
6d84a4a
ci: use dynamic org membership check for CLA
aconite33 Mar 30, 2026
646b6eb
fix: use GITHUB_TOKEN for org membership check in CLA workflow
aconite33 Mar 31, 2026
ee514b6
fix: handle org membership check for both PR and comment events
aconite33 Mar 31, 2026
1099707
fix: set commit status to success when skipping CLA for org members
aconite33 Mar 31, 2026
5318a7a
fix: use author_association for CLA membership check
aconite33 Mar 31, 2026
5ee7b34
fix: use org-scoped app token for membership check
aconite33 Mar 31, 2026
076b175
fix: use org-scoped app token for reliable CLA membership check
aconite33 Mar 31, 2026
593fe04
fix: disable lock-pullrequest-aftermerge in CLA workflow
aconite33 Mar 31, 2026
648ce4e
fix CLA workflow to properly skip bots and check all committers
aconite33 Apr 1, 2026
83833e7
drop unnecessary actions:write and contents:write permissions
aconite33 Apr 1, 2026
de4f04b
Merge pull request #3013 from blacklanternsecurity/fix-cla-bot-skip
aconite33 Apr 1, 2026
649e32e
Merge remote-tracking branch 'origin/stable' into merge-stable-into-dev
aconite33 Apr 1, 2026
fde791c
Merge pull request #3016 from blacklanternsecurity/merge-stable-into-dev
aconite33 Apr 1, 2026
d57a125
Merge pull request #3017 from blacklanternsecurity/dev
aconite33 Apr 1, 2026
876465b
Some fun adjectives :D
ausmaster Apr 7, 2026
09cbc86
Alphabet is hard
ausmaster Apr 7, 2026
1b5cdc2
Merge pull request #3030 from blacklanternsecurity/fun-stuff
ausmaster Apr 8, 2026
d20d464
merge 3.0
TheTechromancer Apr 15, 2026
ad7c344
bump blastdns version, test wip
TheTechromancer Apr 15, 2026
487833f
Bump baddns to 2.1.0, pass blastdns client, MODERATE→MEDIUM
liquidsec Apr 16, 2026
f1cd3dd
Fix baddns_zone NSEC test for blastdns MockClient compatibility
liquidsec Apr 16, 2026
e63a693
work on tests
TheTechromancer Apr 16, 2026
233c86c
Merge pull request #2007 from blacklanternsecurity/3.0
TheTechromancer Apr 16, 2026
cecf097
Bump deepdiff from 8.6.1 to 8.6.2
dependabot[bot] Apr 16, 2026
978b7ec
Bump ruff from 0.15.4 to 0.15.9
dependabot[bot] Apr 16, 2026
cc1ba9c
Bump tornado from 6.5.4 to 6.5.5
dependabot[bot] Apr 16, 2026
9114931
Merge branch 'dev' into blastdns
TheTechromancer Apr 16, 2026
7508702
Merge pull request #3026 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 16, 2026
3f7d3d4
Merge branch 'dev' into dependabot/pip/dev/deepdiff-8.6.2
liquidsec Apr 16, 2026
289d40e
fix some bugs
TheTechromancer Apr 16, 2026
20f5b92
bug fixing
TheTechromancer Apr 16, 2026
c78a840
merge dev
TheTechromancer Apr 16, 2026
c381d99
Merge pull request #2979 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 17, 2026
2b69e37
Update nuclei
blsaccess Apr 19, 2026
441a31c
Update fastapi requirement from <0.129.0,>=0.115.5 to >=0.115.5,<0.137.0
dependabot[bot] Apr 19, 2026
ef52e2b
Update mkdocstrings requirement from <0.31,>=0.22 to >=0.22,<1.1
dependabot[bot] Apr 19, 2026
9d0faaa
Update pytest-env requirement from <1.2.0,>=0.8.2 to >=0.8.2,<1.7.0
dependabot[bot] Apr 19, 2026
01a0d41
Update dnspython requirement from <2.8.0,>=2.7.0 to >=2.7.0,<2.9.0
dependabot[bot] Apr 19, 2026
8813dc0
Merge pull request #3048 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
55cf377
Merge pull request #3052 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
03b28f0
Bump pytest-asyncio from 1.2.0 to 1.3.0
dependabot[bot] Apr 20, 2026
f821f2b
Update cachetools requirement from <7.0.0,>=5.3.2 to >=5.3.2,<8.0.0
dependabot[bot] Apr 20, 2026
8c25a19
Merge pull request #3044 from blacklanternsecurity/update-nuclei
liquidsec Apr 20, 2026
3a41df6
Merge pull request #3051 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
77375cd
Merge pull request #3050 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
93c55b5
ruffed
TheTechromancer Apr 20, 2026
8a10731
Merge branch 'dev' into blastdns
TheTechromancer Apr 20, 2026
f43bf0d
better dns documentation, publish versioning
TheTechromancer Apr 20, 2026
a20ff02
Merge pull request #3053 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 20, 2026
9517f53
Merge branch 'dev' into blastdns
liquidsec Apr 21, 2026
57b7322
Fix benchmark workflow: reset tracked files before branch checkout
liquidsec Mar 28, 2026
498f33c
Merge pull request #3054 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 21, 2026
4b39d07
restore dns tests
TheTechromancer Apr 22, 2026
8600595
restore more original assertions
TheTechromancer Apr 22, 2026
7b47917
Merge pull request #3042 from blacklanternsecurity/blastdns
TheTechromancer Apr 22, 2026
dcbcac7
[create-pull-request] automated change
TheTechromancer Apr 23, 2026
a1e453e
Merge pull request #3055 from blacklanternsecurity/update-docs
TheTechromancer Apr 23, 2026
03d71d2
fix docs pipeline
TheTechromancer Apr 23, 2026
afc7640
update docs
TheTechromancer Apr 23, 2026
c643dc6
Merge pull request #3056 from blacklanternsecurity/fix-docs-pipeline
TheTechromancer Apr 23, 2026
fc34b3c
fix docs pipeline, again
TheTechromancer Apr 24, 2026
6b44199
better
TheTechromancer Apr 24, 2026
3534205
Merge pull request #3018 from blacklanternsecurity/dependabot/pip/tor…
liquidsec Apr 24, 2026
45aa36c
Merge pull request #3057 from blacklanternsecurity/fix-docs-pipeline
TheTechromancer Apr 24, 2026
e3eb41d
bug: fix neo4j clienterror on host_metadata
cnnrshd Apr 25, 2026
ba36463
Merge branch 'blacklanternsecurity:stable' into neo4j-fix
cnnrshd Apr 25, 2026
2953db4
Bump ruff from 0.15.10 to 0.15.12
dependabot[bot] Apr 26, 2026
a582684
paramminer: prune dead-weight wordlists
liquidsec Apr 26, 2026
6f774c1
paramminer: modern adds, dedicated cookies wordlist, mutate_case + br…
liquidsec Apr 26, 2026
7d01014
Merge branch 'dev' into neo4j-fix
TheTechromancer Apr 28, 2026
83a809a
Merge pull request #3065 from blacklanternsecurity/dependabot/pip/dev…
liquidsec Apr 28, 2026
49e24d9
Update pytest requirement from <9,>=8.3.1 to >=8.3.1,<10
dependabot[bot] Apr 28, 2026
29c554f
enhancement: in fingerprintx, emit `URL_UNVERIFIED` event upon detect…
TrebledJ Apr 28, 2026
eb4c79a
support ipv6, add test
TheTechromancer Apr 30, 2026
837359c
Merge pull request #3067 from blacklanternsecurity/paramminer-wordlis…
liquidsec May 1, 2026
1f93c7a
Merge pull request #3060 from cnnrshd/neo4j-fix
TheTechromancer May 1, 2026
9de96b6
Merge pull request #3068 from TrebledJ/patch-2
TheTechromancer May 1, 2026
f5e4ded
fix(test): parse baddns submodule source via file, not inspect.getsource
liquidsec May 1, 2026
5be4993
Merge pull request #3069 from blacklanternsecurity/fix-baddns-test-py313
TheTechromancer May 1, 2026
d1e5d59
Excavate: extract IPv6 URLs (#1815)
ChrisJr404 May 3, 2026
210b95e
Add Linktree to social module (#2399)
ChrisJr404 May 3, 2026
b3e40f5
Add Hetzner Object Storage bucket-cataloger module (#1876)
ChrisJr404 May 4, 2026
2c99274
Merge pull request #3072 from ChrisJr404/feat/social-linktree-2399
TheTechromancer May 4, 2026
a26ed7e
Merge pull request #3061 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 5, 2026
025dfb7
Update uvicorn requirement from <0.40,>=0.32 to >=0.32,<0.47
dependabot[bot] May 5, 2026
e38370f
update cloudcheck, baddns
TheTechromancer May 5, 2026
61b7a29
update baddns version in modules
TheTechromancer May 5, 2026
620bb82
Merge pull request #3073 from ChrisJr404/feat/bucket-hetzner-1876
TheTechromancer May 6, 2026
6ead620
style: ruff format
ChrisJr404 May 7, 2026
107415f
Merge pull request #3071 from ChrisJr404/feat/excavate-ipv6-1815
liquidsec May 7, 2026
64c2193
Merge pull request #3066 from blacklanternsecurity/dependabot/pip/dev…
liquidsec May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions .github/workflows/cla.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: "CLA Assistant"
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]

permissions:
pull-requests: write
statuses: write

jobs:
CLAAssistant:
runs-on: ubuntu-latest
steps:
- name: Generate token from GitHub App
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: blacklanternsecurity

- name: Check all committers against org and allowlist
id: cla-check
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
if [ "${{ github.event_name }}" = "pull_request_target" ]; then
PR_NUM="${{ github.event.pull_request.number }}"
else
PR_NUM="${{ github.event.issue.number }}"
fi

COMMITTERS=$(gh api "repos/${{ github.repository }}/pulls/$PR_NUM/commits" --paginate --jq '.[].author.login' | sort -u)
ALL_EXEMPT=true

for LOGIN in $COMMITTERS; do
# treat commits with no associated GitHub login as non-exempt
if [ -z "$LOGIN" ] || [ "$LOGIN" = "null" ]; then
echo "Unknown committer (no GitHub login) — not exempt"
ALL_EXEMPT=false
break
fi

EXEMPT=false

# check if account type is Bot (GitHub App accounts)
AUTHOR_TYPE=$(gh api "users/${LOGIN}" --jq '.type' 2>/dev/null || echo "Unknown")
if [ "$AUTHOR_TYPE" = "Bot" ]; then
echo "$LOGIN is a Bot account — exempt"
EXEMPT=true
fi

# check org membership
if [ "$EXEMPT" = "false" ]; then
if gh api "orgs/blacklanternsecurity/members/$LOGIN" > /dev/null 2>&1; then
echo "$LOGIN is an org member — exempt"
EXEMPT=true
fi
fi

if [ "$EXEMPT" = "false" ]; then
echo "$LOGIN is not exempt — CLA required"
ALL_EXEMPT=false
break
fi
done

echo "all_exempt=$ALL_EXEMPT" >> "$GITHUB_OUTPUT"

- name: Skip CLA when all committers are exempt
if: steps.cla-check.outputs.all_exempt == 'true' && github.event_name == 'pull_request_target'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api --method POST "repos/${{ github.repository }}/statuses/${{ github.event.pull_request.head.sha }}" \
-f state=success \
-f context="CLAAssistant" \
-f description="CLA check skipped — all committers are org members or bots"

- name: "CLA Assistant"
if: |
(steps.cla-check.outputs.all_exempt != 'true') &&
((github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target')
uses: contributor-assistant/github-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PERSONAL_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
with:
path-to-signatures: "signatures/version1/cla.json"
path-to-document: "https://github.com/blacklanternsecurity/CLA/blob/main/ICLA.md"
branch: "main"
allowlist: "dependabot[bot],github-actions[bot],renovate[bot]"
remote-organization-name: "blacklanternsecurity"
remote-repository-name: "CLA"
lock-pullrequest-aftermerge: "false"
4 changes: 2 additions & 2 deletions .github/workflows/docs_updater.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install dependencies
run: uv sync --group dev
run: uv sync --frozen --group dev
- name: Generate docs
run: |
uv run bbot/scripts/docs.py
uv run --no-sync bbot/scripts/docs.py
- name: Create or Update Pull Request
uses: peter-evans/create-pull-request@v8
with:
Expand Down
32 changes: 17 additions & 15 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,24 +76,30 @@ jobs:
- name: Calculate version
id: calc_version
run: |
# Get base version from latest stable tag (exclude rc tags, strip 'v' prefix)
LATEST_STABLE_TAG=$(git describe --tags --abbrev=0 --exclude="*rc*")
BASE_VERSION=$(echo "$LATEST_STABLE_TAG" | sed 's/^v//')
# Source of truth for base version is pyproject.toml
BASE_VERSION=$(python3 -c "
import re
text = open('pyproject.toml').read()
print(re.search(r'^version\s*=\s*\"([^\"]+)\"', text, re.MULTILINE).group(1))
")

if [[ "${{ github.ref }}" == "refs/heads/stable" ]]; then
# Stable: clean version from tag
VERSION="$BASE_VERSION"
elif [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then
# Dev: version.distancerc (e.g., 3.0.0.123rc)
DISTANCE=$(git rev-list ${LATEST_STABLE_TAG}..HEAD --count)
# Dev: base version + commit distance from stable as rc (e.g., 3.0.0.123rc)
STABLE_HEAD=$(git rev-parse origin/stable 2>/dev/null || git rev-list --max-parents=0 HEAD)
DISTANCE=$(git rev-list ${STABLE_HEAD}..HEAD --count)
VERSION="${BASE_VERSION}.${DISTANCE}rc"
fi

echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Calculated version: $VERSION"

# Write version to file for hatchling to pick up
echo "__version__ = \"$VERSION\"" > bbot/_version.py
# For dev builds, write the rc version to pyproject.toml for hatchling
# Stable builds use pyproject.toml as-is
if [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then
sed -i "s/^version = .*/version = \"$VERSION\"/" pyproject.toml
fi
- name: Build Pypi package
if: github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/dev'
run: uv build
Expand Down Expand Up @@ -122,8 +128,6 @@ jobs:
tags: |
blacklanternsecurity/bbot:dev
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION }}
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR_MINOR }}
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR }}
- name: Publish to Docker Hub (stable)
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
uses: docker/build-push-action@v6
Expand All @@ -146,8 +150,6 @@ jobs:
tags: |
blacklanternsecurity/bbot:dev-full
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION }}-full
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR_MINOR }}-full
blacklanternsecurity/bbot:${{ steps.version.outputs.BBOT_VERSION_MAJOR }}-full
- name: Publish Full Docker Image to Docker Hub (stable)
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
uses: docker/build-push-action@v6
Expand Down Expand Up @@ -239,7 +241,7 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install dependencies
run: uv sync --only-group docs
run: uv sync --frozen --group docs
- name: Configure Git
run: |
git config user.name github-actions
Expand All @@ -253,11 +255,11 @@ jobs:
- name: Generate docs (stable branch)
if: github.ref == 'refs/heads/stable'
run: |
uv run mike deploy Stable
uv run --no-sync mike deploy Stable
- name: Generate docs (dev branch)
if: github.ref == 'refs/heads/dev'
run: |
uv run mike deploy Dev
uv run --no-sync mike deploy Dev
- name: Publish docs
run: |
git switch gh-pages
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ pipx install --pip-args '\--pre' bbot

_For more installation methods, including [Docker](https://hub.docker.com/r/blacklanternsecurity/bbot), see [Getting Started](https://www.blacklanternsecurity.com/bbot/Stable/)_

> **Speed tip:** BBOT's DNS engine spins up ten workers per resolver in `/etc/resolv.conf`. Adding more unfiltered resolvers dramatically speeds up scans. See the [sample resolv.conf](docs/data/resolv-sample.conf) and [Tips and Tricks](https://www.blacklanternsecurity.com/bbot/Stable/scanning/tips_and_tricks/#speed-up-scans-with-more-dns-resolvers) for details.

## Example Commands

### 1) Subdomain Finder
Expand Down
6 changes: 4 additions & 2 deletions bbot/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from importlib.metadata import version, PackageNotFoundError

try:
from bbot._version import __version__
except ImportError:
__version__ = version("bbot")
except PackageNotFoundError:
__version__ = "0.0.0"
1 change: 0 additions & 1 deletion bbot/_version.py

This file was deleted.

Loading
Loading