Skip to content
This repository was archived by the owner on Dec 20, 2021. It is now read-only.

Commit 533b79c

Browse files
committed
Re-implement some error handling
1 parent c630850 commit 533b79c

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

vrcpy/client.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,15 @@ async def login(self, username, password, mfa=None):
309309

310310
b64 = base64.b64encode((username+":"+password).encode()).decode()
311311

312-
resp = await self.request.get("/auth/user", headers={"Authorization": "Basic "+b64})
313-
if "requiresTwoFactorAuth" in resp["data"]:
312+
try:
313+
resp = await self.request.get("/auth/user", headers={"Authorization": "Basic "+b64})
314+
self.me = CurrentUser(self, resp["data"], self.loop)
315+
except ClientErrors.MfaRequired:
314316
if mfa is None:
315317
raise ClientErrors.MfaRequired("Account login requires mfa")
316318
else:
317319
await self.verify_mfa(mfa)
318320
await self.fetch_me()
319-
else:
320-
self.me = CurrentUser(self, resp["data"], self.loop)
321321

322322
await self._pre_loop()
323323

@@ -359,10 +359,13 @@ async def verify_mfa(self, mfa: str):
359359
if type(mfa) is not str or not (len(mfa) == 6 or len(mfa) == 8):
360360
raise ClientErrors.MfaInvalid("{} is not a valid MFA code".format(mfa))
361361

362-
await self.request.post("/auth/twofactorauth/{}/verify".format(
362+
resp = await self.request.post("/auth/twofactorauth/{}/verify".format(
363363
"totp" if len(mfa) == 6 else "otp"
364364
), json={"code": mfa})
365365

366+
if not resp["data"]["verified"]:
367+
raise ClientErrors.MfaInvalid(f"{mfa} is not a valid MFA code")
368+
366369
async def logout(self, unauth=True):
367370
'''
368371
Closes client session and logs out VRC user

vrcpy/request.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ async def _call(self, method, path, *args, **kwargs):
5757
"{} ({} retries)".format(e, self.request_retries)
5858
)
5959

60+
self.raise_for_errors(resp)
6061
return resp
6162

6263
async def close_session(self):
@@ -80,4 +81,16 @@ async def delete(self, path, *args, **kwargs):
8081

8182
async def patch(self, path, *args, **kwargs):
8283
resp = await self._call("PATCH", path, *args, **kwargs)
83-
return resp
84+
return resp
85+
86+
def raise_for_errors(self, resp):
87+
def on_200():
88+
if "requiresTwoFactorAuth" in resp["data"]:
89+
raise ClientErrors.MfaRequired("Account login requires mfa")
90+
91+
switch = {
92+
200: on_200
93+
}
94+
95+
if resp["status"] in switch:
96+
switch[resp["status"]]()

0 commit comments

Comments
 (0)