1+ import json
12import logging
23from dataclasses import dataclass
34from datetime import datetime
45from typing import Dict , Optional
5- import json
66
77from nitrokey .nk3 import NK3
88from nitrokey .nk3 .secrets_app import SecretsApp , SecretsAppException
@@ -620,6 +620,7 @@ def get_credential(self) -> None:
620620 cred = self .credential .extend_with_password_safe_entry (pse )
621621 self .received_credential .emit (cred )
622622
623+
623624class BackupCredentialJob (Job ):
624625 credential_bkp = Signal (str )
625626
@@ -629,14 +630,14 @@ def __init__(
629630 pin_cache : PinCache ,
630631 pin_ui : PinUi ,
631632 data : DeviceData ,
632- pin_protected : bool
633+ pin_protected : bool ,
633634 ) -> None :
634635 super ().__init__ (common_ui )
635636
636637 self .pin_cache = pin_cache
637638 self .pin_ui = pin_ui
638639 self .data = data
639- self .pin_protected = pin_protected
640+ self .pin_protected = pin_protected
640641 self .credential_bkp .connect (lambda _ : self .finished .emit ())
641642
642643 def run (self ) -> None :
@@ -657,12 +658,12 @@ def get_credential_backup(self) -> None:
657658 return
658659 secrets = SecretsApp (device )
659660
660- credential_list = Credential .list (secrets = secrets )
661- credential_list_serialized = []
661+ credential_list = Credential .list (secrets = secrets )
662+ credential_list_serialized = []
662663 for credential in credential_list :
663664 try :
664665 if credential .protected :
665- pin = self .pin_cache .get (self .data )
666+ pin = self .pin_cache .get (self .data )
666667 if pin :
667668 secrets .verify_pin_raw (pin )
668669 pse = secrets .get_credential (credential .id )
@@ -676,9 +677,10 @@ def get_credential_backup(self) -> None:
676677 except SecretsAppException as e :
677678 self .trigger_exception (e )
678679
679- credential_list_formatted = json .dumps (credential_list_serialized , indent = 4 )
680+ credential_list_formatted = json .dumps (credential_list_serialized , indent = 4 )
680681 self .credential_bkp .emit (credential_list_formatted )
681682
683+
682684class RestoreCredentialJob (Job ):
683685 credential_restore = Signal ()
684686
@@ -688,14 +690,14 @@ def __init__(
688690 pin_cache : PinCache ,
689691 pin_ui : PinUi ,
690692 data : DeviceData ,
691- credential_backup : str
693+ credential_backup : str ,
692694 ) -> None :
693695 super ().__init__ (common_ui )
694696
695697 self .pin_cache = pin_cache
696698 self .pin_ui = pin_ui
697699 self .data = data
698- self .credential_backup = credential_backup
700+ self .credential_backup = credential_backup
699701 self .credential_restore .connect (lambda : self .finished .emit ())
700702
701703 def run (self ) -> None :
@@ -708,37 +710,33 @@ def run(self) -> None:
708710 @Slot (list )
709711 def check_credential_backup (self , existing_credentials : list [Credential ]) -> None :
710712 try :
711- serialized_credential_list = json .loads (self .credential_backup )
713+ serialized_credential_list = json .loads (self .credential_backup )
712714 except json .JSONDecodeError as e :
713- self .trigger_error ( 'Error: Invalid backup file' )
714- credential_list = []
715+ self .trigger_exception ( e )
716+ credential_list = []
715717 for serialized_credential in serialized_credential_list :
716718 try :
717719 credential = Credential .deserialize_credential (serialized_credential )
718720 credential_list .append (credential )
719721 except SecretsAppException as e :
720722 self .trigger_exception (e )
721723
722- pin_required = False
724+ pin_required = False
723725 ids = {credential .id for credential in existing_credentials }
724- temp_cred_list = []
726+ temp_cred_list = []
725727 for credential in credential_list :
726728 if credential .id in ids :
727729 logger .warning ("Warn: Credential with same ID already exists" )
728730 else :
729731 temp_cred_list .append (credential )
730732
731733 if credential .protected :
732- pin_required = True
734+ pin_required = True
733735
734- self .credential_list = temp_cred_list
736+ self .credential_list = temp_cred_list
735737 if pin_required :
736738 verify_pin_job = VerifyPinJob (
737- self .common_ui ,
738- self .pin_cache ,
739- self .pin_ui ,
740- self .data ,
741- set_pin = pin_required ,
739+ self .common_ui , self .pin_cache , self .pin_ui , self .data , set_pin = pin_required
742740 )
743741 verify_pin_job .pin_verified .connect (self .add_credential )
744742 self .spawn (verify_pin_job )
@@ -776,6 +774,7 @@ def add_credential(self, successful: bool = True) -> None:
776774
777775 self .credential_restore .emit ()
778776
777+
779778class SecretsWorker (Worker ):
780779 # TODO: remove DeviceData from signatures
781780
@@ -852,7 +851,7 @@ def backup_credential(self, data: DeviceData, pin_protected: bool) -> None:
852851 self .run (job )
853852
854853 @Slot (DeviceData , str )
855- def restore_credential (self , data :DeviceData , backup_conent : str ) -> None :
854+ def restore_credential (self , data : DeviceData , backup_conent : str ) -> None :
856855 job = RestoreCredentialJob (self .common_ui , self .pin_cache , self .pin_ui , data , backup_conent )
857856 job .credential_restore .connect (self .credential_restore )
858857 self .run (job )
0 commit comments