99import unittest
1010
1111from dbus_next .aio import MessageBus
12- from dbus_next import Variant
12+ from dbus_next import DBusError , Message , MessageType , Variant
1313
1414import util
1515import webauthn
1616
1717
18+ def dbus_error_from_message (msg : Message ):
19+ assert msg .message_type == MessageType .ERROR
20+ return DBusError (msg .error_name , msg .body [0 ] if msg .body else None , reply = msg )
21+
22+
23+ DBusError ._from_message = dbus_error_from_message
24+
25+
1826async def run (cmd ):
1927 bus = await MessageBus ().connect ()
2028
@@ -36,9 +44,20 @@ async def run(cmd):
3644 username = "user@example.com"
3745
3846 if cmd == "create" :
39- auth_data = await create_passkey (
40- interface , origin , top_origin , rp_id , user_handle , username
41- )
47+ try :
48+ auth_data = await create_passkey (
49+ interface , origin , top_origin , rp_id , user_handle , username
50+ )
51+ except DBusError as e :
52+ print (
53+ "Received error: " + e .type + (f": { e .text } " if e .text else "" ),
54+ file = sys .stderr ,
55+ )
56+ exit (1 )
57+ except Exception as e :
58+ print (f"Received error: { e } " )
59+ exit (1 )
60+
4261 user_data = {
4362 "id" : 1 ,
4463 "name" : username ,
@@ -56,9 +75,20 @@ async def run(cmd):
5675 elif cmd == "get" :
5776 user_data = json .load (open ("./user.json" , "r" ))
5877 cred_id = util .b64_decode (user_data ["cred_id" ])
59- auth_data = await get_passkey (
60- interface , origin , top_origin , rp_id , cred_id , user_data
61- )
78+ try :
79+ auth_data = await get_passkey (
80+ interface , origin , top_origin , rp_id , cred_id , user_data
81+ )
82+ except DBusError as e :
83+ print (
84+ "Received error: " + e .type + (f": { e .text } " if e .text else "" ),
85+ file = sys .stderr ,
86+ )
87+ exit (1 )
88+ except Exception as e :
89+ print (f"Received error: { e } " )
90+ exit (1 )
91+
6292 print (auth_data )
6393 else :
6494 print (f"unknown cmd: { cmd } " )
@@ -143,6 +173,7 @@ async def create_passkey(interface, origin, top_origin, rp_id, user_handle, user
143173 }
144174
145175 rsp = await interface .call_create_credential (req )
176+
146177 print ("Received response" )
147178 pprint (rsp )
148179 if rsp ["type" ].value != "public-key" :
@@ -203,7 +234,8 @@ def main():
203234 print ("No cmd given. Use 'get' or 'create'" )
204235 exit ()
205236 cmd = args [0 ]
206- loop = asyncio .get_event_loop ()
237+ loop = asyncio .new_event_loop ()
238+ asyncio .set_event_loop (loop )
207239 loop .run_until_complete (run (cmd ))
208240
209241
0 commit comments