| from python.helpers.api import ApiHandler, Request, Response |
| from python.helpers import settings, dotenv |
| import os |
|
|
| class Set(ApiHandler): |
| @classmethod |
| def requires_auth(cls) -> bool: |
| return True |
|
|
| @classmethod |
| def requires_csrf(cls) -> bool: |
| return False |
|
|
| @classmethod |
| def requires_api_key(cls) -> bool: |
| return True |
|
|
| async def process(self, input: dict, request: Request) -> dict: |
| |
| api_keys = {} |
| other_settings = {} |
| |
| for k, v in input.items(): |
| if k.startswith("api_key_"): |
| provider = k.replace("api_key_", "").upper() |
| api_keys[provider] = v |
| elif k.endswith("_API_KEY") or k.endswith("_API_TOKEN"): |
| api_keys[k.upper()] = v |
| else: |
| other_settings[k] = v |
| |
| if other_settings: |
| settings.set_settings_delta(other_settings) |
| |
| if api_keys: |
| current_settings = settings.get_settings() |
| for key, val in api_keys.items(): |
| |
| current_settings["api_keys"][key.lower()] = val |
| |
| |
| dotenv.save_dotenv_value(f"API_KEY_{key.upper()}", val) |
| dotenv.save_dotenv_value(f"{key.upper()}_API_KEY", val) |
| |
| |
| if key.upper() == "OTHER": |
| dotenv.save_dotenv_value("OPENAI_API_KEY", val) |
| dotenv.save_dotenv_value("API_KEY_OPENAI", val) |
| |
| settings.set_settings(current_settings) |
| |
| return {"status": "success", "message": "Settings updated"} |
|
|