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()
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(
self.accept_key_verification(event.transaction_id)
self.queue.put(message)
)
self.key_verificatins_tasks.append(task)
@ -183,6 +192,21 @@ class PanClient(AsyncClient):
self.task = 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):
user_id = message.user_id
device_id = message.device_id

View File

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

View File

@ -384,6 +384,14 @@ class PanCtl:
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):
devices = self.devices.list_user_devices(
args.pan_user,
@ -439,7 +447,7 @@ class PanCtl:
self.import_keys(parsed_args)
elif command == "accept-verification":
pass
self.accept_sas(parsed_args)
elif command == "list-devices":
self.list_devices(parsed_args)

View File

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

View File

@ -16,6 +16,7 @@ from pantalaimon.thread_messages import (
DeviceUnverifyMessage,
DevicesMessage,
InfoMessage,
DeviceAcceptSasMessage,
DeviceConfirmSasMessage,
DeviceAuthStringMessage,
ImportKeysMessage,
@ -113,6 +114,13 @@ class Devices(dbus.service.Object):
self.queue.put(message)
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):
device_store = self.device_list[message.user_id]