mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-09-27 20:38:32 +02:00
More explicit credential creation flow (#2363)
* more explcit drive credential creation flow * remove logs * update naming * fix user-contributed formatting * fix (^) v2
This commit is contained in:
@@ -241,7 +241,8 @@ class NotionConnector(LoadConnector, PollConnector):
|
||||
logger.warning(
|
||||
f"Skipping 'external_object_instance_page' ('{result_block_id}') for base block '{base_block_id}': "
|
||||
f"Notion API does not currently support reading external blocks (as of 24/07/03) "
|
||||
f"(discussion: https://github.com/danswer-ai/danswer/issues/1761)")
|
||||
f"(discussion: https://github.com/danswer-ai/danswer/issues/1761)"
|
||||
)
|
||||
continue
|
||||
|
||||
cur_result_text_arr = []
|
||||
|
@@ -4,6 +4,7 @@ from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel
|
||||
from pydantic import Field
|
||||
from pydantic import model_validator
|
||||
|
||||
from danswer.configs.app_configs import MASK_CREDENTIAL_PREFIX
|
||||
from danswer.configs.constants import DocumentSource
|
||||
@@ -346,8 +347,18 @@ class GoogleServiceAccountKey(BaseModel):
|
||||
|
||||
|
||||
class GoogleServiceAccountCredentialRequest(BaseModel):
|
||||
google_drive_delegated_user: str | None # email of user to impersonate
|
||||
gmail_delegated_user: str | None # email of user to impersonate
|
||||
google_drive_delegated_user: str | None = None # email of user to impersonate
|
||||
gmail_delegated_user: str | None = None # email of user to impersonate
|
||||
|
||||
@model_validator(mode="after")
|
||||
def check_user_delegation(self) -> "GoogleServiceAccountCredentialRequest":
|
||||
if (self.google_drive_delegated_user is None) == (
|
||||
self.gmail_delegated_user is None
|
||||
):
|
||||
raise ValueError(
|
||||
"Exactly one of google_drive_delegated_user or gmail_delegated_user must be set"
|
||||
)
|
||||
return self
|
||||
|
||||
|
||||
class FileUploadResponse(BaseModel):
|
||||
|
@@ -17,6 +17,8 @@ import {
|
||||
GoogleDriveServiceAccountCredentialJson,
|
||||
} from "@/lib/connectors/credentials";
|
||||
|
||||
import { Button as TremorButton } from "@tremor/react";
|
||||
|
||||
type GoogleDriveCredentialJsonTypes = "authorized_user" | "service_account";
|
||||
|
||||
export const DriveJsonUpload = ({
|
||||
@@ -344,7 +346,7 @@ export const DriveOAuthSection = ({
|
||||
if (serviceAccountKeyData?.service_account_email) {
|
||||
return (
|
||||
<div>
|
||||
<p className="text-sm mb-2">
|
||||
<p className="text-sm mb-6">
|
||||
When using a Google Drive Service Account, you can either have Danswer
|
||||
act as the service account itself OR you can specify an account for
|
||||
the service account to impersonate.
|
||||
@@ -356,7 +358,6 @@ export const DriveOAuthSection = ({
|
||||
the documents you want to index with the service account.
|
||||
</p>
|
||||
|
||||
<Card>
|
||||
<Formik
|
||||
initialValues={{
|
||||
google_drive_delegated_user: "",
|
||||
@@ -366,7 +367,6 @@ export const DriveOAuthSection = ({
|
||||
})}
|
||||
onSubmit={async (values, formikHelpers) => {
|
||||
formikHelpers.setSubmitting(true);
|
||||
|
||||
const response = await fetch(
|
||||
"/api/manage/admin/connector/google-drive/service-account-credential",
|
||||
{
|
||||
@@ -404,22 +404,13 @@ export const DriveOAuthSection = ({
|
||||
subtext="If left blank, Danswer will use the service account itself."
|
||||
/>
|
||||
<div className="flex">
|
||||
<button
|
||||
type="submit"
|
||||
disabled={isSubmitting}
|
||||
className={
|
||||
"bg-slate-500 hover:bg-slate-700 text-white " +
|
||||
"font-bold py-2 px-4 rounded focus:outline-none " +
|
||||
"focus:shadow-outline w-full max-w-sm mx-auto"
|
||||
}
|
||||
>
|
||||
Submit
|
||||
</button>
|
||||
<TremorButton type="submit" disabled={isSubmitting}>
|
||||
Create Credential
|
||||
</TremorButton>
|
||||
</div>
|
||||
</Form>
|
||||
)}
|
||||
</Formik>
|
||||
</Card>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@@ -8,8 +8,6 @@ import { ErrorCallout } from "@/components/ErrorCallout";
|
||||
import { LoadingAnimation } from "@/components/Loading";
|
||||
import { usePopup } from "@/components/admin/connectors/Popup";
|
||||
import { ConnectorIndexingStatus } from "@/lib/types";
|
||||
import { getCurrentUser } from "@/lib/user";
|
||||
import { User, UserRole } from "@/lib/types";
|
||||
import { usePublicCredentials } from "@/lib/hooks";
|
||||
import { Title } from "@tremor/react";
|
||||
import { DriveJsonUploadSection, DriveOAuthSection } from "./Credential";
|
||||
@@ -109,6 +107,7 @@ const GDriveMain = ({}: {}) => {
|
||||
| undefined = credentialsData.find(
|
||||
(credential) => credential.credential_json?.google_drive_service_account_key
|
||||
);
|
||||
|
||||
const googleDriveConnectorIndexingStatuses: ConnectorIndexingStatus<
|
||||
GoogleDriveConfig,
|
||||
GoogleDriveCredentialJson
|
||||
|
Reference in New Issue
Block a user