|
from typing import Union |
|
|
|
from fastapi import Header |
|
from fastapi.responses import Response, JSONResponse |
|
from carvekit.web.deps import config |
|
|
|
|
|
def Authenticate(x_api_key: Union[str, None] = Header(None)) -> Union[bool, str]: |
|
if x_api_key in config.auth.allowed_tokens: |
|
return "allowed" |
|
elif x_api_key == config.auth.admin_token: |
|
return "admin" |
|
elif config.auth.auth is False: |
|
return "allowed" |
|
else: |
|
return False |
|
|
|
|
|
def handle_response(response, original_image) -> Response: |
|
""" |
|
Response handler from TaskQueue |
|
:param response: TaskQueue response |
|
:param original_image: Original PIL image |
|
:return: Complete flask response |
|
""" |
|
response_object = None |
|
if isinstance(response, dict): |
|
if response["type"] == "jpg": |
|
response_object = Response( |
|
content=response["data"][0].read(), media_type="image/jpeg" |
|
) |
|
elif response["type"] == "png": |
|
response_object = Response( |
|
content=response["data"][0].read(), media_type="image/png" |
|
) |
|
elif response["type"] == "zip": |
|
response_object = Response( |
|
content=response["data"][0], media_type="application/zip" |
|
) |
|
response_object.headers[ |
|
"Content-Disposition" |
|
] = "attachment; filename='no-bg.zip'" |
|
|
|
|
|
response_object.headers["X-Credits-Charged"] = "0" |
|
response_object.headers["X-Type"] = "other" |
|
response_object.headers["X-Max-Width"] = str(original_image.size[0]) |
|
response_object.headers["X-Max-Height"] = str(original_image.size[1]) |
|
response_object.headers[ |
|
"X-Ratelimit-Limit" |
|
] = "500" |
|
response_object.headers["X-Ratelimit-Remaining"] = "500" |
|
response_object.headers["X-Ratelimit-Reset"] = "1" |
|
response_object.headers["X-Width"] = str(response["data"][1][0]) |
|
response_object.headers["X-Height"] = str(response["data"][1][1]) |
|
|
|
else: |
|
response = JSONResponse(content=response[0]) |
|
response.headers["X-Credits-Charged"] = "0" |
|
|
|
return response_object |
|
|