SecurityManagementContents.jsx 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import {
  5. TabContent, TabPane, Nav, NavItem, NavLink,
  6. } from 'reactstrap';
  7. import { withUnstatedContainers } from '../../UnstatedUtils';
  8. import AppContainer from '../../../services/AppContainer';
  9. import LdapSecuritySetting from './LdapSecuritySetting';
  10. import LocalSecuritySetting from './LocalSecuritySetting';
  11. import SamlSecuritySetting from './SamlSecuritySetting';
  12. import OidcSecuritySetting from './OidcSecuritySetting';
  13. import SecuritySetting from './SecuritySetting';
  14. import BasicSecuritySetting from './BasicSecuritySetting';
  15. import GoogleSecuritySetting from './GoogleSecuritySetting';
  16. import GitHubSecuritySetting from './GitHubSecuritySetting';
  17. import TwitterSecuritySetting from './TwitterSecuritySetting';
  18. import FacebookSecuritySetting from './FacebookSecuritySetting';
  19. import ShareLinkSetting from './ShareLinkSetting';
  20. class SecurityManagementContents extends React.Component {
  21. constructor() {
  22. super();
  23. this.state = {
  24. activeTab: 'passport-local',
  25. // Prevent unnecessary rendering
  26. activeComponents: new Set(['passport-local']),
  27. };
  28. this.toggleActiveTab = this.toggleActiveTab.bind(this);
  29. }
  30. toggleActiveTab(activeTab) {
  31. this.setState({
  32. activeTab, activeComponents: this.state.activeComponents.add(activeTab),
  33. });
  34. }
  35. render() {
  36. const { t } = this.props;
  37. const { activeTab, activeComponents } = this.state;
  38. return (
  39. <Fragment>
  40. <div className="mb-5">
  41. <SecuritySetting />
  42. </div>
  43. {/* Shared Link List */}
  44. <div className="mb-5">
  45. <ShareLinkSetting />
  46. </div>
  47. {/* XSS configuration link */}
  48. <div className="mb-5">
  49. <h2 className="border-bottom">{t('security_setting.xss_prevent_setting')}</h2>
  50. <div className="text-center">
  51. <a style={{ fontSize: 'large' }} href="/admin/markdown/#preventXSS">
  52. <i className="fa-fw icon-login"></i> {t('security_setting.xss_prevent_setting_link')}
  53. </a>
  54. </div>
  55. </div>
  56. <div className="auth-mechanism-configurations">
  57. <h2 className="border-bottom">{t('security_setting.Authentication mechanism settings')}</h2>
  58. <Nav tabs>
  59. <NavItem>
  60. <NavLink
  61. className={`${activeTab === 'passport-local' && 'active'} `}
  62. onClick={() => { this.toggleActiveTab('passport-local') }}
  63. href="#passport-local"
  64. >
  65. <i className="fa fa-users" /> ID/Pass
  66. </NavLink>
  67. </NavItem>
  68. <NavItem>
  69. <NavLink
  70. className={`${activeTab === 'passport-ldap' && 'active'} `}
  71. onClick={() => { this.toggleActiveTab('passport-ldap') }}
  72. href="#passport-ldap"
  73. >
  74. <i className="fa fa-sitemap" /> LDAP
  75. </NavLink>
  76. </NavItem>
  77. <NavItem>
  78. <NavLink
  79. className={`${activeTab === 'passport-saml' && 'active'} `}
  80. onClick={() => { this.toggleActiveTab('passport-saml') }}
  81. href="#passport-saml"
  82. >
  83. <i className="fa fa-key" /> SAML
  84. </NavLink>
  85. </NavItem>
  86. <NavItem>
  87. <NavLink
  88. className={`${activeTab === 'passport-oidc' && 'active'} `}
  89. onClick={() => { this.toggleActiveTab('passport-oidc') }}
  90. href="#passport-oidc"
  91. >
  92. <i className="fa fa-openid" /> OIDC
  93. </NavLink>
  94. </NavItem>
  95. <NavItem>
  96. <NavLink
  97. className={`${activeTab === 'passport-basic' && 'active'} `}
  98. onClick={() => { this.toggleActiveTab('passport-basic') }}
  99. href="#passport-basic"
  100. >
  101. <i className="fa fa-lock" /> BASIC
  102. </NavLink>
  103. </NavItem>
  104. <NavItem>
  105. <NavLink
  106. className={`${activeTab === 'passport-google' && 'active'} `}
  107. onClick={() => { this.toggleActiveTab('passport-google') }}
  108. href="#passport-google"
  109. >
  110. <i className="fa fa-google" /> Google
  111. </NavLink>
  112. </NavItem>
  113. <NavItem>
  114. <NavLink
  115. className={`${activeTab === 'passport-github' && 'active'} `}
  116. onClick={() => { this.toggleActiveTab('passport-github') }}
  117. href="#passport-github"
  118. >
  119. <i className="fa fa-github" /> GitHub
  120. </NavLink>
  121. </NavItem>
  122. <NavItem>
  123. <NavLink
  124. className={`${activeTab === 'passport-twitter' && 'active'} `}
  125. onClick={() => { this.toggleActiveTab('passport-twitter') }}
  126. href="#passport-twitter"
  127. >
  128. <i className="fa fa-twitter" /> Twitter
  129. </NavLink>
  130. </NavItem>
  131. <NavItem>
  132. <NavLink
  133. className={`${activeTab === 'passport-facebook' && 'active'} `}
  134. onClick={() => { this.toggleActiveTab('passport-facebook') }}
  135. href="#passport-facebook"
  136. >
  137. <i className="fa fa-facebook" /> (TBD) Facebook
  138. </NavLink>
  139. </NavItem>
  140. </Nav>
  141. <TabContent activeTab={activeTab} className="mt-2">
  142. <TabPane tabId="passport-local">
  143. {activeComponents.has('passport-local') && <LocalSecuritySetting />}
  144. </TabPane>
  145. <TabPane tabId="passport-ldap">
  146. {activeComponents.has('passport-ldap') && <LdapSecuritySetting />}
  147. </TabPane>
  148. <TabPane tabId="passport-saml">
  149. {activeComponents.has('passport-saml') && <SamlSecuritySetting />}
  150. </TabPane>
  151. <TabPane tabId="passport-oidc">
  152. {activeComponents.has('passport-oidc') && <OidcSecuritySetting />}
  153. </TabPane>
  154. <TabPane tabId="passport-basic">
  155. {activeComponents.has('passport-basic') && <BasicSecuritySetting />}
  156. </TabPane>
  157. <TabPane tabId="passport-google">
  158. {activeComponents.has('passport-google') && <GoogleSecuritySetting />}
  159. </TabPane>
  160. <TabPane tabId="passport-github">
  161. {activeComponents.has('passport-github') && <GitHubSecuritySetting />}
  162. </TabPane>
  163. <TabPane tabId="passport-twitter">
  164. {activeComponents.has('passport-twitter') && <TwitterSecuritySetting />}
  165. </TabPane>
  166. <TabPane tabId="passport-facebook">
  167. {activeComponents.has('passport-facebook') && <FacebookSecuritySetting />}
  168. </TabPane>
  169. </TabContent>
  170. </div>
  171. </Fragment>
  172. );
  173. }
  174. }
  175. SecurityManagementContents.propTypes = {
  176. t: PropTypes.func.isRequired, // i18next
  177. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  178. };
  179. const SecurityManagementContentsWrapper = withUnstatedContainers(SecurityManagementContents, [AppContainer]);
  180. export default withTranslation()(SecurityManagementContentsWrapper);