Skip to content

Commit

Permalink
keep logic for password attemps inside the class that uses it
Browse files Browse the repository at this point in the history
  • Loading branch information
wren committed Oct 8, 2022
1 parent 196cb71 commit 0710eab
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 11 deletions.
16 changes: 13 additions & 3 deletions jrnl/encryption/BasePasswordEncryption.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
# Copyright © 2012-2022 jrnl contributors
# License: https://www.gnu.org/licenses/gpl-3.0.html
from jrnl.encryption.BaseEncryption import BaseEncryption
from jrnl.exception import JrnlException
from jrnl.keyring import get_keyring_password
from jrnl.messages import Message
from jrnl.messages import MsgStyle
from jrnl.messages import MsgText
from jrnl.prompt import create_password
from jrnl.prompt import prompt_password

Expand Down Expand Up @@ -34,12 +38,18 @@ def encrypt(self, text: str) -> bytes:
def decrypt(self, text: bytes) -> str:
if not self.password:
self._prompt_password()

while (result := self._decrypt(text)) is None:
self._prompt_password()

return result

def _prompt_password(self) -> None:
self._attempts, self.password = prompt_password(
self._attempts, self._max_attempts
)
if self._attempts >= self._max_attempts:
raise JrnlException(
Message(MsgText.PasswordMaxTriesExceeded, MsgStyle.ERROR)
)

first_try = self._attempts == 0
self.password = prompt_password(first_try=first_try)
self._attempts += 1
11 changes: 3 additions & 8 deletions jrnl/prompt.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,22 +43,17 @@ def create_password(journal_name: str) -> str:
return pw


def prompt_password(attempts: int, max_attempts: int) -> tuple[int, str]:
if attempts >= max_attempts:
raise JrnlException(Message(MsgText.PasswordMaxTriesExceeded, MsgStyle.ERROR))

if attempts > 0:
def prompt_password(first_try: bool = True) -> str:
if not first_try:
print_msg(Message(MsgText.WrongPasswordTryAgain, MsgStyle.WARNING))

attempts += 1
return (
attempts,
print_msg(
Message(MsgText.Password, MsgStyle.PROMPT),
get_input=True,
hide_input=True,
)
or "",
or ""
)


Expand Down

0 comments on commit 0710eab

Please sign in to comment.