diff --git a/benefits/core/context_processors.py b/benefits/core/context_processors.py index 7207a32c5..ceabe3542 100644 --- a/benefits/core/context_processors.py +++ b/benefits/core/context_processors.py @@ -2,7 +2,6 @@ The core application: context processors for enriching request context data. """ from django.conf import settings -from django.urls import reverse from . import models, session @@ -44,15 +43,12 @@ def authentication(request): if verifier: data = { - "required": verifier.is_auth_required, "logged_in": session.logged_in(request), - "supports_sign_out": verifier.supports_sign_out, - "sign_out_route": reverse("oauth:logout"), } if verifier.is_auth_required: - auth_provider = verifier.auth_provider - data["sign_out_button_label"] = auth_provider.sign_out_button_label + data["sign_out_button_template"] = verifier.auth_provider.sign_out_button_template + data["sign_out_link_template"] = verifier.auth_provider.sign_out_link_template return {"authentication": data} else: diff --git a/benefits/core/migrations/0001_initial.py b/benefits/core/migrations/0001_initial.py index ee5978058..d03ab3ff5 100644 --- a/benefits/core/migrations/0001_initial.py +++ b/benefits/core/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.3 on 2023-07-11 17:22 +# Generated by Django 4.2.3 on 2023-07-14 04:51 from django.db import migrations, models import django.db.models.deletion @@ -14,7 +14,8 @@ class Migration(migrations.Migration): name="AuthProvider", fields=[ ("id", models.AutoField(primary_key=True, serialize=False)), - ("sign_out_button_label", models.TextField(null=True)), + ("sign_out_button_template", models.TextField(null=True)), + ("sign_out_link_template", models.TextField(null=True)), ("client_name", models.TextField()), ("client_id", models.TextField()), ("authority", models.TextField()), diff --git a/benefits/core/migrations/0002_data.py b/benefits/core/migrations/0002_data.py index 4495bd661..874e09ac6 100644 --- a/benefits/core/migrations/0002_data.py +++ b/benefits/core/migrations/0002_data.py @@ -127,7 +127,8 @@ def load_data(app, *args, **kwargs): AuthProvider = app.get_model("core", "AuthProvider") senior_auth_provider = AuthProvider.objects.create( - sign_out_button_label=_("eligibility.buttons.senior.signout"), + sign_out_button_template="core/includes/sign-out-button--senior.html", + sign_out_link_template="core/includes/sign-out-link--senior.html", client_name=os.environ.get("SENIOR_AUTH_PROVIDER_CLIENT_NAME", "senior-benefits-oauth-client-name"), client_id=os.environ.get("AUTH_PROVIDER_CLIENT_ID", "benefits-oauth-client-id"), authority=os.environ.get("AUTH_PROVIDER_AUTHORITY", "https://example.com"), diff --git a/benefits/core/models.py b/benefits/core/models.py index eee1962af..f8fe0c6a4 100644 --- a/benefits/core/models.py +++ b/benefits/core/models.py @@ -42,7 +42,8 @@ class AuthProvider(models.Model): """An entity that provides authentication for eligibility verifiers.""" id = models.AutoField(primary_key=True) - sign_out_button_label = models.TextField(null=True) + sign_out_button_template = models.TextField(null=True) + sign_out_link_template = models.TextField(null=True) client_name = models.TextField() client_id = models.TextField() authority = models.TextField() @@ -50,6 +51,14 @@ class AuthProvider(models.Model): claim = models.TextField(null=True) scheme = models.TextField() + @property + def supports_claims_verification(self): + return bool(self.scope) and bool(self.claim) + + @property + def supports_sign_out(self): + return bool(self.sign_out_button_template) or bool(self.sign_out_link_template) + class EligibilityType(models.Model): """A single conditional eligibility type.""" @@ -138,11 +147,7 @@ def is_auth_required(self): @property def uses_auth_verification(self): """True if this Verifier verifies via the auth provider. False otherwise.""" - return self.is_auth_required and self.auth_provider.scope and self.auth_provider.claim - - @property - def supports_sign_out(self): - return bool(self.is_auth_required and self.auth_provider.sign_out_button_label) + return self.is_auth_required and self.auth_provider.supports_claims_verification @staticmethod def by_id(id): diff --git a/benefits/core/templates/core/includes/sign-out-button--senior.html b/benefits/core/templates/core/includes/sign-out-button--senior.html new file mode 100644 index 000000000..93d7e8afa --- /dev/null +++ b/benefits/core/templates/core/includes/sign-out-button--senior.html @@ -0,0 +1,8 @@ +{% load i18n %} + +{% if authentication.logged_in %} + {% url "oauth:logout" as sign_out_url %} + + + +{% endif %} diff --git a/benefits/core/templates/core/includes/sign-out-link--senior.html b/benefits/core/templates/core/includes/sign-out-link--senior.html new file mode 100644 index 000000000..6eda77de7 --- /dev/null +++ b/benefits/core/templates/core/includes/sign-out-link--senior.html @@ -0,0 +1,6 @@ +{% extends "core/includes/sign-out-link.html" %} +{% load i18n %} + +{% block button_text %} + {% translate "core.buttons.senior.signout" %} +{% endblock button_text %} diff --git a/benefits/core/templates/core/includes/sign-out-link.html b/benefits/core/templates/core/includes/sign-out-link.html index 8833403f2..9694abfaa 100644 --- a/benefits/core/templates/core/includes/sign-out-link.html +++ b/benefits/core/templates/core/includes/sign-out-link.html @@ -1,16 +1,15 @@ - -{% load i18n %} - -{% if authentication %} - {% if authentication.supports_sign_out and authentication.logged_in %} -
-
-