1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-12 01:18:14 +00:00
trezor-firmware/core/src/apps/webauthn/confirm.py
matejcik 67b2ba558b core: auto-generate list of FIDO known apps
and improve code for loading icons
2019-12-09 16:31:46 +01:00

63 lines
2.0 KiB
Python

from trezor import ui
from trezor.ui.text import text_center_trim_left, text_center_trim_right
if False:
from typing import Optional
DEFAULT_ICON = "apps/webauthn/res/icon_webauthn.toif"
class ConfirmInfo:
def __init__(self) -> None:
self.app_icon = None # type: Optional[bytes]
def get_header(self) -> str:
raise NotImplementedError
def app_name(self) -> str:
raise NotImplementedError
def account_name(self) -> Optional[str]:
return None
def load_icon(self, rp_id_hash: bytes) -> None:
from trezor import res
from apps.webauthn import knownapps
fido_app = knownapps.by_rp_id_hash(rp_id_hash)
if fido_app is not None and fido_app.icon is not None:
self.app_icon = res.load(fido_app.icon)
else:
self.app_icon = res.load(DEFAULT_ICON)
class ConfirmContent(ui.Component):
def __init__(self, info: ConfirmInfo) -> None:
self.info = info
self.repaint = True
def on_render(self) -> None:
if self.repaint:
header = self.info.get_header()
ui.header(header, ui.ICON_DEFAULT, ui.GREEN, ui.BG, ui.GREEN)
if self.info.app_icon is not None:
ui.display.image((ui.WIDTH - 64) // 2, 48, self.info.app_icon)
app_name = self.info.app_name()
account_name = self.info.account_name()
# Dummy requests usually have some text as both app_name and account_name,
# in that case show the text only once.
if account_name is not None:
if app_name != account_name:
text_center_trim_left(ui.WIDTH // 2, 140, app_name)
text_center_trim_right(ui.WIDTH // 2, 172, account_name)
else:
text_center_trim_right(ui.WIDTH // 2, 156, account_name)
else:
text_center_trim_left(ui.WIDTH // 2, 156, app_name)
self.repaint = False