1
1
import json .scanner
2
- import requests , json , urllib3 , socket , re , sys
2
+ import requests , json , urllib3 , socket , re , sys , os
3
3
from requests .auth import HTTPBasicAuth
4
4
import base64 , ssl , time , logging , random
5
5
from typing import Literal , Union
@@ -18,6 +18,7 @@ def __init__(self, req_method:str, url: str, path_to_socket_file: str, username:
18
18
self .debug_level = debug_level
19
19
self .Logs : logging
20
20
self .__init_log_system ()
21
+ self .Error = self .ErrorModel (0 , '' )
21
22
22
23
self .url = url
23
24
self .path_to_socket_file = path_to_socket_file
@@ -28,19 +29,14 @@ def __init__(self, req_method:str, url: str, path_to_socket_file: str, username:
28
29
self .username = username
29
30
self .password = password
30
31
31
- if not self .__check_url (url ) and not url is None :
32
- self .Logs .critical ('You must provide the url in this format: https://your.rpcjson.link:port/api' )
33
- sys .exit (3 )
34
-
35
32
self .request : str = ''
36
33
self .req_method = req_method
37
34
self .str_response = ''
38
35
self .json_response = ''
39
36
40
- # Option 2 with Namespaces
37
+ # Option 2 with Namespacescs
41
38
self .json_response_np : SimpleNamespace
42
-
43
- self .Error = self .ErrorModel (0 , '' )
39
+ self .query ('stats.get' )
44
40
45
41
def __check_url (self , url : str ) -> bool :
46
42
"""Check provided url if it follow the format
@@ -66,16 +62,66 @@ def __check_url(self, url: str) -> bool:
66
62
self .port = match .group (2 )
67
63
self .endpoint = match .group (3 )
68
64
response = True
65
+ else :
66
+ self .Error .code = - 1
67
+ self .Error .message = 'You must provide the url in this format: https://your.rpcjson.link:port/api'
68
+
69
+ return response
70
+ except NameError as nameerr :
71
+ self .Logs .critical (f'NameError: { nameerr } ' )
72
+
73
+ def __check_unix_socket_file (self , path_to_socket_file : str ) -> bool :
74
+ """Check provided full path to socket file if it exist
75
+
76
+ Args:
77
+ path_to_socket_file (str): Full path to unix socket file
78
+
79
+ Returns:
80
+ bool: True if path is correct else False
81
+ """
82
+ try :
83
+ response = False
84
+
85
+ if path_to_socket_file is None :
86
+ self .Error .code = - 1
87
+ self .Error .message = 'The Path to your socket file is empty ? please be sure that you are providing the correct socket path'
88
+ return response
89
+
90
+ if not os .path .exists (path_to_socket_file ):
91
+ self .Error .code = - 1
92
+ self .Error .message = 'The Path to your socket file is wrong ? please make sure that you are providing the correct socket path'
93
+ return response
94
+
95
+ response = True
69
96
70
97
return response
71
98
except NameError as nameerr :
72
99
self .Logs .critical (f'NameError: { nameerr } ' )
73
100
101
+ def __is_error_connection (self , response : str ) -> bool :
102
+ """If True, it means that there is an error
103
+
104
+ Args:
105
+ response (str): The response to analyse
106
+
107
+ Returns:
108
+ bool: True if there is a connection error
109
+ """
110
+ if 'authentication required' == response .lower ().strip ():
111
+ self .Error .code = - 1
112
+ self .Error .message = '>> Authentication required'
113
+ return True
114
+ else :
115
+ return False
116
+
74
117
def __send_to_unixsocket (self ):
75
118
try :
76
119
77
120
sock = socket .socket (socket .AddressFamily .AF_UNIX , socket .SocketKind .SOCK_STREAM )
78
121
122
+ if not self .__check_unix_socket_file (self .path_to_socket_file ):
123
+ return None
124
+
79
125
sock .connect (self .path_to_socket_file )
80
126
sock .settimeout (10 )
81
127
@@ -102,16 +148,21 @@ def __send_to_unixsocket(self):
102
148
103
149
except AttributeError as attrerr :
104
150
self .Logs .critical (f'AF_Unix Error: { attrerr } ' )
105
- sys .exit ('AF_UNIX Are you sure you want to use Unix socket ?' )
151
+ self .Error .code = - 1
152
+ self .Error .message = 'AF_UNIX Are you sure you want to use Unix socket ?'
106
153
except OSError as oserr :
107
154
self .Logs .critical (f'System Error: { oserr } ' )
108
- sys .exit (3 )
109
155
except Exception as err :
110
156
self .Logs .error (f'General Error: { err } ' )
111
157
112
158
def __send_srequest (self ):
113
159
"""S For socket connection"""
114
160
try :
161
+
162
+ if not self .__check_url (self .url ) and not self .url is None :
163
+ self .Logs .critical ('You must provide the url in this format: https://your.rpcjson.link:port/api' )
164
+ return None
165
+
115
166
get_url = self .url
116
167
get_host = self .host
117
168
get_port = self .port
@@ -148,15 +199,26 @@ def __send_srequest(self):
148
199
else :
149
200
body = response_str
150
201
202
+ if self .__is_error_connection (body ):
203
+ return None
204
+
151
205
self .json_response = json .loads (body )
152
206
self .json_response_np : SimpleNamespace = json .loads (body , object_hook = lambda d : SimpleNamespace (** d ))
153
207
208
+ except (socket .error , ssl .SSLError ) as serror :
209
+ self .Logs .error (f'Socket Error: { serror } ' )
154
210
except Exception as err :
155
211
self .Logs .error (f'General Error: { err } ' )
212
+ # self.Logs.error(f'General Error: {traceback.format_exc()}')
156
213
157
214
def __send_request (self ) :
158
215
"""Use requests module"""
159
216
try :
217
+
218
+ if not self .__check_url (self .url ) and not self .url is None :
219
+ self .Logs .critical ('You must provide the url in this format: https://your.rpcjson.link:port/api' )
220
+ return None
221
+
160
222
verify = False
161
223
162
224
urllib3 .disable_warnings (urllib3 .exceptions .InsecureRequestWarning )
@@ -166,6 +228,9 @@ def __send_request(self) :
166
228
167
229
response = requests .post (url = self .url , auth = credentials , data = jsonrequest , verify = verify )
168
230
231
+ if self .__is_error_connection (response .text ):
232
+ return None
233
+
169
234
decodedResponse = json .dumps (response .text )
170
235
171
236
self .str_response = decodedResponse
@@ -181,7 +246,6 @@ def __send_request(self) :
181
246
except requests .ConnectionError as ce :
182
247
self .Logs .critical (f"Connection Error : { ce } " )
183
248
self .Logs .critical (f"Initial request: { self .request } " )
184
- sys .exit (3 )
185
249
except json .decoder .JSONDecodeError as jsonerror :
186
250
self .Logs .error (f"jsonError { jsonerror } " )
187
251
self .Logs .error (f"Initial request: { self .request } " )
0 commit comments