SecurityManagementContents.jsx 4.3 KB

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