Merge branch 'zustand/io/migration' of github.com:logspace-ai/langflow into zustand/io/migration
This commit is contained in:
commit
ef9fdce774
5 changed files with 18 additions and 27 deletions
|
|
@ -89,9 +89,7 @@ async def auto_login(
|
||||||
|
|
||||||
|
|
||||||
@router.post("/refresh")
|
@router.post("/refresh")
|
||||||
async def refresh_token(
|
async def refresh_token(request: Request, response: Response, settings_service=Depends(get_settings_service)):
|
||||||
request: Request, response: Response, settings_service=Depends(get_settings_service)
|
|
||||||
):
|
|
||||||
auth_settings = settings_service.auth_settings
|
auth_settings = settings_service.auth_settings
|
||||||
|
|
||||||
token = request.cookies.get("refresh_token_lf")
|
token = request.cookies.get("refresh_token_lf")
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from langflow.components.vectorstores.base.model import LCVectorStoreComponent
|
from langflow.components.vectorstores.base.model import LCVectorStoreComponent
|
||||||
from langflow.components.vectorstores.MongoDBAtlasVector import \
|
from langflow.components.vectorstores.MongoDBAtlasVector import MongoDBAtlasComponent
|
||||||
MongoDBAtlasComponent
|
|
||||||
from langflow.field_typing import Embeddings, NestedDict, Text
|
from langflow.field_typing import Embeddings, NestedDict, Text
|
||||||
from langflow.schema import Record
|
from langflow.schema import Record
|
||||||
|
|
||||||
|
|
@ -37,7 +36,6 @@ class MongoDBAtlasSearchComponent(MongoDBAtlasComponent, LCVectorStoreComponent)
|
||||||
mongodb_atlas_cluster_uri: str = "",
|
mongodb_atlas_cluster_uri: str = "",
|
||||||
search_kwargs: Optional[NestedDict] = None,
|
search_kwargs: Optional[NestedDict] = None,
|
||||||
) -> List[Record]:
|
) -> List[Record]:
|
||||||
|
|
||||||
search_kwargs = search_kwargs or {}
|
search_kwargs = search_kwargs or {}
|
||||||
vector_store = super().build(
|
vector_store = super().build(
|
||||||
connection_string=mongodb_atlas_cluster_uri,
|
connection_string=mongodb_atlas_cluster_uri,
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,9 @@ from jose import JWTError, jwt
|
||||||
from sqlmodel import Session
|
from sqlmodel import Session
|
||||||
from starlette.websockets import WebSocket
|
from starlette.websockets import WebSocket
|
||||||
|
|
||||||
from langflow.services.database.models.api_key.model import ApiKey
|
|
||||||
from langflow.services.database.models.api_key.crud import check_key
|
from langflow.services.database.models.api_key.crud import check_key
|
||||||
from langflow.services.database.models.user.crud import (
|
from langflow.services.database.models.api_key.model import ApiKey
|
||||||
get_user_by_id,
|
from langflow.services.database.models.user.crud import get_user_by_id, get_user_by_username, update_user_last_login_at
|
||||||
get_user_by_username,
|
|
||||||
update_user_last_login_at,
|
|
||||||
)
|
|
||||||
from langflow.services.database.models.user.model import User
|
from langflow.services.database.models.user.model import User
|
||||||
from langflow.services.deps import get_session, get_settings_service
|
from langflow.services.deps import get_session, get_settings_service
|
||||||
|
|
||||||
|
|
@ -107,13 +103,13 @@ async def get_current_user_by_jwt(
|
||||||
if isinstance(token, Coroutine):
|
if isinstance(token, Coroutine):
|
||||||
token = await token
|
token = await token
|
||||||
|
|
||||||
if settings_service.auth_settings.SECRET_KEY is None:
|
if settings_service.auth_settings.SECRET_KEY.get_secret_value() is None:
|
||||||
raise credentials_exception
|
raise credentials_exception
|
||||||
|
|
||||||
try:
|
try:
|
||||||
payload = jwt.decode(
|
payload = jwt.decode(
|
||||||
token,
|
token,
|
||||||
settings_service.auth_settings.SECRET_KEY,
|
settings_service.auth_settings.SECRET_KEY.get_secret_value(),
|
||||||
algorithms=[settings_service.auth_settings.ALGORITHM],
|
algorithms=[settings_service.auth_settings.ALGORITHM],
|
||||||
)
|
)
|
||||||
user_id: UUID = payload.get("sub") # type: ignore
|
user_id: UUID = payload.get("sub") # type: ignore
|
||||||
|
|
@ -183,7 +179,7 @@ def create_token(data: dict, expires_delta: timedelta):
|
||||||
|
|
||||||
return jwt.encode(
|
return jwt.encode(
|
||||||
to_encode,
|
to_encode,
|
||||||
settings_service.auth_settings.SECRET_KEY,
|
settings_service.auth_settings.SECRET_KEY.get_secret_value(),
|
||||||
algorithm=settings_service.auth_settings.ALGORITHM,
|
algorithm=settings_service.auth_settings.ALGORITHM,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -287,7 +283,7 @@ def create_refresh_token(refresh_token: str, db: Session = Depends(get_session))
|
||||||
try:
|
try:
|
||||||
payload = jwt.decode(
|
payload = jwt.decode(
|
||||||
refresh_token,
|
refresh_token,
|
||||||
settings_service.auth_settings.SECRET_KEY,
|
settings_service.auth_settings.SECRET_KEY.get_secret_value(),
|
||||||
algorithms=[settings_service.auth_settings.ALGORITHM],
|
algorithms=[settings_service.auth_settings.ALGORITHM],
|
||||||
)
|
)
|
||||||
user_id: UUID = payload.get("sub") # type: ignore
|
user_id: UUID = payload.get("sub") # type: ignore
|
||||||
|
|
@ -326,7 +322,7 @@ def add_padding(s):
|
||||||
|
|
||||||
|
|
||||||
def get_fernet(settings_service=Depends(get_settings_service)):
|
def get_fernet(settings_service=Depends(get_settings_service)):
|
||||||
SECRET_KEY = settings_service.auth_settings.SECRET_KEY
|
SECRET_KEY = settings_service.auth_settings.SECRET_KEY.get_secret_value()
|
||||||
# It's important that your secret key is 32 url-safe base64-encoded byte
|
# It's important that your secret key is 32 url-safe base64-encoded byte
|
||||||
padded_secret_key = add_padding(SECRET_KEY)
|
padded_secret_key = add_padding(SECRET_KEY)
|
||||||
fernet = Fernet(padded_secret_key)
|
fernet = Fernet(padded_secret_key)
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
import secrets
|
import secrets
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
|
||||||
|
from loguru import logger
|
||||||
|
from passlib.context import CryptContext
|
||||||
|
from pydantic import Field, SecretStr, validator
|
||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
|
||||||
from langflow.services.settings.constants import (
|
from langflow.services.settings.constants import (
|
||||||
DEFAULT_SUPERUSER,
|
DEFAULT_SUPERUSER,
|
||||||
DEFAULT_SUPERUSER_PASSWORD,
|
DEFAULT_SUPERUSER_PASSWORD,
|
||||||
)
|
)
|
||||||
from langflow.services.settings.utils import read_secret_from_file, write_secret_to_file
|
from langflow.services.settings.utils import read_secret_from_file, write_secret_to_file
|
||||||
from loguru import logger
|
|
||||||
from passlib.context import CryptContext
|
|
||||||
from pydantic import Field, validator
|
|
||||||
from pydantic_settings import BaseSettings
|
|
||||||
|
|
||||||
|
|
||||||
class AuthSettings(BaseSettings):
|
class AuthSettings(BaseSettings):
|
||||||
# Login settings
|
# Login settings
|
||||||
CONFIG_DIR: str
|
CONFIG_DIR: str
|
||||||
SECRET_KEY: str = Field(
|
SECRET_KEY: SecretStr = Field(
|
||||||
default="",
|
default=None,
|
||||||
description="Secret key for JWT. If not provided, a random one will be generated.",
|
description="Secret key for JWT. If not provided, a random one will be generated.",
|
||||||
frozen=False,
|
frozen=False,
|
||||||
)
|
)
|
||||||
|
|
@ -26,7 +26,6 @@ class AuthSettings(BaseSettings):
|
||||||
REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 12 * 7
|
REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 12 * 7
|
||||||
|
|
||||||
# API Key to execute /process endpoint
|
# API Key to execute /process endpoint
|
||||||
API_KEY_SECRET_KEY: Optional[str] = "b82818e0ad4ff76615c5721ee21004b07d84cd9b87ba4d9cb42374da134b841a"
|
|
||||||
API_KEY_ALGORITHM: str = "HS256"
|
API_KEY_ALGORITHM: str = "HS256"
|
||||||
API_V1_STR: str = "/api/v1"
|
API_V1_STR: str = "/api/v1"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ export default function InputComponent({
|
||||||
// if the user copies a password from another input
|
// if the user copies a password from another input
|
||||||
// it might come as ••••••••••• it causes errors
|
// it might come as ••••••••••• it causes errors
|
||||||
// in ascii encoding, so we need to handle it
|
// in ascii encoding, so we need to handle it
|
||||||
if (password) {
|
if (password && e.target.value.length > 0) {
|
||||||
// check if all chars are •
|
// check if all chars are •
|
||||||
if (e.target.value.split("").every((char) => char === "•")) {
|
if (e.target.value.split("").every((char) => char === "•")) {
|
||||||
setErrorData({
|
setErrorData({
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue