Display error when trying to encrypt folder/DayOne journal types (#1315)

* Raise exception when trying to commit folder-based journal (including DayOne)
* Add test to ensure this doesn't mess with encrypting normal journals
* Consolidate and standardized tests
This commit is contained in:
Micah Jerome Ellison 2021-08-21 13:46:29 -07:00 committed by GitHub
parent 9de723d014
commit 3e5a55b1e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 2 deletions

View file

@ -32,6 +32,7 @@ class DayOne(Journal.Journal):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.entries = [] self.entries = []
self._deleted_entries = [] self._deleted_entries = []
self.can_be_encrypted = False
super().__init__(**kwargs) super().__init__(**kwargs)
def open(self): def open(self):

View file

@ -25,6 +25,7 @@ class Folder(Journal.Journal):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.entries = [] self.entries = []
self._diff_entry_dates = [] self._diff_entry_dates = []
self.can_be_encrypted = False
super(Folder, self).__init__(**kwargs) super(Folder, self).__init__(**kwargs)
def open(self): def open(self):

View file

@ -13,6 +13,7 @@ avoid any possible overhead for these standalone commands.
""" """
import platform import platform
import sys import sys
from .exception import JrnlError
def preconfig_diagnostic(_): def preconfig_diagnostic(_):
@ -68,6 +69,13 @@ def postconfig_encrypt(args, config, original_config, **kwargs):
# Open the journal # Open the journal
journal = open_journal(args.journal_name, config) journal = open_journal(args.journal_name, config)
if hasattr(journal, "can_be_encrypted") and not journal.can_be_encrypted:
raise JrnlError(
"CannotEncryptJournalType",
journal_name=args.journal_name,
journal_type=journal.__class__.__name__,
)
journal.config["encrypt"] = True journal.config["encrypt"] = True
new_journal = EncryptedJournal.from_journal(journal) new_journal = EncryptedJournal.from_journal(journal)

View file

@ -38,6 +38,13 @@ class JrnlError(Exception):
by at least {columns} in the configuration file or by using by at least {columns} in the configuration file or by using
--config-override at the command line --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) msg = error_messages[self.error_type].format(**kwargs)

View file

@ -28,15 +28,30 @@ Feature: Encrypting and decrypting journals
# This should warn the user that the journal is already encrypted # This should warn the user that the journal is already encrypted
Scenario: Encrypting a journal Scenario Outline: Encrypting a journal
Given we use the config "simple.yaml" Given we use the config "simple.yaml"
When we run "jrnl --encrypt" and enter When we run "jrnl --encrypt" and enter
swordfish swordfish
swordfish swordfish
n n
Then we should see the message "Journal encrypted" Then we should get no error
And we should see the message "Journal encrypted"
And the config for journal "default" should contain "encrypt: true" And the config for journal "default" should contain "encrypt: true"
When we run "jrnl -n 1" and enter "swordfish" When we run "jrnl -n 1" and enter "swordfish"
Then we should be prompted for a password Then we should be prompted for a password
And the output should contain "2013-06-10 15:40 Life is good" And the output should contain "2013-06-10 15:40 Life is good"
Examples: configs
| config_file |
| basic_onefile.yaml |
Scenario Outline: Attempt to encrypt a folder or DayOne journal should result in an error
Given we use the config "<config_file>"
When we run "jrnl --encrypt"
Then the error output should contain "can't be encrypted"
Examples: configs
| config_file |
| basic_folder.yaml |
| basic_dayone.yaml |