✨ 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
✨ 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
✨ 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
🔧 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
🐛 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
🔥 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.
🔒 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
✨ 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
🔧 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
🔒 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
✨ 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
🐛 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
✨ 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
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.
✨ 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
🐛 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
🐛 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
🔥 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
🐛 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
✨ 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
🔒 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
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.