Mercurial > libervia-backend
diff libervia/backend/plugins/plugin_xep_0448.py @ 4270:0d7bb4df2343
Reformatted code base using black.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 19 Jun 2024 18:44:57 +0200 |
parents | 4b842c1fb686 |
children | 111dce64dcb5 |
line wrap: on
line diff
--- a/libervia/backend/plugins/plugin_xep_0448.py Tue Jun 18 12:06:45 2024 +0200 +++ b/libervia/backend/plugins/plugin_xep_0448.py Wed Jun 19 18:44:57 2024 +0200 @@ -53,14 +53,24 @@ C.PI_TYPE: C.PLUG_TYPE_EXP, C.PI_PROTOCOLS: ["XEP-0448"], C.PI_DEPENDENCIES: [ - "XEP-0103", "XEP-0300", "XEP-0334", "XEP-0363", "XEP-0384", "XEP-0447", - "DOWNLOAD", "ATTACH" + "XEP-0103", + "XEP-0300", + "XEP-0334", + "XEP-0363", + "XEP-0384", + "XEP-0447", + "DOWNLOAD", + "ATTACH", ], C.PI_MAIN: "XEP_0448", C.PI_HANDLER: "yes", - C.PI_DESCRIPTION: dedent(_("""\ + C.PI_DESCRIPTION: dedent( + _( + """\ Implementation of e2e encryption for media sharing - """)), + """ + ) + ), } NS_ESFS = "urn:xmpp:esfs:0" @@ -137,7 +147,7 @@ attachment: Dict[str, Any], source: Dict[str, Any], dest_path: Union[Path, str], - extra: Optional[Dict[str, Any]] = None + extra: Optional[Dict[str, Any]] = None, ) -> Tuple[str, defer.Deferred]: # TODO: check hash if extra is None: @@ -154,10 +164,8 @@ except KeyError: raise ValueError(f"{source} has missing URL") - if extra.get('ignore_tls_errors', False): - log.warning( - "TLS certificate check disabled, this is highly insecure" - ) + if extra.get("ignore_tls_errors", False): + log.warning("TLS certificate check disabled, this is highly insecure") treq_client = treq_client_no_ssl else: treq_client = treq @@ -166,7 +174,7 @@ file_size = int(attachment["size"]) except (KeyError, ValueError): head_data = await treq_client.head(download_url) - content_length = int(head_data.headers.getRawHeaders('content-length')[0]) + content_length = int(head_data.headers.getRawHeaders("content-length")[0]) # the 128 bits tag is put at the end file_size = content_length - 16 @@ -175,7 +183,7 @@ client, dest_path, mode="wb", - size = file_size, + size=file_size, ) if cipher in (NS_AES_128_GCM, NS_AES_256_GCM): @@ -204,13 +212,13 @@ client=client, file_obj=file_obj, decryptor=decryptor, - unpadder=unpadder + unpadder=unpadder, ) finalize_cb = partial( self.cbc_decrypt_finalize, file_obj=file_obj, decryptor=decryptor, - unpadder=unpadder + unpadder=unpadder, ) else: msg = f"cipher {cipher!r} is not supported" @@ -253,10 +261,7 @@ } attachment["filename"] = filename return await self._http_upload.file_http_upload( - client=client, - filepath=filepath, - filename="encrypted", - extra=extra + client=client, filepath=filepath, filename="encrypted", extra=extra ) async def attach(self, client, data): @@ -264,7 +269,7 @@ # we need to send each file in a separate message, in the same way as for # plugin_sec_aesgcm. attachments = data["extra"][C.KEY_ATTACHMENTS] - if not data['message'] or data['message'] == {'': ''}: + if not data["message"] or data["message"] == {"": ""}: extra_attachments = attachments[1:] del attachments[1:] else: @@ -287,24 +292,23 @@ [], name=attachment["filename"], size=attachment["size"], - file_hash=file_hash + file_hash=file_hash, ) encrypted_elt = file_sharing_elt.sources.addElement( (NS_ESFS, "encrypted") ) encrypted_elt["cipher"] = NS_AES_256_GCM encrypted_elt.addElement( - "key", - content=base64.b64encode(encryption_data["key"]).decode() + "key", content=base64.b64encode(encryption_data["key"]).decode() ) encrypted_elt.addElement( - "iv", - content=base64.b64encode(encryption_data["iv"]).decode() + "iv", content=base64.b64encode(encryption_data["iv"]).decode() ) - encrypted_elt.addChild(self._h.build_hash_elt( - attachment["encrypted_hash"], - attachment["encrypted_hash_algo"] - )) + encrypted_elt.addChild( + self._h.build_hash_elt( + attachment["encrypted_hash"], attachment["encrypted_hash_algo"] + ) + ) encrypted_elt.addChild( self._sfs.get_sources_elt( [self._u.get_url_data_elt(attachment["url"])] @@ -315,16 +319,18 @@ for attachment in extra_attachments: # we send all remaining attachment in a separate message await client.sendMessage( - to_jid=data['to'], - message={'': ''}, - subject=data['subject'], - mess_type=data['type'], + to_jid=data["to"], + message={"": ""}, + subject=data["subject"], + mess_type=data["type"], extra={C.KEY_ATTACHMENTS: [attachment]}, ) - if ((not data['extra'] - and (not data['message'] or data['message'] == {'': ''}) - and not data['subject'])): + if ( + not data["extra"] + and (not data["message"] or data["message"] == {"": ""}) + and not data["subject"] + ): # nothing left to send, we can cancel the message raise exceptions.CancelError("Cancelled by XEP_0448 attachment handling") @@ -333,7 +339,7 @@ data: bytes, client: SatXMPPEntity, file_obj: stream.SatFile, - decryptor: CipherContext + decryptor: CipherContext, ) -> None: if file_obj.tell() + len(data) > file_obj.size: # type: ignore # we're reaching end of file with this bunch of data @@ -371,16 +377,13 @@ client: SatXMPPEntity, file_obj: stream.SatFile, decryptor: CipherContext, - unpadder: PaddingContext + unpadder: PaddingContext, ) -> None: decrypted = decryptor.update(data) file_obj.write(unpadder.update(decrypted)) def cbc_decrypt_finalize( - self, - file_obj: stream.SatFile, - decryptor: CipherContext, - unpadder: PaddingContext + self, file_obj: stream.SatFile, decryptor: CipherContext, unpadder: PaddingContext ) -> None: decrypted = decryptor.finalize() file_obj.write(unpadder.update(decrypted)) @@ -388,7 +391,7 @@ file_obj.close() def _upload_pre_slot(self, client, extra, file_metadata): - if extra.get('encryption') != IMPORT_NAME: + if extra.get("encryption") != IMPORT_NAME: return True # the tag is appended to the file file_metadata["size"] += 16 @@ -414,10 +417,10 @@ return ret except AlreadyFinalized: # as we have already finalized, we can now send EOF - return b'' + return b"" def _upload_trigger(self, client, extra, sat_file, file_producer, slot): - if extra.get('encryption') != IMPORT_NAME: + if extra.get("encryption") != IMPORT_NAME: return True attachment = extra["attachment"] encryption_data = extra["encryption_data"] @@ -442,14 +445,17 @@ if sat_file.data_cb is not None: raise exceptions.InternalError( - f"data_cb was expected to be None, it is set to {sat_file.data_cb}") + f"data_cb was expected to be None, it is set to {sat_file.data_cb}" + ) - attachment.update({ - "hash_algo": self._h.ALGO_DEFAULT, - "hasher": self._h.get_hasher(), - "encrypted_hash_algo": self._h.ALGO_DEFAULT, - "encrypted_hasher": self._h.get_hasher(), - }) + attachment.update( + { + "hash_algo": self._h.ALGO_DEFAULT, + "hasher": self._h.get_hasher(), + "encrypted_hash_algo": self._h.ALGO_DEFAULT, + "encrypted_hasher": self._h.get_hasher(), + } + ) # with data_cb we encrypt the file on the fly sat_file.data_cb = partial(