SecurityManagementContents.jsx 4.8 KB

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