seperated teams and sharepoint enviornment variables

This commit is contained in:
Hagen O'Neill 2024-06-04 09:45:10 -07:00
parent ea71b9830c
commit 14a39e88e8
5 changed files with 57 additions and 55 deletions

View File

@ -70,19 +70,19 @@ class SharepointConnector(LoadConnector, PollConnector):
self.requested_site_list: list[str] = sites
def load_credentials(self, credentials: dict[str, Any]) -> dict[str, Any] | None:
aad_client_id = credentials["aad_client_id"]
aad_client_secret = credentials["aad_client_secret"]
aad_directory_id = credentials["aad_directory_id"]
sp_client_id = credentials["sp_client_id"]
sp_client_secret = credentials["sp_client_secret"]
sp_directory_id = credentials["sp_directory_id"]
def _acquire_token_func() -> dict[str, Any]:
"""
Acquire token via MSAL
"""
authority_url = f"https://login.microsoftonline.com/{aad_directory_id}"
authority_url = f"https://login.microsoftonline.com/{sp_directory_id}"
app = msal.ConfidentialClientApplication(
authority=authority_url,
client_id=aad_client_id,
client_credential=aad_client_secret,
client_id=sp_client_id,
client_credential=sp_client_secret,
)
token = app.acquire_token_for_client(
scopes=["https://graph.microsoft.com/.default"]
@ -224,9 +224,9 @@ if __name__ == "__main__":
connector.load_credentials(
{
"aad_client_id": os.environ["AAD_CLIENT_ID"],
"aad_client_secret": os.environ["AAD_CLIENT_SECRET"],
"aad_directory_id": os.environ["AAD_CLIENT_DIRECTORY_ID"],
"sp_client_id": os.environ["SP_CLIENT_ID"],
"sp_client_secret": os.environ["SP_CLIENT_SECRET"],
"sp_directory_id": os.environ["SP_CLIENT_DIRECTORY_ID"],
}
)
document_batches = connector.load_from_state()

View File

@ -11,15 +11,13 @@ import msal # type: ignore
import openpyxl # type: ignore
# import pptx # type: ignore
from office365.graph_client import GraphClient # type: ignore
from office365.teams.team import Team
from office365.teams.channels.channel import Channel
from office365.teams.chats.messages.message import ChatMessage
from office365.outlook.mail.item_body import ItemBody
from office365.teams.team import Team # type: ignore
from office365.teams.channels.channel import Channel # type: ignore
from office365.teams.chats.messages.message import ChatMessage # type: ignore
from office365.outlook.mail.item_body import ItemBody # type: ignore
from danswer.configs.app_configs import INDEX_BATCH_SIZE
from danswer.configs.constants import DocumentSource
from danswer.connectors.cross_connector_utils.file_utils import is_text_file_extension
from danswer.connectors.cross_connector_utils.file_utils import read_pdf_file
from danswer.connectors.interfaces import GenerateDocumentsOutput
from danswer.connectors.interfaces import LoadConnector
from danswer.connectors.interfaces import PollConnector
@ -50,6 +48,7 @@ def get_created_datetime(obj: ChatMessage):
class TeamsConnector(LoadConnector, PollConnector):
def __init__(
self,
batch_size: int = INDEX_BATCH_SIZE,
@ -60,19 +59,19 @@ class TeamsConnector(LoadConnector, PollConnector):
self.requested_team_list: list[str] = teams
def load_credentials(self, credentials: dict[str, Any]) -> dict[str, Any] | None:
aad_client_id = credentials["aad_client_id"]
aad_client_secret = credentials["aad_client_secret"]
aad_directory_id = credentials["aad_directory_id"]
teams_client_id = credentials["teams_client_id"]
teams_client_secret = credentials["teams_client_secret"]
teams_directory_id = credentials["teams_directory_id"]
def _acquire_token_func() -> dict[str, Any]:
"""
Acquire token via MSAL
"""
authority_url = f"https://login.microsoftonline.com/{aad_directory_id}"
authority_url = f"https://login.microsoftonline.com/{teams_directory_id}"
app = msal.ConfidentialClientApplication(
authority=authority_url,
client_id=aad_client_id,
client_credential=aad_client_secret,
client_id=teams_client_id,
client_credential=teams_client_secret,
)
token = app.acquire_token_for_client(
scopes=["https://graph.microsoft.com/.default"]
@ -118,6 +117,9 @@ class TeamsConnector(LoadConnector, PollConnector):
return channel_list
def get_all_team_objects(self) -> list[Team]:
if self.graph_client is None:
raise ConnectorMissingCredentialError("Sharepoint")
team_object_list: list[Team] = []
teams_object = self.graph_client.teams.get().execute_query()
@ -244,13 +246,13 @@ class TeamsConnector(LoadConnector, PollConnector):
if __name__ == "__main__":
connector = TeamsConnector(sites=os.environ["SITES"].split(","))
connector = TeamsConnector(teams=os.environ["TEAMS"].split(","))
connector.load_credentials(
{
"aad_client_id": os.environ["AAD_CLIENT_ID"],
"aad_client_secret": os.environ["AAD_CLIENT_SECRET"],
"aad_directory_id": os.environ["AAD_CLIENT_DIRECTORY_ID"],
"teams_client_id": os.environ["TEAMS_CLIENT_ID"],
"teams_client_secret": os.environ["TEAMS_CLIENT_SECRET"],
"teams_directory_id": os.environ["TEAMS_CLIENT_DIRECTORY_ID"],
}
)
document_batches = connector.load_from_state()

View File

@ -67,7 +67,7 @@ const MainSection = () => {
const sharepointCredential: Credential<SharepointCredentialJson> | undefined =
credentialsData.find(
(credential) => credential.credential_json?.aad_client_id
(credential) => credential.credential_json?.sp_client_id
);
return (
@ -87,7 +87,7 @@ const MainSection = () => {
<div className="flex mb-1 text-sm">
<Text className="my-auto">Existing Azure AD Client ID: </Text>
<Text className="ml-1 italic my-auto">
{sharepointCredential.credential_json.aad_client_id}
{sharepointCredential.credential_json.sp_client_id}
</Text>
<button
className="ml-1 hover:bg-hover rounded p-1"
@ -119,35 +119,35 @@ const MainSection = () => {
formBody={
<>
<TextFormField
name="aad_client_id"
name="sp_client_id"
label="Application (client) ID:"
/>
<TextFormField
name="aad_directory_id"
name="sp_directory_id"
label="Directory (tenant) ID:"
/>
<TextFormField
name="aad_client_secret"
name="sp_client_secret"
label="Client Secret:"
type="password"
/>
</>
}
validationSchema={Yup.object().shape({
aad_client_id: Yup.string().required(
sp_client_id: Yup.string().required(
"Please enter your Application (client) ID"
),
aad_directory_id: Yup.string().required(
sp_directory_id: Yup.string().required(
"Please enter your Directory (tenant) ID"
),
aad_client_secret: Yup.string().required(
sp_client_secret: Yup.string().required(
"Please enter your Client Secret"
),
})}
initialValues={{
aad_client_id: "",
aad_directory_id: "",
aad_client_secret: "",
sp_client_id: "",
sp_directory_id: "",
sp_client_secret: "",
}}
onSubmit={(isSuccess) => {
if (isSuccess) {
@ -175,7 +175,7 @@ const MainSection = () => {
connectorIndexingStatuses={sharepointConnectorIndexingStatuses}
liveCredential={sharepointCredential}
getCredential={(credential) =>
credential.credential_json.aad_directory_id
credential.credential_json.sp_directory_id
}
onUpdate={() =>
mutate("/api/manage/admin/connector/indexing-status")

View File

@ -67,7 +67,7 @@ const MainSection = () => {
const teamsCredential: Credential<TeamsCredentialJson> | undefined =
credentialsData.find(
(credential) => credential.credential_json?.aad_client_id
(credential) => credential.credential_json?.teams_client_id
);
return (
@ -86,7 +86,7 @@ const MainSection = () => {
<div className="flex mb-1 text-sm">
<Text className="my-auto">Existing Azure AD Client ID: </Text>
<Text className="ml-1 italic my-auto">
{teamsCredential.credential_json.aad_client_id}
{teamsCredential.credential_json.teams_client_id}
</Text>
<button
className="ml-1 hover:bg-hover rounded p-1"
@ -118,35 +118,35 @@ const MainSection = () => {
formBody={
<>
<TextFormField
name="aad_client_id"
name="teams_client_id"
label="Application (client) ID:"
/>
<TextFormField
name="aad_directory_id"
name="teams_directory_id"
label="Directory (tenant) ID:"
/>
<TextFormField
name="aad_client_secret"
name="teams_client_secret"
label="Client Secret:"
type="password"
/>
</>
}
validationSchema={Yup.object().shape({
aad_client_id: Yup.string().required(
teams_client_id: Yup.string().required(
"Please enter your Application (client) ID"
),
aad_directory_id: Yup.string().required(
teams_directory_id: Yup.string().required(
"Please enter your Directory (tenant) ID"
),
aad_client_secret: Yup.string().required(
teams_client_secret: Yup.string().required(
"Please enter your Client Secret"
),
})}
initialValues={{
aad_client_id: "",
aad_directory_id: "",
aad_client_secret: "",
teams_client_id: "",
teams_directory_id: "",
teams_client_secret: "",
}}
onSubmit={(isSuccess) => {
if (isSuccess) {
@ -173,7 +173,7 @@ const MainSection = () => {
connectorIndexingStatuses={teamsConnectorIndexingStatuses}
liveCredential={teamsCredential}
getCredential={(credential) =>
credential.credential_json.aad_directory_id
credential.credential_json.teams_directory_id
}
onUpdate={() =>
mutate("/api/manage/admin/connector/indexing-status")

View File

@ -363,15 +363,15 @@ export interface ZendeskCredentialJson {
}
export interface SharepointCredentialJson {
aad_client_id: string;
aad_client_secret: string;
aad_directory_id: string;
sp_client_id: string;
sp_client_secret: string;
sp_directory_id: string;
}
export interface TeamsCredentialJson {
aad_client_id: string;
aad_client_secret: string;
aad_directory_id: string;
teams_client_id: string;
teams_client_secret: string;
teams_directory_id: string;
}
export interface DiscourseCredentialJson {