Skip to content

fix OpenID authentication

OpenID Connect authentication throws a django.core.exceptions.SynchronousOnlyOperation exception.

web   File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response                                                                                                                         [2720/9522]
web     response = wrapped_callback(request, *callback_args, **callback_kwargs)
web                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/asgiref/sync.py", line 277, in __call__
web     return call_result.result()
web            ^^^^^^^^^^^^^^^^^^^^
web   File "/usr/lib64/python3.11/concurrent/futures/_base.py", line 449, in result
web     return self.__get_result()
web            ^^^^^^^^^^^^^^^^^^^
web   File "/usr/lib64/python3.11/concurrent/futures/_base.py", line 401, in __get_result
web     raise self._exception
web   File "/usr/local/lib/python3.11/site-packages/asgiref/sync.py", line 353, in main_wrap
web     result = await self.awaitable(*args, **kwargs)
web              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/ninja/operation.py", line 414, in _async_view
web     return await cast(AsyncOperation, operation).run(request, *a, **kw)
web            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/ninja/operation.py", line 287, in run
web     return self.api.on_exception(request, e)
web            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/ninja/main.py", line 490, in on_exception
web     return handler(request, exc)
web            ^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/ninja/errors.py", line 108, in _default_exception
web     raise exc  # let django deal with it
web     ^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/ninja/operation.py", line 284, in run
web     result = await self.view_func(request, **values)
web              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/code/glitchtip/api/api.py", line 102, in get_settings
web     social_app.authorize_url = adapter.authorize_url
web                                ^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/allauth/socialaccount/providers/openid_connect/views.py", line 44, in authorize_url
web     return self.openid_config["authorization_endpoint"]
web            ^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/allauth/socialaccount/providers/openid_connect/views.py", line 23, in openid_config
web     server_url = self.get_provider().server_url
web                  ^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/allauth/socialaccount/providers/oauth2/views.py", line 44, in get_provider                                                                                                                   glitchtip-web-5f7cd58b7c-46wkv web     return get_adapter(self.request).get_provider(
web            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                                                                                                           glitchtip-web-5f7cd58b7c-46wkv web   File "/usr/local/lib/python3.11/site-packages/allauth/socialaccount/adapter.py", line 204, in get_provider
web     app = self.get_app(request, provider=provider)                                                                                                                                                                                           glitchtip-web-5f7cd58b7c-46wkv web           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/allauth/socialaccount/adapter.py", line 284, in get_app
web     apps = self.list_apps(request, provider=provider, client_id=client_id)
web            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/allauth/socialaccount/adapter.py", line 236, in list_apps
web     for app in db_apps:
web   File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 398, in __iter__
web     self._fetch_all()
web   File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 1881, in _fetch_all
web     self._result_cache = list(self._iterable_class(self))
web                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 91, in __iter__
web     results = compiler.execute_sql(
web               ^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1560, in execute_sql
web     cursor = self.connection.cursor()
web              ^^^^^^^^^^^^^^^^^^^^^^^^
web   File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 24, in inner
web     raise SynchronousOnlyOperation(message)
web django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.

Fix getting the adapter.authorize_url for all OAuth2Adapter classes.

Merge request reports