SecurityManagementContents.jsx 4.8 KB

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