mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-12 17:38:32 +02:00
- initial pass through to rework encryption into separate module - little more cleanup - rename function, fix some linting issues - more cleaning - fix password bug in encryption - fix linting issue - more cleanup - move prompt into prompt.py - more cleanup - update the upgrade process for new encryption classes - general cleanup - turn into enum instead of strings - store status code so tests don't fail - standardize the load and store methods in journals - get rid of old PlainJournal class - typing cleanup - more cleanup - format - fix linting issue - Fix obscure Windows line ending issue with decode See https://bugs.python.org/issue40863 - fix for python 3.11 - add more typing - don't use class variables because that's not what we want - fix more type hints - jrnlv1 encryption doesn't support encryption anymore (it's deprecated) - keep logic for password attemps inside the class that uses it - take out old line of code - add some more logging - update logging statements - clean up logging statements - run linters - fix typo - Fix for new test from develop branch There was a new test added for re-encrypting a journal. This updates the refactor to match the old (previously untested) behavior of jrnl. Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com>
80 lines
2 KiB
Python
80 lines
2 KiB
Python
# Copyright © 2012-2022 jrnl contributors
|
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
from jrnl.messages import Message
|
|
from jrnl.messages import MsgStyle
|
|
from jrnl.messages import MsgText
|
|
from jrnl.output import print_msg
|
|
from jrnl.output import print_msgs
|
|
|
|
|
|
def create_password(journal_name: str) -> str:
|
|
kwargs = {
|
|
"get_input": True,
|
|
"hide_input": True,
|
|
}
|
|
while True:
|
|
pw = print_msg(
|
|
Message(
|
|
MsgText.PasswordFirstEntry,
|
|
MsgStyle.PROMPT,
|
|
params={"journal_name": journal_name},
|
|
),
|
|
**kwargs
|
|
)
|
|
|
|
if not pw:
|
|
print_msg(Message(MsgText.PasswordCanNotBeEmpty, MsgStyle.WARNING))
|
|
continue
|
|
|
|
elif pw == print_msg(
|
|
Message(MsgText.PasswordConfirmEntry, MsgStyle.PROMPT), **kwargs
|
|
):
|
|
break
|
|
|
|
print_msg(Message(MsgText.PasswordDidNotMatch, MsgStyle.ERROR))
|
|
|
|
if yesno(Message(MsgText.PasswordStoreInKeychain), default=True):
|
|
from jrnl.keyring import set_keyring_password
|
|
|
|
set_keyring_password(pw, journal_name)
|
|
|
|
return pw
|
|
|
|
|
|
def prompt_password(first_try: bool = True) -> str:
|
|
if not first_try:
|
|
print_msg(Message(MsgText.WrongPasswordTryAgain, MsgStyle.WARNING))
|
|
|
|
return (
|
|
print_msg(
|
|
Message(MsgText.Password, MsgStyle.PROMPT),
|
|
get_input=True,
|
|
hide_input=True,
|
|
)
|
|
or ""
|
|
)
|
|
|
|
|
|
def yesno(prompt: Message | str, default: bool = True) -> bool:
|
|
response = print_msgs(
|
|
[
|
|
prompt,
|
|
Message(
|
|
MsgText.YesOrNoPromptDefaultYes
|
|
if default
|
|
else MsgText.YesOrNoPromptDefaultNo
|
|
),
|
|
],
|
|
style=MsgStyle.PROMPT,
|
|
delimiter=" ",
|
|
get_input=True,
|
|
)
|
|
|
|
answers = {
|
|
str(MsgText.OneCharacterYes): True,
|
|
str(MsgText.OneCharacterNo): False,
|
|
}
|
|
|
|
# Does using `lower()` work in all languages?
|
|
return answers.get(str(response).lower().strip(), default)
|