From b9fb657d811a20d009a48aaef53da613d3b7cd84 Mon Sep 17 00:00:00 2001 From: hagen-danswer Date: Wed, 23 Oct 2024 17:49:04 -0700 Subject: [PATCH] Temporary fix for empty Google App credentials (#2892) * Temporary fix for empty Google App credentials * added it to credential creation --- backend/danswer/db/credentials.py | 18 ++++++++++++++++++ backend/danswer/server/documents/connector.py | 10 ++++++++++ backend/danswer/server/documents/credential.py | 8 ++++++++ 3 files changed, 36 insertions(+) diff --git a/backend/danswer/db/credentials.py b/backend/danswer/db/credentials.py index abab904cc..b4ecfc888 100644 --- a/backend/danswer/db/credentials.py +++ b/backend/danswer/db/credentials.py @@ -406,6 +406,24 @@ def create_initial_public_credential(db_session: Session) -> None: db_session.commit() +def cleanup_gmail_credentials(db_session: Session) -> None: + gmail_credentials = fetch_credentials_by_source( + db_session=db_session, user=None, document_source=DocumentSource.GMAIL + ) + for credential in gmail_credentials: + db_session.delete(credential) + db_session.commit() + + +def cleanup_google_drive_credentials(db_session: Session) -> None: + google_drive_credentials = fetch_credentials_by_source( + db_session=db_session, user=None, document_source=DocumentSource.GOOGLE_DRIVE + ) + for credential in google_drive_credentials: + db_session.delete(credential) + db_session.commit() + + def delete_gmail_service_account_credentials( user: User | None, db_session: Session ) -> None: diff --git a/backend/danswer/server/documents/connector.py b/backend/danswer/server/documents/connector.py index 54d11e867..a6ce87ad8 100644 --- a/backend/danswer/server/documents/connector.py +++ b/backend/danswer/server/documents/connector.py @@ -60,6 +60,8 @@ from danswer.db.connector_credential_pair import add_credential_to_connector from danswer.db.connector_credential_pair import get_cc_pair_groups_for_ids from danswer.db.connector_credential_pair import get_connector_credential_pair from danswer.db.connector_credential_pair import get_connector_credential_pairs +from danswer.db.credentials import cleanup_gmail_credentials +from danswer.db.credentials import cleanup_google_drive_credentials from danswer.db.credentials import create_credential from danswer.db.credentials import delete_gmail_service_account_credentials from danswer.db.credentials import delete_google_drive_service_account_credentials @@ -143,9 +145,11 @@ def upsert_google_app_gmail_credentials( @router.delete("/admin/connector/gmail/app-credential") def delete_google_app_gmail_credentials( _: User = Depends(current_admin_user), + db_session: Session = Depends(get_session), ) -> StatusResponse: try: delete_google_app_gmail_cred() + cleanup_gmail_credentials(db_session=db_session) except KvKeyNotFoundError as e: raise HTTPException(status_code=400, detail=str(e)) @@ -181,9 +185,11 @@ def upsert_google_app_credentials( @router.delete("/admin/connector/google-drive/app-credential") def delete_google_app_credentials( _: User = Depends(current_admin_user), + db_session: Session = Depends(get_session), ) -> StatusResponse: try: delete_google_app_cred() + cleanup_google_drive_credentials(db_session=db_session) except KvKeyNotFoundError as e: raise HTTPException(status_code=400, detail=str(e)) @@ -221,9 +227,11 @@ def upsert_google_service_gmail_account_key( @router.delete("/admin/connector/gmail/service-account-key") def delete_google_service_gmail_account_key( _: User = Depends(current_admin_user), + db_session: Session = Depends(get_session), ) -> StatusResponse: try: delete_gmail_service_account_key() + cleanup_gmail_credentials(db_session=db_session) except KvKeyNotFoundError as e: raise HTTPException(status_code=400, detail=str(e)) @@ -261,9 +269,11 @@ def upsert_google_service_account_key( @router.delete("/admin/connector/google-drive/service-account-key") def delete_google_service_account_key( _: User = Depends(current_admin_user), + db_session: Session = Depends(get_session), ) -> StatusResponse: try: delete_service_account_key() + cleanup_google_drive_credentials(db_session=db_session) except KvKeyNotFoundError as e: raise HTTPException(status_code=400, detail=str(e)) diff --git a/backend/danswer/server/documents/credential.py b/backend/danswer/server/documents/credential.py index 3d965481b..2c6e41bf9 100644 --- a/backend/danswer/server/documents/credential.py +++ b/backend/danswer/server/documents/credential.py @@ -8,6 +8,8 @@ from danswer.auth.users import current_admin_user from danswer.auth.users import current_curator_or_admin_user from danswer.auth.users import current_user from danswer.db.credentials import alter_credential +from danswer.db.credentials import cleanup_gmail_credentials +from danswer.db.credentials import cleanup_google_drive_credentials from danswer.db.credentials import create_credential from danswer.db.credentials import CREDENTIAL_PERMISSIONS_TO_IGNORE from danswer.db.credentials import delete_credential @@ -138,6 +140,12 @@ def create_credential_from_model( object_is_public=credential_info.curator_public, ) + # Temporary fix for empty Google App credentials + if credential_info.source == DocumentSource.GMAIL: + cleanup_gmail_credentials(db_session=db_session) + if credential_info.source == DocumentSource.GOOGLE_DRIVE: + cleanup_google_drive_credentials(db_session=db_session) + credential = create_credential(credential_info, user, db_session) return ObjectCreationIdResponse( id=credential.id,