from fastapi import HTTPException from product_staging.connectors import dynamodb, google from product_staging.constants.error import ( ERROR_MESSAGE_NO_REFRESH_TOKEN, ERROR_MESSAGE_NO_CREDENTIALS_PROVIDED, ) def google_auth_exchange(auth_code: str | None, user_id: str | None): """Return a Google access token for a user based on user credentials""" if not auth_code and not user_id: raise HTTPException( status_code=400, detail=ERROR_MESSAGE_NO_CREDENTIALS_PROVIDED ) table_manager = dynamodb.DynamoDBManager(table=dynamodb.get_dynamodb_table()) if user_id: table_item = table_manager.get_item(user_id) refresh_token: str | None = ( table_item.get("refresh_token", None) if table_item else None ) if not refresh_token and not auth_code: raise HTTPException(status_code=404, detail=ERROR_MESSAGE_NO_REFRESH_TOKEN) elif refresh_token: return { "access_token": google.generate_access_token(refresh_token), "user_id": user_id, } if auth_code: access_token, refresh_token, user_id = google.auth_code_exchange(auth_code) table_manager.put_item(user_id, {"refresh_token": refresh_token}) return {"access_token": access_token, "user_id": user_id}