Adds a warning if a user exports with mail accounts but no passphrase

This commit is contained in:
Trenton Holmes 2024-06-06 18:02:16 -07:00 committed by Trenton H
parent 3c22c4ea87
commit 89911453ad
3 changed files with 82 additions and 1 deletions

View File

@ -556,3 +556,11 @@ class Command(CryptMixin, BaseCommand):
mail_account_record["fields"]["password"] = self.encrypt_string(
value=mail_account_record["fields"]["password"],
)
elif MailAccount.objects.count() > 0:
self.stdout.write(
self.style.NOTICE(
"You have configured mail accounts, "
"but have no passphrase was given. "
"Passwords will be in plaintext",
),
)

View File

@ -3,6 +3,7 @@ import json
import os
import shutil
import tempfile
from io import StringIO
from pathlib import Path
from unittest import mock
from zipfile import ZipFile
@ -857,6 +858,15 @@ class TestCryptExportImport(
return super().tearDown()
def test_export_passphrase(self):
"""
GIVEN:
- A mail account exists
WHEN:
- Export command is called
- Passphrase is provided
THEN:
- Output password is not plaintext
"""
MailAccount.objects.create(
name="Test Account",
imap_server="test.imap.com",
@ -903,6 +913,17 @@ class TestCryptExportImport(
self.assertEqual(account.password, "mypassword")
def test_import_crypt_no_passphrase(self):
"""
GIVEN:
- A mail account exists
WHEN:
- Export command is called
- Passphrase is provided
- Import command is called
- No passphrase is given
THEN:
- An error is raised for the issue
"""
call_command(
"document_exporter",
"--no-progress-bar",
@ -921,3 +942,39 @@ class TestCryptExportImport(
err.msg,
"No passphrase was given, but this export contains encrypted fields",
)
def test_export_warn_plaintext(self):
"""
GIVEN:
- A mail account exists
WHEN:
- Export command is called
- No passphrase is provided
THEN:
- Output password is plaintext
- Warning is output
"""
MailAccount.objects.create(
name="Test Account",
imap_server="test.imap.com",
username="myusername",
password="mypassword",
)
stdout = StringIO()
call_command(
"document_exporter",
"--no-progress-bar",
str(self.target),
stdout=stdout,
)
stdout.seek(0)
self.assertIn(
(
"You have configured mail accounts, "
"but have no passphrase was given. "
"Passwords will be in plaintext"
),
stdout.read(),
)

View File

@ -241,7 +241,7 @@ class TestCommandImport(
stdout.seek(0)
self.assertIn(
"Found existing user(s), this might indicate a non-empty installation",
str(stdout.read()),
stdout.read(),
)
def test_import_with_documents_exists(self):
@ -281,6 +281,14 @@ class TestCommandImport(
)
def test_import_no_metadata_or_version_file(self):
"""
GIVEN:
- A source directory with a manifest file only
WHEN:
- An import is attempted
THEN:
- Warning about the missing files is output
"""
stdout = StringIO()
(self.dirs.scratch_dir / "manifest.json").touch()
@ -299,6 +307,14 @@ class TestCommandImport(
self.assertIn("No version.json or metadata.json file located", stdout_str)
def test_import_version_file(self):
"""
GIVEN:
- A source directory with a manifest file and version file
WHEN:
- An import is attempted
THEN:
- Warning about the the version mismatch is output
"""
stdout = StringIO()
(self.dirs.scratch_dir / "manifest.json").touch()