mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-04-25 07:50:58 +02:00
parent
9951fe13ba
commit
e8370dcb24
@ -391,6 +391,11 @@ def get_application() -> FastAPI:
|
|||||||
prefix="/auth",
|
prefix="/auth",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (
|
||||||
|
AUTH_TYPE == AuthType.CLOUD
|
||||||
|
or AUTH_TYPE == AuthType.BASIC
|
||||||
|
or AUTH_TYPE == AuthType.GOOGLE_OAUTH
|
||||||
|
):
|
||||||
# Add refresh token endpoint for OAuth as well
|
# Add refresh token endpoint for OAuth as well
|
||||||
include_auth_router_with_prefix(
|
include_auth_router_with_prefix(
|
||||||
application,
|
application,
|
||||||
|
@ -20,7 +20,7 @@ import {
|
|||||||
import { fetchAssistantData } from "@/lib/chat/fetchAssistantdata";
|
import { fetchAssistantData } from "@/lib/chat/fetchAssistantdata";
|
||||||
import { AppProvider } from "@/components/context/AppProvider";
|
import { AppProvider } from "@/components/context/AppProvider";
|
||||||
import { PHProvider } from "./providers";
|
import { PHProvider } from "./providers";
|
||||||
import { getCurrentUserSS } from "@/lib/userSS";
|
import { getAuthTypeMetadataSS, getCurrentUserSS } from "@/lib/userSS";
|
||||||
import { Suspense } from "react";
|
import { Suspense } from "react";
|
||||||
import PostHogPageView from "./PostHogPageView";
|
import PostHogPageView from "./PostHogPageView";
|
||||||
import Script from "next/script";
|
import Script from "next/script";
|
||||||
@ -70,11 +70,13 @@ export default async function RootLayout({
|
|||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
const [combinedSettings, assistantsData, user] = await Promise.all([
|
const [combinedSettings, assistantsData, user, authTypeMetadata] =
|
||||||
fetchSettingsSS(),
|
await Promise.all([
|
||||||
fetchAssistantData(),
|
fetchSettingsSS(),
|
||||||
getCurrentUserSS(),
|
fetchAssistantData(),
|
||||||
]);
|
getCurrentUserSS(),
|
||||||
|
getAuthTypeMetadataSS(),
|
||||||
|
]);
|
||||||
|
|
||||||
const productGating =
|
const productGating =
|
||||||
combinedSettings?.settings.application_status ?? ApplicationStatus.ACTIVE;
|
combinedSettings?.settings.application_status ?? ApplicationStatus.ACTIVE;
|
||||||
@ -147,6 +149,7 @@ export default async function RootLayout({
|
|||||||
|
|
||||||
return getPageContent(
|
return getPageContent(
|
||||||
<AppProvider
|
<AppProvider
|
||||||
|
authTypeMetadata={authTypeMetadata}
|
||||||
user={user}
|
user={user}
|
||||||
settings={combinedSettings}
|
settings={combinedSettings}
|
||||||
assistants={assistants}
|
assistants={assistants}
|
||||||
|
@ -7,6 +7,7 @@ import { AssistantsProvider } from "./AssistantsContext";
|
|||||||
import { Persona } from "@/app/admin/assistants/interfaces";
|
import { Persona } from "@/app/admin/assistants/interfaces";
|
||||||
import { User } from "@/lib/types";
|
import { User } from "@/lib/types";
|
||||||
import { ModalProvider } from "./ModalContext";
|
import { ModalProvider } from "./ModalContext";
|
||||||
|
import { AuthTypeMetadata } from "@/lib/userSS";
|
||||||
|
|
||||||
interface AppProviderProps {
|
interface AppProviderProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
@ -15,6 +16,7 @@ interface AppProviderProps {
|
|||||||
assistants: Persona[];
|
assistants: Persona[];
|
||||||
hasAnyConnectors: boolean;
|
hasAnyConnectors: boolean;
|
||||||
hasImageCompatibleModel: boolean;
|
hasImageCompatibleModel: boolean;
|
||||||
|
authTypeMetadata: AuthTypeMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AppProvider = ({
|
export const AppProvider = ({
|
||||||
@ -24,10 +26,15 @@ export const AppProvider = ({
|
|||||||
assistants,
|
assistants,
|
||||||
hasAnyConnectors,
|
hasAnyConnectors,
|
||||||
hasImageCompatibleModel,
|
hasImageCompatibleModel,
|
||||||
|
authTypeMetadata,
|
||||||
}: AppProviderProps) => {
|
}: AppProviderProps) => {
|
||||||
return (
|
return (
|
||||||
<SettingsProvider settings={settings}>
|
<SettingsProvider settings={settings}>
|
||||||
<UserProvider settings={settings} user={user}>
|
<UserProvider
|
||||||
|
settings={settings}
|
||||||
|
user={user}
|
||||||
|
authTypeMetadata={authTypeMetadata}
|
||||||
|
>
|
||||||
<ProviderContextProvider>
|
<ProviderContextProvider>
|
||||||
<AssistantsProvider
|
<AssistantsProvider
|
||||||
initialAssistants={assistants}
|
initialAssistants={assistants}
|
||||||
|
@ -13,6 +13,7 @@ import { usePostHog } from "posthog-js/react";
|
|||||||
import { CombinedSettings } from "@/app/admin/settings/interfaces";
|
import { CombinedSettings } from "@/app/admin/settings/interfaces";
|
||||||
import { SettingsContext } from "../settings/SettingsProvider";
|
import { SettingsContext } from "../settings/SettingsProvider";
|
||||||
import { useTokenRefresh } from "@/hooks/useTokenRefresh";
|
import { useTokenRefresh } from "@/hooks/useTokenRefresh";
|
||||||
|
import { AuthTypeMetadata } from "@/lib/userSS";
|
||||||
|
|
||||||
interface UserContextType {
|
interface UserContextType {
|
||||||
user: User | null;
|
user: User | null;
|
||||||
@ -33,10 +34,12 @@ interface UserContextType {
|
|||||||
const UserContext = createContext<UserContextType | undefined>(undefined);
|
const UserContext = createContext<UserContextType | undefined>(undefined);
|
||||||
|
|
||||||
export function UserProvider({
|
export function UserProvider({
|
||||||
|
authTypeMetadata,
|
||||||
children,
|
children,
|
||||||
user,
|
user,
|
||||||
settings,
|
settings,
|
||||||
}: {
|
}: {
|
||||||
|
authTypeMetadata: AuthTypeMetadata;
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
user: User | null;
|
user: User | null;
|
||||||
settings: CombinedSettings;
|
settings: CombinedSettings;
|
||||||
@ -102,7 +105,7 @@ export function UserProvider({
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Use the custom token refresh hook
|
// Use the custom token refresh hook
|
||||||
useTokenRefresh(upToDateUser, fetchUser);
|
useTokenRefresh(upToDateUser, authTypeMetadata, fetchUser);
|
||||||
|
|
||||||
const updateUserTemperatureOverrideEnabled = async (enabled: boolean) => {
|
const updateUserTemperatureOverrideEnabled = async (enabled: boolean) => {
|
||||||
try {
|
try {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { useState, useEffect, useRef } from "react";
|
import { useState, useEffect, useRef } from "react";
|
||||||
import { User } from "@/lib/types";
|
import { User } from "@/lib/types";
|
||||||
import { NO_AUTH_USER_ID } from "@/lib/extension/constants";
|
import { NO_AUTH_USER_ID } from "@/lib/extension/constants";
|
||||||
|
import { AuthTypeMetadata } from "@/lib/userSS";
|
||||||
|
|
||||||
// Refresh token every 10 minutes (600000ms)
|
// Refresh token every 10 minutes (600000ms)
|
||||||
// This is shorter than the session expiry time to ensure tokens stay valid
|
// This is shorter than the session expiry time to ensure tokens stay valid
|
||||||
@ -9,6 +10,7 @@ const REFRESH_INTERVAL = 600000;
|
|||||||
// Custom hook for handling JWT token refresh for current user
|
// Custom hook for handling JWT token refresh for current user
|
||||||
export function useTokenRefresh(
|
export function useTokenRefresh(
|
||||||
user: User | null,
|
user: User | null,
|
||||||
|
authTypeMetadata: AuthTypeMetadata,
|
||||||
onRefreshFail: () => Promise<void>
|
onRefreshFail: () => Promise<void>
|
||||||
) {
|
) {
|
||||||
// Track last refresh time to avoid unnecessary calls
|
// Track last refresh time to avoid unnecessary calls
|
||||||
@ -18,7 +20,13 @@ export function useTokenRefresh(
|
|||||||
const isFirstLoad = useRef(true);
|
const isFirstLoad = useRef(true);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!user || user.id === NO_AUTH_USER_ID) return;
|
if (
|
||||||
|
!user ||
|
||||||
|
user.id === NO_AUTH_USER_ID ||
|
||||||
|
authTypeMetadata.authType === "oidc" ||
|
||||||
|
authTypeMetadata.authType === "saml"
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
|
||||||
const refreshTokenPeriodically = async () => {
|
const refreshTokenPeriodically = async () => {
|
||||||
try {
|
try {
|
||||||
|
0
web/src/lib/users/fetchUserData.ts
Normal file
0
web/src/lib/users/fetchUserData.ts
Normal file
Loading…
x
Reference in New Issue
Block a user