Commit graph

1,443 commits

Author SHA1 Message Date
Gabriel Luiz Freitas Almeida
49d6054517 🔧 fix(adds_tables.py): fix foreign key creation for 'flow' table when 'user' table exists
 feat(adds_tables.py): add support for creating 'user_id' column in 'flow' table if it does not exist
🔧 fix(adds_tables.py): fix index creation for 'flow' table when 'user_id' column exists
2023-08-28 11:53:24 -03:00
Gabriel Luiz Freitas Almeida
2a53ac2688 🐛 fix(util.py): handle IndentationError when parsing class source code and log an error message 2023-08-28 11:18:16 -03:00
Gabriel Luiz Freitas Almeida
4d08d511e9 🐛 fix(manager.py): fix typo in logger.warn to logger.warning
 feat(manager.py): add check_schema_health method to DatabaseManager to verify the integrity of the database schema
🐛 fix(utils.py): add error handling when checking schema health in initialize_database method
2023-08-28 11:18:01 -03:00
Gabriel Luiz Freitas Almeida
0aa8a25e3f 🔧 chore(util.py): remove unnecessary check for "BaseModel" in _type variable
The check for "BaseModel" in the _type variable is unnecessary and can be safely removed.
2023-08-28 11:17:44 -03:00
Gabriel Luiz Freitas Almeida
f922214d2a 🐛 fix(endpoints.py): add check for missing api_key and raise HTTPException with status code 401 and detail message "Invalid API Key"
🐛 fix(crud.py): remove unnecessary return statement and update_total_uses function call if api_key_object is None
2023-08-28 11:17:34 -03:00
Gabriel Luiz Freitas Almeida
2d22737c31 🐛 fix(adds_tables.py): create "user" and "apikey" tables only if they don't exist to prevent duplicate table creation
 feat(adds_tables.py): add unique index on "username" column in "user" table for faster username lookups
 feat(adds_tables.py): add unique index on "api_key" column in "apikey" table for faster API key lookups
 feat(adds_tables.py): add index on "name" column in "apikey" table for faster name lookups
 feat(adds_tables.py): add index on "user_id" column in "apikey" table for faster user ID lookups
2023-08-28 11:17:12 -03:00
Gabriel Luiz Freitas Almeida
59a08cd645 🔧 chore(crud.py): change return type of check_key function from bool to Optional[ApiKey] to provide more information about the API key
🔧 chore(crud.py): rename api_key variable to api_key_object in check_key function for better clarity
🔧 chore(crud.py): change return value of check_key function from True to api_key_object.user to provide the associated user with the API key
2023-08-28 07:01:01 -03:00
Gabriel Luiz Freitas Almeida
ed9796e473 🐛 fix(api_key.py): change variable name from 'e' to 'exc' for better readability and semantics
🐛 fix(endpoints.py): add 'api_key' parameter to 'process_flow' function to fix missing dependency error
🐛 fix(endpoints.py): add exception chaining to HTTPException in 'process_flow' function for better error handling
🐛 fix(utils.py): change return type of 'api_key_security' function to Optional[ApiKey] for better type hinting
🐛 fix(utils.py): change variable name from 'e' to 'exc' for better readability and semantics
2023-08-28 07:00:45 -03:00
Gabriel Luiz Freitas Almeida
4bc4a39e5e 🔒 chore(api_key.py): refactor mask_api_key validator to improve readability and maintainability
🔒 chore(api_key.py): update api_key field in ApiKeyRead model to remove index=True and unique=True constraints
2023-08-28 06:48:38 -03:00
Gabriel Luiz Freitas Almeida
5605b2aa44 🔥 refactor(alembic): remove flowstyles table migration
🔥 refactor(alembic): remove add_flow_table migration

 feat(alembic): add adds_tables migration to create user and apikey tables

🔥 chore(alembic): remove unnecessary alembic migration files

The following alembic migration files were removed:
- `5512e39b4012_add_apikey_table.py`
- `6384181fb7e8_update_api_key.py`
- `d3749cf7ac7e_update_all_tables.py`

These files are no longer needed as they are no longer relevant to the current state of the database schema. Removing them helps to keep the project's codebase clean and organized.
2023-08-27 20:04:15 -03:00
Gabriel Luiz Freitas Almeida
d06ea50674 🐛 fix(env.py): enable batch rendering for migrations to improve performance 2023-08-27 19:55:32 -03:00
Gabriel Luiz Freitas Almeida
19653858be 🔧 chore(utils.py): refactor create_super_user function to accept optional username and password parameters for flexibility
🔒 fix(utils.py): use the provided username and password parameters if available when creating the super user, instead of relying solely on the settings manager
2023-08-27 19:55:20 -03:00
Gabriel Luiz Freitas Almeida
7d3a3db7e3 🔧 chore(__main__.py): refactor imports to improve readability and maintainability
 feat(__main__.py): add 'superuser' command to create a superuser with provided username and password
2023-08-27 19:55:09 -03:00
Gabriel Luiz Freitas Almeida
a700ab1f71 🐛 fix(endpoints.py): handle specific exceptions when processing flow to provide more informative error messages 2023-08-27 19:16:30 -03:00
Gabriel Luiz Freitas Almeida
7c2bbad5ab 🐛 fix(api_key.py): fix delete_api_key_route URL path by removing double slashes 2023-08-26 17:40:02 -03:00
Gabriel Luiz Freitas Almeida
e850c0cbc6 🔧 fix(api_key/crud.py): remove unused import statement for get_password_hash function
 feat(api_key/crud.py): prepend 'lf-' to generated API key for better identification and readability
 feat(api_key/crud.py): add check_key function to validate API key and update total uses and last used at timestamp
2023-08-26 17:39:22 -03:00
Gabriel Luiz Freitas Almeida
9c77cc1875 🔧 fix(endpoints.py): update import statement for get_current_active_user function to match the new location
🔧 fix(endpoints.py): update import statement for api_key_security function to match the new location
🔧 fix(endpoints.py): update dependencies argument in router.post calls to use a list instead of multiple lines for better readability
🔧 fix(endpoints.py): remove valid argument from process_flow function as it is no longer needed
🔧 fix(api_key.py): remove hashed_api_key field as it is no longer used
🔧 fix(api_key.py): add total_uses field to track the number of times the API key has been used
🔧 fix(api_key.py): add is_active field to track the status of the API key
2023-08-26 17:39:08 -03:00
Gabriel Luiz Freitas Almeida
f687599ecc 🐛 fix(api_key.py): fix incorrect route prefix in APIRouter declaration 2023-08-26 17:38:56 -03:00
Gabriel Luiz Freitas Almeida
0f3bf9192d 🔒 chore(utils.py): refactor import statements and remove unused imports for better code organization and readability
🔒 chore(utils.py): refactor auth_scheme_dependency to use OAuth2PasswordBearer for better security
🔒 chore(utils.py): refactor validate_api_key to use check_key function from crud module for better code reuse
🔒 chore(utils.py): add api_key_security function to handle API key authentication logic
🔒 chore(utils.py): refactor get_current_user to use oauth2_login dependency for better security
🔒 chore(utils.py): remove unused validate_api_key function
🔒 chore(auth.py): remove unused oauth2_scheme variable for better code organization
2023-08-26 17:38:43 -03:00
Gabriel Luiz Freitas Almeida
96c7d4c897 🔧 chore(api_key.py): remove index and unique constraints from api_key field in UnmaskedApiKeyRead model to align with database schema changes 2023-08-25 20:12:49 -03:00
Gabriel Luiz Freitas Almeida
3d82647b4f 🐛 fix(api_key/crud.py): update create_api_key function to return the generated API key instead of the unmasked API key 2023-08-25 20:05:47 -03:00
Gabriel Luiz Freitas Almeida
282e6b0c18 🐛 fix(endpoints.py): import validate_api_key function from auth.utils to fix missing dependency
 feat(endpoints.py): add validation of API key in process_flow endpoint to ensure only valid requests are processed
🔧 chore(utils.py): add validate_api_key function to validate API key against database
🔧 chore(test_endpoints.py): add test case for process_flow endpoint to test API key validation and processing
2023-08-25 20:03:15 -03:00
Gabriel Luiz Freitas Almeida
dc20de76b5 🔧 chore(api_key.py): improve error handling in delete_api_key_route function
🔧 chore(add_apikey_table.py): add hashed_api_key column to apikey table
🔧 chore(update_api_key.py): add migration script to update apikey table with hashed_api_key column
2023-08-25 20:03:14 -03:00
Gabriel Luiz Freitas Almeida
a31d1f104d 🐛 fix(api_key.py): add hashed_api_key field to ApiKey model to store hashed version of api_key
🐛 fix(crud.py): update create_api_key function to use hashed version of generated_api_key and mask the api_key for security reasons
2023-08-25 18:35:08 -03:00
anovazzi1
927379b245 fix(manager.py): catch all exceptions instead of just TypeError when loading JSON payload to handle any parsing errors
feat(index.tsx): add authentication token to WebSocket URL to authenticate the user
2023-08-25 18:15:59 -03:00
Gabriel Luiz Freitas Almeida
4e1710bcc7 🐛 fix(chat.py): add missing import statement for Query from fastapi
🐛 fix(chat.py): add missing import statement for Session from sqlmodel
🐛 fix(chat.py): add missing import statement for get_session from langflow.services.utils
🐛 fix(chat.py): add missing import statement for get_current_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_active_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for WebSocket from fastapi
🐛 fix(chat.py): add missing import statement for WebSocketException from fastapi
🐛 fix(chat.py): add missing import statement for status from fastapi
🐛 fix(chat.py): add missing import statement for APIRouter from fastapi
🐛 fix(chat.py): add missing import statement for Depends from fastapi
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_active_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for get_current_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for get_session from langflow.services.utils
🐛 fix(chat.py): add missing import statement for Session from sqlmodel
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_user from langflow.services.auth.utils
🐛 fix(chat.py): add missing import statement for HTTPException from fastapi
🐛 fix(chat.py): add missing import statement for get_current_user from langflow
2023-08-25 17:01:32 -03:00
Gabriel Luiz Freitas Almeida
fc32ee63e1 🐛 fix(alembic): change "user_id" column in "flow" table to be nullable to handle existing data without a user_id 2023-08-25 16:31:24 -03:00
Gabriel Luiz Freitas Almeida
a290a68605 🔧 chore(update_all_tables.py): remove unused code block to improve code readability and maintainability 2023-08-25 16:30:16 -03:00
Gabriel Luiz Freitas Almeida
aa633ff2de 🐛 fix(utils.py): change auth_scheme_dependency function to be async to match its usage in get_current_user function 2023-08-25 16:29:43 -03:00
Gabriel Luiz Freitas Almeida
e2122567be 🐛 fix(base.py): remove unnecessary user_id parameter from _build_each_node_in_params_dict() method call in Vertex class 2023-08-25 16:29:34 -03:00
Gabriel Luiz Freitas Almeida
89ea8e45f6 🔧 chore(login.py): import get_current_active_user function to improve code readability and maintainability
 feat(login.py): add current_user dependency to refresh_token endpoint to ensure only authenticated users can refresh their tokens
2023-08-25 16:29:24 -03:00
Gabriel Luiz Freitas Almeida
132642347f 🔧 fix(endpoints.py): add current_user dependency to get_all endpoint to enforce authentication and authorization
🚀 feat(endpoints.py): import User model and get_current_active_user function to enable authentication and authorization in get_all endpoint
2023-08-25 16:29:15 -03:00
Gabriel Luiz Freitas Almeida
2af4508e5e feat(main.py): add health endpoint to check the status of the application 2023-08-25 16:28:56 -03:00
Gabriel Luiz Freitas Almeida
648bb25b3f 🔧 chore(update_all_tables.py): add missing index and foreign key constraints to apikey table
🔧 chore(update_all_tables.py): add missing index and foreign key constraints to flow table
2023-08-25 15:31:16 -03:00
Gabriel Luiz Freitas Almeida
8b99cc06c4 🔧 fix(update_all_tables.py): handle potential OperationalError when adding columns to 'apikey' table
 feat(update_all_tables.py): add support for 'user_id' column in 'apikey' table
 feat(update_all_tables.py): add support for 'created_at' column in 'apikey' table
 feat(update_all_tables.py): add support for index on 'name' column in 'apikey' table
 feat(update_all_tables.py): add support for index on 'user_id' column in 'apikey' table
 feat(update_all_tables.py): add foreign key constraint on 'user_id' column in 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping 'create_at' column from 'apikey' table
 feat(update_all_tables.py): add support for 'user_id' column in 'flow' table
 feat(update_all_tables.py): add support for index on 'user_id' column in 'flow' table
 feat(update_all_tables.py): add foreign key constraint on 'user_id' column in 'flow' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping foreign key constraint from 'flow' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping index on 'user_id' column from 'flow' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping 'user_id' column from 'flow' table
🔧 fix(update_all_tables.py): handle potential OperationalError when adding 'create_at' column to 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping foreign key constraint from 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping index on 'user_id' column from 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping index on 'name' column from 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when altering 'name' column in 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping 'user_id' column from 'apikey' table
🔧 fix(update_all_tables.py): handle potential OperationalError when dropping 'created_at' column from 'apikey' table
2023-08-25 15:28:49 -03:00
Gabriel Luiz Freitas Almeida
706cdc0874 🚀 feat(alembic): add migration script to update all tables
This commit adds a new migration script to update all tables in the database. The script includes the following changes:

- Added columns 'created_at' and 'user_id' to the 'apikey' table
- Altered the 'name' column in the 'apikey' table to allow null values
- Created indexes on the 'name' and 'user_id' columns in the 'apikey' table
- Created a foreign key constraint between the 'apikey' table and the 'user' table
- Added the 'user_id' column to the 'flow' table
- Created an index on the 'user_id' column in the 'flow' table
- Created a foreign key constraint between the 'flow' table and the 'user' table
- Removed the 'create_at' column from the 'apikey' table

This migration script is designed to be used with Alembic for database schema updates.
2023-08-25 15:26:24 -03:00
Gabriel Luiz Freitas Almeida
853ce351c9 🐛 fix(chat.py): add missing import statement for get_current_active_user function
 feat(chat.py): add current_user dependency to chat and init_build endpoints to enforce authentication and authorization
🔧 refactor(chat.py): pass user_id to vertex.build() method in stream_build endpoint to associate the build with the current user
2023-08-25 15:26:24 -03:00
Gabriel Luiz Freitas Almeida
b41b3038f3 🔄 refactor(login.py): update import statement for Token model to match new location in schemas module 2023-08-25 15:26:23 -03:00
Gabriel Luiz Freitas Almeida
3d650c8491 feat(schemas.py): add Token schema to represent access and refresh tokens in API responses 2023-08-25 15:26:22 -03:00
Gabriel Luiz Freitas Almeida
d8f5efabad 🐛 fix(loading.py): add type hinting for TYPE_CHECKING to improve code readability
🐛 fix(loading.py): add optional user_id parameter to instantiate_class and instantiate_based_on_type functions to support user-specific custom components
 feat(loading.py): modify instantiate_custom_component function to use user_id parameter and improve code readability
2023-08-25 15:26:21 -03:00
Gabriel Luiz Freitas Almeida
1a50bcd183 🐛 fix(base.py): change return type of generator_build method to Generator[Vertex, None, None] for better type hinting and clarity
🐛 fix(base.py): add optional user_id parameter to _build and _build_list_of_nodes_and_update_params methods in Vertex class to support building with user-specific data
🐛 fix(base.py): add optional user_id parameter to _get_and_instantiate_class method in Vertex class to support building with user-specific data
🐛 fix(custom_component.py): add user_id attribute to CustomComponent class to store the user ID associated with the component
🐛 fix(custom_component.py): add user_id parameter to list_flows method in CustomComponent class to filter flows by user ID
🐛 fix(custom_component.py): add user_id parameter to get_flow method in CustomComponent class to filter flows by user ID
🐛 fix(conftest.py): add client parameter to active_user fixture in tests to fix missing dependency error
2023-08-25 15:26:21 -03:00
Gabriel Luiz Freitas Almeida
c268b2be17 🔥 refactor(models): remove Token model and references to it to simplify the codebase and remove unused code
🔥 refactor(test_custom_component.py): remove unused fixture and imports to clean up the test file
🔧 chore(test_custom_component.py): update component fixture to include user_id parameter for testing purposes
2023-08-25 15:26:20 -03:00
Gabriel Luiz Freitas Almeida
00e5f70fe1 🔀 chore(user.py): add relationship to flows in User model 2023-08-25 12:49:46 -03:00
Gabriel Luiz Freitas Almeida
b5e4df9943 🐛 fix(flows.py): add missing import statement for User model
🐛 fix(flows.py): add missing import statement for TYPE_CHECKING
 feat(flows.py): add user_id field to FlowCreate model to allow specifying the user for a new flow
 feat(flows.py): add user_id field to FlowRead model to include the user_id in the response
 feat(flows.py): add user_id field to Flow model and create a relationship with User model
 feat(flows.py): add current_user dependency to create_flow endpoint to set the user_id for a new flow
 feat(flows.py): add current_user dependency to read_flows endpoint to filter flows by current user
 feat(flows.py): add current_user dependency to read_flow endpoint to filter flow by current user
 feat(flows.py): add current_user dependency to update_flow endpoint to filter flow by current user
 feat(flows.py): add current_user dependency to delete_flow endpoint to filter flow by current user
 feat(flows.py): add current_user dependency to create_flows endpoint to set the user_id for new flows
 feat(flows.py): add current_user dependency to upload_file endpoint to set the user_id for new flows
 feat(flows.py): add current_user dependency to download_file endpoint to filter flows by current user
🐛 fix(flow.py): add missing import statement for User model
 feat(flow.py): add user_id field to Flow model to associate a flow with a user
2023-08-25 12:49:24 -03:00
Gabriel Luiz Freitas Almeida
16695c8241
Merge branch 'login' into authentication 2023-08-25 15:23:22 +00:00
Gabriel Luiz Freitas Almeida
a4aeff6d79 🔧 fix(api_key.py): import missing dependencies and fix type annotations in api_key.py
🔧 fix(api_key.py): fix type annotations and import in api_key.py
🔧 fix(api_key.py): fix type annotations and
2023-08-25 12:21:14 -03:00
Gabriel Luiz Freitas Almeida
950b9d179b 🔥 refactor(user/utils.py): remove unused code and imports from user/utils.py module
 feat(test_api_key.py): add tests for API key creation, retrieval, and deletion
 feat(test_user.py): remove unused fixtures and imports from test_user.py module
2023-08-25 12:05:54 -03:00
Gabriel Luiz Freitas Almeida
ba081e81b6 🔀 chore(user.py): add type hinting for ApiKey import to improve code readability
🔀 chore(user.py): add relationship between User and ApiKey models to establish a one-to-many relationship
2023-08-25 12:05:20 -03:00
Gabriel Luiz Freitas Almeida
7783f4532e 📦 chore(user/crud.py): add CRUD operations for User model in database
🔒 fix(user/crud.py): add validation to prevent duplicate usernames during user update
🔄 refactor(user/crud.py): update user attributes and last_login_at timestamp during user update
🐛 fix(user/crud.py): handle IntegrityError during user update and rollback transaction
2023-08-25 12:04:51 -03:00
Gabriel Luiz Freitas Almeida
e42686738c 📦 chore(api_key/crud.py): add CRUD functions for managing API keys in the database
This commit adds the following functions to the `api_key/crud.py` file:
- `get_api_keys`: Retrieves a list of API keys associated with a specific user ID from the database.
- `create_api_key`: Generates a random API key, hashes it, and creates a new `ApiKey` object in the database.
- `delete_api_key`: Deletes an API key from the database based on its ID.

These functions provide the necessary functionality for managing API keys in the application's database.
2023-08-25 12:04:20 -03:00