OpenG2P / openg2p-spar-self-service

FastAPI based micro service for Self Service Features on SPAR
Mozilla Public License 2.0
0 stars 5 forks source link

Home page not loading after logging into spar self service ui #34

Open ddevadat opened 1 week ago

ddevadat commented 1 week ago

I installed spar and onboarded spar as an oidc client for esignet. I loaded some mock user data on esignet and able to login with those uin id. However after logging in i am just getting blank page

image

in the spar-self-service-api pod, i am getting the below error

I have deployed spar using helm chart version 1.1.0. Can someone please guide me what did i miss

{"written_at":"2024-10-09T04:20:00.490Z","written_ts":1728447600490039000,"msg":"Received Unknown Exception: TypeError('Object of type datetime is not JSON serializable')","type":"log","logger":"app","thread":"MainThread","level":"ERROR","module":"exception","line_no":88,"exc_info":"Traceback (most recent call last):\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/anyio/streams/memory.py\", line 98, in receive\n    return self.receive_nowait()\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/anyio/streams/memory.py\", line 93, in receive_nowait\n    raise WouldBlock\nanyio.WouldBlock\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py\", line 78, in call_next\n    message = await recv_stream.receive()\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/anyio/streams/memory.py\", line 118, in receive\n    raise EndOfStream\nanyio.EndOfStream\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/errors.py\", line 162, in __call__\n    await self.app(scope, receive, _send)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py\", line 108, in __call__\n    response = await self.dispatch_func(request, call_next)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/json_logging/framework/fastapi/implementation.py\", line 33, in dispatch\n    response = await call_next(request)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py\", line 84, in call_next\n    raise app_exc\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py\", line 70, in coro\n    await self.app(scope, receive_or_disconnect, send_no_error)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/exceptions.py\", line 79, in __call__\n    raise exc\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/exceptions.py\", line 68, in __call__\n    await self.app(scope, receive, sender)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py\", line 20, in __call__\n    raise e\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py\", line 17, in __call__\n    await self.app(scope, receive, send)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/routing.py\", line 718, in __call__\n    await route.handle(scope, receive, send)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/routing.py\", line 276, in handle\n    await self.app(scope, receive, send)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/starlette/routing.py\", line 66, in app\n    response = await func(request)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/fastapi/routing.py\", line 273, in app\n    raw_response = await run_endpoint_function(\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/fastapi/routing.py\", line 190, in run_endpoint_function\n    return await dependant.call(**values)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/openg2p_spar_self_service_api/controllers/selfservice_controller.py\", line 160, in resolve\n    mapper_response: MapperResponse = await self.id_mapper_interface.resolve(\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/openg2p_spar_g2pconnect_mapper_connector_lib/connector.py\", line 79, in resolve\n    jwt_token = await mapper_connector_helper.create_jwt_token(\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/openg2p_spar_g2pconnect_mapper_connector_lib/helper.py\", line 279, in create_jwt_token\n    token = jwt.encode(payload, private_key, algorithm=\"RS256\", headers=headers)\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/jwt/api_jwt.py\", line 67, in encode\n    json_payload = self._encode_payload(\n  File \"/home/openg2p/.local/lib/python3.10/site-packages/jwt/api_jwt.py\", line 94, in _encode_payload\n    return json.dumps(\n  File \"/opt/bitnami/python/lib/python3.10/json/__init__.py\", line 238, in dumps\n    **kw).encode(obj)\n  File \"/opt/bitnami/python/lib/python3.10/json/encoder.py\", line 199, in encode\n    chunks = self.iterencode(o, _one_shot=True)\n  File \"/opt/bitnami/python/lib/python3.10/json/encoder.py\", line 257, in iterencode\n    return _iterencode(o, 0)\n  File \"/opt/bitnami/python/lib/python3.10/json/encoder.py\", line 179, in default\n    raise TypeError(f'Object of type {o.__class__.__name__} '\nTypeError: Object of type datetime is not JSON serializable\n","filename":"exception.py","correlation_id":"743d3917-4e2d-40d0-af75-e3fad84744f2"}
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/openg2p/.local/lib/python3.10/site-packages/anyio/streams/memory.py", line 98, in receive
    return self.receive_nowait()
  File "/home/openg2p/.local/lib/python3.10/site-packages/anyio/streams/memory.py", line 93, in receive_nowait
    raise WouldBlock
anyio.WouldBlock

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py", line 78, in call_next
    message = await recv_stream.receive()
  File "/home/openg2p/.local/lib/python3.10/site-packages/anyio/streams/memory.py", line 118, in receive
    raise EndOfStream
anyio.EndOfStream

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/openg2p/.local/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 399, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "/home/openg2p/.local/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 70, in __call__
    return await self.app(scope, receive, send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/fastapi/applications.py", line 292, in __call__
    await super().__call__(scope, receive, send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py", line 108, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/home/openg2p/.local/lib/python3.10/site-packages/json_logging/framework/fastapi/implementation.py", line 33, in dispatch
    response = await call_next(request)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py", line 84, in call_next
    raise app_exc
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/base.py", line 70, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    raise exc
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "/home/openg2p/.local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
    raise e
  File "/home/openg2p/.local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/openg2p/.local/lib/python3.10/site-packages/starlette/routing.py", line 66, in app
    response = await func(request)
  File "/home/openg2p/.local/lib/python3.10/site-packages/fastapi/routing.py", line 273, in app
    raw_response = await run_endpoint_function(
  File "/home/openg2p/.local/lib/python3.10/site-packages/fastapi/routing.py", line 190, in run_endpoint_function
    return await dependant.call(**values)
  File "/home/openg2p/.local/lib/python3.10/site-packages/openg2p_spar_self_service_api/controllers/selfservice_controller.py", line 160, in resolve
    mapper_response: MapperResponse = await self.id_mapper_interface.resolve(
  File "/home/openg2p/.local/lib/python3.10/site-packages/openg2p_spar_g2pconnect_mapper_connector_lib/connector.py", line 79, in resolve
    jwt_token = await mapper_connector_helper.create_jwt_token(
  File "/home/openg2p/.local/lib/python3.10/site-packages/openg2p_spar_g2pconnect_mapper_connector_lib/helper.py", line 279, in create_jwt_token
    token = jwt.encode(payload, private_key, algorithm="RS256", headers=headers)
  File "/home/openg2p/.local/lib/python3.10/site-packages/jwt/api_jwt.py", line 67, in encode
    json_payload = self._encode_payload(
  File "/home/openg2p/.local/lib/python3.10/site-packages/jwt/api_jwt.py", line 94, in _encode_payload
    return json.dumps(
  File "/opt/bitnami/python/lib/python3.10/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/opt/bitnami/python/lib/python3.10/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/opt/bitnami/python/lib/python3.10/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/opt/bitnami/python/lib/python3.10/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable
PSNAppz commented 1 day ago

Thanks for reporting this @ddevadat . It seems to be an issue with how we are handling the date time inside the create_jwt_token method.

Possible fix:

exp_time = datetime.utcnow() + timedelta(minutes=expiration_minutes)
exp_timestamp = int(exp_time.timestamp())