mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 08: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>
52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
# Copyright © 2012-2022 jrnl contributors
|
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
|
import logging
|
|
from abc import ABC
|
|
from abc import abstractmethod
|
|
|
|
from jrnl.exception import JrnlException
|
|
from jrnl.messages import Message
|
|
from jrnl.messages import MsgStyle
|
|
from jrnl.messages import MsgText
|
|
|
|
|
|
class BaseEncryption(ABC):
|
|
def __init__(self, journal_name: str, config: dict):
|
|
logging.debug("start")
|
|
self._encoding: str = "utf-8"
|
|
self._journal_name: str = journal_name
|
|
self._config: dict = config
|
|
|
|
def clear(self) -> None:
|
|
pass
|
|
|
|
def encrypt(self, text: str) -> bytes:
|
|
logging.debug("encrypting")
|
|
return self._encrypt(text)
|
|
|
|
def decrypt(self, text: bytes) -> str:
|
|
logging.debug("decrypting")
|
|
if (result := self._decrypt(text)) is None:
|
|
raise JrnlException(
|
|
Message(MsgText.DecryptionFailedGeneric, MsgStyle.ERROR)
|
|
)
|
|
|
|
return result
|
|
|
|
@abstractmethod
|
|
def _encrypt(self, text: str) -> bytes:
|
|
"""
|
|
This is needed because self.decrypt might need
|
|
to perform actions (e.g. prompt for password)
|
|
before actually encrypting.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def _decrypt(self, text: bytes) -> str | None:
|
|
"""
|
|
This is needed because self.decrypt might need
|
|
to perform actions (e.g. prompt for password)
|
|
before actually decrypting.
|
|
"""
|
|
pass
|