from importlib import import_module from django.urls import include, path from allauth.socialaccount import providers from . import app_settings urlpatterns = [path("", include("allauth.account.urls"))] if app_settings.MFA_ENABLED: urlpatterns += [path("2fa/", include("allauth.mfa.urls"))] if app_settings.SOCIALACCOUNT_ENABLED: urlpatterns += [path("social/", include("allauth.socialaccount.urls"))] # Provider urlpatterns, as separate attribute (for reusability). provider_urlpatterns = [] provider_classes = providers.registry.get_class_list() # We need to move the OpenID Connect provider to the end. The reason is that # matches URLs that the builtin providers also match. provider_classes = [cls for cls in provider_classes if cls.id != "openid_connect"] + [ cls for cls in provider_classes if cls.id == "openid_connect" ] for provider_class in provider_classes: try: prov_mod = import_module(provider_class.get_package() + ".urls") except ImportError: continue prov_urlpatterns = getattr(prov_mod, "urlpatterns", None) if prov_urlpatterns: provider_urlpatterns += prov_urlpatterns urlpatterns += provider_urlpatterns