diff --git a/src/app/[orgId]/settings/resources/public/[niceId]/general/page.tsx b/src/app/[orgId]/settings/resources/public/[niceId]/general/page.tsx index e288fb1d3..772c19624 100644 --- a/src/app/[orgId]/settings/resources/public/[niceId]/general/page.tsx +++ b/src/app/[orgId]/settings/resources/public/[niceId]/general/page.tsx @@ -32,7 +32,10 @@ import { useEnvContext } from "@app/hooks/useEnvContext"; import { toast } from "@app/hooks/useToast"; import { createApiClient, formatAxiosError } from "@app/lib/api"; import { finalizeSubdomainSanitize } from "@app/lib/subdomain-utils"; -import { UpdateResourceResponse } from "@server/routers/resource"; +import { + GetResourceAuthInfoResponse, + UpdateResourceResponse +} from "@server/routers/resource"; import { AxiosResponse } from "axios"; import { AlertCircle } from "lucide-react"; import { useTranslations } from "next-intl"; @@ -441,7 +444,7 @@ function MaintenanceSectionForm({ export default function GeneralForm() { const params = useParams(); const { org } = useOrgContext(); - const { resource, updateResource } = useResourceContext(); + const { resource, updateResource, updateAuthInfo } = useResourceContext(); const router = useRouter(); const t = useTranslations(); @@ -576,6 +579,18 @@ export default function GeneralForm() { }) }); + if (resourcePolicyId !== undefined) { + const authRes = await api + .get>( + `/resource/${resource.resourceGuid}/auth` + ) + .catch(() => null); + + if (authRes?.status === 200) { + updateAuthInfo(authRes.data.data); + } + } + toast({ title: t("resourceUpdated"), description: t("resourceUpdatedDescription") diff --git a/src/components/resource-policy/PolicyAuthStackSectionEdit.tsx b/src/components/resource-policy/PolicyAuthStackSectionEdit.tsx index 926833bc1..a157cb87d 100644 --- a/src/components/resource-policy/PolicyAuthStackSectionEdit.tsx +++ b/src/components/resource-policy/PolicyAuthStackSectionEdit.tsx @@ -25,6 +25,7 @@ import { useEnvContext } from "@app/hooks/useEnvContext"; import { createApiClient, formatAxiosError } from "@app/lib/api"; import { getUserDisplayName } from "@app/lib/getUserDisplayName"; import { resourceQueries } from "@app/lib/queries"; +import ResourceContext from "@app/contexts/resourceContext"; import { useResourcePolicyContext } from "@app/providers/ResourcePolicyProvider"; import { zodResolver } from "@hookform/resolvers/zod"; import type { GetResourcePolicyResponse } from "@server/routers/policy"; @@ -33,7 +34,14 @@ import { useQuery } from "@tanstack/react-query"; import type { AxiosResponse } from "axios"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; -import { useActionState, useEffect, useMemo, useRef, useState } from "react"; +import { + useActionState, + useContext, + useEffect, + useMemo, + useRef, + useState +} from "react"; import { useForm, useWatch } from "react-hook-form"; import { createPolicySchema } from "."; import { @@ -107,6 +115,7 @@ export function PolicyAuthStackSectionEdit({ const t = useTranslations(); const router = useRouter(); const { policy, updatePolicy } = useResourcePolicyContext(); + const resourceContext = useContext(ResourceContext); const api = createApiClient(useEnvContext()); const isResourceOverlay = resourceId !== undefined; @@ -412,6 +421,14 @@ export function PolicyAuthStackSectionEdit({ updatePolicy(policyUpdates); + resourceContext?.updateAuthInfo({ + sso: payload.sso, + whitelist: payload.emailWhitelistEnabled, + password: passcodeOnServerRef.current, + pincode: pincodeOnServerRef.current, + headerAuth: headerAuthOnServerRef.current + }); + toast({ title: t("success"), description: t("policyUpdatedSuccess") diff --git a/src/providers/ResourceProvider.tsx b/src/providers/ResourceProvider.tsx index a86d24c6e..0731d45ed 100644 --- a/src/providers/ResourceProvider.tsx +++ b/src/providers/ResourceProvider.tsx @@ -3,7 +3,7 @@ import ResourceContext from "@app/contexts/resourceContext"; import { GetResourceAuthInfoResponse } from "@server/routers/resource"; import { GetResourceResponse } from "@server/routers/resource/getResource"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import { useTranslations } from "next-intl"; interface ResourceProviderProps { @@ -23,6 +23,11 @@ export function ResourceProvider({ const [authInfo, setAuthInfo] = useState(serverAuthInfo); + useEffect(() => { + setResource(serverResource); + setAuthInfo(serverAuthInfo); + }, [serverResource, serverAuthInfo]); + const t = useTranslations(); const updateResource = (updatedResource: Partial) => {