1515class BaseClient (abc .ABC ):
1616 def __init__ (
1717 self ,
18- login : str ,
19- password : str ,
18+ login : t . Optional [ str ] ,
19+ password_or_token : str ,
2020 * ,
2121 base_url : str = DEFAULT_URL ,
2222 encryptor : t .Optional [BaseEncryptor ] = None ,
2323 ) -> None :
24- credentials = base64 .b64encode (f"{ login } :{ password } " .encode ("utf-8" )).decode (
25- "utf-8"
26- )
24+ if login and password_or_token :
25+ auth_header = f"Basic { base64 .b64encode (f'{ login } :{ password_or_token } ' .encode ()).decode ()} "
26+ elif password_or_token :
27+ auth_header = f"Bearer { password_or_token } "
28+ else :
29+ raise ValueError ("Either login and password or token must be provided" )
30+
2731 self .headers = {
28- "Authorization" : f"Basic { credentials } " ,
32+ "Authorization" : auth_header ,
2933 "Content-Type" : "application/json" ,
3034 "User-Agent" : f"android-sms-gateway/{ VERSION } (client; python { sys .version_info .major } .{ sys .version_info .minor } )" ,
3135 }
@@ -87,14 +91,19 @@ def _decrypt(self, state: domain.MessageState) -> domain.MessageState:
8791class APIClient (BaseClient ):
8892 def __init__ (
8993 self ,
90- login : str ,
91- password : str ,
94+ login : t . Optional [ str ] ,
95+ password_or_token : str ,
9296 * ,
9397 base_url : str = DEFAULT_URL ,
9498 encryptor : t .Optional [BaseEncryptor ] = None ,
9599 http : t .Optional [http .HttpClient ] = None ,
96100 ) -> None :
97- super ().__init__ (login , password , base_url = base_url , encryptor = encryptor )
101+ super ().__init__ (
102+ login = login ,
103+ password_or_token = password_or_token ,
104+ base_url = base_url ,
105+ encryptor = encryptor ,
106+ )
98107 self .http = http
99108 self .default_http = None
100109
@@ -221,14 +230,19 @@ def health_check(self) -> dict:
221230class AsyncAPIClient (BaseClient ):
222231 def __init__ (
223232 self ,
224- login : str ,
225- password : str ,
233+ login : t . Optional [ str ] ,
234+ password_or_token : str ,
226235 * ,
227236 base_url : str = DEFAULT_URL ,
228237 encryptor : t .Optional [BaseEncryptor ] = None ,
229238 http_client : t .Optional [ahttp .AsyncHttpClient ] = None ,
230239 ) -> None :
231- super ().__init__ (login , password , base_url = base_url , encryptor = encryptor )
240+ super ().__init__ (
241+ login = login ,
242+ password_or_token = password_or_token ,
243+ base_url = base_url ,
244+ encryptor = encryptor ,
245+ )
232246 self .http = http_client
233247 self .default_http = None
234248
@@ -244,7 +258,7 @@ async def __aexit__(self, exc_type, exc_val, exc_tb):
244258 if self .default_http is None :
245259 return
246260
247- await self .default_http .__aexit__ (exc_type , exc_val , exc_tb )
261+ self .default_http .__aexit__ (exc_type , exc_val , exc_tb )
248262 self .http = self .default_http = None
249263
250264 async def send (self , message : domain .Message ) -> domain .MessageState :
0 commit comments