@@ -45,6 +45,10 @@ class TokenError(Exception):
45
45
pass
46
46
47
47
48
+ class AuthTokenExpiredError (Exception ):
49
+ pass
50
+
51
+
48
52
class ServerType (Enum ):
49
53
OLD = auto () # Server is old and does not support workspaces
50
54
CE = auto () # Server is Community Edition
@@ -80,7 +84,15 @@ class MerginClient:
80
84
Currently, only HTTP proxies are supported.
81
85
"""
82
86
83
- def __init__ (self , url = None , auth_token = None , login = None , password = None , plugin_version = None , proxy_config = None ):
87
+ def __init__ (
88
+ self ,
89
+ url = None ,
90
+ auth_token = None ,
91
+ login = None ,
92
+ password = None ,
93
+ plugin_version = None ,
94
+ proxy_config = None ,
95
+ ):
84
96
self .url = url if url is not None else MerginClient .default_url ()
85
97
self ._auth_params = None
86
98
self ._auth_session = None
@@ -134,15 +146,20 @@ def __init__(self, url=None, auth_token=None, login=None, password=None, plugin_
134
146
self .opener = urllib .request .build_opener (* handlers , https_handler )
135
147
urllib .request .install_opener (self .opener )
136
148
137
- if login and not password :
138
- raise ClientError ("Unable to log in: no password provided for '{}'" .format (login ))
139
- if password and not login :
140
- raise ClientError ("Unable to log in: password provided but no username/email" )
149
+ if login or password :
150
+ if login and not password :
151
+ raise ClientError ("Unable to log in: no password provided for '{}'" .format (login ))
152
+ if password and not login :
153
+ raise ClientError ("Unable to log in: password provided but no username/email" )
141
154
142
- if login and password :
143
- self ._auth_params = {"login" : login , "password" : password }
155
+ if login and password :
156
+ self ._auth_params = {"login" : login , "password" : password }
157
+ if not self ._auth_session :
158
+ self .login (login , password )
159
+
160
+ else :
144
161
if not self ._auth_session :
145
- self . login ( login , password )
162
+ raise ClientError ( "Unable to log in: no auth token provided for login" )
146
163
147
164
def setup_logging (self ):
148
165
"""Setup Mergin Maps client logging."""
@@ -190,11 +207,19 @@ def wrapper(self, *args):
190
207
delta = self ._auth_session ["expire" ] - datetime .now (timezone .utc )
191
208
if delta .total_seconds () < 5 :
192
209
self .log .info ("Token has expired - refreshing..." )
193
- self .login (self ._auth_params ["login" ], self ._auth_params ["password" ])
210
+ if self ._auth_params .get ("login" , None ) and self ._auth_params .get ("password" , None ):
211
+ self .log .info ("Token has expired - refreshing..." )
212
+ self .login (self ._auth_params ["login" ], self ._auth_params ["password" ])
213
+ else :
214
+ raise AuthTokenExpiredError ("Token has expired - please re-login" )
194
215
else :
195
216
# Create a new authorization token
196
217
self .log .info (f"No token - login user: { self ._auth_params ['login' ]} " )
197
- self .login (self ._auth_params ["login" ], self ._auth_params ["password" ])
218
+ if self ._auth_params .get ("login" , None ) and self ._auth_params .get ("password" , None ):
219
+ self .login (self ._auth_params ["login" ], self ._auth_params ["password" ])
220
+ else :
221
+ raise ClientError ("Missing login or password" )
222
+
198
223
return f (self , * args )
199
224
200
225
return wrapper
0 commit comments