Fix: correct serializing of auth tokens for export (#8100)

This commit is contained in:
shamoon
2024-10-29 10:02:32 -07:00
committed by GitHub
parent 3af3484a00
commit aac04e73b9
4 changed files with 26 additions and 14 deletions

View File

@@ -24,7 +24,6 @@ from django.utils import timezone
from filelock import FileLock
from guardian.models import GroupObjectPermission
from guardian.models import UserObjectPermission
from rest_framework.authtoken.models import Token
if TYPE_CHECKING:
from django.db.models import QuerySet
@@ -271,7 +270,6 @@ class Command(CryptMixin, BaseCommand):
"social_accounts": SocialAccount.objects.all(),
"social_apps": SocialApp.objects.all(),
"social_tokens": SocialToken.objects.all(),
"auth_tokens": Token.objects.all(),
}
if settings.AUDIT_LOG_ENABLED:
@@ -570,11 +568,7 @@ class Command(CryptMixin, BaseCommand):
value=manifest_record["fields"][field],
)
elif (
MailAccount.objects.count() > 0
or SocialToken.objects.count() > 0
or Token.objects.count() > 0
):
elif MailAccount.objects.count() > 0 or SocialToken.objects.count() > 0:
self.stdout.write(
self.style.NOTICE(
"No passphrase was given, sensitive fields will be in plaintext",

View File

@@ -108,13 +108,6 @@ class CryptMixin:
"token_secret",
],
},
{
"exporter_key": "auth_tokens",
"model_name": "authtoken.token",
"fields": [
"key",
],
},
]
def get_crypt_params(self) -> dict[str, dict[str, str | int]]:

View File

@@ -8,6 +8,9 @@ from pathlib import Path
from unittest import mock
from zipfile import ZipFile
from allauth.socialaccount.models import SocialAccount
from allauth.socialaccount.models import SocialApp
from allauth.socialaccount.models import SocialToken
from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
@@ -874,6 +877,23 @@ class TestCryptExportImport(
password="mypassword",
)
app = SocialApp.objects.create(
provider="test",
name="test",
client_id="test",
)
account = SocialAccount.objects.create(
user=User.objects.first(),
provider="test",
uid="test",
)
SocialToken.objects.create(
app=app,
account=account,
token="test",
token_secret="test",
)
call_command(
"document_exporter",
"--no-progress-bar",
@@ -912,6 +932,9 @@ class TestCryptExportImport(
self.assertIsNotNone(account)
self.assertEqual(account.password, "mypassword")
social_token = SocialToken.objects.first()
self.assertIsNotNone(social_token)
def test_import_crypt_no_passphrase(self):
"""
GIVEN: