11import json .scanner
2- import requests , json , urllib3 , socket , re , sys
2+ import requests , json , urllib3 , socket , re , sys , os
33from requests .auth import HTTPBasicAuth
44import base64 , ssl , time , logging , random
55from typing import Literal , Union
@@ -18,6 +18,7 @@ def __init__(self, req_method:str, url: str, path_to_socket_file: str, username:
1818 self .debug_level = debug_level
1919 self .Logs : logging
2020 self .__init_log_system ()
21+ self .Error = self .ErrorModel (0 , '' )
2122
2223 self .url = url
2324 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:
2829 self .username = username
2930 self .password = password
3031
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-
3532 self .request : str = ''
3633 self .req_method = req_method
3734 self .str_response = ''
3835 self .json_response = ''
3936
40- # Option 2 with Namespaces
37+ # Option 2 with Namespacescs
4138 self .json_response_np : SimpleNamespace
42-
43- self .Error = self .ErrorModel (0 , '' )
39+ self .query ('stats.get' )
4440
4541 def __check_url (self , url : str ) -> bool :
4642 """Check provided url if it follow the format
@@ -66,16 +62,66 @@ def __check_url(self, url: str) -> bool:
6662 self .port = match .group (2 )
6763 self .endpoint = match .group (3 )
6864 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
6996
7097 return response
7198 except NameError as nameerr :
7299 self .Logs .critical (f'NameError: { nameerr } ' )
73100
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+
74117 def __send_to_unixsocket (self ):
75118 try :
76119
77120 sock = socket .socket (socket .AddressFamily .AF_UNIX , socket .SocketKind .SOCK_STREAM )
78121
122+ if not self .__check_unix_socket_file (self .path_to_socket_file ):
123+ return None
124+
79125 sock .connect (self .path_to_socket_file )
80126 sock .settimeout (10 )
81127
@@ -102,16 +148,21 @@ def __send_to_unixsocket(self):
102148
103149 except AttributeError as attrerr :
104150 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 ?'
106153 except OSError as oserr :
107154 self .Logs .critical (f'System Error: { oserr } ' )
108- sys .exit (3 )
109155 except Exception as err :
110156 self .Logs .error (f'General Error: { err } ' )
111157
112158 def __send_srequest (self ):
113159 """S For socket connection"""
114160 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+
115166 get_url = self .url
116167 get_host = self .host
117168 get_port = self .port
@@ -148,15 +199,26 @@ def __send_srequest(self):
148199 else :
149200 body = response_str
150201
202+ if self .__is_error_connection (body ):
203+ return None
204+
151205 self .json_response = json .loads (body )
152206 self .json_response_np : SimpleNamespace = json .loads (body , object_hook = lambda d : SimpleNamespace (** d ))
153207
208+ except (socket .error , ssl .SSLError ) as serror :
209+ self .Logs .error (f'Socket Error: { serror } ' )
154210 except Exception as err :
155211 self .Logs .error (f'General Error: { err } ' )
212+ # self.Logs.error(f'General Error: {traceback.format_exc()}')
156213
157214 def __send_request (self ) :
158215 """Use requests module"""
159216 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+
160222 verify = False
161223
162224 urllib3 .disable_warnings (urllib3 .exceptions .InsecureRequestWarning )
@@ -166,6 +228,9 @@ def __send_request(self) :
166228
167229 response = requests .post (url = self .url , auth = credentials , data = jsonrequest , verify = verify )
168230
231+ if self .__is_error_connection (response .text ):
232+ return None
233+
169234 decodedResponse = json .dumps (response .text )
170235
171236 self .str_response = decodedResponse
@@ -181,7 +246,6 @@ def __send_request(self) :
181246 except requests .ConnectionError as ce :
182247 self .Logs .critical (f"Connection Error : { ce } " )
183248 self .Logs .critical (f"Initial request: { self .request } " )
184- sys .exit (3 )
185249 except json .decoder .JSONDecodeError as jsonerror :
186250 self .Logs .error (f"jsonError { jsonerror } " )
187251 self .Logs .error (f"Initial request: { self .request } " )
0 commit comments