pyntcli 0.1.46__py3-none-any.whl → 0.1.48__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/main.py +74 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/conftest.py +24 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/build/lib/pyntcli/__init__.py +1 -1
- build/lib/build/lib/tests/auth/test_login.py +96 -0
- build/lib/build/lib/tests/store/test_cred_store.py +11 -0
- build/lib/pyntcli/__init__.py +1 -1
- build/lib/tests/auth/test_login.py +96 -0
- build/lib/tests/store/test_cred_store.py +11 -0
- pyntcli/__init__.py +1 -1
- pyntcli/auth/login.py +3 -0
- pyntcli/commands/postman.py +4 -0
- pyntcli/commands/root.py +1 -0
- pyntcli/pynt_docker/pynt_container.py +10 -2
- {pyntcli-0.1.46.dist-info → pyntcli-0.1.48.dist-info}/METADATA +1 -1
- pyntcli-0.1.48.dist-info/RECORD +127 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/build/lib/pyntcli/auth/login.py +0 -156
- build/lib/build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/build/lib/pyntcli/commands/har.py +0 -67
- build/lib/build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/build/lib/pyntcli/commands/root.py +0 -58
- build/lib/build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/build/lib/pyntcli/commands/util.py +0 -71
- build/lib/build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/build/lib/pyntcli/store/store.py +0 -58
- build/lib/build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/build/lib/pyntcli/transport/__init__.py +0 -0
- build/lib/build/lib/pyntcli/transport/pynt_requests.py +0 -54
- build/lib/build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/build/lib/pyntcli/ui/report.py +0 -62
- build/lib/build/lib/pyntcli/ui/ui_thread.py +0 -172
- build/lib/pyntcli/analytics/__init__.py +0 -0
- build/lib/pyntcli/analytics/send.py +0 -77
- build/lib/pyntcli/auth/__init__.py +0 -0
- build/lib/pyntcli/auth/login.py +0 -156
- build/lib/pyntcli/commands/__init__.py +0 -0
- build/lib/pyntcli/commands/har.py +0 -67
- build/lib/pyntcli/commands/id_command.py +0 -28
- build/lib/pyntcli/commands/newman.py +0 -77
- build/lib/pyntcli/commands/postman.py +0 -50
- build/lib/pyntcli/commands/proxy.py +0 -147
- build/lib/pyntcli/commands/pynt_cmd.py +0 -73
- build/lib/pyntcli/commands/root.py +0 -58
- build/lib/pyntcli/commands/sub_command.py +0 -15
- build/lib/pyntcli/commands/util.py +0 -71
- build/lib/pyntcli/pynt_docker/__init__.py +0 -1
- build/lib/pyntcli/pynt_docker/pynt_container.py +0 -218
- build/lib/pyntcli/store/__init__.py +0 -1
- build/lib/pyntcli/store/json_connector.py +0 -23
- build/lib/pyntcli/store/store.py +0 -58
- build/lib/pyntcli/store/store_connector.py +0 -17
- build/lib/pyntcli/transport/__init__.py +0 -0
- build/lib/pyntcli/transport/pynt_requests.py +0 -54
- build/lib/pyntcli/ui/__init__.py +0 -0
- build/lib/pyntcli/ui/progress.py +0 -39
- build/lib/pyntcli/ui/pynt_errors.py +0 -7
- build/lib/pyntcli/ui/report.py +0 -62
- build/lib/pyntcli/ui/ui_thread.py +0 -172
- pyntcli-0.1.46.dist-info/RECORD +0 -349
- {pyntcli-0.1.46.dist-info → pyntcli-0.1.48.dist-info}/WHEEL +0 -0
- {pyntcli-0.1.46.dist-info → pyntcli-0.1.48.dist-info}/entry_points.txt +0 -0
- {pyntcli-0.1.46.dist-info → pyntcli-0.1.48.dist-info}/top_level.txt +0 -0
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import requests
|
|
2
|
-
import time
|
|
3
|
-
import platform
|
|
4
|
-
|
|
5
|
-
from pyntcli import __version__
|
|
6
|
-
from pyntcli.transport import pynt_requests
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
PYNT_DEFAULT_USER_ID = "d9e3b82b-2900-43bf-8c8f-7ffe2f0cda36"
|
|
10
|
-
MIXPANEL_TOKEN = "05c26edb86084bbbb803eed6818cd8aa"
|
|
11
|
-
MIXPANEL_URL = "https://api-eu.mixpanel.com/track?ip=1"
|
|
12
|
-
|
|
13
|
-
def stop():
|
|
14
|
-
if not AnalyticsSender._instance:
|
|
15
|
-
return
|
|
16
|
-
AnalyticsSender.instance().done()
|
|
17
|
-
|
|
18
|
-
def emit(event, properties=None):
|
|
19
|
-
AnalyticsSender.instance().emit(event, properties)
|
|
20
|
-
|
|
21
|
-
def set_user_id(user_id):
|
|
22
|
-
AnalyticsSender.instance().set_user_id(user_id)
|
|
23
|
-
|
|
24
|
-
CLI_START = "cli_start"
|
|
25
|
-
LOGIN_START = "cli_login_start"
|
|
26
|
-
LOGIN_DONE = "cli_login_done"
|
|
27
|
-
ERROR = "error"
|
|
28
|
-
|
|
29
|
-
class AnalyticsSender():
|
|
30
|
-
_instance = None
|
|
31
|
-
|
|
32
|
-
def __init__(self, user_id=PYNT_DEFAULT_USER_ID) -> None:
|
|
33
|
-
self.user_id = user_id
|
|
34
|
-
self.version = __version__
|
|
35
|
-
self.events = []
|
|
36
|
-
|
|
37
|
-
@staticmethod
|
|
38
|
-
def instance():
|
|
39
|
-
if not AnalyticsSender._instance:
|
|
40
|
-
AnalyticsSender._instance = AnalyticsSender()
|
|
41
|
-
|
|
42
|
-
return AnalyticsSender._instance
|
|
43
|
-
|
|
44
|
-
def base_event(self, event_type):
|
|
45
|
-
return {
|
|
46
|
-
"event": event_type,
|
|
47
|
-
"properties": {
|
|
48
|
-
"time": time.time(),
|
|
49
|
-
"distinct_id": self.user_id,
|
|
50
|
-
"$os": platform.platform(),
|
|
51
|
-
"cli_version": self.version,
|
|
52
|
-
"token": MIXPANEL_TOKEN
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
def emit(self, event, properties):
|
|
57
|
-
base_event = self.base_event(event)
|
|
58
|
-
|
|
59
|
-
if properties:
|
|
60
|
-
for k,v in properties.items():
|
|
61
|
-
base_event["properties"][k] = v
|
|
62
|
-
|
|
63
|
-
if self.user_id != PYNT_DEFAULT_USER_ID:
|
|
64
|
-
pynt_requests.post(MIXPANEL_URL, json=[base_event])
|
|
65
|
-
else:
|
|
66
|
-
self.events.append(base_event)
|
|
67
|
-
|
|
68
|
-
def set_user_id(self, user_id):
|
|
69
|
-
self.user_id = user_id
|
|
70
|
-
for i, _ in enumerate(self.events):
|
|
71
|
-
self.events[i]["properties"]["distinct_id"] = user_id
|
|
72
|
-
self.done()
|
|
73
|
-
|
|
74
|
-
def done(self):
|
|
75
|
-
if self.events:
|
|
76
|
-
pynt_requests.post(MIXPANEL_URL, json=self.events)
|
|
77
|
-
self.events = []
|
|
File without changes
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
from base64 import b64decode
|
|
2
|
-
import webbrowser
|
|
3
|
-
import uuid
|
|
4
|
-
import urllib.parse
|
|
5
|
-
import datetime
|
|
6
|
-
import time
|
|
7
|
-
import json
|
|
8
|
-
import os
|
|
9
|
-
|
|
10
|
-
from pyntcli.ui import ui_thread
|
|
11
|
-
from pyntcli.store import CredStore
|
|
12
|
-
from pyntcli.transport import pynt_requests
|
|
13
|
-
|
|
14
|
-
class LoginException(Exception):
|
|
15
|
-
pass
|
|
16
|
-
|
|
17
|
-
class Timeout(LoginException):
|
|
18
|
-
pass
|
|
19
|
-
|
|
20
|
-
class InvalidTokenInEnvVarsException(LoginException):
|
|
21
|
-
pass
|
|
22
|
-
|
|
23
|
-
PYNT_CREDENTIALS = "PYNT_CREDENTIALS"
|
|
24
|
-
|
|
25
|
-
class Login():
|
|
26
|
-
def __init__(self) -> None:
|
|
27
|
-
self.delay = 5
|
|
28
|
-
self.base_authorization_url = "https://pynt.io/login?"
|
|
29
|
-
self.poll_url = "https://n592meacjj.execute-api.us-east-1.amazonaws.com/default/cli_validate_login"
|
|
30
|
-
self.login_wait_period = (60 *3) #3 minutes
|
|
31
|
-
|
|
32
|
-
def create_login_request(self):
|
|
33
|
-
request_id = uuid.uuid4()
|
|
34
|
-
request_url = self.base_authorization_url + urllib.parse.urlencode({"request_id": request_id, "utm_source": "cli"})
|
|
35
|
-
webbrowser.open(request_url)
|
|
36
|
-
|
|
37
|
-
ui_thread.print(ui_thread.PrinterText("To continue, you need to log in to your account.")\
|
|
38
|
-
.with_line("You will now be redirected to the login page.") \
|
|
39
|
-
.with_line("") \
|
|
40
|
-
.with_line("If you are not automatically redirected, please click on the link provided below (or copy to your web browser)") \
|
|
41
|
-
.with_line(request_url))
|
|
42
|
-
return request_id
|
|
43
|
-
|
|
44
|
-
def get_token_using_request_id(self, request_id):
|
|
45
|
-
with ui_thread.spinner("Waiting...", "point"):
|
|
46
|
-
start = time.time()
|
|
47
|
-
while start + self.login_wait_period > time.time():
|
|
48
|
-
response = pynt_requests.get(self.poll_url, params={"request_id": request_id})
|
|
49
|
-
if response.status_code == 200:
|
|
50
|
-
return response.json()
|
|
51
|
-
time.sleep(self.delay)
|
|
52
|
-
raise Timeout()
|
|
53
|
-
|
|
54
|
-
def login(self):
|
|
55
|
-
id = self.create_login_request()
|
|
56
|
-
token = self.get_token_using_request_id(id)
|
|
57
|
-
with CredStore() as store:
|
|
58
|
-
store.put("token", token)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def refresh_request(refresh_token):
|
|
62
|
-
return pynt_requests.post("https://auth.pynt.io/default/refresh", json={"refresh_token": refresh_token})
|
|
63
|
-
|
|
64
|
-
def refresh_token():
|
|
65
|
-
token = None
|
|
66
|
-
with CredStore() as store:
|
|
67
|
-
token = store.get("token")
|
|
68
|
-
|
|
69
|
-
if not token:
|
|
70
|
-
Login().login()
|
|
71
|
-
|
|
72
|
-
access_token = token.get("access_token")
|
|
73
|
-
if access_token and not is_jwt_expired(access_token):
|
|
74
|
-
return
|
|
75
|
-
|
|
76
|
-
refresh = token.get("refresh_token", None)
|
|
77
|
-
if not refresh:
|
|
78
|
-
Login().login()
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
refresh_response = refresh_request(refresh)
|
|
82
|
-
if refresh_response.status_code != 200:
|
|
83
|
-
Login().login()
|
|
84
|
-
return
|
|
85
|
-
|
|
86
|
-
with CredStore() as store:
|
|
87
|
-
token["access_token"] = refresh_response.json()["token"]
|
|
88
|
-
store.put("token", token)
|
|
89
|
-
|
|
90
|
-
def decode_jwt(jwt_token):
|
|
91
|
-
splited = jwt_token.split(".")
|
|
92
|
-
if len(splited) != 3:
|
|
93
|
-
return None
|
|
94
|
-
|
|
95
|
-
return json.loads(b64decode(splited[1] + '=' * (-len(splited[1]) % 4)))
|
|
96
|
-
|
|
97
|
-
def user_id():
|
|
98
|
-
with CredStore() as store:
|
|
99
|
-
token = store.get("token")
|
|
100
|
-
if not token:
|
|
101
|
-
return None
|
|
102
|
-
|
|
103
|
-
decoded = decode_jwt(token["access_token"])
|
|
104
|
-
if not decoded:
|
|
105
|
-
return None
|
|
106
|
-
|
|
107
|
-
return decoded.get("sub", None)
|
|
108
|
-
|
|
109
|
-
return None
|
|
110
|
-
|
|
111
|
-
def is_jwt_expired(jwt_token):
|
|
112
|
-
decoded = decode_jwt(jwt_token)
|
|
113
|
-
if not decoded:
|
|
114
|
-
return True
|
|
115
|
-
|
|
116
|
-
exp = decoded.get("exp", None)
|
|
117
|
-
if not exp:
|
|
118
|
-
return True
|
|
119
|
-
|
|
120
|
-
return datetime.datetime.fromtimestamp(exp) < datetime.datetime.now() + datetime.timedelta(minutes=1)
|
|
121
|
-
|
|
122
|
-
def validate_creds_structure(data):
|
|
123
|
-
try:
|
|
124
|
-
creds = json.loads(data.replace("\n", ""))
|
|
125
|
-
token = creds.get("token", None)
|
|
126
|
-
if not token:
|
|
127
|
-
raise InvalidTokenInEnvVarsException()
|
|
128
|
-
if not isinstance(token, dict):
|
|
129
|
-
raise InvalidTokenInEnvVarsException()
|
|
130
|
-
|
|
131
|
-
refresh_token = token.get("refresh_token", None)
|
|
132
|
-
if not refresh_token:
|
|
133
|
-
raise InvalidTokenInEnvVarsException()
|
|
134
|
-
|
|
135
|
-
return token
|
|
136
|
-
except json.JSONDecodeError:
|
|
137
|
-
raise InvalidTokenInEnvVarsException()
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def should_login():
|
|
141
|
-
env_creds = os.environ.get(PYNT_CREDENTIALS, None)
|
|
142
|
-
if env_creds:
|
|
143
|
-
validated_creds = validate_creds_structure(env_creds)
|
|
144
|
-
with CredStore() as store:
|
|
145
|
-
store.put("token", validated_creds)
|
|
146
|
-
|
|
147
|
-
with CredStore() as store:
|
|
148
|
-
token = store.get("token")
|
|
149
|
-
|
|
150
|
-
if not token or token == store.connector.default_value:
|
|
151
|
-
return True
|
|
152
|
-
|
|
153
|
-
if not token.get("refresh_token"):
|
|
154
|
-
return True
|
|
155
|
-
|
|
156
|
-
return False
|
|
File without changes
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import time
|
|
3
|
-
import os
|
|
4
|
-
from functools import partial
|
|
5
|
-
|
|
6
|
-
from pyntcli.pynt_docker import pynt_container
|
|
7
|
-
from pyntcli.ui import ui_thread
|
|
8
|
-
from pyntcli.ui.progress import PyntProgress
|
|
9
|
-
from pyntcli.commands import sub_command, util
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def har_usage():
|
|
14
|
-
return ui_thread.PrinterText("Integration with static har file testing") \
|
|
15
|
-
.with_line("") \
|
|
16
|
-
.with_line("Usage:", style=ui_thread.PrinterText.HEADER) \
|
|
17
|
-
.with_line("\tpynt har [OPTIONS]") \
|
|
18
|
-
.with_line("") \
|
|
19
|
-
.with_line("Options:", style=ui_thread.PrinterText.HEADER) \
|
|
20
|
-
.with_line("\t--har - Path to har file") \
|
|
21
|
-
.with_line("\t--reporters output results to json") \
|
|
22
|
-
.with_line("\t--host-ca - path to the CA file in PEM format to enable SSL certificate verification for pynt when running through a VPN.")
|
|
23
|
-
|
|
24
|
-
class HarSubCommand(sub_command.PyntSubCommand):
|
|
25
|
-
def __init__(self, name) -> None:
|
|
26
|
-
super().__init__(name)
|
|
27
|
-
|
|
28
|
-
def usage(self, *args):
|
|
29
|
-
ui_thread.print(har_usage())
|
|
30
|
-
|
|
31
|
-
def add_cmd(self, parent: argparse._SubParsersAction) -> argparse.ArgumentParser:
|
|
32
|
-
har_cmd = parent.add_parser(self.name)
|
|
33
|
-
har_cmd.add_argument("--har", type=str, required=True)
|
|
34
|
-
har_cmd.add_argument("--reporters", action='store_true')
|
|
35
|
-
har_cmd.print_usage = self.usage
|
|
36
|
-
har_cmd.print_help = self.usage
|
|
37
|
-
return har_cmd
|
|
38
|
-
|
|
39
|
-
def run_cmd(self, args: argparse.Namespace):
|
|
40
|
-
port = str(util.find_open_port())
|
|
41
|
-
container = pynt_container.get_container_with_arguments(args, pynt_container.PyntDockerPort(src=port, dest=port, name="--port"))
|
|
42
|
-
|
|
43
|
-
if not os.path.isfile(args.har):
|
|
44
|
-
ui_thread.print(ui_thread.PrinterText("Could not find the provided har path, please provide with a valid har path", ui_thread.PrinterText.WARNING))
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
har_name = os.path.basename(args.har)
|
|
48
|
-
container.docker_arguments += ["--har", har_name]
|
|
49
|
-
container.mounts.append(pynt_container.create_mount(os.path.abspath(args.har), "/etc/pynt/{}".format(har_name)))
|
|
50
|
-
|
|
51
|
-
with util.create_default_file_mounts(args) as m:
|
|
52
|
-
|
|
53
|
-
container.mounts += m
|
|
54
|
-
|
|
55
|
-
har_docker = pynt_container.PyntContainer(image_name=pynt_container.PYNT_DOCKER_IMAGE,
|
|
56
|
-
tag="har-latest",
|
|
57
|
-
detach=True,
|
|
58
|
-
base_container=container)
|
|
59
|
-
|
|
60
|
-
har_docker.run()
|
|
61
|
-
|
|
62
|
-
healthcheck = partial(util.wait_for_healthcheck, "http://localhost:{}".format(port))
|
|
63
|
-
ui_thread.print_generator(ui_thread.AnsiText.wrap_gen(har_docker.stdout))
|
|
64
|
-
|
|
65
|
-
with ui_thread.progress("ws://localhost:{}/progress".format(port),healthcheck, "scan in progress...",100):
|
|
66
|
-
while har_docker.is_alive():
|
|
67
|
-
time.sleep(1)
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
|
|
3
|
-
from pyntcli.store.store import CredStore
|
|
4
|
-
from pyntcli.commands import sub_command
|
|
5
|
-
from pyntcli.ui import ui_thread
|
|
6
|
-
|
|
7
|
-
def pyntid_usage():
|
|
8
|
-
return ui_thread.PrinterText("View your pynt-id to use when running pynt in CI pipeline") \
|
|
9
|
-
.with_line("") \
|
|
10
|
-
.with_line("Usage:",style=ui_thread.PrinterText.HEADER) \
|
|
11
|
-
.with_line("\tpynt pynt-id")
|
|
12
|
-
|
|
13
|
-
class PyntShowIdCommand(sub_command.PyntSubCommand):
|
|
14
|
-
def __init__(self, name) -> None:
|
|
15
|
-
super().__init__(name)
|
|
16
|
-
|
|
17
|
-
def usage(self, *args):
|
|
18
|
-
ui_thread.print(pyntid_usage())
|
|
19
|
-
|
|
20
|
-
def add_cmd(self, parent: argparse._SubParsersAction) -> argparse.ArgumentParser:
|
|
21
|
-
cmd = parent.add_parser(self.name)
|
|
22
|
-
cmd.print_usage = self.usage
|
|
23
|
-
cmd.print_help = self.usage
|
|
24
|
-
return cmd
|
|
25
|
-
|
|
26
|
-
def run_cmd(self, args: argparse.Namespace):
|
|
27
|
-
creds_path = CredStore().get_path()
|
|
28
|
-
ui_thread.print(open(creds_path, "r").read())
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import time
|
|
3
|
-
import os
|
|
4
|
-
from functools import partial
|
|
5
|
-
|
|
6
|
-
from pyntcli.pynt_docker import pynt_container
|
|
7
|
-
from pyntcli.commands import sub_command, util
|
|
8
|
-
from pyntcli.ui import ui_thread
|
|
9
|
-
from pyntcli.ui.progress import PyntProgress
|
|
10
|
-
|
|
11
|
-
def newman_usage():
|
|
12
|
-
return ui_thread.PrinterText("Integration with newman, run scan using postman collection from the CLI") \
|
|
13
|
-
.with_line("") \
|
|
14
|
-
.with_line("Usage:", style=ui_thread.PrinterText.HEADER) \
|
|
15
|
-
.with_line("\tpynt newman [OPTIONS]") \
|
|
16
|
-
.with_line("") \
|
|
17
|
-
.with_line("Options:", style=ui_thread.PrinterText.HEADER) \
|
|
18
|
-
.with_line("\t--collection - Postman collection file name") \
|
|
19
|
-
.with_line("\t--environment - Postman environment file name") \
|
|
20
|
-
.with_line("\t--reporters output results to json") \
|
|
21
|
-
.with_line("\t--host-ca - path to the CA file in PEM format to enable SSL certificate verification for pynt when running through a VPN.")
|
|
22
|
-
|
|
23
|
-
class NewmanSubCommand(sub_command.PyntSubCommand):
|
|
24
|
-
def __init__(self, name) -> None:
|
|
25
|
-
super().__init__(name)
|
|
26
|
-
|
|
27
|
-
def usage(self, *args):
|
|
28
|
-
ui_thread.print(newman_usage())
|
|
29
|
-
|
|
30
|
-
def add_cmd(self, parent: argparse._SubParsersAction) -> argparse.ArgumentParser:
|
|
31
|
-
newman_cmd = parent.add_parser(self.name)
|
|
32
|
-
newman_cmd.add_argument("--collection", type=str, required=True)
|
|
33
|
-
newman_cmd.add_argument("--environment", type=str, required=False)
|
|
34
|
-
newman_cmd.add_argument("--reporters", action="store_true",default=False, required=False)
|
|
35
|
-
newman_cmd.print_usage = self.usage
|
|
36
|
-
newman_cmd.print_help = self.usage
|
|
37
|
-
return newman_cmd
|
|
38
|
-
|
|
39
|
-
def run_cmd(self, args: argparse.Namespace):
|
|
40
|
-
port = str(util.find_open_port())
|
|
41
|
-
container = pynt_container.get_container_with_arguments(args, pynt_container.PyntDockerPort(src=port, dest=port, name="--port"))
|
|
42
|
-
|
|
43
|
-
if not os.path.isfile(args.collection):
|
|
44
|
-
ui_thread.print(ui_thread.PrinterText("Could not find the provided collection path, please provide with a valid collection path", ui_thread.PrinterText.WARNING))
|
|
45
|
-
return
|
|
46
|
-
|
|
47
|
-
collection_name = os.path.basename(args.collection)
|
|
48
|
-
container.docker_arguments += ["-c", collection_name]
|
|
49
|
-
container.mounts.append(pynt_container.create_mount(os.path.abspath(args.collection), "/etc/pynt/{}".format(collection_name)))
|
|
50
|
-
|
|
51
|
-
if "environment" in args and args.environment:
|
|
52
|
-
if not os.path.isfile(args.environment):
|
|
53
|
-
ui_thread.print(ui_thread.PrinterText("Could not find the provided environment path, please provide with a valid environment path", ui_thread.PrinterText.WARNING))
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
env_name = os.path.basename(args.environment)
|
|
57
|
-
container.docker_arguments += ["-e", env_name]
|
|
58
|
-
container.mounts.append(pynt_container.create_mount(os.path.abspath(args.environment), "/etc/pynt/{}".format(env_name)))
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
with util.create_default_file_mounts(args) as m:
|
|
62
|
-
|
|
63
|
-
container.mounts += m
|
|
64
|
-
|
|
65
|
-
newman_docker = pynt_container.PyntContainer(image_name=pynt_container.PYNT_DOCKER_IMAGE,
|
|
66
|
-
tag="latest",
|
|
67
|
-
detach=True,
|
|
68
|
-
base_container=container)
|
|
69
|
-
|
|
70
|
-
newman_docker.run()
|
|
71
|
-
|
|
72
|
-
healthcheck = partial(util.wait_for_healthcheck, "http://localhost:{}".format(port))
|
|
73
|
-
ui_thread.print_generator(ui_thread.AnsiText.wrap_gen(newman_docker.stdout))
|
|
74
|
-
|
|
75
|
-
with ui_thread.progress("ws://localhost:{}/progress".format(port),healthcheck, "scan in progress...",100):
|
|
76
|
-
while newman_docker.is_alive():
|
|
77
|
-
time.sleep(1)
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import time
|
|
3
|
-
|
|
4
|
-
from . import sub_command, util
|
|
5
|
-
from pyntcli.pynt_docker import pynt_container
|
|
6
|
-
from pyntcli.ui import ui_thread
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def postman_usage():
|
|
10
|
-
return ui_thread.PrinterText("Integration with postman, run scan from pynt postman collection") \
|
|
11
|
-
.with_line("") \
|
|
12
|
-
.with_line("Usage:",style=ui_thread.PrinterText.HEADER) \
|
|
13
|
-
.with_line("\tpynt postman [OPTIONS]") \
|
|
14
|
-
.with_line("") \
|
|
15
|
-
.with_line("Options:",style=ui_thread.PrinterText.HEADER) \
|
|
16
|
-
.with_line("\t--port - set the port pynt will listen to (DEFAULT: 5001)") \
|
|
17
|
-
.with_line("\t--insecure - use when target uses self signed certificates") \
|
|
18
|
-
.with_line("\t--host-ca - path to the CA file in PEM format to enable SSL certificate verification for pynt when running through a VPN.")
|
|
19
|
-
|
|
20
|
-
class PostmanSubCommand(sub_command.PyntSubCommand):
|
|
21
|
-
def __init__(self, name) -> None:
|
|
22
|
-
super().__init__(name)
|
|
23
|
-
|
|
24
|
-
def usage(self, *args):
|
|
25
|
-
ui_thread.print(postman_usage())
|
|
26
|
-
|
|
27
|
-
def add_cmd(self, parent_command: argparse._SubParsersAction) -> argparse.ArgumentParser:
|
|
28
|
-
postman_cmd = parent_command.add_parser(self.name)
|
|
29
|
-
postman_cmd.add_argument("--port", "-p", help="set the port pynt will listen to (DEFAULT: 5001)", type=int, default=5001)
|
|
30
|
-
postman_cmd.print_usage = self.usage
|
|
31
|
-
postman_cmd.print_help = self.usage
|
|
32
|
-
return postman_cmd
|
|
33
|
-
|
|
34
|
-
def run_cmd(self, args: argparse.Namespace):
|
|
35
|
-
container = pynt_container.get_container_with_arguments(args ,pynt_container.PyntDockerPort("5001", args.port, name="--port"))
|
|
36
|
-
|
|
37
|
-
if util.is_port_in_use(args.port):
|
|
38
|
-
ui_thread.print(ui_thread.PrinterText("Port: {} already in use, please use a different one".format(args.port), ui_thread.PrinterText.WARNING))
|
|
39
|
-
return
|
|
40
|
-
|
|
41
|
-
postman_docker = pynt_container.PyntContainer(image_name=pynt_container.PYNT_DOCKER_IMAGE,
|
|
42
|
-
tag="postman-latest",
|
|
43
|
-
detach=True,
|
|
44
|
-
base_container=container)
|
|
45
|
-
|
|
46
|
-
postman_docker.run()
|
|
47
|
-
ui_thread.print_generator(postman_docker.stdout)
|
|
48
|
-
|
|
49
|
-
while postman_docker.is_alive():
|
|
50
|
-
time.sleep(1)
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
from copy import deepcopy
|
|
3
|
-
import os
|
|
4
|
-
import webbrowser
|
|
5
|
-
from http import HTTPStatus
|
|
6
|
-
import time
|
|
7
|
-
import tempfile
|
|
8
|
-
from subprocess import Popen, PIPE
|
|
9
|
-
from functools import partial
|
|
10
|
-
|
|
11
|
-
from pyntcli.pynt_docker import pynt_container
|
|
12
|
-
from pyntcli.ui import ui_thread
|
|
13
|
-
from pyntcli.commands import util, sub_command
|
|
14
|
-
from pyntcli.ui import report as cli_reporter
|
|
15
|
-
from pyntcli.transport import pynt_requests
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def proxy_usage():
|
|
20
|
-
return ui_thread.PrinterText("Command integration to Pynt. Run a security scan with a given command.") \
|
|
21
|
-
.with_line("") \
|
|
22
|
-
.with_line("Usage:",style=ui_thread.PrinterText.HEADER) \
|
|
23
|
-
.with_line("\tpynt command [OPTIONS]") \
|
|
24
|
-
.with_line("") \
|
|
25
|
-
.with_line("Options:",style=ui_thread.PrinterText.HEADER) \
|
|
26
|
-
.with_line("\t--cmd - The command that runs the functional tests") \
|
|
27
|
-
.with_line("\t--port - Set the port pynt will listen to (DEFAULT: 5001)") \
|
|
28
|
-
.with_line("\t--allow-errors - If present will allow command to fail and continue execution") \
|
|
29
|
-
.with_line("\t--ca-path - The path to the CA file in PEM format") \
|
|
30
|
-
.with_line("\t--proxy-port - Set the port proxied traffic should be routed to (DEFAULT: 6666)") \
|
|
31
|
-
.with_line("\t--report - If present will save the generated report in this path.") \
|
|
32
|
-
.with_line("\t--insecure - use when target uses self signed certificates") \
|
|
33
|
-
.with_line("\t--host-ca - path to the CA file in PEM format to enable SSL certificate verification for pynt when running through a VPN.")
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class ProxyCommand(sub_command.PyntSubCommand):
|
|
37
|
-
def __init__(self, name) -> None:
|
|
38
|
-
super().__init__(name)
|
|
39
|
-
self.scan_id = ""
|
|
40
|
-
self.proxy_sleep_interval = 2
|
|
41
|
-
self.proxy_healthcheck_buffer = 10
|
|
42
|
-
self.proxy_server_base_url = "http://localhost:{}/api"
|
|
43
|
-
|
|
44
|
-
def print_usage(self, *args):
|
|
45
|
-
ui_thread.print(proxy_usage())
|
|
46
|
-
|
|
47
|
-
def add_cmd(self, parent: argparse._SubParsersAction) -> argparse.ArgumentParser:
|
|
48
|
-
proxy_cmd = parent.add_parser(self.name)
|
|
49
|
-
proxy_cmd.add_argument("--port", "-p", help="", type=int, default=5001)
|
|
50
|
-
proxy_cmd.add_argument("--proxy-port", help="", type=int, default=6666)
|
|
51
|
-
proxy_cmd.add_argument("--cmd", help="", default="", required=True)
|
|
52
|
-
proxy_cmd.add_argument("--allow-errors", action="store_true")
|
|
53
|
-
proxy_cmd.add_argument("--ca-path", type=str, default="")
|
|
54
|
-
proxy_cmd.add_argument("--report", type=str, default="")
|
|
55
|
-
proxy_cmd.print_usage = self.print_usage
|
|
56
|
-
proxy_cmd.print_help = self.print_usage
|
|
57
|
-
return proxy_cmd
|
|
58
|
-
|
|
59
|
-
def _updated_environment(self, args):
|
|
60
|
-
env_copy = deepcopy(os.environ)
|
|
61
|
-
return env_copy.update({"HTTP_PROXY": "http://localhost:{}".format(args.proxy_port),
|
|
62
|
-
"HTTPS_PROXY": "http://localhost:{}".format(args.proxy_port)})
|
|
63
|
-
|
|
64
|
-
def _start_proxy(self, args):
|
|
65
|
-
res = pynt_requests.put(self.proxy_server_base_url.format(args.port) + "/proxy/start")
|
|
66
|
-
res.raise_for_status()
|
|
67
|
-
self.scan_id = res.json()["scanId"]
|
|
68
|
-
|
|
69
|
-
def _stop_proxy(self, args):
|
|
70
|
-
start = time.time()
|
|
71
|
-
while start + self.proxy_healthcheck_buffer > time.time():
|
|
72
|
-
res = pynt_requests.put(self.proxy_server_base_url.format(args.port) + "/proxy/stop", json={"scanId": self.scan_id})
|
|
73
|
-
if res.status_code == HTTPStatus.OK:
|
|
74
|
-
return
|
|
75
|
-
time.sleep(self.proxy_sleep_interval)
|
|
76
|
-
raise TimeoutError()
|
|
77
|
-
|
|
78
|
-
def _get_report(self, args,report_format):
|
|
79
|
-
while True:
|
|
80
|
-
res = pynt_requests.get(self.proxy_server_base_url.format(args.port) + "/report?format={}".format(report_format), params={"scanId": self.scan_id})
|
|
81
|
-
if res.status_code == HTTPStatus.OK:
|
|
82
|
-
return res.text
|
|
83
|
-
if res.status_code == HTTPStatus.ACCEPTED:
|
|
84
|
-
time.sleep(self.proxy_sleep_interval)
|
|
85
|
-
continue
|
|
86
|
-
if res.status_code == 517: #pynt did not recieve any requests
|
|
87
|
-
ui_thread.print(ui_thread.PrinterText(res.json()["message"], ui_thread.PrinterText.WARNING))
|
|
88
|
-
return
|
|
89
|
-
ui_thread.print("Error in polling for scan report: {}".format(res.text))
|
|
90
|
-
return
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
def run_cmd(self, args: argparse.Namespace):
|
|
94
|
-
container = pynt_container.get_container_with_arguments(args, pynt_container.PyntDockerPort(args.port, args.port, "--port"),
|
|
95
|
-
pynt_container.PyntDockerPort(args.proxy_port, args.proxy_port, "--proxy-port"))
|
|
96
|
-
if "ca_path" in args and args.ca_path:
|
|
97
|
-
if not os.path.isfile(args.ca_path):
|
|
98
|
-
ui_thread.print(ui_thread.PrinterText("Could not find the provided ca path, please provide with a valid path", ui_thread.PrinterText.WARNING))
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
ca_name = os.path.basename(args.ca_path)
|
|
102
|
-
container.docker_arguments += ["--ca-path", ca_name]
|
|
103
|
-
container.mounts.append(pynt_container.create_mount(os.path.abspath(args.ca_path), "/etc/pynt/{}".format(ca_name)))
|
|
104
|
-
|
|
105
|
-
proxy_docker = pynt_container.PyntContainer(image_name=pynt_container.PYNT_DOCKER_IMAGE,
|
|
106
|
-
tag="proxy-latest",
|
|
107
|
-
detach=True,
|
|
108
|
-
base_container=container)
|
|
109
|
-
proxy_docker.run()
|
|
110
|
-
ui_thread.print_generator(proxy_docker.stdout)
|
|
111
|
-
|
|
112
|
-
util.wait_for_healthcheck("http://localhost:{}".format(args.port))
|
|
113
|
-
self._start_proxy(args)
|
|
114
|
-
|
|
115
|
-
user_process = Popen(args.cmd, shell=True, stdout=PIPE, stderr=PIPE, env=self._updated_environment(args))
|
|
116
|
-
ui_thread.print_generator(user_process.stdout)
|
|
117
|
-
ui_thread.print_generator(user_process.stderr)
|
|
118
|
-
rc = user_process.wait()
|
|
119
|
-
if rc != 0 and not args.allow_errors:
|
|
120
|
-
proxy_docker.stop()
|
|
121
|
-
ui_thread.print(ui_thread.PrinterText("Command finished with error return code {}, If you wish Pynt to run anyway, run with --allow-errors".format(rc)))
|
|
122
|
-
return
|
|
123
|
-
|
|
124
|
-
self._stop_proxy(args)
|
|
125
|
-
|
|
126
|
-
with ui_thread.progress("ws://localhost:{}/progress?scanId={}".format(args.port, self.scan_id),partial(lambda *args: None), "scan in progress...", 100):
|
|
127
|
-
html_report = self._get_report(args,"html")
|
|
128
|
-
html_report_path = os.path.join(tempfile.gettempdir(), "pynt_report_{}.html".format(int(time.time())))
|
|
129
|
-
|
|
130
|
-
json_report = self._get_report(args,"json")
|
|
131
|
-
json_report_path = os.path.join(tempfile.gettempdir(), "pynt_report_{}.json".format(int(time.time())))
|
|
132
|
-
|
|
133
|
-
if "report" in args and args.report:
|
|
134
|
-
html_report_path = util.get_user_report_path(args.report,"html")
|
|
135
|
-
json_report_path = util.get_user_report_path(args.report,"json")
|
|
136
|
-
|
|
137
|
-
if html_report:
|
|
138
|
-
with open(html_report_path, "w") as html_file:
|
|
139
|
-
html_file.write(html_report)
|
|
140
|
-
webbrowser.open("file://{}".format(html_report_path))
|
|
141
|
-
|
|
142
|
-
if json_report:
|
|
143
|
-
with open(json_report_path, "w") as json_file:
|
|
144
|
-
json_file.write(json_report)
|
|
145
|
-
cli_reporter.PyntReporter(json_report_path).print_summary()
|
|
146
|
-
|
|
147
|
-
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
from typing import Dict, List
|
|
3
|
-
from pyntcli import __version__ as cli_version
|
|
4
|
-
from pyntcli.analytics import send as analytics
|
|
5
|
-
from pyntcli.transport import pynt_requests
|
|
6
|
-
from pyntcli.ui import ui_thread
|
|
7
|
-
from distutils.version import StrictVersion
|
|
8
|
-
|
|
9
|
-
from . import postman, root, sub_command, id_command, proxy , newman, har
|
|
10
|
-
|
|
11
|
-
avail_sub_commands = [
|
|
12
|
-
postman.PostmanSubCommand("postman"),
|
|
13
|
-
id_command.PyntShowIdCommand("pynt-id"),
|
|
14
|
-
newman.NewmanSubCommand("newman"),
|
|
15
|
-
har.HarSubCommand("har"),
|
|
16
|
-
proxy.ProxyCommand("command"),
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
class PyntCommandException(Exception):
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
class BadArgumentsException(PyntCommandException):
|
|
23
|
-
pass
|
|
24
|
-
|
|
25
|
-
class NoSuchCommandException(PyntCommandException):
|
|
26
|
-
pass
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
VERSION_CHECK_URL = "https://d1efigcr4c19qn.cloudfront.net/cli/version"
|
|
30
|
-
|
|
31
|
-
def check_is_latest_version(current_version):
|
|
32
|
-
res = pynt_requests.get(VERSION_CHECK_URL)
|
|
33
|
-
res.raise_for_status()
|
|
34
|
-
|
|
35
|
-
latest_versions = res.text.replace("\n","")
|
|
36
|
-
|
|
37
|
-
if current_version != latest_versions:
|
|
38
|
-
ui_thread.print(ui_thread.PrinterText("""Pynt CLI new version is available, upgrade now with:
|
|
39
|
-
python3 -m pip install --upgrade pyntcli""",ui_thread.PrinterText.WARNING))
|
|
40
|
-
|
|
41
|
-
class PyntCommand:
|
|
42
|
-
def __init__(self) -> None:
|
|
43
|
-
self.base: root.BaseCommand = root.BaseCommand()
|
|
44
|
-
self.sub_commands: Dict[str, sub_command.PyntSubCommand] = {sc.get_name(): sc for sc in avail_sub_commands}
|
|
45
|
-
self._start_command()
|
|
46
|
-
|
|
47
|
-
def _start_command(self):
|
|
48
|
-
self.base.cmd()
|
|
49
|
-
for sc in self.sub_commands.values():
|
|
50
|
-
self.base.add_base_arguments(sc.add_cmd(self.base.get_subparser()))
|
|
51
|
-
|
|
52
|
-
def parse_args(self, args_from_cmd: List[str]):
|
|
53
|
-
return self.base.cmd().parse_args(args_from_cmd)
|
|
54
|
-
|
|
55
|
-
def run_cmd(self, args: argparse.Namespace):
|
|
56
|
-
if not "command" in args:
|
|
57
|
-
raise BadArgumentsException()
|
|
58
|
-
|
|
59
|
-
command = getattr(args, "command")
|
|
60
|
-
if not command in self.sub_commands:
|
|
61
|
-
raise NoSuchCommandException()
|
|
62
|
-
|
|
63
|
-
if "host_ca" in args and args.host_ca:
|
|
64
|
-
pynt_requests.add_host_ca(args.host_ca)
|
|
65
|
-
|
|
66
|
-
if "insecure" in args and args.insecure:
|
|
67
|
-
pynt_requests.disable_tls_termination()
|
|
68
|
-
|
|
69
|
-
check_is_latest_version(cli_version)
|
|
70
|
-
analytics.emit(analytics.CLI_START)
|
|
71
|
-
|
|
72
|
-
self.base.run_cmd(args)
|
|
73
|
-
self.sub_commands[command].run_cmd(args)
|