diff --git a/jrnl/DayOneJournal.py b/jrnl/DayOneJournal.py index 01b934e5..376486b4 100644 --- a/jrnl/DayOneJournal.py +++ b/jrnl/DayOneJournal.py @@ -32,6 +32,7 @@ class DayOne(Journal.Journal): def __init__(self, **kwargs): self.entries = [] self._deleted_entries = [] + self.cannot_be_encrypted = True super().__init__(**kwargs) def open(self): diff --git a/jrnl/FolderJournal.py b/jrnl/FolderJournal.py index 954a9436..474a3ea1 100644 --- a/jrnl/FolderJournal.py +++ b/jrnl/FolderJournal.py @@ -25,6 +25,7 @@ class Folder(Journal.Journal): def __init__(self, **kwargs): self.entries = [] self._diff_entry_dates = [] + self.cannot_be_encrypted = True super(Folder, self).__init__(**kwargs) def open(self): diff --git a/jrnl/commands.py b/jrnl/commands.py index 07ca0767..40d4c2f3 100644 --- a/jrnl/commands.py +++ b/jrnl/commands.py @@ -13,6 +13,7 @@ avoid any possible overhead for these standalone commands. """ import platform import sys +from .exception import JrnlError def preconfig_diagnostic(_): @@ -68,6 +69,13 @@ def postconfig_encrypt(args, config, original_config, **kwargs): # Open the journal journal = open_journal(args.journal_name, config) + if hasattr(journal, "cannot_be_encrypted") and journal.cannot_be_encrypted: + raise JrnlError( + "CannotEncryptJournalType", + journal_name=args.journal_name, + journal_type=journal.__class__.__name__, + ) + journal.config["encrypt"] = True new_journal = EncryptedJournal.from_journal(journal) diff --git a/jrnl/exception.py b/jrnl/exception.py index 07bf9023..0bafbdeb 100644 --- a/jrnl/exception.py +++ b/jrnl/exception.py @@ -38,6 +38,13 @@ class JrnlError(Exception): by at least {columns} in the configuration file or by using --config-override at the command line """, + "CannotEncryptJournalType": """ + The journal {journal_name} can't be encrypted because it is a + {journal_type} journal. + + To encrypt it, create a new journal referencing a file, export + this journal to the new journal, then encrypt the new journal. + """, } msg = error_messages[self.error_type].format(**kwargs) diff --git a/tests/bdd/features/encrypt.feature b/tests/bdd/features/encrypt.feature index 31d53520..19b255f2 100644 --- a/tests/bdd/features/encrypt.feature +++ b/tests/bdd/features/encrypt.feature @@ -40,3 +40,12 @@ Feature: Encrypting and decrypting journals Then we should be prompted for a password And the output should contain "2013-06-10 15:40 Life is good" + Scenario Outline: Attempt to encrypt a folder or DayOne journal should result in an error + Given we use the config "" + When we run "jrnl --encrypt" + Then the error output should contain "can't be encrypted" + + Examples: configs + | config_file | + | empty_folder.yaml | + | dayone.yaml |