SecurityManagementContents.jsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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: () => <i className="fa fa-users" />,
  27. i18n: 'ID/Pass',
  28. index: 0,
  29. },
  30. passport_ldap: {
  31. Icon: () => <i className="fa fa-sitemap" />,
  32. i18n: 'LDAP',
  33. index: 1,
  34. },
  35. passport_saml: {
  36. Icon: () => <i className="fa fa-key" />,
  37. i18n: 'SAML',
  38. index: 2,
  39. },
  40. passport_oidc: {
  41. Icon: () => <i className="fa fa-key" />,
  42. i18n: 'OIDC',
  43. index: 3,
  44. },
  45. passport_google: {
  46. Icon: () => <i className="fa fa-google" />,
  47. i18n: 'Google',
  48. index: 4,
  49. },
  50. passport_github: {
  51. Icon: () => <i className="fa fa-github" />,
  52. i18n: 'GitHub',
  53. index: 5,
  54. },
  55. // passport_facebook: {
  56. // Icon: () => <i className="fa fa-facebook" />,
  57. // i18n: '(TBD) Facebook',
  58. // index: 7,
  59. // },
  60. };
  61. }, []);
  62. return (
  63. <div data-testid="admin-security">
  64. <div className="mb-5">
  65. <SecuritySetting />
  66. </div>
  67. {/* Shared Link List */}
  68. <div className="mb-5">
  69. <ShareLinkSetting />
  70. </div>
  71. {/* XSS configuration link */}
  72. <div className="mb-5">
  73. <h2 className="border-bottom">{t('security_settings.xss_prevent_setting')}</h2>
  74. <div className="text-center">
  75. <Link href="/admin/markdown/#preventXSS" prefetch={false}>
  76. <a style={{ fontSize: 'large' }}>
  77. <i className="fa-fw icon-login"></i> {t('security_settings.xss_prevent_setting_link')}
  78. </a>
  79. </Link>
  80. </div>
  81. </div>
  82. <div className="auth-mechanism-configurations">
  83. <h2 className="border-bottom">{t('security_settings.Authentication mechanism settings')}</h2>
  84. <CustomNav
  85. activeTab={activeTab}
  86. navTabMapping={navTabMapping}
  87. onNavSelected={switchActiveTab}
  88. hideBorderBottom
  89. breakpointToSwitchDropdownDown="md"
  90. />
  91. <TabContent activeTab={activeTab} className="p-5">
  92. <TabPane tabId="passport_local">
  93. {activeComponents.has('passport_local') && <LocalSecuritySetting />}
  94. </TabPane>
  95. <TabPane tabId="passport_ldap">
  96. {activeComponents.has('passport_ldap') && <LdapSecuritySetting />}
  97. </TabPane>
  98. <TabPane tabId="passport_saml">
  99. {activeComponents.has('passport_saml') && <SamlSecuritySetting />}
  100. </TabPane>
  101. <TabPane tabId="passport_oidc">
  102. {activeComponents.has('passport_oidc') && <OidcSecuritySetting />}
  103. </TabPane>
  104. <TabPane tabId="passport_google">
  105. {activeComponents.has('passport_google') && <GoogleSecuritySetting />}
  106. </TabPane>
  107. <TabPane tabId="passport_github">
  108. {activeComponents.has('passport_github') && <GitHubSecuritySetting />}
  109. </TabPane>
  110. {/* <TabPane tabId="passport_facebook">
  111. {activeComponents.has('passport_facebook') && <FacebookSecuritySetting />}
  112. </TabPane> */}
  113. </TabContent>
  114. </div>
  115. </div>
  116. );
  117. };
  118. export default SecurityManagementContents;