client: Don't accept a SAS automatically.

This commit is contained in:
Damir Jelić 2019-05-10 11:21:54 +02:00
parent cb04e962f1
commit 840e568eac
5 changed files with 56 additions and 3 deletions

View File

@ -122,8 +122,17 @@ class PanClient(AsyncClient):
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
if isinstance(event, KeyVerificationStart): if isinstance(event, KeyVerificationStart):
logger.info(f"{event.sender} via {event.from_device} has started "
f"a key verification process.")
message = DeviceStartSasMessage(
self.user_id,
event.sender,
event.from_device
)
task = loop.create_task( task = loop.create_task(
self.accept_key_verification(event.transaction_id) self.queue.put(message)
) )
self.key_verificatins_tasks.append(task) self.key_verificatins_tasks.append(task)
@ -183,6 +192,21 @@ class PanClient(AsyncClient):
self.task = task self.task = task
return task return task
async def accept_sas(self, message):
user_id = message.user_id
device_id = message.device_id
sas = self.get_active_sas(user_id, device_id)
if not sas:
await self.send_info("No such verification process found.")
return
try:
await self.accept_key_verification(sas.transaction_id)
except (LocalProtocolError, ClientConnectionError) as e:
await self.send_info(f"Error accepting key verification: {e}")
async def confirm_sas(self, message): async def confirm_sas(self, message):
user_id = message.user_id user_id = message.user_id
device_id = message.device_id device_id = message.device_id

View File

@ -24,6 +24,7 @@ from pantalaimon.thread_messages import (
ExportKeysMessage, ExportKeysMessage,
ImportKeysMessage, ImportKeysMessage,
DeviceConfirmSasMessage, DeviceConfirmSasMessage,
DeviceAcceptSasMessage,
InfoMessage InfoMessage
) )
@ -125,7 +126,7 @@ class ProxyDaemon:
if isinstance( if isinstance(
message, message,
(DeviceVerifyMessage, DeviceUnverifyMessage, (DeviceVerifyMessage, DeviceUnverifyMessage,
DeviceConfirmSasMessage) DeviceConfirmSasMessage, DeviceAcceptSasMessage)
): ):
device = client.device_store[message.user_id].get( device = client.device_store[message.user_id].get(
@ -144,6 +145,8 @@ class ProxyDaemon:
await self._verify_device(client, device) await self._verify_device(client, device)
elif isinstance(message, DeviceUnverifyMessage): elif isinstance(message, DeviceUnverifyMessage):
await self._unverify_device(client, device) await self._unverify_device(client, device)
elif isinstance(message, DeviceAcceptSasMessage):
await client.accept_sas(message)
elif isinstance(message, DeviceConfirmSasMessage): elif isinstance(message, DeviceConfirmSasMessage):
await client.confirm_sas(message) await client.confirm_sas(message)

View File

@ -384,6 +384,14 @@ class PanCtl:
dbus_interface="org.pantalaimon.devices" dbus_interface="org.pantalaimon.devices"
) )
def accept_sas(self, args):
self.devices.accept_sas(
args.pan_user,
args.user_id,
args.device_id,
dbus_interface="org.pantalaimon.devices"
)
def list_devices(self, args): def list_devices(self, args):
devices = self.devices.list_user_devices( devices = self.devices.list_user_devices(
args.pan_user, args.pan_user,
@ -439,7 +447,7 @@ class PanCtl:
self.import_keys(parsed_args) self.import_keys(parsed_args)
elif command == "accept-verification": elif command == "accept-verification":
pass self.accept_sas(parsed_args)
elif command == "list-devices": elif command == "list-devices":
self.list_devices(parsed_args) self.list_devices(parsed_args)

View File

@ -51,6 +51,16 @@ class DeviceUnverifyMessage(_VerificationMessage):
pass pass
@attr.s
class DeviceStartSasMessage(_VerificationMessage):
pass
@attr.s
class DeviceAcceptSasMessage(_VerificationMessage):
pass
@attr.s @attr.s
class DeviceConfirmSasMessage(_VerificationMessage): class DeviceConfirmSasMessage(_VerificationMessage):
pass pass

View File

@ -16,6 +16,7 @@ from pantalaimon.thread_messages import (
DeviceUnverifyMessage, DeviceUnverifyMessage,
DevicesMessage, DevicesMessage,
InfoMessage, InfoMessage,
DeviceAcceptSasMessage,
DeviceConfirmSasMessage, DeviceConfirmSasMessage,
DeviceAuthStringMessage, DeviceAuthStringMessage,
ImportKeysMessage, ImportKeysMessage,
@ -113,6 +114,13 @@ class Devices(dbus.service.Object):
self.queue.put(message) self.queue.put(message)
return return
@dbus.service.method("org.pantalaimon.devices",
in_signature="sss")
def accept_sas(self, pan_user, user_id, device_id):
message = DeviceAcceptSasMessage(pan_user, user_id, device_id)
self.queue.put(message)
return
def update_devices(self, message): def update_devices(self, message):
device_store = self.device_list[message.user_id] device_store = self.device_list[message.user_id]