-
Notifications
You must be signed in to change notification settings - Fork 52
Open
Labels
type: bug 🐛Something isn't workingSomething isn't working
Description
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
type: bug 🐛Something isn't workingSomething isn't working
Type
Projects
Status
New 🚦