diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 09721afb8..3af4b64e4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -41,30 +41,56 @@ updates: - "backend" - "dependencies" groups: + # Development & CI/CD Tooling development: patterns: - "*pytest*" - "ruff" - "mkdocs-material" - "pre-commit*" - django: + # Django & DRF Ecosystem + django-ecosystem: patterns: - "*django*" - "drf-*" - major-versions: + - "djangorestframework" + - "whitenoise" + - "bleach" + - "jinja2" + # Async, Task Queuing & Caching + async-tasks: + patterns: + - "celery*" + - "channels*" + - "flower" + - "redis" + # Document, PDF, and OCR Processing + document-processing: + patterns: + - "ocrmypdf" + - "pdf2image" + - "pyzbar" + - "zxing-cpp" + - "tika-client" + - "gotenberg-client" + - "python-magic" + - "python-gnupg" + # Data, NLP, and Search + data-nlp-search: + patterns: + - "nltk" + - "scikit-learn" + - "langdetect" + - "rapidfuzz" + - "whoosh-reloaded" + # Utilities (Patch Updates) + utilities-patch: update-types: - - "major" - small-changes: + - "patch" + # Utilities (Minor Updates) + utilities-minor: update-types: - "minor" - - "patch" - exclude-patterns: - - "*django*" - - "drf-*" - pre-built: - patterns: - - psycopg* - - zxing-cpp # Enable updates for GitHub Actions - package-ecosystem: "github-actions" target-branch: "dev" diff --git a/Dockerfile b/Dockerfile index 4d1dbb13e..a7dc6511f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ RUN set -eux \ # Purpose: Installs s6-overlay and rootfs # Comments: # - Don't leave anything extra in here either -FROM ghcr.io/astral-sh/uv:0.9.14-python3.12-trixie-slim AS s6-overlay-base +FROM ghcr.io/astral-sh/uv:0.9.15-python3.12-trixie-slim AS s6-overlay-base WORKDIR /usr/src/s6 diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.html b/src-ui/src/app/components/admin/users-groups/users-groups.component.html index 2cf92f94f..9f91a8714 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.html +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.html @@ -26,7 +26,7 @@ @for (user of users; track user) {
  • -
    +
    {{user.first_name}} {{user.last_name}}
    {{user.groups?.map(getGroupName, this).join(', ')}}
    diff --git a/src/paperless/adapter.py b/src/paperless/adapter.py index f8517a3aa..a4506275e 100644 --- a/src/paperless/adapter.py +++ b/src/paperless/adapter.py @@ -137,3 +137,25 @@ class CustomSocialAccountAdapter(DefaultSocialAccountAdapter): user.save() handle_social_account_updated(None, request, sociallogin) return user + + def on_authentication_error( + self, + request, + provider, + error=None, + exception=None, + extra_context=None, + ): + """ + Just log errors and pass them along. + """ + logger.warning( + f"Social authentication error for provider `{provider!s}`: {error!s} ({exception!s})", + ) + return super().on_authentication_error( + request, + provider, + error, + exception, + extra_context, + ) diff --git a/src/paperless/tests/test_adapter.py b/src/paperless/tests/test_adapter.py index bbd7ff73e..37b8aaa3b 100644 --- a/src/paperless/tests/test_adapter.py +++ b/src/paperless/tests/test_adapter.py @@ -167,3 +167,17 @@ class TestCustomSocialAccountAdapter(TestCase): self.assertEqual(user.groups.count(), 1) self.assertTrue(user.groups.filter(name="group1").exists()) self.assertFalse(user.groups.filter(name="group2").exists()) + + def test_error_logged_on_authentication_error(self): + adapter = get_social_adapter() + request = HttpRequest() + with self.assertLogs("paperless.auth", level="INFO") as log_cm: + adapter.on_authentication_error( + request, + provider="test-provider", + error="Error", + exception="Test authentication error", + ) + self.assertTrue( + any("Test authentication error" in message for message in log_cm.output), + )