From a38f8591e269d2a7cf56fd5a8048543cec31ffda Mon Sep 17 00:00:00 2001 From: Raymond Penners Date: Fri, 30 Jun 2023 23:08:15 +0200 Subject: [PATCH] chore(socialaccount): Drop Persona support --- ChangeLog.rst | 19 +++++--- .../providers/persona/__init__.py | 0 .../socialaccount/providers/persona/models.py | 0 .../providers/persona/provider.py | 42 ----------------- .../persona/templates/persona/auth.html | 35 -------------- .../socialaccount/providers/persona/tests.py | 26 ---------- .../socialaccount/providers/persona/urls.py | 6 --- .../socialaccount/providers/persona/views.py | 47 ------------------- docs/overview.rst | 2 - docs/providers.rst | 38 --------------- example/example/settings.py | 1 - test_settings.py | 1 - 12 files changed, 12 insertions(+), 205 deletions(-) delete mode 100644 allauth/socialaccount/providers/persona/__init__.py delete mode 100644 allauth/socialaccount/providers/persona/models.py delete mode 100644 allauth/socialaccount/providers/persona/provider.py delete mode 100644 allauth/socialaccount/providers/persona/templates/persona/auth.html delete mode 100644 allauth/socialaccount/providers/persona/tests.py delete mode 100644 allauth/socialaccount/providers/persona/urls.py delete mode 100644 allauth/socialaccount/providers/persona/views.py diff --git a/ChangeLog.rst b/ChangeLog.rst index 6421fe2f28..7f529d57f9 100644 --- a/ChangeLog.rst +++ b/ChangeLog.rst @@ -1,6 +1,16 @@ 0.55.0 (unreleased) ******************* +Note worthy changes +------------------- + +- Dropped support for Django 2.x. + +- Officially support Django 4.2. + +- New provider: Miro. + + Security notice --------------- @@ -22,13 +32,8 @@ Backwards incompatible changes - The method ``allauth.utils.email_address_exists()`` has been removed. - -Note worthy changes -------------------- - -- Dropped support for Django 2.x. -- Officially support Django 4.2. -- New provider: Miro. +- The Mozilla Persona provider has been removed. The project was shut down on + November 30th 2016. 0.54.0 (2023-03-31) diff --git a/allauth/socialaccount/providers/persona/__init__.py b/allauth/socialaccount/providers/persona/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/allauth/socialaccount/providers/persona/models.py b/allauth/socialaccount/providers/persona/models.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/allauth/socialaccount/providers/persona/provider.py b/allauth/socialaccount/providers/persona/provider.py deleted file mode 100644 index e566775416..0000000000 --- a/allauth/socialaccount/providers/persona/provider.py +++ /dev/null @@ -1,42 +0,0 @@ -import json - -from django.template.loader import render_to_string -from django.utils.html import escapejs - -from allauth.account.models import EmailAddress -from allauth.socialaccount.providers.base import Provider, ProviderAccount - - -class PersonaAccount(ProviderAccount): - def to_str(self): - return self.account.uid - - -class PersonaProvider(Provider): - id = "persona" - name = "Persona" - account_class = PersonaAccount - - def media_js(self, request): - settings = self.get_settings() - request_parameters = settings.get("REQUEST_PARAMETERS", {}) - ctx = {"request_parameters": json.dumps(request_parameters)} - return render_to_string("persona/auth.html", ctx, request=request) - - def get_login_url(self, request, **kwargs): - next_url = "'%s'" % escapejs(kwargs.get("next") or "") - process = "'%s'" % escapejs(kwargs.get("process") or "login") - return "javascript:allauth.persona.login(%s, %s)" % (next_url, process) - - def extract_uid(self, data): - return data["email"] - - def extract_common_fields(self, data): - return dict(email=data["email"]) - - def extract_email_addresses(self, data): - ret = [EmailAddress(email=data["email"], verified=True, primary=True)] - return ret - - -provider_classes = [PersonaProvider] diff --git a/allauth/socialaccount/providers/persona/templates/persona/auth.html b/allauth/socialaccount/providers/persona/templates/persona/auth.html deleted file mode 100644 index 0d96ae6b35..0000000000 --- a/allauth/socialaccount/providers/persona/templates/persona/auth.html +++ /dev/null @@ -1,35 +0,0 @@ - - - -
-{% csrf_token %} - - - -
diff --git a/allauth/socialaccount/providers/persona/tests.py b/allauth/socialaccount/providers/persona/tests.py deleted file mode 100644 index 41da48d8ab..0000000000 --- a/allauth/socialaccount/providers/persona/tests.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.test.utils import override_settings -from django.urls import reverse - -from allauth.tests import TestCase, patch -from allauth.utils import get_user_model - - -SOCIALACCOUNT_PROVIDERS = {"persona": {"AUDIENCE": "https://www.example.com:433"}} - - -class PersonaTests(TestCase): - @override_settings(SOCIALACCOUNT_PROVIDERS=SOCIALACCOUNT_PROVIDERS) - def test_login(self): - with patch( - "allauth.socialaccount.providers.persona.views.requests" - ) as requests_mock: - requests_mock.post.return_value.json.return_value = { - "status": "okay", - "email": "persona@example.com", - } - - resp = self.client.post(reverse("persona_login"), dict(assertion="dummy")) - self.assertRedirects( - resp, "/accounts/profile/", fetch_redirect_response=False - ) - get_user_model().objects.get(email="persona@example.com") diff --git a/allauth/socialaccount/providers/persona/urls.py b/allauth/socialaccount/providers/persona/urls.py deleted file mode 100644 index 3bde7b3922..0000000000 --- a/allauth/socialaccount/providers/persona/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.urls import path - -from . import views - - -urlpatterns = [path("persona/login/", views.persona_login, name="persona_login")] diff --git a/allauth/socialaccount/providers/persona/views.py b/allauth/socialaccount/providers/persona/views.py deleted file mode 100644 index b709d8378d..0000000000 --- a/allauth/socialaccount/providers/persona/views.py +++ /dev/null @@ -1,47 +0,0 @@ -import requests - -from django.core.exceptions import ImproperlyConfigured - -from allauth.socialaccount import app_settings, providers -from allauth.socialaccount.helpers import ( - complete_social_login, - render_authentication_error, -) -from allauth.socialaccount.models import SocialLogin - -from .provider import PersonaProvider - - -def persona_login(request): - assertion = request.POST.get("assertion", "") - settings = app_settings.PROVIDERS.get(PersonaProvider.id, {}) - audience = settings.get("AUDIENCE", None) - if audience is None: - raise ImproperlyConfigured( - "No Persona audience configured. Please " - "add an AUDIENCE item to the " - "SOCIALACCOUNT_PROVIDERS['persona'] setting." - ) - - resp = requests.post( - "https://verifier.login.persona.org/verify", - {"assertion": assertion, "audience": audience}, - ) - try: - resp.raise_for_status() - extra_data = resp.json() - if extra_data["status"] != "okay": - return render_authentication_error( - request, - provider_id=PersonaProvider.id, - extra_context={"response": extra_data}, - ) - except (ValueError, requests.RequestException) as e: - return render_authentication_error( - request, provider_id=PersonaProvider.id, exception=e - ) - login = providers.registry.by_id( - PersonaProvider.id, request - ).sociallogin_from_response(request, extra_data) - login.state = SocialLogin.state_from_request(request) - return complete_social_login(request, login) diff --git a/docs/overview.rst b/docs/overview.rst index eb3f7227c1..af52bae00f 100644 --- a/docs/overview.rst +++ b/docs/overview.rst @@ -189,8 +189,6 @@ Supported Providers - Paypal (OAuth2) -- Persona - - Pinterest (OAuth2) - Pocket (OAuth) diff --git a/docs/providers.rst b/docs/providers.rst index 0657a1f7cb..23a7700a44 100644 --- a/docs/providers.rst +++ b/docs/providers.rst @@ -760,8 +760,6 @@ delegate authentication. There is no committed timeline for this. The provider is OAuth2 based. More info: https://developer.mozilla.org/en-US/Firefox_Accounts -Note: This is not the same as the Mozilla Persona provider below. - The following Firefox Accounts settings are available: .. code-block:: python @@ -1660,42 +1658,6 @@ Development callback URL http://example.com/accounts/paypal/login/callback -Persona -------- - -Note: Mozilla Persona was shut down on November 30th 2016. See -`the announcement `_ -for details. - -Mozilla Persona requires one setting, the "AUDIENCE" which needs to be the -hardcoded hostname and port of your website. See -https://developer.mozilla.org/en-US/Persona/Security_Considerations#Explicitly_specify_the_audience_parameter -for more information why this needs to be set explicitly and can't be derived -from user provided data: - -.. code-block:: python - - SOCIALACCOUNT_PROVIDERS = { - 'persona': { - 'AUDIENCE': 'https://www.example.com', - } - } - - -The optional ``REQUEST_PARAMETERS`` dictionary contains parameters that are -passed as is to the ``navigator.id.request()`` method to influence the -look and feel of the Persona dialog: - -.. code-block:: python - - SOCIALACCOUNT_PROVIDERS = { - 'persona': { - 'AUDIENCE': 'https://www.example.com', - 'REQUEST_PARAMETERS': {'siteName': 'Example'}, - } - } - - Pinterest --------- diff --git a/example/example/settings.py b/example/example/settings.py index 66ec3a4b3d..810b3fc1d3 100644 --- a/example/example/settings.py +++ b/example/example/settings.py @@ -146,7 +146,6 @@ "allauth.socialaccount.providers.openid", "allauth.socialaccount.providers.pinterest", "allauth.socialaccount.providers.pocket", - "allauth.socialaccount.providers.persona", "allauth.socialaccount.providers.reddit", "allauth.socialaccount.providers.shopify", "allauth.socialaccount.providers.slack", diff --git a/test_settings.py b/test_settings.py index fadcebcfaa..4684f6a6c5 100644 --- a/test_settings.py +++ b/test_settings.py @@ -133,7 +133,6 @@ "allauth.socialaccount.providers.orcid", "allauth.socialaccount.providers.patreon", "allauth.socialaccount.providers.paypal", - "allauth.socialaccount.providers.persona", "allauth.socialaccount.providers.pinterest", "allauth.socialaccount.providers.pocket", "allauth.socialaccount.providers.quickbooks",