From dc20de76b540d04042054b02c0b8a86c437ecbe7 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 25 Aug 2023 20:02:16 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore(api=5Fkey.py):=20improve?= =?UTF-8?q?=20error=20handling=20in=20delete=5Fapi=5Fkey=5Froute=20functio?= =?UTF-8?q?n=20=F0=9F=94=A7=20chore(add=5Fapikey=5Ftable.py):=20add=20hash?= =?UTF-8?q?ed=5Fapi=5Fkey=20column=20to=20apikey=20table=20=F0=9F=94=A7=20?= =?UTF-8?q?chore(update=5Fapi=5Fkey.py):=20add=20migration=20script=20to?= =?UTF-8?q?=20update=20apikey=20table=20with=20hashed=5Fapi=5Fkey=20column?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../versions/5512e39b4012_add_apikey_table.py | 3 ++ .../versions/6384181fb7e8_update_api_key.py | 54 +++++++++++++++++++ src/backend/langflow/api/v1/api_key.py | 2 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py diff --git a/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py b/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py index 02db82e71..ebf549eda 100644 --- a/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py +++ b/src/backend/langflow/alembic/versions/5512e39b4012_add_apikey_table.py @@ -27,6 +27,9 @@ def upgrade() -> None: op.create_table( "apikey", sa.Column("api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False), + sa.Column( + "hashed_api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False + ), sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False), sa.Column("create_at", sa.DateTime(), nullable=False), sa.Column("last_used_at", sa.DateTime(), nullable=True), diff --git a/src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py b/src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py new file mode 100644 index 000000000..6b5f30ca6 --- /dev/null +++ b/src/backend/langflow/alembic/versions/6384181fb7e8_update_api_key.py @@ -0,0 +1,54 @@ +"""Update API key + +Revision ID: 6384181fb7e8 +Revises: d3749cf7ac7e +Create Date: 2023-08-25 20:00:22.889883 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import sqlmodel +import contextlib + +# revision identifiers, used by Alembic. +revision: str = "6384181fb7e8" +down_revision: Union[str, None] = "d3749cf7ac7e" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with contextlib.suppress(sa.exc.OperationalError): + op.add_column( + "apikey", + sa.Column( + "hashed_api_key", sqlmodel.sql.sqltypes.AutoString(), nullable=False + ), + ) + op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=True) + op.create_index( + op.f("ix_apikey_hashed_api_key"), "apikey", ["hashed_api_key"], unique=False + ) + op.create_index(op.f("ix_apikey_name"), "apikey", ["name"], unique=False) + op.create_foreign_key(None, "apikey", "user", ["user_id"], ["id"]) + with contextlib.suppress(sa.exc.OperationalError): + op.alter_column( + "flow", "user_id", existing_type=sa.CHAR(length=32), nullable=False + ) + op.create_foreign_key(None, "flow", "user", ["user_id"], ["id"]) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(None, "flow", type_="foreignkey") + op.alter_column("flow", "user_id", existing_type=sa.CHAR(length=32), nullable=True) + op.drop_constraint(None, "apikey", type_="foreignkey") + op.drop_index(op.f("ix_apikey_name"), table_name="apikey") + op.drop_index(op.f("ix_apikey_hashed_api_key"), table_name="apikey") + op.alter_column("apikey", "name", existing_type=sa.VARCHAR(), nullable=False) + op.drop_column("apikey", "hashed_api_key") + # ### end Alembic commands ### diff --git a/src/backend/langflow/api/v1/api_key.py b/src/backend/langflow/api/v1/api_key.py index df2d3e420..81b5d976f 100644 --- a/src/backend/langflow/api/v1/api_key.py +++ b/src/backend/langflow/api/v1/api_key.py @@ -58,4 +58,4 @@ def delete_api_key_route( delete_api_key(db, api_key_id) return {"detail": "API Key deleted"} except Exception as e: - raise HTTPException(status_code=400, detail=str(e)) + raise HTTPException(status_code=400, detail=str(e)) from e