pax_global_header 0000666 0000000 0000000 00000000064 15062142553 0014515 g ustar 00root root 0000000 0000000 52 comment=524415b5d535409a1988233ec5c0b4f6bdda18df sherlock-0.16.0/ 0000775 0000000 0000000 00000000000 15062142553 0013413 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/.actor/ 0000775 0000000 0000000 00000000000 15062142553 0014601 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/.actor/Dockerfile 0000664 0000000 0000000 00000001436 15062142553 0016577 0 ustar 00root root 0000000 0000000 FROM sherlock/sherlock as sherlock # Install Node.js RUN apt-get update; apt-get install curl gpg -y RUN mkdir -p /etc/apt/keyrings RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list RUN apt-get update && apt-get install -y curl bash git jq jo xz-utils nodejs # Install Apify CLI (node.js) for the Actor Runtime RUN npm -g install apify-cli # Install Dependencies for the Actor Shell Script RUN apt-get update && apt-get install -y bash jq jo xz-utils nodejs # Copy Actor dir with the actorization shell script COPY .actor/ .actor ENTRYPOINT [".actor/actor.sh"] sherlock-0.16.0/.actor/README.md 0000664 0000000 0000000 00000005310 15062142553 0016057 0 ustar 00root root 0000000 0000000 # Sherlock Actor on Apify [](https://apify.com/netmilk/sherlock?fpr=sherlock) This Actor wraps the [Sherlock Project](https://sherlockproject.xyz/) to provide serverless username reconnaissance across social networks in the cloud. It helps you find usernames across multiple social media platforms without installing and running the tool locally. ## What are Actors? [Actors](https://docs.apify.com/platform/actors?fpr=sherlock) are serverless microservices running on the [Apify Platform](https://apify.com/?fpr=sherlock). They are based on the [Actor SDK](https://docs.apify.com/sdk/js?fpr=sherlock) and can be found in the [Apify Store](https://apify.com/store?fpr=sherlock). Learn more about Actors in the [Apify Whitepaper](https://whitepaper.actor?fpr=sherlock). ## Usage ### Apify Console 1. Go to the Apify Actor page 2. Click "Run" 3. In the input form, fill in **Username(s)** to search for 4. The Actor will run and produce its outputs in the default datastore ### Apify CLI ```bash apify call YOUR_USERNAME/sherlock --input='{ "usernames": ["johndoe", "janedoe"] }' ``` ### Using Apify API ```bash curl --request POST \ --url "https://api.apify.com/v2/acts/YOUR_USERNAME~sherlock/run" \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer YOUR_API_TOKEN' \ --data '{ "usernames": ["johndoe", "janedoe"], } }' ``` ## Input Parameters The Actor accepts a JSON schema with the following structure: | Field | Type | Required | Default | Description | |-------|------|----------|---------|-------------| | `usernames` | array | Yes | - | List of usernames to search for | | `usernames[]` | string | Yes | "json" | Username to search for | ### Example Input ```json { "usernames": ["techuser", "designuser"], } ``` ## Output The Actor provides three types of outputs: ### Dataset Record* | Field | Type | Required | Description | |-------|------|----------|-------------| | `username` | string | Yes | Username the search was conducted for | | `links` | arrray | Yes | Array with found links to the social media | | `links[]`| string | No | URL to the account ### Example Dataset Item (JSON) ```json { "username": "johndoe", "links": [ "https://github.com/johndoe" ] } ``` ## Performance & Resources - **Memory Requirements**: - Minimum: 512 MB RAM - Recommended: 1 GB RAM for multiple usernames - **Processing Time**: - Single username: ~1-2 minutes - Multiple usernames: 2-5 minutes - Varies based on number of sites checked and response times For more help, check the [Sherlock Project documentation](https://github.com/sherlock-project/sherlock) or raise an issue in the Actor's repository. sherlock-0.16.0/.actor/actor.json 0000664 0000000 0000000 00000000427 15062142553 0016607 0 ustar 00root root 0000000 0000000 { "actorSpecification": 1, "name": "sherlock", "version": "0.0", "buildTag": "latest", "environmentVariables": {}, "dockerFile": "./Dockerfile", "dockerContext": "../", "input": "./input_schema.json", "storages": { "dataset": "./dataset_schema.json" } } sherlock-0.16.0/.actor/actor.sh 0000775 0000000 0000000 00000001012 15062142553 0016242 0 ustar 00root root 0000000 0000000 #!/bin/bash INPUT=`apify actor:get-input | jq -r .usernames[] | xargs echo` echo "INPUT: $INPUT" sherlock $INPUT for username in $INPUT; do # escape the special meaning leading characters # https://github.com/jpmens/jo/blob/master/jo.md#description safe_username=$(echo $username | sed 's/^@/\\@/' | sed 's/^:/\\:/' | sed 's/%/\\%/') echo "pushing results for username: $username, content:" cat $username.txt sed '$d' $username.txt | jo -a | jo username=$safe_username links:=- | apify actor:push-data done sherlock-0.16.0/.actor/dataset_schema.json 0000664 0000000 0000000 00000002110 15062142553 0020433 0 ustar 00root root 0000000 0000000 { "actorSpecification": 1, "fields":{ "title": "Sherlock actor input", "description": "This is actor input schema", "type": "object", "schemaVersion": 1, "properties": { "links": { "title": "Links to accounts", "type": "array", "description": "A list of social media accounts found for the uername" }, "username": { "title": "Lookup username", "type": "string", "description": "Username the lookup was performed for" } }, "required": [ "username", "links" ] }, "views": { "overview": { "title": "Overview", "transformation": { "fields": [ "username", "links" ], }, "display": { "component": "table", "links": { "label": "Links" }, "username":{ "label": "Username" } } } } } sherlock-0.16.0/.actor/input_schema.json 0000664 0000000 0000000 00000000653 15062142553 0020157 0 ustar 00root root 0000000 0000000 { "title": "Sherlock actor input", "description": "This is actor input schema", "type": "object", "schemaVersion": 1, "properties": { "usernames": { "title": "Usernames to hunt down", "type": "array", "description": "A list of usernames to be checked for existence across social media", "editor": "stringList", "prefill": ["johndoe"] } }, "required": [ "usernames" ] } sherlock-0.16.0/.dockerignore 0000664 0000000 0000000 00000000107 15062142553 0016065 0 ustar 00root root 0000000 0000000 .git/ .vscode/ screenshot/ tests/ *.txt !/requirements.txt venv/ devel/ sherlock-0.16.0/.editorconfig 0000664 0000000 0000000 00000000462 15062142553 0016072 0 ustar 00root root 0000000 0000000 root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true curly_bracket_next_line = false spaces_around_operators = true [*.{markdown,md}] trim_trailing_whitespace = false [*.py] indent_size = 4 quote_type = double sherlock-0.16.0/.github/ 0000775 0000000 0000000 00000000000 15062142553 0014753 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/.github/CODEOWNERS 0000664 0000000 0000000 00000000575 15062142553 0016355 0 ustar 00root root 0000000 0000000 ### REPOSITORY /.github/CODEOWNERS @sdushantha /.github/FUNDING.yml @sdushantha /LICENSE @sdushantha ### PACKAGING # Changes made to these items without code owner approval may negatively # impact packaging pipelines. /pyproject.toml @ppfeister @sdushantha ### REGRESSION /.github/workflows/regression.yml @ppfeister /tox.ini @ppfeister /pytest.ini @ppfeister /tests/ @ppfeister sherlock-0.16.0/.github/FUNDING.yml 0000664 0000000 0000000 00000000063 15062142553 0016567 0 ustar 00root root 0000000 0000000 github: [ sdushantha, ppfeister, matheusfelipeog ] sherlock-0.16.0/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 15062142553 0017136 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/.github/ISSUE_TEMPLATE/bug-report.yml 0000664 0000000 0000000 00000004555 15062142553 0021760 0 ustar 00root root 0000000 0000000 name: Bug report description: File a bug report labels: ["bug"] body: - type: dropdown id: package attributes: label: Installation method description: | Some packages are maintained by the community, rather than by the Sherlock Project. Knowing which packages are affected helps us diagnose package-specific bugs. options: - Select one - PyPI (via pip) - Homebrew - Docker - Kali repository (via apt) - Built from source - Other (indicate below) validations: required: true - type: input id: package-version attributes: label: Package version description: | Knowing the version of the package you are using can help us diagnose your issue more quickly. You can find the version by running `sherlock --version`. validations: required: true - type: textarea id: description attributes: label: Description description: | Detailed descriptions that help contributors understand and reproduce your bug are much more likely to lead to a fix. Please include the following information: - What you were trying to do - What you expected to happen - What actually happened placeholder: | When doing {action}, the expected result should be {expected result}. When doing {action}, however, the actual result was {actual result}. This is undesirable because {reason}. validations: required: true - type: textarea id: steps-to-reproduce attributes: label: Steps to reproduce description: Write a step by step list that will allow us to reproduce this bug. placeholder: | 1. Do something 2. Then do something else validations: required: true - type: textarea id: additional-info attributes: label: Additional information description: If you have some additional information, please write it here. validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.16.0/.github/ISSUE_TEMPLATE/config.yml 0000664 0000000 0000000 00000000034 15062142553 0021123 0 ustar 00root root 0000000 0000000 blank_issues_enabled: false sherlock-0.16.0/.github/ISSUE_TEMPLATE/false-negative.yml 0000664 0000000 0000000 00000002071 15062142553 0022553 0 ustar 00root root 0000000 0000000 name: False negative description: Report a site that is returning false negative results title: "False negative for: " labels: ["false negative"] body: - type: markdown attributes: value: | Please include the site name in the title of your issue. Submit **one site per report** for faster resolution. If you have multiple sites in the same report, it often takes longer to fix. - type: textarea id: additional-info attributes: label: Additional info description: If you know why the site is returning false negatives, or noticed any patterns, please explain. placeholder: | Reddit is returning false negatives because... validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.16.0/.github/ISSUE_TEMPLATE/false-positive.yml 0000664 0000000 0000000 00000002160 15062142553 0022612 0 ustar 00root root 0000000 0000000 name: False positive description: Report a site that is returning false positive results title: "False positive for: " labels: ["false positive"] body: - type: markdown attributes: value: | Please include the site name in the title of your issue. Submit **one site per report** for faster resolution. If you have multiple sites in the same report, it often takes longer to fix. - type: textarea id: additional-info attributes: label: Additional info description: If you know why the site is returning false positives, or noticed any patterns, please explain. placeholder: | Reddit is returning false positives because... False positives only occur after x searches... validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.16.0/.github/ISSUE_TEMPLATE/feature-request.yml 0000664 0000000 0000000 00000001507 15062142553 0023005 0 ustar 00root root 0000000 0000000 name: Feature request description: Request a feature or enhancement labels: ["enhancement"] body: - type: markdown attributes: value: | Concise and thoughtful titles help other contributors find and add your requested feature. - type: textarea id: description attributes: label: Description description: Describe the feature you are requesting placeholder: I'd like Sherlock to be able to do xyz validations: required: true - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.16.0/.github/ISSUE_TEMPLATE/site-request.yml 0000664 0000000 0000000 00000002501 15062142553 0022311 0 ustar 00root root 0000000 0000000 name: Reuest a new website description: Request that Sherlock add support for a new website title: "Requesting support for: " labels: ["site support request"] body: - type: markdown attributes: value: | Ensure that the site name is in the title of your request. Requests without this information will be **closed**. - type: input id: site-url attributes: label: Site URL description: | What is the URL of the website indicated in your title? Websites sometimes have similar names. This helps constributors find the correct site. placeholder: https://reddit.com validations: required: true - type: textarea id: additional-info attributes: label: Additional info description: If you have suggestions on how Sherlock should detect for usernames, please explain below placeholder: Sherlock can detect if a username exists on Reddit by checking for... validations: required: false - type: checkboxes id: terms attributes: label: Code of Conduct description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/sherlock-project/sherlock/blob/master/docs/CODE_OF_CONDUCT.md). options: - label: I agree to follow this project's Code of Conduct required: true sherlock-0.16.0/.github/SECURITY.md 0000664 0000000 0000000 00000000716 15062142553 0016550 0 ustar 00root root 0000000 0000000 ## Security Policy ### Supported Versions Sherlock is a forward looking project. Only the latest and most current version is supported. ### Reporting a Vulnerability Security concerns can be submitted [__here__][report-url] without risk of exposing sensitive information. For issues that are low severity or unlikely to see exploitation, public issues are often acceptable. [report-url]: https://github.com/sherlock-project/sherlock/security/advisories/new sherlock-0.16.0/.github/workflows/ 0000775 0000000 0000000 00000000000 15062142553 0017010 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/.github/workflows/exclusions.yml 0000664 0000000 0000000 00000005505 15062142553 0021734 0 ustar 00root root 0000000 0000000 name: Exclusions Updater on: schedule: #- cron: '0 5 * * 0' # Runs at 05:00 every Sunday - cron: '0 5 * * *' # Runs at 05:00 every day workflow_dispatch: jobs: update-exclusions: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v5 - name: Set up Python uses: actions/setup-python@v6 with: python-version: '3.13' - name: Install Poetry uses: abatilo/actions-poetry@v4 with: poetry-version: 'latest' - name: Install dependencies run: | poetry install --no-interaction --with dev - name: Run false positive tests run: | $(poetry env activate) pytest -q --tb no -m validate_targets_fp -n 20 | tee fp_test_results.txt deactivate - name: Parse false positive detections by desired categories run: | grep -oP '(?<=test_false_pos\[)[^\]]+(?=\].*result was Claimed)' fp_test_results.txt \ | sort -u > false_positive_exclusions.txt grep -oP '(?<=test_false_pos\[)[^\]]+(?=\].*result was WAF)' fp_test_results.txt \ | sort -u > waf_hits.txt - name: Detect if exclusions list changed id: detect_changes run: | git fetch origin exclusions || true if git show origin/exclusions:exclusions.txt >/dev/null 2>&1; then # If the exclusions branch and file exist, compare if git diff --quiet origin/exclusions -- exclusions.txt; then echo "exclusions_changed=false" >> "$GITHUB_OUTPUT" else echo "exclusions_changed=true" >> "$GITHUB_OUTPUT" fi else # If the exclusions branch or file do not exist, treat as changed echo "exclusions_changed=true" >> "$GITHUB_OUTPUT" fi - name: Quantify and display results run: | FP_COUNT=$(wc -l < false_positive_exclusions.txt | xargs) WAF_COUNT=$(wc -l < waf_hits.txt | xargs) echo ">>> Found $FP_COUNT false positives and $WAF_COUNT WAF hits." echo ">>> False positive exclusions:" && cat false_positive_exclusions.txt echo ">>> WAF hits:" && cat waf_hits.txt - name: Commit and push exclusions list if: steps.detect_changes.outputs.exclusions_changed == 'true' run: | git config user.name "Paul Pfeister (automation)" git config user.email "code@pfeister.dev" git fetch origin exclusions || true # Allows creation of branch if deleted git checkout -B exclusions origin/exclusions || (git checkout --orphan exclusions && git rm -rf .) git add false_positive_exclusions.txt git commit -m "auto: update exclusions list" || echo "No changes to commit" git push origin exclusions sherlock-0.16.0/.github/workflows/regression.yml 0000664 0000000 0000000 00000003251 15062142553 0021714 0 ustar 00root root 0000000 0000000 name: Regression Testing on: pull_request: branches: - master - release/** paths: - '.github/workflows/regression.yml' - '**/*.json' - '**/*.py' - '**/*.ini' - '**/*.toml' push: branches: - master - release/** paths: - '.github/workflows/regression.yml' - '**/*.json' - '**/*.py' - '**/*.ini' - '**/*.toml' jobs: tox-lint: # Linting is ran through tox to ensure that the same linter is used by local runners runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up linting environment uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install tox and related dependencies run: | python -m pip install --upgrade pip pip install tox - name: Run tox linting environment run: tox -e lint tox-matrix: runs-on: ${{ matrix.os }} strategy: fail-fast: false # We want to know what specicic versions it fails on matrix: os: [ ubuntu-latest, windows-latest, macos-latest, ] python-version: [ '3.10', '3.11', '3.12', '3.13', ] steps: - uses: actions/checkout@v4 - name: Set up environment ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install tox and related dependencies run: | python -m pip install --upgrade pip pip install tox pip install tox-gh-actions - name: Run tox run: tox sherlock-0.16.0/.github/workflows/update-site-list.yml 0000664 0000000 0000000 00000002614 15062142553 0022733 0 ustar 00root root 0000000 0000000 name: Update Site List # Trigger the workflow when changes are pushed to the main branch # and the changes include the sherlock_project/resources/data.json file on: push: branches: - master paths: - sherlock_project/resources/data.json jobs: sync-json-data: # Use the latest version of Ubuntu as the runner environment runs-on: ubuntu-latest steps: # Check out the code at the specified pull request head commit - name: Checkout code uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 # Install Python 3 - name: Install Python uses: actions/setup-python@v5 with: python-version: '3.x' # Execute the site_list.py Python script - name: Execute site-list.py run: python devel/site-list.py - name: Pushes to another repository uses: sdushantha/github-action-push-to-another-repository@main env: SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} with: source-directory: 'output' destination-github-username: 'sherlock-project' commit-message: 'Updated site list' destination-repository-name: 'sherlockproject.xyz' user-email: siddharth.dushantha@gmail.com target-branch: master sherlock-0.16.0/.gitignore 0000664 0000000 0000000 00000001007 15062142553 0015401 0 ustar 00root root 0000000 0000000 # Virtual Environments venv/ bin/ lib/ pyvenv.cfg poetry.lock # Regression Testing .coverage .tox/ # Editor Configurations .vscode/ .idea/ # Python __pycache__/ # Pip src/ # Devel, Build, and Installation *.egg-info/ dist/** # Jupyter Notebook .ipynb_checkpoints *.ipynb # Output files, except requirements.txt *.txt !requirements.txt # Comma-Separated Values (CSV) Reports *.csv #XLSX Reports *.xlsx # Excluded sites list tests/.excluded_sites # MacOS Folder Metadata File .DS_Store # Vim swap files *.swp sherlock-0.16.0/Dockerfile 0000664 0000000 0000000 00000001712 15062142553 0015406 0 ustar 00root root 0000000 0000000 # Release instructions: # 1. Update the version tag in the Dockerfile to match the version in sherlock/__init__.py # 2. Update the VCS_REF tag to match the tagged version's FULL commit hash # 3. Build image with BOTH latest and version tags # i.e. `docker build -t sherlock/sherlock:0.16.0 -t sherlock/sherlock:latest .` FROM python:3.12-slim-bullseye as build WORKDIR /sherlock RUN pip3 install --no-cache-dir --upgrade pip FROM python:3.12-slim-bullseye WORKDIR /sherlock ARG VCS_REF= # CHANGE ME ON UPDATE ARG VCS_URL="https://github.com/sherlock-project/sherlock" ARG VERSION_TAG= # CHANGE ME ON UPDATE ENV SHERLOCK_ENV=docker LABEL org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.vcs-url=$VCS_URL \ org.label-schema.name="Sherlock" \ org.label-schema.version=$VERSION_TAG \ website="https://sherlockproject.xyz" RUN pip3 install --no-cache-dir sherlock-project==$VERSION_TAG WORKDIR /sherlock ENTRYPOINT ["sherlock"] sherlock-0.16.0/LICENSE 0000664 0000000 0000000 00000002061 15062142553 0014417 0 ustar 00root root 0000000 0000000 MIT License Copyright (c) 2019 Sherlock Project Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. sherlock-0.16.0/devel/ 0000775 0000000 0000000 00000000000 15062142553 0014512 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/devel/site-list.py 0000664 0000000 0000000 00000002643 15062142553 0017006 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python # This module generates the listing of supported sites which can be found in # sites.md. It also organizes all the sites in alphanumeric order import json import os DATA_REL_URI: str = "sherlock_project/resources/data.json" # Read the data.json file with open(DATA_REL_URI, "r", encoding="utf-8") as data_file: data: dict = json.load(data_file) # Removes schema-specific keywords for proper processing social_networks: dict = dict(data) social_networks.pop('$schema', None) # Sort the social networks in alphanumeric order social_networks: list = sorted(social_networks.items()) # Make output dir where the site list will be written os.mkdir("output") # Write the list of supported sites to sites.md with open("output/sites.mdx", "w") as site_file: site_file.write("---\ntitle: 'List of supported sites'\nsidebarTitle: 'Supported sites'\nicon: 'globe'\ndescription: 'Sherlock currently supports **400+** sites'\n---\n\n") for social_network, info in social_networks: url_main = info["urlMain"] is_nsfw = "**(NSFW)**" if info.get("isNSFW") else "" site_file.write(f"1. [{social_network}]({url_main}) {is_nsfw}\n") # Overwrite the data.json file with sorted data with open(DATA_REL_URI, "w") as data_file: sorted_data = json.dumps(data, indent=2, sort_keys=True) data_file.write(sorted_data) data_file.write("\n") print("Finished updating supported site listing!") sherlock-0.16.0/docs/ 0000775 0000000 0000000 00000000000 15062142553 0014343 5 ustar 00root root 0000000 0000000 sherlock-0.16.0/docs/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000012555 15062142553 0017152 0 ustar 00root root 0000000 0000000 # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at yahya.arbabi@gmail.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations sherlock-0.16.0/docs/README.md 0000664 0000000 0000000 00000014136 15062142553 0015627 0 ustar 00root root 0000000 0000000
Hunt down social media accounts by username across 400+ social networks
Installation • Usage • Contributing
kmR!|:}GD]&v,sN]"xNjZVo5É^H'OM3`AÖM囯HgԳN/3s\K`&)FIM ]f7h/;;xVO5;mńB!; J vqBS4jn_-h"fipsA4Qȿ-6P,aD5a~qg=KG H`B|v8iXqKzZZC|嵷EP"urvњLt\?H0ֈ2L.\Om%P&"Hkhē=Du$oK"ŵuú7ic@p|2`$S BN5oNⵏ(gF0\o6x ͊0&@"~jawr%(k?s삉H2B3!?w!aʡ7T- `+W.g'wf,̞>UkqFUG'G}`:^sB!ߡ`7 k"OukWKMT0҇F:ڲI}9?ʞ];e3$!|_XM`"zifB3C'j- #2ir̩.۲K퐯t Z?4)h]VlڠӪ giZԪ[Ov.6nΫk0qڛokZ#jQg͘"7oHg ƻhrܝ^|Iݼa]`b9,oYBZ5v{j0AzFtf~}*5jבgj=/B\Ѵd1LK#\_g"[ s4jT:fmstzePr ݫwsfw(:>a_QLs(#u6ɓƫ'#@Z<!B!)C:vu.^8_H=M|W_b6*iM<]fl߲Ylj4lDm$ ˦E0fL5c]Bϑ3nN͙gAzBTHRn٤Ĵ?]Sv1QvjmƯkQbZgj++i,_؈tn)/t}YSQ'Oa`&LHlOc4%uqI"VN2aڬTmkU/K5_KB0=R7=4)MSô@N4!Qj 8h0e1c!eW_~8K01"8~}zɹ3g4Z`AypgO?K0 u~JMqfYҤ˔-'|[tv8[n}ik!a}ڿoboH"4g.F!/t}El2ȘQ?&֩&iɭڴ/>H6o\W&B!r7; uA[n7pȜriƌR0'yFwAA*G=,$T̚v4%LݡY۽z)5=4qo@N@҅4= A Ɉ7i!vzk,@.:j]0<=ǟC^ 4aN':4&@""[7oI LE07|N5>vDF47'Q0DiۋEDiQ ќ1ml\`tA<;M[Z#Ѹ>:sCU$y/?90aZDIZit0Mnx1K0-X43d)˗.FjD|O 1ὥ7Lj!qDb .qT.-URiٶFOT_T5RH/99gY# 9ɣ7F ֯[7o&q^SUdvȬu7R<_[]NrIuug$9gh,t4.v_xْe3]M}Ѕ3Hw@pv횦= l0vה')9~#m8*v}R`|ՊF=ia'ԓ"e9J]` VN0Oٙv(cvB!CLDl!B~b%B!e()LB5sM*#B!g f OvR !B! &!B!@$B!b(B!BB!BU`&1dvw[;0_^ś9dtʤDZ)#iB!_lEsH:)ب7yD 7oXTr-v_O.>/7u 2e0]~Ã$.:i!B!$ dWD*YK\sI\lKtx,}g\nܣl\\2:gVQ`#ȑy{%#3֕V2fH}ψfmiʙُxc*W)߭e=- M !3f;;;(LxdȐA3QQO|PxﮨL2M_8s^댙2w{QfcYĚ=O!B`&"HOnR :쐦\GAO#DHdK>`Bgϗe%SF *6Gr\3KvħZ9>#gO>57s)ڪxW'ˡYR%xML,GS'$5|Ԫ]Ol %W/?}_t,UZV[1GiѺ4mR= h@}e/~IN<%B(ɰ&g[S\E*k!>Jʁ-FOJzEGL眮RuYL^CwI0^KJvliJCFvm)ܤ]Ov4r,^{flqM@ҝsfє`+}a#~%d#J$ |$UՐ3ɷC|_'o^ 6ގ-vv=l69t ƤTY>fHh#4jTJqZuOr~M#+TJ|/7ڴ kx0a?f]Ӌ/ɠٳ2y8 g?ۜ>e1wF0 !@LFZ=WJV'f =tL9+SI[$&2F=zF{}*rmZwA]_r#%f]GcB%[ET_\,aWBǬΒFSQq3\qZbӈ[ToWO,'%`9웴3KZ$8 ֆ@<%Ƭ+SI LJnN]r479w|HSԻbD*գ$r5O8%si*0nBoKЙi8gHZ$dt$QaQrU]8gHÅf]CKDo㼸O2dcl]s6Posx(~>~z6>qv2PB Ž4~5T)H.Ըd2Nj