From 5cd212a0f28e2a4d8a68edc1a1629acb1b74aa21 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 24 Nov 2023 11:18:43 -0300 Subject: [PATCH] Add CredentialService to handle user credentials --- .../langflow/services/credentials/__init__.py | 0 .../langflow/services/credentials/service.py | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/backend/langflow/services/credentials/__init__.py create mode 100644 src/backend/langflow/services/credentials/service.py diff --git a/src/backend/langflow/services/credentials/__init__.py b/src/backend/langflow/services/credentials/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/backend/langflow/services/credentials/service.py b/src/backend/langflow/services/credentials/service.py new file mode 100644 index 000000000..9614c5ed1 --- /dev/null +++ b/src/backend/langflow/services/credentials/service.py @@ -0,0 +1,29 @@ +from typing import TYPE_CHECKING, Union +from uuid import UUID + +from fastapi import Depends +from sqlmodel import Session + +from langflow.services.auth import utils as auth_utils +from langflow.services.base import Service +from langflow.services.database.models.credential.model import Credential +from langflow.services.deps import get_session + +if TYPE_CHECKING: + from langflow.services.settings.service import SettingsService + + +class CredentialService(Service): + name = "credential_service" + + def __init__(self, settings_service: "SettingsService"): + self.settings_service = settings_service + + def get_credential(self, user_id: Union[UUID, str], name: str, session: Session = Depends(get_session)) -> str: + # we get the credential from the database + credential = session.query(Credential).filter(Credential.user_id == user_id, Credential.name == name).first() + # we decrypt the value + if not credential: + raise ValueError(f"{name} credential not found.") + decrypted = auth_utils.decrypt_api_key(credential.value, settings_service=self.settings_service) + return decrypted