SecurityManagementContents.jsx 4.3 KB

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