SecurityManagementContents.jsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import React, { useMemo, useState } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import Link from 'next/link';
  4. import { TabContent, TabPane } from 'reactstrap';
  5. import CustomNav from '../../CustomNavigation/CustomNav';
  6. import GitHubSecuritySetting from './GitHubSecuritySetting';
  7. import GoogleSecuritySetting from './GoogleSecuritySetting';
  8. import LdapSecuritySetting from './LdapSecuritySetting';
  9. import LocalSecuritySetting from './LocalSecuritySetting';
  10. import OidcSecuritySetting from './OidcSecuritySetting';
  11. import SamlSecuritySetting from './SamlSecuritySetting';
  12. import { SecuritySetting } from './SecuritySetting';
  13. import ShareLinkSetting from './ShareLinkSetting';
  14. const SecurityManagementContents = () => {
  15. const { t } = useTranslation('admin');
  16. const [activeTab, setActiveTab] = useState('passport_local');
  17. const [activeComponents, setActiveComponents] = useState(new Set(['passport_local']));
  18. const switchActiveTab = (selectedTab) => {
  19. setActiveTab(selectedTab);
  20. setActiveComponents(activeComponents.add(selectedTab));
  21. };
  22. const navTabMapping = useMemo(() => {
  23. return {
  24. passport_local: {
  25. Icon: () => <span className="material-symbols-outlined">groups</span>,
  26. i18n: 'ID/Pass',
  27. },
  28. passport_ldap: {
  29. Icon: () => <span className="material-symbols-outlined">network_node</span>,
  30. i18n: 'LDAP',
  31. },
  32. passport_saml: {
  33. Icon: () => <span className="material-symbols-outlined">key</span>,
  34. i18n: 'SAML',
  35. },
  36. passport_oidc: {
  37. Icon: () => <span className="material-symbols-outlined">key</span>,
  38. i18n: 'OIDC',
  39. },
  40. passport_google: {
  41. Icon: () => <span className="growi-custom-icons align-bottom">google</span>,
  42. i18n: 'Google',
  43. },
  44. passport_github: {
  45. Icon: () => <span className="growi-custom-icons align-bottom">github</span>,
  46. i18n: 'GitHub',
  47. },
  48. };
  49. }, []);
  50. return (
  51. <div data-testid="admin-security">
  52. <div className="mb-5">
  53. <SecuritySetting />
  54. </div>
  55. {/* Shared Link List */}
  56. <div className="mb-5">
  57. <ShareLinkSetting />
  58. </div>
  59. {/* XSS configuration link */}
  60. <div className="mb-5">
  61. <h2 className="border-bottom pb-2">{t('security_settings.xss_prevent_setting')}</h2>
  62. <div className="mt-4">
  63. <Link
  64. href="/admin/markdown/#preventXSS"
  65. style={{ fontSize: 'large' }}
  66. >
  67. <span className="material-symbols-outlined me-1">login</span> {t('security_settings.xss_prevent_setting_link')}
  68. </Link>
  69. </div>
  70. </div>
  71. <div className="auth-mechanism-configurations">
  72. <h2 className="border-bottom pb-2">{t('security_settings.Authentication mechanism settings')}</h2>
  73. <CustomNav
  74. activeTab={activeTab}
  75. navTabMapping={navTabMapping}
  76. onNavSelected={switchActiveTab}
  77. hideBorderBottom
  78. breakpointToSwitchDropdownDown="md"
  79. />
  80. <TabContent activeTab={activeTab} className="p-5">
  81. <TabPane tabId="passport_local">
  82. {activeComponents.has('passport_local') && <LocalSecuritySetting />}
  83. </TabPane>
  84. <TabPane tabId="passport_ldap">
  85. {activeComponents.has('passport_ldap') && <LdapSecuritySetting />}
  86. </TabPane>
  87. <TabPane tabId="passport_saml">
  88. {activeComponents.has('passport_saml') && <SamlSecuritySetting />}
  89. </TabPane>
  90. <TabPane tabId="passport_oidc">
  91. {activeComponents.has('passport_oidc') && <OidcSecuritySetting />}
  92. </TabPane>
  93. <TabPane tabId="passport_google">
  94. {activeComponents.has('passport_google') && <GoogleSecuritySetting />}
  95. </TabPane>
  96. <TabPane tabId="passport_github">
  97. {activeComponents.has('passport_github') && <GitHubSecuritySetting />}
  98. </TabPane>
  99. </TabContent>
  100. </div>
  101. </div>
  102. );
  103. };
  104. export default SecurityManagementContents;