diff options
author | wurstsalat <mailtrash@posteo.de> | 2023-04-16 16:03:06 +0300 |
---|---|---|
committer | wurstsalat <mailtrash@posteo.de> | 2023-04-16 16:10:03 +0300 |
commit | 047f5138361780a086511315305fa4c4b3e97c36 (patch) | |
tree | 943c05e097a396c6d7551c7fa1ae71cdaf8aaf35 | |
parent | b7235b5a3664cb6ad312c19509b4c8edfe543d0f (diff) |
refactor: Move QR code generation to helpers
-rw-r--r-- | gajim/common/helpers.py | 19 | ||||
-rw-r--r-- | gajim/gtk/omemo_trust_manager.py | 42 |
2 files changed, 31 insertions, 30 deletions
diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py index df60e00a3..8962f5a13 100644 --- a/gajim/common/helpers.py +++ b/gajim/common/helpers.py @@ -48,6 +48,7 @@ import re import socket import string import sys +import tempfile import unicodedata import weakref import webbrowser @@ -61,8 +62,10 @@ from urllib.parse import unquote from urllib.parse import urlparse import precis_i18n.codec # noqa: F401 +import qrcode from cryptography import x509 from cryptography.hazmat.backends import default_backend +from gi.repository import GdkPixbuf from gi.repository import Gio from gi.repository import GLib from gi.repository import GObject @@ -366,6 +369,22 @@ def get_contact_dict_for_account(account: str) -> dict[str, types.BareContact]: return contacts_dict +def generate_qr_code(content: str) -> GdkPixbuf.Pixbuf | None: + image_path = os.path.join( + tempfile.gettempdir(), + f'{get_random_string()}.png') + qr = qrcode.QRCode(version=None, + error_correction=qrcode.constants.ERROR_CORRECT_L, + box_size=6, + border=4) + qr.add_data(content) + qr.make(fit=True) + + img = qr.make_image(fill_color='black', back_color='white') + img.save(image_path) + return GdkPixbuf.Pixbuf.new_from_file(image_path) + + def play_sound(sound_event: str, account: Optional[str] = None, force: bool = False, diff --git a/gajim/gtk/omemo_trust_manager.py b/gajim/gtk/omemo_trust_manager.py index b51168cba..c81016d21 100644 --- a/gajim/gtk/omemo_trust_manager.py +++ b/gajim/gtk/omemo_trust_manager.py @@ -23,8 +23,6 @@ from typing import Union import locale import logging -import os -import tempfile import time from gi.repository import GdkPixbuf @@ -38,6 +36,7 @@ from gajim.common import types from gajim.common.events import AccountConnected from gajim.common.events import AccountDisconnected from gajim.common.ged import EventHelper +from gajim.common.helpers import generate_qr_code from gajim.common.i18n import _ from gajim.common.modules.contacts import BareContact from gajim.common.omemo.util import get_fingerprint @@ -235,39 +234,22 @@ class OMEMOTrustManager(Gtk.Box, EventHelper): self._ui.list.add(row) @staticmethod - def _get_qrcode(jid: str, sid: int, identity_key: IdentityKeyPair) -> str: - fingerprint = get_fingerprint(identity_key) - path = os.path.join(tempfile.gettempdir(), - 'omemo_{}.png'.format(jid)) + def _get_qrcode(jid: str, + sid: int, + identity_key: IdentityKeyPair + ) -> GdkPixbuf.Pixbuf | None: + fingerprint = get_fingerprint(identity_key) ver_string = 'xmpp:{}?omemo-sid-{}={}'.format(jid, sid, fingerprint) log.debug('Verification String: %s', ver_string) - - import qrcode - qr = qrcode.QRCode(version=None, - error_correction=qrcode.constants.ERROR_CORRECT_L, - box_size=6, - border=4) - qr.add_data(ver_string) - qr.make(fit=True) - - img = qr.make_image(fill_color='black', back_color='white') - img.save(path) - return path + return generate_qr_code(ver_string) def _load_qrcode(self) -> None: - try: - client = app.get_client(self._account) - path = self._get_qrcode(client.get_own_jid().bare, - self._omemo.backend.own_device, - self._identity_key) - except ImportError: - log.exception('Failed to generate QR code') - self._ui.qr_code_image.hide() - else: - pixbuf = GdkPixbuf.Pixbuf.new_from_file(path) - self._ui.qr_code_image.set_from_pixbuf(pixbuf) - self._ui.qr_code_image.show() + client = app.get_client(self._account) + pixbuf = self._get_qrcode(client.get_own_jid().bare, + self._omemo.backend.own_device, + self._identity_key) + self._ui.qr_code_image.set_from_pixbuf(pixbuf) def _on_show_inactive(self, switch: Gtk.Switch, _param: Any) -> None: self._ui.list.invalidate_filter() |