mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-04 15:26:20 +00:00
misc: adjusted OrgSettingsPage and PersonalSettingsPage to include toggle
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
import { OrgPermissionActions, OrgPermissionSubjects } from "@app/context";
|
import { useCallback } from "react";
|
||||||
|
|
||||||
|
import { OrgPermissionActions, OrgPermissionSubjects, useServerConfig } from "@app/context";
|
||||||
import { withPermission } from "@app/hoc";
|
import { withPermission } from "@app/hoc";
|
||||||
|
import { LoginMethod } from "@app/hooks/api/admin/types";
|
||||||
|
|
||||||
import { OrgGeneralAuthSection } from "./OrgGeneralAuthSection";
|
import { OrgGeneralAuthSection } from "./OrgGeneralAuthSection";
|
||||||
import { OrgLDAPSection } from "./OrgLDAPSection";
|
import { OrgLDAPSection } from "./OrgLDAPSection";
|
||||||
@@ -9,12 +12,25 @@ import { OrgSSOSection } from "./OrgSSOSection";
|
|||||||
|
|
||||||
export const OrgAuthTab = withPermission(
|
export const OrgAuthTab = withPermission(
|
||||||
() => {
|
() => {
|
||||||
|
const {
|
||||||
|
config: { enabledLoginMethods }
|
||||||
|
} = useServerConfig();
|
||||||
|
|
||||||
|
const shouldDisplaySection = useCallback(
|
||||||
|
(method: LoginMethod) => !enabledLoginMethods || enabledLoginMethods.includes(method),
|
||||||
|
[enabledLoginMethods]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-6">
|
<div className="rounded-lg border border-mineshaft-600 bg-mineshaft-900 p-6">
|
||||||
<OrgGeneralAuthSection />
|
{shouldDisplaySection(LoginMethod.SAML) && (
|
||||||
<OrgSSOSection />
|
<>
|
||||||
<OrgOIDCSection />
|
<OrgGeneralAuthSection />
|
||||||
<OrgLDAPSection />
|
<OrgSSOSection />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
{shouldDisplaySection(LoginMethod.OIDC) && <OrgOIDCSection />}
|
||||||
|
{shouldDisplaySection(LoginMethod.LDAP) && <OrgLDAPSection />}
|
||||||
<OrgScimSection />
|
<OrgScimSection />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,6 @@ import { useLogoutUser, useUpdateOrg } from "@app/hooks/api";
|
|||||||
import { usePopUp } from "@app/hooks/usePopUp";
|
import { usePopUp } from "@app/hooks/usePopUp";
|
||||||
|
|
||||||
export const OrgGeneralAuthSection = () => {
|
export const OrgGeneralAuthSection = () => {
|
||||||
|
|
||||||
const { currentOrg } = useOrganization();
|
const { currentOrg } = useOrganization();
|
||||||
const { subscription } = useSubscription();
|
const { subscription } = useSubscription();
|
||||||
const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp(["upgradePlan"] as const);
|
const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp(["upgradePlan"] as const);
|
||||||
@@ -88,6 +87,7 @@ export const OrgGeneralAuthSection = () => {
|
|||||||
Enforce members to authenticate via SAML to access this organization
|
Enforce members to authenticate via SAML to access this organization
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<hr className="border-mineshaft-600" />
|
||||||
<UpgradePlanModal
|
<UpgradePlanModal
|
||||||
isOpen={popUp.upgradePlan.isOpen}
|
isOpen={popUp.upgradePlan.isOpen}
|
||||||
onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)}
|
onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)}
|
||||||
|
|||||||
+1
-1
@@ -94,7 +94,6 @@ export const OrgLDAPSection = (): JSX.Element => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<hr className="border-mineshaft-600" />
|
|
||||||
<div className="py-4">
|
<div className="py-4">
|
||||||
<div className="mb-2 flex items-center justify-between">
|
<div className="mb-2 flex items-center justify-between">
|
||||||
<h2 className="text-md text-mineshaft-100">LDAP</h2>
|
<h2 className="text-md text-mineshaft-100">LDAP</h2>
|
||||||
@@ -151,6 +150,7 @@ export const OrgLDAPSection = (): JSX.Element => {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
<hr className="border-mineshaft-600" />
|
||||||
<LDAPModal
|
<LDAPModal
|
||||||
popUp={popUp}
|
popUp={popUp}
|
||||||
handlePopUpClose={handlePopUpClose}
|
handlePopUpClose={handlePopUpClose}
|
||||||
|
|||||||
+1
-1
@@ -61,7 +61,6 @@ export const OrgOIDCSection = (): JSX.Element => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<hr className="border-mineshaft-600" />
|
|
||||||
<div className="py-4">
|
<div className="py-4">
|
||||||
<div className="mb-2 flex items-center justify-between">
|
<div className="mb-2 flex items-center justify-between">
|
||||||
<h2 className="text-md text-mineshaft-100">OIDC</h2>
|
<h2 className="text-md text-mineshaft-100">OIDC</h2>
|
||||||
@@ -103,6 +102,7 @@ export const OrgOIDCSection = (): JSX.Element => {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
<hr className="border-mineshaft-600" />
|
||||||
<OIDCModal
|
<OIDCModal
|
||||||
popUp={popUp}
|
popUp={popUp}
|
||||||
handlePopUpClose={handlePopUpClose}
|
handlePopUpClose={handlePopUpClose}
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ export const OrgSSOSection = (): JSX.Element => {
|
|||||||
Allow members to authenticate into Infisical with SAML
|
Allow members to authenticate into Infisical with SAML
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<hr className="border-mineshaft-600" />
|
||||||
<SSOModal
|
<SSOModal
|
||||||
popUp={popUp}
|
popUp={popUp}
|
||||||
handlePopUpClose={handlePopUpClose}
|
handlePopUpClose={handlePopUpClose}
|
||||||
|
|||||||
+16
-7
@@ -8,23 +8,24 @@ import * as yup from "yup";
|
|||||||
|
|
||||||
import { createNotification } from "@app/components/notifications";
|
import { createNotification } from "@app/components/notifications";
|
||||||
import { Switch } from "@app/components/v2";
|
import { Switch } from "@app/components/v2";
|
||||||
import { useUser } from "@app/context";
|
import { useServerConfig, useUser } from "@app/context";
|
||||||
import { useUpdateUserAuthMethods } from "@app/hooks/api";
|
import { useUpdateUserAuthMethods } from "@app/hooks/api";
|
||||||
|
import { LoginMethod } from "@app/hooks/api/admin/types";
|
||||||
import { AuthMethod } from "@app/hooks/api/users/types";
|
import { AuthMethod } from "@app/hooks/api/users/types";
|
||||||
|
|
||||||
interface AuthMethodOption {
|
interface AuthMethodOption {
|
||||||
label: string;
|
label: string;
|
||||||
value: AuthMethod;
|
value: AuthMethod;
|
||||||
icon: IconDefinition;
|
icon: IconDefinition;
|
||||||
|
loginMethod: LoginMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
const authMethodOpts: AuthMethodOption[] = [
|
const authMethodOpts: AuthMethodOption[] = [
|
||||||
{ label: "Email", value: AuthMethod.EMAIL, icon: faEnvelope },
|
{ label: "Email", value: AuthMethod.EMAIL, icon: faEnvelope, loginMethod: LoginMethod.EMAIL },
|
||||||
{ label: "Google", value: AuthMethod.GOOGLE, icon: faGoogle },
|
{ label: "Google", value: AuthMethod.GOOGLE, icon: faGoogle, loginMethod: LoginMethod.GOOGLE },
|
||||||
{ label: "GitHub", value: AuthMethod.GITHUB, icon: faGithub },
|
{ label: "GitHub", value: AuthMethod.GITHUB, icon: faGithub, loginMethod: LoginMethod.GITHUB },
|
||||||
{ label: "GitLab", value: AuthMethod.GITLAB, icon: faGitlab }
|
{ label: "GitLab", value: AuthMethod.GITLAB, icon: faGitlab, loginMethod: LoginMethod.GITLAB }
|
||||||
];
|
];
|
||||||
|
|
||||||
const schema = yup.object({
|
const schema = yup.object({
|
||||||
authMethods: yup.array().required("Auth method is required")
|
authMethods: yup.array().required("Auth method is required")
|
||||||
});
|
});
|
||||||
@@ -32,8 +33,8 @@ const schema = yup.object({
|
|||||||
export type FormData = yup.InferType<typeof schema>;
|
export type FormData = yup.InferType<typeof schema>;
|
||||||
|
|
||||||
export const AuthMethodSection = () => {
|
export const AuthMethodSection = () => {
|
||||||
|
|
||||||
const { user } = useUser();
|
const { user } = useUser();
|
||||||
|
const { config } = useServerConfig();
|
||||||
const { mutateAsync } = useUpdateUserAuthMethods();
|
const { mutateAsync } = useUpdateUserAuthMethods();
|
||||||
|
|
||||||
const { reset, setValue, watch } = useForm<FormData>({
|
const { reset, setValue, watch } = useForm<FormData>({
|
||||||
@@ -102,6 +103,14 @@ export const AuthMethodSection = () => {
|
|||||||
<div className="mb-4">
|
<div className="mb-4">
|
||||||
{user &&
|
{user &&
|
||||||
authMethodOpts.map((authMethodOpt) => {
|
authMethodOpts.map((authMethodOpt) => {
|
||||||
|
// only filter when enabledLoginMethods is explicitly configured by admin
|
||||||
|
if (
|
||||||
|
config.enabledLoginMethods &&
|
||||||
|
!config.enabledLoginMethods.includes(authMethodOpt.loginMethod)
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex items-center p-4" key={`auth-method-${authMethodOpt.value}`}>
|
<div className="flex items-center p-4" key={`auth-method-${authMethodOpt.value}`}>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
|
|||||||
Reference in New Issue
Block a user