mirror of
https://github.com/jtesta/ssh-audit.git
synced 2024-11-16 13:35:39 +01:00
da31c19d38
* Convert type comments to annotations Notes: - variable annotations are only possible for Python 3.6 and upwards - class names as a result of a function have to be quoted cf https://www.python.org/dev/peps/pep-0563/#enabling-the-future-behavior-in-python-3-7 This is ongoing work for #32 modified: ssh-audit.py * Do not use variable annotation ... as this feature works only for Python 3.6 and above only. modified: ssh-audit.py * Re-enable strict_optional `None` is a valid return type for mypy, even when you specify a certain type. `strict_optional` makes sure that only the annotated return type is actually returned. modified: tox.ini * Re-enable `warn_unused_ignores` Quote from mypy docs: This flag will make mypy report an error whenever your code uses a `# type: ignore` comment on a line that is not actually generating an error message. modified: tox.ini * Re-enable `warn_return_any` Quote from the documenation: "This flag causes mypy to generate a warning when returning a value with type Any from a function declared with a non-Any return type." modified: tox.ini * Re-enable `warn_redundant_casts` Quote from the documentation: "This flag will make mypy report an error whenever your code uses an unnecessary cast that can safely be removed." modified: tox.ini * Remove `warn_incomplete_stub` ... as the documentation says "This flag is mainly intended to be used by people who want contribute to typeshed and would like a convenient way to find gaps and omissions." modified: tox.ini * Re-enable `disallow_subclassing_any` Quote from the documentation: "This flag reports an error whenever a class subclasses a value of type Any." modified: tox.ini * Re-enable `follow_imports` ... and set it to `normal`. For more information, see https://mypy.readthedocs.io/en/latest/running_mypy.html#follow-imports modified: tox.ini * Re-enable `ignore_missing_imports` Quote from the documentation: "This flag makes mypy ignore all missing imports. It is equivalent to adding # type: ignore comments to all unresolved imports within your codebase." modified: tox.ini * Fix arguments for Kex initialization `follows` has to be a boolean, but an int was provided. This worked, as in Python boolean is a subtype of int. modified: ssh-audit.py * Do not uncomment `check_untyped_defs` yet modified: tox.ini * Change KexDH.__ed25519_pubkey's default type It was initialized with 0 (int), and later it gets set with bytes. Now, it gets initialized with None, and thus gets the type Optional[bytes]. Optional means None or the named type. modified: ssh-audit.py * Fix whitespace modified: tox.ini * Add type annotation for main function modified: ssh-audit.py * Add type annotation for KexDH.set_params modified: ssh-audit.py * Add type annotation for Kex.set_rsa_key_size modified: ssh-audit.py * Add type annotation for Kex.rsa_key_sizes modified: ssh-audit.py * Add type annotation for Kex.set_dh_modulus_size modified: ssh-audit.py * Add type annotation to Kex.dh_modulus_sizes modified: ssh-audit.py * Add type annotation for Kex.set_host_key modified: ssh-audit.py * Add type annotation for Kex.host_keys modified: ssh-audit.py * Add type annotation for HostKeyTest.run modified: ssh-audit.py * Add static typing to HostKeyTest.perform_test This revealed a small oversight in the guard protecting the call to perform_test. modified: ssh-audit.py * Add type annotation for GexTest.reconnect modified: ssh-audit.py * Add type annotation for GexTest.run modified: ssh-audit.py * Add type annotation for ReadBuf.reset modified: ssh-audit.py * Add type annoation for WriteBuf.reset modified: ssh-audit.py * Add type annotation to Socket.listen_and_accept modified: ssh-audit.py * Move comment for is_connected into docstring. modified: ssh-audit.py * Add type annotation for Socket.is_connected modified: ssh-audit.py * Add type annotation for Socket.close modified: ssh-audit.py * Do not commit breakpoint modified: ssh-audit.py * Add annotations for KexDH key size handling modified: ssh-audit.py * Add type annotation for KexDH.get_ca_size modified: ssh-audit.py * Add type annotation to output_info modified: ssh-audit.py * Add type annotation for KexDH.__get_bytes modified: ssh-audit.py * Add type annotation to KexGroup14.__init__ modified: ssh-audit.py * Add type annotation for KexGroup14_SHA256.__init__ modified: ssh-audit.py * Add type annotation for KexGroup16_SHA512.__init__ modified: ssh-audit.py * Add type annotation for KexGroup18_SHA512.__init__ modified: ssh-audit.py * Add type annotation for KexCurve25519_SHA256.__init__ modified: ssh-audit.py * Add type annotation for KexNISTP256.__init__ modified: ssh-audit.py * Add type annotations to several init methods modified: ssh-audit.py * Add type annotataion for KexGroupExchange.send_init_gex modified: ssh-audit.py * Add type annotation for KexGroupExchange.__init__ modified: ssh-audit.py * Add type annotation to KexCurve25519_SHA256.send_init modified: ssh-audit.py * Add type annotation for KexNISTP256.sent_init modified: ssh-audit.py * Add type annotation for KexNISTP384.send_init modified: ssh-audit.py * Add type annotation for KexNISTP521.send_init modified: ssh-audit.py * Add type annotation for KexGroupExchange.send_init modified: ssh-audit.py * Add type annotation to KexDH.get_dh_modulus_size modified: ssh-audit.py * Delete unused variables KexDH.__f and f_len __f was initialized as int, then assigned to bytes, but never used. f_len assigned an int, but not all. modified: ssh-audit.py * Delete unused variables KexDH.__h_sig and h_sig_len modified: ssh-audit.py * Add type annotation for KexDH.__hostkey_type modified: ssh-audit.py
141 lines
3.6 KiB
INI
141 lines
3.6 KiB
INI
[tox]
|
|
envlist =
|
|
py{py3}-{test,pylint,flake8,vulture}
|
|
py{35,36,37,38}-{test,mypy,pylint,flake8,vulture}
|
|
cov
|
|
skipsdist = true
|
|
skip_missing_interpreters = true
|
|
|
|
[testenv]
|
|
deps =
|
|
test: pytest<6.0
|
|
test,cov: {[testenv:cov]deps}
|
|
test,py{35,36,37,38}-{type,mypy}: colorama
|
|
py{35,36,37,38}-{type,mypy}: {[testenv:mypy]deps}
|
|
py{py3,35,36,37,38}-{lint,pylint},lint: {[testenv:pylint]deps}
|
|
py{py3,35,36,37,38}-{lint,flake8},lint: {[testenv:flake8]deps}
|
|
py{py3,35,36,37,38}-{lint,vulture},lint: {[testenv:vulture]deps}
|
|
setenv =
|
|
SSHAUDIT = {toxinidir}/ssh-audit.py
|
|
test: COVERAGE_FILE = {toxinidir}/.coverage.{envname}
|
|
type,mypy: MYPYPATH = {toxinidir}/test/stubs
|
|
type,mypy: MYPYHTML = {toxinidir}/reports/html/mypy
|
|
commands =
|
|
test: coverage run --source ssh-audit -m -- \
|
|
test: pytest -v --junitxml={toxinidir}/reports/junit.{envname}.xml {posargs:test}
|
|
test: coverage report --show-missing
|
|
test: coverage html -d {toxinidir}/reports/html/coverage.{envname}
|
|
py{35,36,37,38}-{type,mypy}: {[testenv:mypy]commands}
|
|
py{py3,35,36,37,38}-{lint,pylint},lint: {[testenv:pylint]commands}
|
|
py{py3,35,36,37,38}-{lint,flake8},lint: {[testenv:flake8]commands}
|
|
py{py3,35,36,37,38}-{lint,vulture},lint: {[testenv:vulture]commands}
|
|
ignore_outcome =
|
|
type: true
|
|
lint: true
|
|
|
|
[testenv:cov]
|
|
deps =
|
|
coverage
|
|
setenv =
|
|
COVERAGE_FILE = {toxinidir}/.coverage
|
|
commands =
|
|
coverage erase
|
|
coverage combine
|
|
coverage report --show-missing
|
|
coverage xml -i -o {toxinidir}/reports/coverage.xml
|
|
coverage html -d {toxinidir}/reports/html/coverage
|
|
|
|
[testenv:mypy]
|
|
deps =
|
|
colorama
|
|
lxml
|
|
mypy
|
|
commands =
|
|
-mypy \
|
|
--show-error-context \
|
|
--config-file {toxinidir}/tox.ini \
|
|
--html-report {env:MYPYHTML}.py3.{envname} \
|
|
{posargs:{env:SSHAUDIT}}
|
|
|
|
[testenv:pylint]
|
|
deps =
|
|
mccabe
|
|
pylint
|
|
commands =
|
|
-pylint \
|
|
--rcfile tox.ini \
|
|
--load-plugins=pylint.extensions.bad_builtin \
|
|
--load-plugins=pylint.extensions.check_elif \
|
|
--load-plugins=pylint.extensions.mccabe \
|
|
{posargs:{env:SSHAUDIT}}
|
|
|
|
[testenv:flake8]
|
|
deps =
|
|
flake8
|
|
commands =
|
|
flake8 {posargs:{env:SSHAUDIT} {toxinidir}/packages/setup.py {toxinidir}/test} --statistics
|
|
|
|
[testenv:vulture]
|
|
deps =
|
|
vulture
|
|
commands =
|
|
python -c "import sys; from subprocess import Popen, PIPE; \
|
|
a = ['vulture', '--min-confidence', '100'] + r'{posargs:{env:SSHAUDIT}}'.split(' '); \
|
|
o = Popen(a, shell=False, stdout=PIPE).communicate()[0]; \
|
|
l = [x for x in o.split(b'\n') if x and b'Unused import' not in x]; \
|
|
print(b'\n'.join(l).decode('utf-8')); \
|
|
sys.exit(1 if len(l) > 0 else 0)"
|
|
|
|
|
|
[mypy]
|
|
ignore_missing_imports = False
|
|
follow_imports = normal
|
|
; disallow_untyped_calls = True
|
|
; disallow_untyped_defs = True
|
|
; check_untyped_defs = True
|
|
disallow_subclassing_any = True
|
|
warn_redundant_casts = True
|
|
warn_return_any = True
|
|
warn_unused_ignores = True
|
|
strict_optional = True
|
|
|
|
[pylint]
|
|
reports = no
|
|
#output-format = colorized
|
|
indent-string = \t
|
|
disable =
|
|
bad-continuation,
|
|
broad-except,
|
|
fixme,
|
|
invalid-name,
|
|
line-too-long,
|
|
missing-docstring,
|
|
mixed-indentation,
|
|
no-else-return,
|
|
too-complex,
|
|
too-many-branches,
|
|
too-many-instance-attributes,
|
|
too-many-lines,
|
|
too-many-locals,
|
|
too-many-boolean-expressions
|
|
max-complexity = 15
|
|
max-args = 8
|
|
max-locals = 20
|
|
max-returns = 6
|
|
max-branches = 15
|
|
max-statements = 60
|
|
max-parents = 7
|
|
max-attributes = 8
|
|
min-public-methods = 1
|
|
max-public-methods = 20
|
|
max-bool-expr = 5
|
|
max-nested-blocks = 6
|
|
max-line-length = 80
|
|
ignore-long-lines = ^\s*(#\s+type:\s+.*|[A-Z0-9_]+\s+=\s+.*|('.*':\s+)?\[.*\],?|assert\s+.*)$
|
|
max-module-lines = 2500
|
|
|
|
[flake8]
|
|
ignore =
|
|
E241, # multiple spaces after operator; should be kept for tabular data
|
|
E501, # line too long
|