pyntcli 0.1.79__py3-none-any.whl → 0.1.81__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.
- pyntcli/__init__.py +1 -1
- pyntcli/analytics/send.py +27 -8
- pyntcli/commands/burp.py +2 -2
- pyntcli/commands/listen.py +2 -2
- pyntcli/commands/util.py +1 -1
- pyntcli/main.py +0 -1
- {pyntcli-0.1.79.dist-info → pyntcli-0.1.81.dist-info}/METADATA +1 -1
- {pyntcli-0.1.79.dist-info → pyntcli-0.1.81.dist-info}/RECORD +11 -11
- {pyntcli-0.1.79.dist-info → pyntcli-0.1.81.dist-info}/WHEEL +0 -0
- {pyntcli-0.1.79.dist-info → pyntcli-0.1.81.dist-info}/entry_points.txt +0 -0
- {pyntcli-0.1.79.dist-info → pyntcli-0.1.81.dist-info}/top_level.txt +0 -0
pyntcli/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.1.
|
|
1
|
+
__version__ = "0.1.81"
|
pyntcli/analytics/send.py
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import requests
|
|
2
2
|
import time
|
|
3
3
|
import platform
|
|
4
|
+
import socket
|
|
5
|
+
import subprocess
|
|
4
6
|
|
|
5
7
|
from pyntcli import __version__
|
|
6
8
|
from pyntcli.transport import pynt_requests
|
|
7
9
|
import pyntcli.log.log as log
|
|
10
|
+
from pyntcli.ui import ui_thread
|
|
8
11
|
|
|
9
12
|
|
|
10
13
|
PYNT_DEFAULT_USER_ID = "d9e3b82b-2900-43bf-8c8f-7ffe2f0cda36"
|
|
11
14
|
MIXPANEL_TOKEN = "05c26edb86084bbbb803eed6818cd8aa"
|
|
12
|
-
|
|
15
|
+
MIXPANEL_DOMAIN = "api-eu.mixpanel.com"
|
|
16
|
+
MIXPANEL_URL = f"https://{MIXPANEL_DOMAIN}/track?ip=1"
|
|
13
17
|
|
|
14
18
|
logger = log.get_logger()
|
|
15
19
|
|
|
@@ -47,18 +51,32 @@ class AnalyticsSender():
|
|
|
47
51
|
self.user_id = user_id
|
|
48
52
|
self.version = __version__
|
|
49
53
|
self.events = []
|
|
54
|
+
self.disable_analytics = False
|
|
50
55
|
|
|
51
56
|
@staticmethod
|
|
52
57
|
def instance():
|
|
53
58
|
if not AnalyticsSender._instance:
|
|
54
59
|
AnalyticsSender._instance = AnalyticsSender()
|
|
60
|
+
AnalyticsSender._instance.check_network_restrictions()
|
|
55
61
|
|
|
56
62
|
return AnalyticsSender._instance
|
|
57
63
|
|
|
64
|
+
def check_network_restrictions(self):
|
|
65
|
+
try:
|
|
66
|
+
result = subprocess.run(["ping", "-c", "1", MIXPANEL_DOMAIN], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, timeout=2)
|
|
67
|
+
if result.returncode != 0:
|
|
68
|
+
self.set_disable_analytics("ping return code not 0")
|
|
69
|
+
except (socket.gaierror, subprocess.TimeoutExpired):
|
|
70
|
+
self.set_disable_analytics("timeout")
|
|
71
|
+
|
|
72
|
+
def set_disable_analytics(self, reason: str):
|
|
73
|
+
self.disable_analytics = True
|
|
74
|
+
logger.debug(f"Disabling analytics due to : {reason}")
|
|
75
|
+
|
|
58
76
|
def base_event(self, event_type):
|
|
59
77
|
return {
|
|
60
78
|
"event": event_type,
|
|
61
|
-
"properties":
|
|
79
|
+
"properties": {
|
|
62
80
|
"time": time.time(),
|
|
63
81
|
"distinct_id": self.user_id,
|
|
64
82
|
"$os": platform.platform(),
|
|
@@ -75,10 +93,10 @@ class AnalyticsSender():
|
|
|
75
93
|
base_event["properties"][k] = v
|
|
76
94
|
|
|
77
95
|
if self.user_id != PYNT_DEFAULT_USER_ID:
|
|
78
|
-
|
|
96
|
+
if self.disable_analytics:
|
|
97
|
+
logger.info(f"Analytics disabled, sending to logz: {base_event}")
|
|
98
|
+
else:
|
|
79
99
|
pynt_requests.post(MIXPANEL_URL, json=[base_event])
|
|
80
|
-
except Exception:
|
|
81
|
-
logger.info(f"mixpanel unavailable, sending to logz: {base_event}")
|
|
82
100
|
else:
|
|
83
101
|
self.events.append(base_event)
|
|
84
102
|
|
|
@@ -99,8 +117,9 @@ class AnalyticsSender():
|
|
|
99
117
|
|
|
100
118
|
def done(self):
|
|
101
119
|
if self.events:
|
|
102
|
-
|
|
120
|
+
if self.disable_analytics:
|
|
121
|
+
logger.info(f"Analytics disabled, sending to logz: {self.events}")
|
|
122
|
+
else:
|
|
103
123
|
pynt_requests.post(MIXPANEL_URL, json=self.events)
|
|
104
|
-
|
|
105
|
-
logger.info(f"mixpanel unavailable, sending to logz: {self.events}")
|
|
124
|
+
|
|
106
125
|
self.events = []
|
pyntcli/commands/burp.py
CHANGED
|
@@ -289,12 +289,12 @@ class BurpCommand(sub_command.PyntSubCommand):
|
|
|
289
289
|
json_report_path = util.get_user_report_path(full_path, "json")
|
|
290
290
|
|
|
291
291
|
if html_report:
|
|
292
|
-
with open(html_report_path, "w") as html_file:
|
|
292
|
+
with open(html_report_path, "w",encoding="utf-8") as html_file:
|
|
293
293
|
html_file.write(html_report)
|
|
294
294
|
webbrowser.open("file://{}".format(html_report_path))
|
|
295
295
|
|
|
296
296
|
if json_report:
|
|
297
|
-
with open(json_report_path, "w") as json_file:
|
|
297
|
+
with open(json_report_path, "w",encoding="utf-8") as json_file:
|
|
298
298
|
json_file.write(json_report)
|
|
299
299
|
reporter = cli_reporter.PyntReporter(json_report_path)
|
|
300
300
|
reporter.print_summary()
|
pyntcli/commands/listen.py
CHANGED
|
@@ -185,12 +185,12 @@ class ListenSubCommand(sub_command.PyntSubCommand):
|
|
|
185
185
|
json_report_path = util.get_user_report_path(full_path, "json")
|
|
186
186
|
|
|
187
187
|
if html_report:
|
|
188
|
-
with open(html_report_path, "w") as html_file:
|
|
188
|
+
with open(html_report_path, "w",encoding="utf-8") as html_file:
|
|
189
189
|
html_file.write(html_report)
|
|
190
190
|
webbrowser.open("file://{}".format(html_report_path))
|
|
191
191
|
|
|
192
192
|
if json_report:
|
|
193
|
-
with open(json_report_path, "w") as json_file:
|
|
193
|
+
with open(json_report_path, "w",encoding="utf-8") as json_file:
|
|
194
194
|
json_file.write(json_report)
|
|
195
195
|
reporter = cli_reporter.PyntReporter(json_report_path)
|
|
196
196
|
reporter.print_summary()
|
pyntcli/commands/util.py
CHANGED
|
@@ -66,7 +66,7 @@ def create_default_file_mounts(args):
|
|
|
66
66
|
json_report_path = os.path.join(os.getcwd(), "pynt_results.json")
|
|
67
67
|
|
|
68
68
|
mounts = []
|
|
69
|
-
with open(html_report_path, "w"), open(json_report_path, "w"):
|
|
69
|
+
with open(html_report_path, "w",encoding="utf-8"), open(json_report_path, "w",encoding="utf-8"):
|
|
70
70
|
mounts.append(pynt_container.create_mount(json_report_path, "/etc/pynt/results/results.json"))
|
|
71
71
|
mounts.append(pynt_container.create_mount(html_report_path, "/etc/pynt/results/results.html"))
|
|
72
72
|
|
pyntcli/main.py
CHANGED
|
@@ -6,7 +6,6 @@ from pyntcli.commands import pynt_cmd
|
|
|
6
6
|
from pyntcli.pynt_docker import pynt_container
|
|
7
7
|
from pyntcli.ui import ui_thread
|
|
8
8
|
from pyntcli.ui import pynt_errors
|
|
9
|
-
from pyntcli.ui import ui_thread
|
|
10
9
|
from pyntcli.auth import login
|
|
11
10
|
from pyntcli.analytics import send as analytics
|
|
12
11
|
from requests.exceptions import SSLError
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
pyntcli/__init__.py,sha256=
|
|
2
|
-
pyntcli/main.py,sha256=
|
|
1
|
+
pyntcli/__init__.py,sha256=4reVRut6pFQ0MxDHMjUh2C4vPGa3csSjDj46nUuBiXs,23
|
|
2
|
+
pyntcli/main.py,sha256=qTGMG2JSpieg-1RRgBz9dPL4vHo1WJJIxTPQYAuzxuY,5138
|
|
3
3
|
pyntcli/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
pyntcli/analytics/send.py,sha256=
|
|
4
|
+
pyntcli/analytics/send.py,sha256=pJOyOWl3g_Vm9apKK3LzNVqsnC6zsWA1bCK3ZegbLpc,3637
|
|
5
5
|
pyntcli/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
pyntcli/auth/login.py,sha256=TljsRXbEkNI1YUrKm5mlTw4YiecYScYUsit8Z8vstss,5228
|
|
7
7
|
pyntcli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
pyntcli/commands/burp.py,sha256=
|
|
8
|
+
pyntcli/commands/burp.py,sha256=KuxeX9I0ZXSVAMHdt9OYFok79X9IK6z71-ZN-_fnrvU,10565
|
|
9
9
|
pyntcli/commands/command.py,sha256=0O7Za_cjT6vDkDfM0OTMPB6DLI3U1r1R7lXQydz7458,9495
|
|
10
10
|
pyntcli/commands/har.py,sha256=mSCbTUnxQrKzJd-dAWoc6Tkw6tU1LDH7Ha1w2ylrrrg,3654
|
|
11
11
|
pyntcli/commands/id_command.py,sha256=UBEgMIpm4vauTCsKyixltiGUolNg_OfHEJvJ_i5BpJY,943
|
|
12
|
-
pyntcli/commands/listen.py,sha256=
|
|
12
|
+
pyntcli/commands/listen.py,sha256=JoDo3BirYf9f3Fr21qAQ7kIDmLbM5cuFzQtf8RQ_nhs,8484
|
|
13
13
|
pyntcli/commands/newman.py,sha256=y0KolwMgsvoqPz2mp0QRug_qNr-ftOZbu_tN7h4bH7I,4826
|
|
14
14
|
pyntcli/commands/postman.py,sha256=GWq4NJJ_9WdFiXk5rv2nTyMM27w50XLh4LKkuuWpw4I,4721
|
|
15
15
|
pyntcli/commands/pynt_cmd.py,sha256=KOl9guUtesO2JcMM5nPKKkjnK6F9HV4jHHcoUk4KVhw,2825
|
|
16
16
|
pyntcli/commands/root.py,sha256=GijCi8hqe8sXEo6faWimlCmT8d782yjrw1IWJT5RAMk,3320
|
|
17
17
|
pyntcli/commands/sub_command.py,sha256=GF3-rE_qk2L4jGPFqHLm9SdGINmu3EakhjJTFyWjRms,374
|
|
18
|
-
pyntcli/commands/util.py,sha256=
|
|
18
|
+
pyntcli/commands/util.py,sha256=NJBJk4tKzrWmilYdo-7CROH5IXKl0UQAPKaMzRZtxm8,2827
|
|
19
19
|
pyntcli/log/__init__.py,sha256=cOGwOYzMoshEbZiiasBGkj6wF0SBu3Jdpl-AuakDesw,19
|
|
20
20
|
pyntcli/log/log.py,sha256=cWCdWmUaAwePwdhYDcgNMEG9d9RM34sGahxBCYEdv2Y,1069
|
|
21
21
|
pyntcli/pynt_docker/__init__.py,sha256=PQIOVxc7XXtMLfEX7ojgwf_Z3mmTllO3ZvzUZTPOxQY,30
|
|
@@ -35,8 +35,8 @@ pyntcli/ui/ui_thread.py,sha256=OVTbiIFMg2KgxAvHf7yy86xGm4RVS2vj_VYZkMi-SRY,4956
|
|
|
35
35
|
tests/conftest.py,sha256=gToq5K74GtgeGQXjFvXSzMaE6axBYxAzcFG5XJPOXjI,427
|
|
36
36
|
tests/auth/test_login.py,sha256=KFlzWhXBAuwdi7GXf16gCB3ya94LQG2wjcSChE149rQ,3798
|
|
37
37
|
tests/store/test_cred_store.py,sha256=_7-917EtNC9eKEumO2_lt-7KuDmCwOZFaowCm7DbA_A,254
|
|
38
|
-
pyntcli-0.1.
|
|
39
|
-
pyntcli-0.1.
|
|
40
|
-
pyntcli-0.1.
|
|
41
|
-
pyntcli-0.1.
|
|
42
|
-
pyntcli-0.1.
|
|
38
|
+
pyntcli-0.1.81.dist-info/METADATA,sha256=D5hWFtXYjvdJp7uIjMBlj8Z_yYP0pobzSV1Ce6T1onM,463
|
|
39
|
+
pyntcli-0.1.81.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
40
|
+
pyntcli-0.1.81.dist-info/entry_points.txt,sha256=kcGmqAxXDttNk2EPRcqunc_LTVp61gzakz0v-GEE2SY,43
|
|
41
|
+
pyntcli-0.1.81.dist-info/top_level.txt,sha256=u9MDStwVHB7UG8PUcODeWCul_NvzL2EzoLvSlgwLHFs,30
|
|
42
|
+
pyntcli-0.1.81.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|