Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactored directory structure #340

Merged
merged 5 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ jobs:
python -m pip install --upgrade pip
pip install pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
pip install -e .
- name: Test with pytest
run: |
pytest
10 changes: 6 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@ WORKDIR /app
# Clone the TorBot repository from GitHub
RUN git clone https://github.com/DedSecInside/TorBot.git /app

# Install Poetry
RUN pip install --no-cache-dir poetry
# Install dependencies
RUN pip install -r /app/requirements.txt

# Install TorBot dependencies using Poetry
RUN cd /app && poetry install
# Set the SOCKS5_PORT environment variable
ENV SOCKS5_PORT=9050

# Expose the port specified in the .env file
EXPOSE $SOCKS5_PORT

# Run the TorBot script
CMD ["poetry", "run", "python", "torbot"]
# Example way to run the container:
# docker run --network="host" your-image-name poetry run python torbot -u https://www.example.com --depth 2 --visualize tree --save json
11 changes: 2 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,21 +54,14 @@

### TorBot

#### Using `poetry`
* TorBot dependencies are managed using `poetry`, you can find the installation commands below:
```sh
poetry install # to install dependencies
poetry run python torbot -u https://www.example.com --depth 2 --visualize tree --save json # example of running command with poetry
poetry run python torbot -h # for help
```

#### Using `venv`
* If using Python ^3.4,
```sh
python -m venv torbot_venv
source torbot_venv/bin/activate
pip install -r requirements.txt
python torbot -u https://www.example.com
pip install -e .
./main.py --help
```

#### Using `docker`
Expand Down
File renamed without changes.
21 changes: 9 additions & 12 deletions torbot/__main__.py → main.py
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
"""
Core
"""
#!/usr/bin/env python3

import os
import argparse
import sys
import logging
import toml
import httpx

from modules.api import get_ip
from modules.color import color
from modules.updater import check_version
from modules.info import execute_all
from modules.linktree import LinkTree
from modules.config import project_root_directory
from torbot.modules.api import get_ip
from torbot.modules.color import color
from torbot.modules.updater import check_version
from torbot.modules.info import execute_all
from torbot.modules.linktree import LinkTree


def print_tor_ip_address(client: httpx.Client) -> None:
Expand Down Expand Up @@ -167,12 +165,11 @@ def set_arguments() -> argparse.ArgumentParser:
if __name__ == "__main__":
try:
arg_parser = set_arguments()
config_file_path = os.path.join(project_root_directory, "pyproject.toml")
config_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "pyproject.toml")
try:
version = None
with open(config_file_path, "r") as f:
data = toml.load(f)
version = data["tool"]["poetry"]["version"]
version = data["project"]["version"]
except Exception as e:
raise Exception("unable to find version from pyproject.toml.\n", e)

Expand Down
777 changes: 0 additions & 777 deletions poetry.lock

This file was deleted.

101 changes: 53 additions & 48 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,49 +1,54 @@
[tool.poetry]
name = "torbot"
version = "4.0.0"
description = "OSINT for the dark web"
authors = ["Akeem King <akeemtlking@gmail.com>", "PS Narayanan <thepsnarayanan@gmail.com>"]
license = "GNU GPL"
include = [".env"]

[tool.poetry.dependencies]
python = ">=3.9,<=3.11.4"
altgraph = "0.17.2"
beautifulsoup4 = "4.11.1"
certifi = "2023.7.22"
charset-normalizer = "2.0.12"
decorator = "5.1.1"
idna = "3.3"
igraph = "0.10.6"
joblib = "1.2.0"
macholib = "1.16"
progress = "1.6"
pyinstaller = "5.13.1"
pyinstaller-hooks-contrib = "2022.7"
PySocks = "1.7.1"
python-dotenv = "0.20.0"
scikit-learn = "1.3.0"
scipy = "1.10.0"
six = "1.16.0"
sklearn = "0.0"
soupsieve = "2.3.2.post1"
termcolor = "1.1.0"
texttable = "1.6.4"
threadpoolctl = "3.1.0"
urllib3 = "1.26.18"
validators = "0.20.0"
treelib = "^1.6.1"
numpy = "1.24.4"
unipath = "^1.1"
httpx = {extras = ["socks"], version = "^0.25.0"}
tabulate = "^0.9.0"
phonenumbers = "^8.13.22"
pytest = "^7.4.2"
yattag = "^1.15.1"
toml = "^0.10.2"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "torbot"
version = "4.1.0"
authors = [
{ name="Akeem King", email="akeemtlking@gmail.com" },
{ name="PS Narayanan", email="thepsnarayanan@gmail.com" },
]
description = "TorBot is an OSINT tool for the dark web."
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
"Operating System :: OS Independent",
]
dependencies = [
"altgraph==0.17.2",
"beautifulsoup4==4.11.1",
"certifi==2023.7.22",
"charset-normalizer==2.0.12",
"decorator==5.1.1",
"idna==3.3",
"igraph==0.10.6",
"joblib==1.2.0",
"macholib==1.16",
"progress==1.6",
"pyinstaller==5.13.1",
"pyinstaller-hooks-contrib==2022.7",
"PySocks==1.7.1",
"python-dotenv==0.20.0",
"scikit-learn==1.3.0",
"scipy==1.10.0",
"six==1.16.0",
"sklearn==0.0",
"soupsieve==2.3.2.post1",
"termcolor==1.1.0",
"texttable==1.6.4",
"threadpoolctl==3.1.0",
"urllib3==1.26.18",
"validators==0.20.0",
"treelib==1.6.1",
"numpy==1.24.4",
"unipath==1.1",
"httpx[socks]==0.25.0",
"tabulate==0.9.0",
"phonenumbers==8.13.22",
"pytest==7.4.2",
"yattag==1.15.1",
"toml==0.10.2",
]
15 changes: 15 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -257,3 +257,18 @@ validators==0.20.0 ; python_version >= "3.9" and python_full_version <= "3.11.4"
--hash=sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a
yattag==1.15.1 ; python_version >= "3.9" and python_full_version <= "3.11.4" \
--hash=sha256:960fa54be1229d96f43178133e0b195c003391fdc49ecdb6b69b7374db6be416

numpy~=1.24.4
beautifulsoup4~=4.11.1
sklearn~=0.0
scikit-learn~=1.3.0
httpx~=0.25.0
yattag~=1.15.1
termcolor~=1.1.0
python-dotenv~=0.20.0
Unipath~=1.1
validators~=0.20.0
phonenumbers~=8.13.22
tabulate~=0.9.0
treelib~=1.7.0
toml~=0.10.2
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions torbot/modules/linktree.py → src/torbot/modules/linktree.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def load(self) -> None:
self._append_node(id=self._url, parent_id=None)
self._build_tree(url=self._url, depth=self._depth)

def _append_node(self, id: str, parent_id: str | None) -> None:
def _append_node(self, id: str, parent_id: str or None) -> None:
"""
Creates a node for a tree using the given ID which corresponds to a URL.
If the parent_id is None, this will be considered a root node.
Expand Down Expand Up @@ -144,9 +144,9 @@ def insert(node, color_code):

for node in nodes:
status_code = node.data.status
if status_code >= 200 and status_code < 300:
if 200 <= status_code < 300:
insert(node, "green")
elif status_code >= 300 and status_code < 400:
elif 300 <= status_code < 400:
insert(node, "yellow")
else:
insert(node, "red")
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Empty file added tests/__init__.py
Empty file.
2 changes: 1 addition & 1 deletion torbot/modules/tests/test_api.py → tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from yattag import Doc
from unittest.mock import patch, Mock

from ..api import get_ip
from torbot.modules.api import get_ip


def generate_mock_torproject_page(header: str, body: str) -> str:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from bs4 import BeautifulSoup
from yattag import Doc

from ..linktree import parse_hostname, parse_links, parse_emails, parse_phone_numbers
from torbot.modules.linktree import parse_hostname, parse_links, parse_emails, parse_phone_numbers


def test_parse_hostname() -> None:
Expand Down
Loading