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 CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.79"
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
- MIXPANEL_URL = "https://api-eu.mixpanel.com/track?ip=1"
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
- try:
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
- try:
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
- except Exception:
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()
@@ -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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyntcli
3
- Version: 0.1.79
3
+ Version: 0.1.81
4
4
  Summary: Command line utility to handle all of Pynt's different integrations
5
5
  Author-email: Pynt-io <support@pynt.io>
6
6
  Project-URL: Homepage, https://pynt.io
@@ -1,21 +1,21 @@
1
- pyntcli/__init__.py,sha256=wrT29P9p_epbXQwXDsdC8_jeLRCegcuNp7-xofsm8uI,23
2
- pyntcli/main.py,sha256=7ZDeG3IO04T98D2NJ1vHWVAVJVm8y719NeV2Aom7tPY,5171
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=cKvMw4HIGJGLip5OMPqTv1AJDlKlc_Uk2Sfcl0e3QLE,2845
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=8Pi9BZ1jNjpDRaueukSEEwUl-lU-lduCVOlvwLy-5dE,10531
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=ZfzCM8P0TVweC42NCL24_1yK48_NvRER6Vi8_oChaT0,8450
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=mi9c6Ex0ftpdY0jvI5BiBD2zwJD6RhrPQ2VyfxBZlA8,2793
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.79.dist-info/METADATA,sha256=pPv6ii4e0_G5BmLtKKeE1GGsfC44DtiX6_iLYKMHiYA,463
39
- pyntcli-0.1.79.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
40
- pyntcli-0.1.79.dist-info/entry_points.txt,sha256=kcGmqAxXDttNk2EPRcqunc_LTVp61gzakz0v-GEE2SY,43
41
- pyntcli-0.1.79.dist-info/top_level.txt,sha256=u9MDStwVHB7UG8PUcODeWCul_NvzL2EzoLvSlgwLHFs,30
42
- pyntcli-0.1.79.dist-info/RECORD,,
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,,