SecurityManagementContents.jsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. import TwitterSecuritySetting from './TwitterSecuritySetting';
  16. const SecurityManagementContents = () => {
  17. const { t } = useTranslation('admin');
  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_google: {
  47. Icon: () => <i className="fa fa-google" />,
  48. i18n: 'Google',
  49. index: 4,
  50. },
  51. passport_github: {
  52. Icon: () => <i className="fa fa-github" />,
  53. i18n: 'GitHub',
  54. index: 5,
  55. },
  56. passport_twitter: {
  57. Icon: () => <i className="fa fa-twitter" />,
  58. i18n: 'Twitter',
  59. index: 6,
  60. },
  61. passport_facebook: {
  62. Icon: () => <i className="fa fa-facebook" />,
  63. i18n: '(TBD) Facebook',
  64. index: 7,
  65. },
  66. };
  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">{t('security_settings.xss_prevent_setting')}</h2>
  80. <div className="text-center">
  81. <Link href="/admin/markdown/#preventXSS" prefetch={false}>
  82. <a style={{ fontSize: 'large' }}>
  83. <i className="fa-fw icon-login"></i> {t('security_settings.xss_prevent_setting_link')}
  84. </a>
  85. </Link>
  86. </div>
  87. </div>
  88. <div className="auth-mechanism-configurations">
  89. <h2 className="border-bottom">{t('security_settings.Authentication mechanism settings')}</h2>
  90. <CustomNav
  91. activeTab={activeTab}
  92. navTabMapping={navTabMapping}
  93. onNavSelected={switchActiveTab}
  94. hideBorderBottom
  95. breakpointToSwitchDropdownDown="md"
  96. />
  97. <TabContent activeTab={activeTab} className="p-5">
  98. <TabPane tabId="passport_local">
  99. {activeComponents.has('passport_local') && <LocalSecuritySetting />}
  100. </TabPane>
  101. <TabPane tabId="passport_ldap">
  102. {activeComponents.has('passport_ldap') && <LdapSecuritySetting />}
  103. </TabPane>
  104. <TabPane tabId="passport_saml">
  105. {activeComponents.has('passport_saml') && <SamlSecuritySetting />}
  106. </TabPane>
  107. <TabPane tabId="passport_oidc">
  108. {activeComponents.has('passport_oidc') && <OidcSecuritySetting />}
  109. </TabPane>
  110. <TabPane tabId="passport_google">
  111. {activeComponents.has('passport_google') && <GoogleSecuritySetting />}
  112. </TabPane>
  113. <TabPane tabId="passport_github">
  114. {activeComponents.has('passport_github') && <GitHubSecuritySetting />}
  115. </TabPane>
  116. <TabPane tabId="passport_twitter">
  117. {activeComponents.has('passport_twitter') && <TwitterSecuritySetting />}
  118. </TabPane>
  119. <TabPane tabId="passport_facebook">
  120. {activeComponents.has('passport_facebook') && <FacebookSecuritySetting />}
  121. </TabPane>
  122. </TabContent>
  123. </div>
  124. </div>
  125. );
  126. };
  127. export default SecurityManagementContents;