#### [`PAPERLESS_AUDIT_LOG_ENABLED=<bool>`](#PAPERLESS_AUDIT_LOG_ENABLED) {#PAPERLESS_AUDIT_LOG_ENABLED}
-: Enables an audit trail for documents, document types, correspondents, and tags. Log entries can be viewed in the Django backend only.
+: Enables the audit trail for documents, document types, correspondents, and tags.
- !!! warning
-
- Once enabled cannot be disabled
+ Defaults to true.
## Collate Double-Sided Documents {#collate}
import tqdm
from django.conf import settings
+
+if settings.AUDIT_LOG_ENABLED:
+ from auditlog.models import LogEntry
from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User
serializers.serialize("json", ApplicationConfiguration.objects.all()),
)
+ if settings.AUDIT_LOG_ENABLED:
+ manifest += json.loads(
+ serializers.serialize("json", LogEntry.objects.all()),
+ )
+
# These are treated specially and included in the per-document manifest
# if that setting is enabled. Otherwise, they are just exported to the bulk
# manifest
from filelock import FileLock
from documents.file_handling import create_source_path_directory
+from documents.models import Correspondent
+from documents.models import CustomField
+from documents.models import CustomFieldInstance
from documents.models import Document
+from documents.models import DocumentType
+from documents.models import Note
+from documents.models import Tag
from documents.parsers import run_convert
from documents.settings import EXPORTER_ARCHIVE_NAME
from documents.settings import EXPORTER_FILE_NAME
from documents.utils import copy_file_with_basic_stats
from paperless import version
+if settings.AUDIT_LOG_ENABLED:
+ from auditlog.registry import auditlog
+
@contextmanager
def disable_signal(sig, receiver, sender):
receiver=update_filename_and_move_files,
sender=Document.tags.through,
):
+ if settings.AUDIT_LOG_ENABLED:
+ auditlog.unregister(Document)
+ auditlog.unregister(Correspondent)
+ auditlog.unregister(Tag)
+ auditlog.unregister(DocumentType)
+ auditlog.unregister(Note)
+ auditlog.unregister(CustomField)
+ auditlog.unregister(CustomFieldInstance)
+
# Fill up the database with whatever is in the manifest
try:
with transaction.atomic():
self.assertEqual(ContentType.objects.count(), num_content_type_objects)
self.assertEqual(Permission.objects.count(), num_permission_objects + 1)
+
+ def test_exporter_with_auditlog_disabled(self):
+ shutil.rmtree(os.path.join(self.dirs.media_dir, "documents"))
+ shutil.copytree(
+ os.path.join(os.path.dirname(__file__), "samples", "documents"),
+ os.path.join(self.dirs.media_dir, "documents"),
+ )
+
+ with override_settings(
+ AUDIT_LOG_ENABLED=False,
+ ):
+ manifest = self._do_export(use_filename_format=True)
+ for obj in manifest:
+ self.assertNotEqual(obj["model"], "auditlog.logentry")
import stat
from django.conf import settings
-from django.core.checks import Critical
from django.core.checks import Error
from django.core.checks import Warning
from django.core.checks import register
all_tables = db_conn.introspection.table_names()
result = []
- if ("auditlog_logentry" in all_tables) and not (settings.AUDIT_LOG_ENABLED):
+ if ("auditlog_logentry" in all_tables) and not settings.AUDIT_LOG_ENABLED:
result.append(
- Critical(
- (
- "auditlog table was found but PAPERLESS_AUDIT_LOG_ENABLED"
- " is not active. This setting cannot be disabled after enabling"
- ),
+ Warning(
+ ("auditlog table was found but audit log is disabled."),
),
)
if TIKA_ENABLED:
INSTALLED_APPS.append("paperless_tika.apps.PaperlessTikaConfig")
-AUDIT_LOG_ENABLED = __get_boolean("PAPERLESS_AUDIT_LOG_ENABLED", "NO")
+AUDIT_LOG_ENABLED = __get_boolean("PAPERLESS_AUDIT_LOG_ENABLED", "true")
if AUDIT_LOG_ENABLED:
INSTALLED_APPS.append("auditlog")
MIDDLEWARE.append("auditlog.middleware.AuditlogMiddleware")
msg = msgs[0]
self.assertIn(
- (
- "auditlog table was found but PAPERLESS_AUDIT_LOG_ENABLED"
- " is not active."
- ),
+ ("auditlog table was found but audit log is disabled."),
msg.msg,
)