From 54fb7792c83b1545e37806da5f3f0b46aae12f34 Mon Sep 17 00:00:00 2001 From: George <58168766+useruid@users.noreply.github.com> Date: Tue, 20 Feb 2024 00:17:36 +0200 Subject: [PATCH] Add Jira Server connector form (#1046) --- .../connectors/danswer_jira/connector.py | 10 ++++- web/src/app/admin/connectors/jira/page.tsx | 45 +++++++++++++++---- web/src/lib/types.ts | 4 ++ 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/backend/danswer/connectors/danswer_jira/connector.py b/backend/danswer/connectors/danswer_jira/connector.py index 8d82fd8b4..15be91888 100644 --- a/backend/danswer/connectors/danswer_jira/connector.py +++ b/backend/danswer/connectors/danswer_jira/connector.py @@ -103,9 +103,15 @@ class JiraConnector(LoadConnector, PollConnector): self.jira_client: JIRA | None = None def load_credentials(self, credentials: dict[str, Any]) -> dict[str, Any] | None: - email = credentials["jira_user_email"] api_token = credentials["jira_api_token"] - self.jira_client = JIRA(basic_auth=(email, api_token), server=self.jira_base) + # if user provide an email we assume it's cloud + if "jira_user_email" in credentials: + email = credentials["jira_user_email"] + self.jira_client = JIRA( + basic_auth=(email, api_token), server=self.jira_base + ) + else: + self.jira_client = JIRA(token_auth=api_token, server=self.jira_base) return None def load_from_state(self) -> GenerateDocumentsOutput: diff --git a/web/src/app/admin/connectors/jira/page.tsx b/web/src/app/admin/connectors/jira/page.tsx index 7e46fcee6..23cf93306 100644 --- a/web/src/app/admin/connectors/jira/page.tsx +++ b/web/src/app/admin/connectors/jira/page.tsx @@ -8,6 +8,7 @@ import { CredentialForm } from "@/components/admin/connectors/CredentialForm"; import { JiraConfig, JiraCredentialJson, + JiraServerCredentialJson, ConnectorIndexingStatus, } from "@/lib/types"; import useSWR, { useSWRConfig } from "swr"; @@ -71,7 +72,7 @@ const Main = () => { const jiraConnectorIndexingStatuses: ConnectorIndexingStatus< JiraConfig, - JiraCredentialJson + JiraCredentialJson | JiraServerCredentialJson >[] = connectorIndexingStatuses.filter( (connectorIndexingStatus) => connectorIndexingStatus.connector.source === "jira" @@ -90,12 +91,6 @@ const Main = () => { {jiraCredential ? ( <>
- {/*
-

Existing Username:

-

- {confluenceCredential.credential_json?.confluence_username} -

{" "} -
*/}

Existing Access Token:

{jiraCredential.credential_json?.jira_api_token} @@ -142,8 +137,10 @@ const Main = () => { > here {" "} - to generate an Access Token. + to generate an Access Token (for cloud) or Personal Access Token + (for server). Submit only one form. + Cloud formBody={ @@ -175,6 +172,33 @@ const Main = () => { }} /> + Server + + + formBody={ + <> + + + } + validationSchema={Yup.object().shape({ + jira_api_token: Yup.string().required( + "Please enter your Jira personal access token" + ), + })} + initialValues={{ + jira_api_token: "", + }} + onSubmit={(isSuccess) => { + if (isSuccess) { + refreshCredentials(); + } + }} + /> + )} @@ -202,7 +226,10 @@ const Main = () => { below every 10 minutes.

- + connectorIndexingStatuses={jiraConnectorIndexingStatuses} liveCredential={jiraCredential} getCredential={(credential) => { diff --git a/web/src/lib/types.ts b/web/src/lib/types.ts index 6b31e9ca3..1935ae776 100644 --- a/web/src/lib/types.ts +++ b/web/src/lib/types.ts @@ -235,6 +235,10 @@ export interface JiraCredentialJson { jira_api_token: string; } +export interface JiraServerCredentialJson { + jira_api_token: string; +} + export interface ProductboardCredentialJson { productboard_access_token: string; }