Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] - Conda-store server internal server error when auth header is specified without a token #1083

Open
soapy1 opened this issue Feb 5, 2025 · 0 comments
Labels
type: bug 🐛 Something isn't working

Comments

@soapy1
Copy link
Contributor

soapy1 commented Feb 5, 2025

Describe the bug

Running a query against the API with an auth header should authorize a user. However, if the auth header is specified and is empty, there is an internal server error.

For example:

$ curl --header "Authorization: bearer " http://localhost:8080/conda-store/api/v1/environment/
Internal Server Error                                     

Expected behavior

When the user provides the auth header, there should be no errors on the server.

  • for a valid user - it should filter the results as per that user's permissions
  • for a non existing user - it should show just the public environments
  • for a missing token - it should show just the public environments

How to Reproduce the problem?

To reproduce this issue, startup the latest version of conda-store-server. Then run a curl request with an empty auth header.

$ docker compose up -d --build
$ curl --header "Authorization: bearer " http://localhost:8080/conda-store/api/v1/environment/
Internal Server Error          

Output

Logs from the server

conda-store-server-1  | INFO:     172.18.0.1:58362 - "GET /conda-store/api/v1/environment/ HTTP/1.1" 500 Internal Server Error
conda-store-server-1  | ERROR:    Exception in ASGI application
conda-store-server-1  |   + Exception Group Traceback (most recent call last):
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
conda-store-server-1  |   |     yield
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 178, in __call__
conda-store-server-1  |   |     async with anyio.create_task_group() as task_group:
conda-store-server-1  |   |                ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
conda-store-server-1  |   |     raise BaseExceptionGroup(
conda-store-server-1  |   | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
conda-store-server-1  |   +-+---------------- 1 ----------------
conda-store-server-1  |     | Traceback (most recent call last):
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi
conda-store-server-1  |     |     result = await app(  # type: ignore[func-returns-value]
conda-store-server-1  |     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
conda-store-server-1  |     |     await super().__call__(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
conda-store-server-1  |     |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, _send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
conda-store-server-1  |     |     with recv_stream, send_stream, collapse_excgroups():
conda-store-server-1  |     |                                    ^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/contextlib.py", line 158, in __exit__
conda-store-server-1  |     |     self.gen.throw(value)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
conda-store-server-1  |     |     response = await self.dispatch_func(request, call_next)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda-store-server/conda_store_server/_internal/server/app.py", line 257, in conda_store_middleware
conda-store-server-1  |     |     response = await call_next(request)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
conda-store-server-1  |     |     raise app_exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
conda-store-server-1  |     |     await self.app(scope, receive_or_disconnect, send_no_error)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 85, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, send_wrapper)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
conda-store-server-1  |     |     await self.app(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
conda-store-server-1  |     |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     |     await app(scope, receive, sender)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
conda-store-server-1  |     |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
conda-store-server-1  |     |     await route.handle(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
conda-store-server-1  |     |     await self.app(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
conda-store-server-1  |     |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     |     raise exc
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     |     await app(scope, receive, sender)
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
conda-store-server-1  |     |     response = await f(request)
conda-store-server-1  |     |                ^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 291, in app
conda-store-server-1  |     |     solved_result = await solve_dependencies(
conda-store-server-1  |     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/dependencies/utils.py", line 638, in solve_dependencies
conda-store-server-1  |     |     solved = await call(**solved_result.values)
conda-store-server-1  |     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda-store-server/conda_store_server/_internal/server/dependencies.py", line 29, in get_entity
conda-store-server-1  |     |     return auth.authenticate_request(request)
conda-store-server-1  |     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |     |   File "/opt/conda-store-server/conda_store_server/server/auth.py", line 591, in authenticate_request
conda-store-server-1  |     |     request.state.entity = self.authentication.authenticate(parts[1])
conda-store-server-1  |     |                                                             ~~~~~^^^
conda-store-server-1  |     | IndexError: list index out of range
conda-store-server-1  |     +------------------------------------
conda-store-server-1  | 
conda-store-server-1  | During handling of the above exception, another exception occurred:
conda-store-server-1  | 
conda-store-server-1  | Traceback (most recent call last):
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi
conda-store-server-1  |     result = await app(  # type: ignore[func-returns-value]
conda-store-server-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
conda-store-server-1  |     await super().__call__(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
conda-store-server-1  |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
conda-store-server-1  |     await self.app(scope, receive, _send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
conda-store-server-1  |     with recv_stream, send_stream, collapse_excgroups():
conda-store-server-1  |                                    ^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/contextlib.py", line 158, in __exit__
conda-store-server-1  |     self.gen.throw(value)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
conda-store-server-1  |     response = await self.dispatch_func(request, call_next)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda-store-server/conda_store_server/_internal/server/app.py", line 257, in conda_store_middleware
conda-store-server-1  |     response = await call_next(request)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
conda-store-server-1  |     raise app_exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
conda-store-server-1  |     await self.app(scope, receive_or_disconnect, send_no_error)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 85, in __call__
conda-store-server-1  |     await self.app(scope, receive, send_wrapper)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
conda-store-server-1  |     await self.app(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
conda-store-server-1  |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     await app(scope, receive, sender)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
conda-store-server-1  |     await self.middleware_stack(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
conda-store-server-1  |     await route.handle(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
conda-store-server-1  |     await self.app(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
conda-store-server-1  |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
conda-store-server-1  |     raise exc
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
conda-store-server-1  |     await app(scope, receive, sender)
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
conda-store-server-1  |     response = await f(request)
conda-store-server-1  |                ^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/routing.py", line 291, in app
conda-store-server-1  |     solved_result = await solve_dependencies(
conda-store-server-1  |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda/envs/conda-store-server/lib/python3.12/site-packages/fastapi/dependencies/utils.py", line 638, in solve_dependencies
conda-store-server-1  |     solved = await call(**solved_result.values)
conda-store-server-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda-store-server/conda_store_server/_internal/server/dependencies.py", line 29, in get_entity
conda-store-server-1  |     return auth.authenticate_request(request)
conda-store-server-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
conda-store-server-1  |   File "/opt/conda-store-server/conda_store_server/server/auth.py", line 591, in authenticate_request
conda-store-server-1  |     request.state.entity = self.authentication.authenticate(parts[1])
conda-store-server-1  |                                                             ~~~~~^^^
conda-store-server-1  | IndexError: list index out of range

Versions and dependencies used.

No response

Anything else?

No response

@soapy1 soapy1 added the type: bug 🐛 Something isn't working label Feb 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug 🐛 Something isn't working
Projects
Status: New 🚦
Development

No branches or pull requests

1 participant