2
0

SecurityManagement.jsx 6.7 KB

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