Fixhancement: better handle removed social apps in profile (#9876)

This commit is contained in:
shamoon 2025-05-11 12:55:33 -07:00 committed by GitHub
parent a61f5ac64c
commit 73f0f1212d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 2 deletions

View File

@ -136,6 +136,36 @@ class TestApiProfile(DirectoriesMixin, APITestCase):
], ],
) )
def test_profile_w_social_removed_app(self):
"""
GIVEN:
- Configured user and setup social account
- Social app has been removed
WHEN:
- API call is made to get profile
THEN:
- Profile is returned with "Unknown App" as name
"""
self.setupSocialAccount()
# Remove the social app
SocialApp.objects.get(provider_id="keycloak-test").delete()
response = self.client.get(self.ENDPOINT)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data["social_accounts"],
[
{
"id": 1,
"provider": "keycloak-test",
"name": "Unknown App",
},
],
)
def test_update_profile(self): def test_update_profile(self):
""" """
GIVEN: GIVEN:

View File

@ -4,6 +4,7 @@ from allauth.mfa.adapter import get_adapter as get_mfa_adapter
from allauth.mfa.models import Authenticator from allauth.mfa.models import Authenticator
from allauth.mfa.totp.internal.auth import TOTP from allauth.mfa.totp.internal.auth import TOTP
from allauth.socialaccount.models import SocialAccount from allauth.socialaccount.models import SocialAccount
from allauth.socialaccount.models import SocialApp
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.auth.models import User from django.contrib.auth.models import User
@ -146,8 +147,11 @@ class SocialAccountSerializer(serializers.ModelSerializer):
"name", "name",
) )
def get_name(self, obj) -> str: def get_name(self, obj: SocialAccount) -> str:
try:
return obj.get_provider_account().to_str() return obj.get_provider_account().to_str()
except SocialApp.DoesNotExist:
return "Unknown App"
class ProfileSerializer(serializers.ModelSerializer): class ProfileSerializer(serializers.ModelSerializer):