Merge branch 'package-collision' into release/0.15.0-rc2

This commit is contained in:
Paul Pfeister 2024-07-08 04:37:30 -04:00
commit c12304a71a
No known key found for this signature in database
GPG Key ID: 70D33A96CBD7A994
20 changed files with 2883 additions and 2893 deletions

View File

@ -20,8 +20,8 @@ maintainers = [
"Matheus Felipe <matheusfelipeog@protonmail.com>", "Matheus Felipe <matheusfelipeog@protonmail.com>",
"Sondre Karlsen Dyrnes <sondre@villdyr.no>" "Sondre Karlsen Dyrnes <sondre@villdyr.no>"
] ]
readme = "docs/pyproj/README.md" readme = "docs/pyproject/README.md"
packages = [ { include = "sherlock"} ] packages = [ { include = "sherlock_project"} ]
keywords = [ "osint", "reconnaissance", "information gathering" ] keywords = [ "osint", "reconnaissance", "information gathering" ]
classifiers = [ classifiers = [
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
@ -32,7 +32,7 @@ classifiers = [
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Topic :: Security" "Topic :: Security"
] ]
homepage = "https://sherlock-project.github.io/" homepage = "https://sherlockproject.xyz/"
repository = "https://github.com/sherlock-project/sherlock" repository = "https://github.com/sherlock-project/sherlock"
@ -56,4 +56,4 @@ openpyxl = "^3.0.10"
jsonschema = "^4.0.0" jsonschema = "^4.0.0"
[tool.poetry.scripts] [tool.poetry.scripts]
sherlock = 'sherlock.sherlock:main' sherlock = 'sherlock_project.sherlock:main'

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
sherlock_project/resources/data.json

View File

@ -1,80 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Sherlock Targets",
"description": "Social media target to probe for existence of usernames",
"type": "object",
"properties": {
"$schema": { "type": "string" }
},
"patternProperties": {
"^(?!\\$).*?$": {
"type": "object",
"description": "User-friendly target name",
"required": [ "url", "urlMain", "errorType", "username_claimed" ],
"properties": {
"url": { "type": "string" },
"urlMain": { "type": "string" },
"urlProbe": { "type": "string" },
"username_claimed": { "type": "string" },
"regexCheck": { "type": "string" },
"isNSFW": { "type": "boolean" },
"headers": { "type": "object" },
"request_payload": { "type": "object" },
"__comment__": {
"type": "string",
"description": "Used to clarify important target information if (and only if) a commit message would not suffice.\nThis key should not be parsed anywhere within Sherlock."
},
"tags": {
"oneOf": [
{ "$ref": "#/$defs/tag" },
{ "type": "array", "items": { "$ref": "#/$defs/tag" } }
]
},
"request_method": {
"type": "string",
"enum": [ "GET", "POST", "HEAD", "PUT" ]
},
"errorType": {
"type": "string",
"enum": [ "message", "response_url", "status_code" ]
},
"errorMsg": {
"oneOf": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } }
]
},
"errorCode": {
"oneOf": [
{ "type": "integer" },
{ "type": "array", "items": { "type": "integer" } }
]
},
"errorUrl": { "type": "string" },
"response_url": { "type": "string" }
},
"dependencies": {
"errorMsg": {
"properties" : { "errorType": { "const": "message" } }
},
"errorUrl": {
"properties": { "errorType": { "const": "response_url" } }
},
"errorCode": {
"properties": { "errorType": { "const": "status_code" } }
}
},
"if": { "properties": { "errorType": { "const": "message" } } },
"then": { "required": [ "errorMsg" ] },
"else": {
"if": { "properties": { "errorType": { "const": "response_url" } } },
"then": { "required": [ "errorUrl" ] }
},
"additionalProperties": false
}
},
"additionalProperties": false,
"$defs": {
"tag": { "type": "string", "enum": [ "adult", "gaming" ] }
}
}

View File

@ -0,0 +1 @@
sherlock_project/resources/data.schema.json

View File

@ -18,5 +18,5 @@ if __name__ == "__main__":
print(f"Sherlock requires Python 3.8+\nYou are using Python {python_version}, which is not supported by Sherlock.") print(f"Sherlock requires Python 3.8+\nYou are using Python {python_version}, which is not supported by Sherlock.")
sys.exit(1) sys.exit(1)
from sherlock import sherlock from sherlock_project import sherlock
sherlock.main() sherlock.main()

View File

@ -3,7 +3,7 @@
This module defines the objects for notifying the caller about the This module defines the objects for notifying the caller about the
results of queries. results of queries.
""" """
from sherlock.result import QueryStatus from sherlock_project.result import QueryStatus
from colorama import Fore, Style from colorama import Fore, Style
import webbrowser import webbrowser

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,80 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Sherlock Targets",
"description": "Social media target to probe for existence of usernames",
"type": "object",
"properties": {
"$schema": { "type": "string" }
},
"patternProperties": {
"^(?!\\$).*?$": {
"type": "object",
"description": "User-friendly target name",
"required": [ "url", "urlMain", "errorType", "username_claimed" ],
"properties": {
"url": { "type": "string" },
"urlMain": { "type": "string" },
"urlProbe": { "type": "string" },
"username_claimed": { "type": "string" },
"regexCheck": { "type": "string" },
"isNSFW": { "type": "boolean" },
"headers": { "type": "object" },
"request_payload": { "type": "object" },
"__comment__": {
"type": "string",
"description": "Used to clarify important target information if (and only if) a commit message would not suffice.\nThis key should not be parsed anywhere within Sherlock."
},
"tags": {
"oneOf": [
{ "$ref": "#/$defs/tag" },
{ "type": "array", "items": { "$ref": "#/$defs/tag" } }
]
},
"request_method": {
"type": "string",
"enum": [ "GET", "POST", "HEAD", "PUT" ]
},
"errorType": {
"type": "string",
"enum": [ "message", "response_url", "status_code" ]
},
"errorMsg": {
"oneOf": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } }
]
},
"errorCode": {
"oneOf": [
{ "type": "integer" },
{ "type": "array", "items": { "type": "integer" } }
]
},
"errorUrl": { "type": "string" },
"response_url": { "type": "string" }
},
"dependencies": {
"errorMsg": {
"properties" : { "errorType": { "const": "message" } }
},
"errorUrl": {
"properties": { "errorType": { "const": "response_url" } }
},
"errorCode": {
"properties": { "errorType": { "const": "status_code" } }
}
},
"if": { "properties": { "errorType": { "const": "message" } } },
"then": { "required": [ "errorMsg" ] },
"else": {
"if": { "properties": { "errorType": { "const": "response_url" } } },
"then": { "required": [ "errorUrl" ] }
},
"additionalProperties": false
}
},
"additionalProperties": false,
"$defs": {
"tag": { "type": "string", "enum": [ "adult", "gaming" ] }
}
}

View File

@ -24,18 +24,18 @@ import requests
__version__ = "0.14.4" __version__ = "0.14.4"
del __version__ del __version__
from .__init__ import ( # noqa: E402 from sherlock_project.__init__ import ( # noqa: E402
__longname__, __longname__,
__version__ __version__
) )
from requests_futures.sessions import FuturesSession # noqa: E402 from requests_futures.sessions import FuturesSession # noqa: E402
from torrequest import TorRequest # noqa: E402 from torrequest import TorRequest # noqa: E402
from sherlock.result import QueryStatus # noqa: E402 from sherlock_project.result import QueryStatus # noqa: E402
from sherlock.result import QueryResult # noqa: E402 from sherlock_project.result import QueryResult # noqa: E402
from sherlock.notify import QueryNotify # noqa: E402 from sherlock_project.notify import QueryNotify # noqa: E402
from sherlock.notify import QueryNotifyPrint # noqa: E402 from sherlock_project.notify import QueryNotifyPrint # noqa: E402
from sherlock.sites import SitesInformation # noqa: E402 from sherlock_project.sites import SitesInformation # noqa: E402
from colorama import init # noqa: E402 from colorama import init # noqa: E402
from argparse import ArgumentTypeError # noqa: E402 from argparse import ArgumentTypeError # noqa: E402

View File

@ -2,22 +2,22 @@ import os
import json import json
import urllib import urllib
import pytest import pytest
from sherlock.sites import SitesInformation from sherlock_project.sites import SitesInformation
@pytest.fixture() @pytest.fixture()
def sites_obj(): def sites_obj():
sites_obj = SitesInformation(data_file_path=os.path.join(os.path.dirname(__file__), "../sherlock/resources/data.json")) sites_obj = SitesInformation(data_file_path=os.path.join(os.path.dirname(__file__), "../sherlock_project/resources/data.json"))
yield sites_obj yield sites_obj
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def sites_info(): def sites_info():
sites_obj = SitesInformation(data_file_path=os.path.join(os.path.dirname(__file__), "../sherlock/resources/data.json")) sites_obj = SitesInformation(data_file_path=os.path.join(os.path.dirname(__file__), "../sherlock_project/resources/data.json"))
sites_iterable = {site.name: site.information for site in sites_obj} sites_iterable = {site.name: site.information for site in sites_obj}
yield sites_iterable yield sites_iterable
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def remote_schema(): def remote_schema():
schema_url: str = 'https://raw.githubusercontent.com/sherlock-project/sherlock/master/sherlock/resources/data.schema.json' schema_url: str = 'https://raw.githubusercontent.com/sherlock-project/sherlock/master/sherlock_project/resources/data.schema.json'
with urllib.request.urlopen(schema_url) as remoteschema: with urllib.request.urlopen(schema_url) as remoteschema:
schemadat = json.load(remoteschema) schemadat = json.load(remoteschema)
yield schemadat yield schemadat

View File

@ -1,7 +1,7 @@
import sherlock import sherlock_project
#from sherlock.sites import SitesInformation #from sherlock.sites import SitesInformation
#local_manifest = data_file_path=os.path.join(os.path.dirname(__file__), "../sherlock/resources/data.json") #local_manifest = data_file_path=os.path.join(os.path.dirname(__file__), "../sherlock/resources/data.json")
def test_username_via_message(): def test_username_via_message():
sherlock.__main__("--version") sherlock_project.__main__("--version")

View File

@ -25,7 +25,7 @@ class Interactives:
"""Check all files within the Sherlock package for matching patterns""" """Check all files within the Sherlock package for matching patterns"""
pattern:re.Pattern = re.compile(pattern) pattern:re.Pattern = re.compile(pattern)
matching_files:list[str] = [] matching_files:list[str] = []
for root, dirs, files in os.walk("sherlock"): for root, dirs, files in os.walk("sherlock_project"):
for file in files: for file in files:
file_path = os.path.join(root,file) file_path = os.path.join(root,file)
if "__pycache__" in file_path: if "__pycache__" in file_path:

View File

@ -5,8 +5,8 @@ from jsonschema import validate
def test_validate_manifest_against_local_schema(): def test_validate_manifest_against_local_schema():
"""Ensures that the manifest matches the local schema, for situations where the schema is being changed.""" """Ensures that the manifest matches the local schema, for situations where the schema is being changed."""
json_relative: str = '../sherlock/resources/data.json' json_relative: str = '../sherlock_project/resources/data.json'
schema_relative: str = '../sherlock/resources/data.schema.json' schema_relative: str = '../sherlock_project/resources/data.schema.json'
json_path: str = os.path.join(os.path.dirname(__file__), json_relative) json_path: str = os.path.join(os.path.dirname(__file__), json_relative)
schema_path: str = os.path.join(os.path.dirname(__file__), schema_relative) schema_path: str = os.path.join(os.path.dirname(__file__), schema_relative)
@ -22,7 +22,7 @@ def test_validate_manifest_against_local_schema():
@pytest.mark.online @pytest.mark.online
def test_validate_manifest_against_remote_schema(remote_schema): def test_validate_manifest_against_remote_schema(remote_schema):
"""Ensures that the manifest matches the remote schema, so as to not unexpectedly break clients.""" """Ensures that the manifest matches the remote schema, so as to not unexpectedly break clients."""
json_relative: str = '../sherlock/resources/data.json' json_relative: str = '../sherlock_project/resources/data.json'
json_path: str = os.path.join(os.path.dirname(__file__), json_relative) json_path: str = os.path.join(os.path.dirname(__file__), json_relative)
with open(json_path, 'r') as f: with open(json_path, 'r') as f:

View File

@ -2,9 +2,9 @@ import pytest
import random import random
import string import string
import re import re
from sherlock.sherlock import sherlock from sherlock_project.sherlock import sherlock
from sherlock.notify import QueryNotify from sherlock_project.notify import QueryNotify
from sherlock.result import QueryStatus from sherlock_project.result import QueryStatus
#from sherlock_interactives import Interactives #from sherlock_interactives import Interactives

View File

@ -1,5 +1,5 @@
import pytest import pytest
from sherlock import sherlock from sherlock_project import sherlock
from sherlock_interactives import Interactives from sherlock_interactives import Interactives
from sherlock_interactives import InteractivesSubprocessError from sherlock_interactives import InteractivesSubprocessError

View File

@ -1,17 +1,17 @@
import os import os
from sherlock_interactives import Interactives from sherlock_interactives import Interactives
import sherlock import sherlock_project
def test_versioning() -> None: def test_versioning() -> None:
# Ensure __version__ matches version presented to the user # Ensure __version__ matches version presented to the user
assert sherlock.__version__ in Interactives.run_cli("--version") assert sherlock_project.__version__ in Interactives.run_cli("--version")
# Ensure __init__ is single source of truth for __version__ in package # Ensure __init__ is single source of truth for __version__ in package
# Temporarily allows sherlock.py so as to not trigger early upgrades # Temporarily allows sherlock.py so as to not trigger early upgrades
found:list = Interactives.walk_sherlock_for_files_with(r'__version__ *= *') found:list = Interactives.walk_sherlock_for_files_with(r'__version__ *= *')
expected:list = [ expected:list = [
# Normalization is REQUIRED for Windows ( / vs \ ) # Normalization is REQUIRED for Windows ( / vs \ )
os.path.normpath("sherlock/__init__.py"), os.path.normpath("sherlock_project/__init__.py"),
os.path.normpath("sherlock/sherlock.py"), os.path.normpath("sherlock_project/sherlock.py"),
] ]
# Sorting is REQUIRED for Mac # Sorting is REQUIRED for Mac
assert sorted(found) == sorted(expected) assert sorted(found) == sorted(expected)

View File

@ -18,7 +18,7 @@ deps =
pytest pytest
allowlist_externals = coverage allowlist_externals = coverage
commands = commands =
coverage run --source=sherlock --module pytest -v coverage run --source=sherlock_project --module pytest -v
coverage report --show-missing coverage report --show-missing
[testenv:offline] [testenv:offline]