[build-system] requires = ["setuptools >= 65.63"] [project] name = "cowrie" dynamic = ["version"] description="Cowrie SSH/Telnet Honeypot." license.text="BSD-3-Clause" authors = [ {name = "Michel Oosterhof", email="michel@oosterhof.net"}, ] maintainers = [ {name = "Michel Oosterhof", email="michel@oosterhof.net"}, ] keywords=["ssh", "telnet", "honeypot"] requires-python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*, !=3.8.*, <4" readme="README.rst" classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: No Input/Output (Daemon)", "Framework :: Twisted", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Topic :: Security" ] dependencies = [ "attrs==24.2.0", "bcrypt==4.2.0", "cryptography==43.0.3", "hyperlink==21.0.0", "idna==3.10", "packaging==24.2", "pyasn1_modules==0.4.1", "requests==2.32.3", "service_identity==24.2.0", "tftpy==0.8.2", "treq==24.9.1", "twisted==24.10.0", ] [project.urls] homepage = "https://www.cowrie.org/" repository = "https://github.com/cowrie/cowrie" [project.scripts] fsctl = "cowrie.scripts.fsctl:run" asciinema = "cowrie.scripts.asciinema:run" creatfs = "cowrie.scripts.createfs:run" playlog = "cowrie.scripts.playlog:run" [project.optional-dependencies] csirtg = ["csirtgsdk==1.1.5"] dshield = ["requests"] elasticsearch = ["pyes"] mysql = ["mysqlclient"] mongodb = ["pymongo"] rethinkdblog = ["rethinkdb"] s3 = ["botocore"] slack = ["slackclient"] influxdb = ["influxdb"] dev = [ "build==1.2.2.post1", "coverage==7.6.4", "mypy-extensions==1.0.0; platform_python_implementation=='CPython'", "mypy-zope==1.0.9; platform_python_implementation=='CPython'", "mypy==1.10.0; platform_python_implementation=='CPython'", "pathspec==0.12.1", "pipdeptree==2.23.4", "pre-commit==4.0.1", "pylint==3.2.7", "pyre-check==0.9.23", "pyright==1.1.389", "pytype==2024.1.24; platform_python_implementation=='CPython' and python_version<'3.11'", "pyupgrade==3.19.0", "pyyaml==6.0.2", "readthedocs-sphinx-search==0.3.2", "ruff==0.7.2", "setuptools==75.1.0", "sphinx-copybutton==0.5.2", "sphinx_rtd_theme==3.0.1", "tox==4.23.2", "types-python-dateutil==2.9.0.20241003", "types-redis==4.6.0.20241004", "types-requests==2.32.0.20241016", "yamllint==1.35.1", ] [tool.isort] profile = "black" known_zope = "zope" known_twisted = "twisted" known_first_party = ["cowrie","backend_pool"] sections=["FUTURE","STDLIB","THIRDPARTY","ZOPE","TWISTED","FIRSTPARTY","LOCALFOLDER"] [tool.mypy] namespace_packages = true plugins = [ "mypy_zope:plugin" ] disable_error_code = [ "annotation-unchecked" ] ignore_missing_imports = true warn_unused_configs = true no_implicit_optional = true show_column_numbers = true show_error_codes = true strict_optional = true warn_no_return = true warn_redundant_casts = true warn_return_any = true warn_unreachable = true disallow_incomplete_defs = true disallow_any_unimported = true strict_equality = true disallow_untyped_decorators = true disallow_subclassing_any = true warn_unused_ignores = true local_partial_types = true no_implicit_reexport = true # Getting these passing should be easy # strict_concatenate = true # These are too strict for us at the moment check_untyped_defs = false disallow_untyped_defs = false disallow_any_decorated = false disallow_any_explicit = false disallow_any_expr = false disallow_any_generics = false disallow_untyped_calls = false [tool.pylint."MESSAGES CONTROL"] disable = ["R0801", "R0901", "R0902", "R0903", "R0904", "R0912", "R0913", "R0914", "R0915", "C0103", "C0114", "C0115", "C0116", "C0301", "W0201"] ignored-classes = ["twisted.internet.reactor"] [tool.pyright] include = ["src"] typeCheckingMode = "strict" reportArgumentType = "none" reportAssignmentType = "none" reportAttributeAccessIssue = "none" reportCallIssue = "information" reportGeneralTypeIssues = "information" reportIncompatibleMethodOverride = "information" reportIncompatibleVariableOverride = "none" reportMissingImports = "none" reportMissingModuleSource = "none" reportOperatorIssue = "information" reportOptionalCall = "information" reportOptionalMemberAccess = "none" reportOptionalOperand = "information" reportPossiblyUnboundVariable = "information" reportUnsupportedDunderAll = "information" [tool.ruff] line-length = 88 # Enable Pyflakes `E` and `F` codes by default. lint.select = ["E", "F", "UP", "YTT", "B", "T20", "Q", "RUF", "TRY"] lint.ignore = ["E501", "UP007", "B019", "RUF001", "UP038"] # Assume Python 3.10. target-version = "py310" # Ignore `T201` (print) in all scripts [tool.ruff.lint.per-file-ignores] "src/cowrie/scripts/*" = ["T201"] [tool.setuptools] package-dir = {"" = "src"} [tool.setuptools.packages.find] where = ["src"]